CSS-position?你还记得清楚吗 | 青训营笔记

74 阅读4分钟

哈喽哈喽,这里是小菜不拖延博主

青训营打卡day9~

过了好久,前段时间写网站,属实又被定位搞糊涂了,这个混那个,那个混这个,晕头转向的,如果你也忘了position,或许这篇保姆级的文章能帮你回忆起来!

static

就是默认的属性,静态定位的元素不受 top、bottom、left 和 right 属性的影响。position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位:

<!DOCTYPE html>
<html>
    <head>
        <style>
            .two {
            position: static;
            left: 30px;
            top:0px;
            }

            .one {
            position: relative;
            left: 30px;
            top:0px;
            }
        </style>
    </head>
    <body>
        <div class="one" style="height:100px; width:200px; background-color: pink;"></div>
        <div class="two" style="height:100px; width:200px; background-color: red;"></div>
    </body>
</html>

效果:

image.png

relative

元素相对于其正常位置进行定位。

设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。

.one {
    position: static;
    left: 30px;
    top:0px;
}
.two {
    position: relative;
    left: 30px;
    top:0px;
}

效果:

image.png

如图,当我们设置了div的position为relative时,我们就可以同通过设置top等四边的属性来控制div的位置,注意,div设置这些属性的时候,是相对于正常流设置的,比如,此时我们的one是static,他是在正常的流布局,所以我们two的relative的top、left等属性的相对是要包括one的位置的,就像这里的top为0,two就是离one这个div是0,而不是window的最上方为0.

当两个relative!

.one {
    position: relative;
    left:0px;
    top:80px;
}
.two {
    position: relative;
    left: 30px;
    top:0px;
}

效果:

image.png 可以发现,one的位置不会受到two的影响,他的属性设置的离得多远他就相当于body离多远

但是,我们会发现一个问题,欸,two不是设置的top为0吗,为什么他的位置一看就是top相对于window不是0,

fixed

元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。 (滚动下面窗口,two的位置始终固定)

absolute

元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。

然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。

注意:“被定位的”元素是其位置除 static 以外的任何元素。 例如当有主体时: 注意这里,由于one是two的父亲(因为根据文档说了,position有除默认属性之外的设置,那么absolute就会相对于这个设置了position的盒子固定位置),所以他这里是相对于one,但是,当我们设置one的position的位置为static会发现他的效果是不同的,也就是two由于找不到其他拥有position位置的盒子,所以他又开始相对于body:

image.png

例如当没有主体时,相对于body:

sticky

元素根据用户的滚动位置进行定位, 粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 - 然后将其“粘贴”在适当的位置(比如 position:fixed)。 也就是说,比如我们设置了top为20px,当我们的整个视图框离这个元素为20px的时候,就会启用fixed,他会随时视图而移动,当距离没有达到的时候他就是正常的relative的属性。 注意!比如我们现在的整个body高度为50px,我们设置了top为20px,当我们慢慢向下滑动的时候,body下边框和视图的距离会越变越小,当两者的距离小于20px的时候,我们属性为sticky,top=20px的盒子,将不会再移动,会固定在body下边框!!!!!!!注意这一点很重要

也就是说,必须满足top=20px,小于或者大于都不可以 (你可以在下面尝试一下啊)