当前位置: 首页 > 科技观察

CSS我不懂-位置

时间:2023-03-13 05:37:43 科技观察

本文转载自微信公众号《自然觉醒笔记本》,作者写文章《自然觉醒》。转载本文请联系自然觉醒的笔记本公众号。熟悉我的朋友可能知道,我最近回到长沙工作。由于我大部分时间都在研究工具,所以我做了很多Node.js开发。但是,现在又开始写一些业务代码,发现CSS有很多高深的东西,所以今天的文章就来回顾一下CSS定位相关的东西。定位的类型在最新的CSS规范中,定位元素分为四种:relative:相对定位元素absolute:绝对定位元素fixed:固定定位元素sticky:粘性定位元素如果元素没有设置position属性,则默认为static,其所有与定位相关的属性(top/bottom/left/right/z-index)都将无效。在不修改position属性的情况下,给它设置top、left等属性,你会发现它没有变化。相对定位相对定位是指元素在其原始位置上发生一定程度的偏移。具体偏移量取决于top/bottom/left/right这四个属性的值。我们给一个元素设置相对定位(position:relative;),然后让这个元素距离上左30px。是元素不带.releativ和.releative的区别。当一个元素被绝对定位时,它的初始位置将被保留,即原始位置将被留空。div{display:inline-block;width:200px;height:200px;}.box1{background:red;}.box2{background:yellow;}.box3{background:blue;}.relative{position:relative;top:30px;left:30px;}先定义元素的样式,当三个元素都没有偏移时,如下图:

如果给第二个元素加上相对定位,第二个元素会向右下方偏移,同时原位置留一块免费的。
绝对定位绝对定位不会相对于original而是向上查找,找到一个非静态的祖先元素进行定位。如果body之前没有非静态元素,它将相对于body定位。当最里面的div没有设置position属性时,紧挨着div.box3的边框。接下来,我们添加position:absolute;到内部div以使其绝对定位。.absolute{position:absolute;top:30px;left:30px;width:100px;height:100px;background-color:aquamarine;}因为外面三层的div.box默认是静态的,绝对定位元素将相对于主体定位,距主体顶部和左侧30像素。现在给div.box2添加相对定位,绝对定位的元素会相对于div.box2定位。.box2{position:relative;border:3pxsolidyellow;}绝对定位不同于定位元素,它的初始位置不会保留,相当于脱离文档流。这里我们可以利用前面相对定位的情况,布局三个div,让中间的div绝对定位。可以看到中间的div会相对于body进行定位,同时不会保留原来的位置。固定定位理解相对定位和绝对定位,固定定位更容易理解。固定定位是相对于视口定位的,与绝对定位一样,不在文档流中。在这里写一个简单的例子:100px;background-color:cadetblue;}粘性定位前面的内容回顾一下,这个置顶定位确实是最近才接触的??,没办法,CSS太牛了。粘性定位可以理解为相对定位和固定定位的拼接。这个属性的出现主要是因为现在很多H5页面顶部都有这种固定的导航栏。看来W3C也能看出我们普通开发者的需求。.sticky{position:sticky;top:0;margin-top:50px;}当我们设置一个元素为粘性定位时,iftop:0;设置后,粘性定位元素距离窗口顶部大于0,将遵循默认布局,与相对定位性能一致。一旦它到顶部的距离等于0,这个元素就会固定在窗口的这个位置,此时的表现和固定布局表现是一致的。具体效果如下:有了这个属性,可以减少很多JavaScript代码,只需几行CSS就可以实现需要引入插件的功能。原来现在的CSS这么厉害。最近更新公众号的频率明显下降,内容越来越水,之前写的围棋笔记也没有什么深入的内容。最近因为换城市换工作,一时间不知道写什么,质量明显下降。后面会慢慢恢复每周更新,以后会多写一些前端框架和工程方面的,互相鼓励。