最全position定位方式解析

position: 定位方式

position: static; 
position: relative; 
position: absolute;
position: fixed;
position: inherit;
position: initial;
position: unset;
position: sticky;

通常,我们总是知道前面4种方式,突然发现原来现在有8种方式了。下面依次来解析一下每种定位方式:

1)position: static

静态定位,默认值。没有定位,元素生成时正常显示。

2)position: relative

相对定位。生成相对定位的元素,元素没有脱离文档流,通过设置top,left等值,相对于其原有的位置进行定位,不影响其它元素的布局。

3)position: absolute

绝对定位。生成绝对定位的元素,脱离文档流,相对于static定位外的第一个父级元素进行定位,可设置top,left,right,bottom值进行定位

4)position: fixed

固定定位。生成固定定位元素,脱离文档流,相对于浏览器窗口进行定位。

5)position: initial

initial 关键字用于设置 CSS 属性为它的默认值,可作用于任何 CSS 样式。(IE 不支持该关键字)

6)position: inherit

继承,继承父级元素position定位的属性值。

7)position: unset

属性不设置。如果该属性默认是继承的,该值相当于 inherit;如果该属性是非继承属性,该值等同于 initial 不设置时的默认值。

8)position: sticky
粘性定位。粘性定位是一个结合position: relative和position: fixed两种定位于一身的特殊定位,兼容性较差。看图理解,当内容框的top值为0的时候,内容框变为fixed定位。

最全position定位方式解析_第1张图片

{
    position: -webkit-sticky;
    position: sticky;
    top: 0;
}

简单描述下生效过程,因为设定的阈值是 top:0 ,这个值表示当元素距离页面视口(Viewport,也就是fixed定位的参照)顶部距离大于 0px 时,元素以 relative 定位表现,而当元素距离页面视口小于 0px 时,元素表现为 fixed 定位,也就会固定在顶部。

生效规则
position:sticky 的生效是有一定的限制的,总结如下:
1)须指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。
    并且 top 和 bottom 同时设置时,top 生效的优先级高,left 和 right 同时设置时,left 的优先级高。
2)设定为 position:sticky 元素的任意父节点的 overflow 属性必须是 visible,否则 position:sticky 不会生效。这里需要解释一下:
    a. 如果 position:sticky 元素的任意父节点定位设置为 overflow:hidden,则父容器无法进行滚动,所以 position:sticky 元素也不会有滚动然后固定的情况。
    b. 如果 position:sticky 元素的任意父节点定位设置为 position:relative | absolute | fixed,则元素相对父元素进行定位,而不会相对 viewprot 定位。
3)达到设定的阀值。这个还算好理解,也就是设定了 position:sticky 的元素表现为 relative 还是 fixed 是根据元素是否达到设定了的阈值决定的。


你可能感兴趣的:(css)