什么是定位?!定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置。
position 属性设置
可选值:
- static 默认值,元素是静止的没有开启定位
- relative 开启元素的相对定位
- absolute 开启元素的绝对定位
- fixed 开启元素的固定定位
- sticky 开启元素的粘滞定位
**1、相对定位:**
特点:
- 元素开启定位后不设置偏移量不会发生任何变化。
- 是相对于元素在文档流中的位置进行定位的。
- 可以提升层级,也就是可以盖住别的元素。
- 不会脱离文档流,也就相当于灵魂出窍,肉身还在。
- 不会改变元素的性质,块还是块,行内还是行内。
偏移量:
- top 定位元素和定位位置上边的距离
- bottom 定位元素和定位位置下边的距离
- left 定位元素和定位位置左边的距离
- right 定位元素和定位位置右边的距离
**2、绝对定位:**
特点:
- 不设置偏移量位置还是不变。
- 但是,开启绝对定位后元素脱离文档流。(脱离文档流有什么特点,写在了浮动那一块了,总的来说就是不再区分块和行,宽高被内容撑开)
- 元素会提升一个层级。
- 相对于包含块定位。(绝对定位的包含块是离他最近的开启了定位的祖先元素,但要是祖先元素都没开启定位,则根元素html是它的包含块)
**3、固定定位:**
固定定位也是一种绝对定位,所以固定定位的大部分特点和绝对定位一样,唯一不同的是固定定位永远是相对于浏览器视口进行定位的。(固定定位的元素不会随网页的滚动条滚动,可恶的广告就是这么来的,死死卡住一个位置)
**4、粘滞定位**
粘滞定位和相对定位的特点基本一致,不同的是粘滞定位可以在元素到达某个位置时将其固定。
补充:
1、绝对定位元素的位置
水平方向有过度约束:
- left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 包含块的内容区的宽度
- 如果9个值中没有 auto 则自动调整 right 值以使等式满足,如果有 auto,则自动调整 auto 的值以使等式满足。
垂直方向有过度约束:
-
top + margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom + bottom = 包含块的内容区的高度
-
如果9个值中没有 auto 则自动调整 bottom 值以使等式满足,如果有 auto,则自动调整 auto 的值以使等式满足。
2、元素的层级(z-index)
-
对于开启了定位的元素,可以通过 z-index 属性来指定元素的层级,z-index 需要一个整数作为参数,值越大元素的层级越高,越优先显示。
-
层级一样,则优先显示靠下的元素。
-
祖先元素层级再高,也不会盖住后代元素。
.box{ Z-index: 3; }