CSS-定位
CSS-定位
相对定位
position: relative;属性给元素开启相对定位
如果一个元素开启了相对定位,那么该元素的层级比其他元素高,但和浮动不同,定位并不脱离原本的文档流
如果同时存在多个开启定位的元素,后面的元素会覆盖在前面的元素上
通过left、right、top、bottom来调整位置,相对于自己原来的位置
相对定位可以和margin同时存在,但不推荐同时用
相对定位可以和浮动同时存在,但不推荐同时用
绝大多数情况下,相对定位和绝对定位要配合使用
绝对定位
position: absolute;属性给元素开启绝对定位
如果一个元素开启了绝对定位,该元素会脱离文档流,但和浮动不同,其文字仍会停留在原来的位置,不会环绕元素
浮动的设计初衷是实现文字环绕元素的效果,所以开启浮动后会导致文字被踢出元素外
绝对定位的位置参考,就是相对于其包含块的绝对位置
包含块
- 没有脱离文档流的元素,父元素就是包含块
- 脱离文档流的元素,第一个开启定位的祖先元素,该元素就是其包含块
如果不考虑包含块的问题,所有绝对定位的元素都将以html为包含块来作为参考位置,这不是我们想要的效果
所以使用“子绝父相”的原则,让父元素为子元素的包含块,这样就可以做到让子元素参考父元素来做定位了
绝对定位可以和margin同时存在,但不推荐同时用
绝对定位不可以和浮动同时存在
注意事项
绝对定位会让元素脱离文档流,并且将元素的性质变为定位元素,如果该元素本身是一个行内元素,将其设置为绝对定位后,可以通过CSS配置其宽高
定位功能不能完全的替代浮动布局,而是搭配使用,先用布局设置大框架后使用定位配置框架中内容
固定定位
position: fixed;属性给元素开启固定定位
固定定位的参考位置,直接以视口作为其元素的包含块
固定定位可以和margin同时存在,但不推荐使用
固定定位不可以和浮动同时存在
固定定位会让元素脱离文档流,且会让该元素成为定位元素
粘性定位
position: sticky;属性给元素开启固定定位
粘性定位的参考位置,是以最近拥有滚动条的元素作为参考点(无论该滚动条是否有效)
粘性定位的有效位置,是以其父元素作为有效范围
粘性定位不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式
粘性定位可以和margin同时存在,但不推荐同时用
粘性定位可以和浮动同时存在,但不推荐同时用
定位的层级
无论为何种定位,他们的层级是同优先级的,如果不进行配置,则遵循后者覆盖前者的规则
z-index属性是用于已设置定位的属性,可以手动调整他们的优先级、
如果z-index值大的元素,依然没有覆盖掉z-index值小的元素,请检查其包含块的层级
定位的注意事项
定位是参考整个盒子的,所以定位很有可能忽略掉父元素的padding属性,也就是忽略父元素的内边距
特殊应用
定位之后,元素的性质变成定位元素,其宽高由内容撑开,如果还想让元素维持块元素的独占一行,撑满宽度,则需要额外增加几个属性
这里子元素的宽高未定义,其宽高由内容撑开
/* 左右撑开父元素 */
left: 0;
right: 0;
/* 上下撑开父元素 */
top: 0;
bottom: 0;
不能加width: 100%;的属性,因为width是内容区宽度,再加上内边距和边框的长度势必会超出父元素
设置子元素居中
当子元素有定义的宽高后,使用这些属性搭配可以将元素相对于父元素剧中
left: 0;
right: 0;
top: 0;
bottom 0;
margin: auto;