本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
我不知道的CSS - Position
五星人 · 297浏览 · 发布于2021-07-14 +关注

由于之前大部分时间在做工具,Node.js 的开发比较多。but,现在又重新开始写了一些业务代码,发现 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。

  1. <style> 

  2.   div { 

  3.     width: 200px; 

  4.     height: 200px; 

  5.     background: steelblue; 

  6.   } 

  7.   .relative { 

  8.     position: relative; 

  9.     top: 30px; 

  10.     left: 30px; 

  11.   } 

  12. </style> 

  13. <body> 

  14.   <div class="relative"></div> 

  15. <body/> 

下面的图片就是元素没有加上 .releativ和加上 .releative 的区别。

元素在绝对定位的时候,其初始位置会被保留下来,也就是原来的位置上会留白。

  1. div { 

  2.   display: inline-block; 

  3.   width: 200px; 

  4.   height: 200px; 

  5. .box1 { 

  6.   background: red; 

  7. .box2 { 

  8.   background: yellow; 

  9. .box3 { 

  10.   background: blue; 

  11. .relative { 

  12.   position: relative; 

  13.   top: 30px; 

  14.   left: 30px; 

先为元素定义好样式,在三个元素都没有进行偏移时,如下所示:

  1. <body> 

  2.   <div class="box1"></div> 

  3.   <div class="box2"></div> 

  4.   <div class="box3"></div> 

  5. <body/> 

如果给第二个元素加上相对定位,第二个元素就会向右边和下边进行偏移,同时在原始的位置会空出来一块。

  1. <body> 

  2.   <div class="box1"></div> 

  3.  <div class="box2 relative"></div> 

  4.  <div class="box3"></div> 

  5. <body/> 

绝对定位

绝对定位不会相对于原来的位置定位,而是会向上查找,找到一个非 static 的祖先元素进行定位,如果一直到 body 都没有非 static 的元素,则会相对于 body 来进行定位。

  1. <style> 

  2.   body { /* 清理body默认样式 */ 

  3.     margin: 0; 

  4.     padding: 0; 

  5.   } 

  6.   .box { 

  7.     margin: 30px; 

  8.     display: inline-block; 

  9.     width: 300px; 

  10.     height: 300px; 

  11.   } 

  12.   .box1 { 

  13.     position: relative; 

  14.     border: 3px solid red; 

  15.   } 

  16.   .box2 { 

  17.     border: 3px solid yellow; 

  18.   } 

  19.   .box3 { 

  20.    border: 3px solid blue; 

  21.   } 

  22.   .absolute { 

  23.     /* 

  24.     position: absolute; 

  25.     top: 30px; 

  26.     left: 30px; 

  27.     */ 

  28.     width: 100px; 

  29.     height: 100px; 

  30.     background-color: aquamarine; 

  31.   } 

  32. </style> 

  33. <body> 

  34.   <div class="box box1"> 

  35.     <div class="box box2"> 

  36.       <div class="box box3"> 

  37.         <div class="absolute"></div> 

  38.       </div> 

  39.     </div> 

  40.   </div> 

  41. </body> 

在未给最内部的 div 设置 position 属性时,它是紧挨着 div.box3 的边框的。下面我们给内部的 div 加上 position: absolute; ,让其进行绝对定位。

  1. .absolute { 

  2.   position: absolute; 

  3.   top: 30px; 

  4.   left: 30px; 

  5.  width: 100px; 

  6.   height: 100px; 

  7.   background-color: aquamarine; 

由于外面三层的 div.box 都是默认的 static 状态,所以绝对定位的元素会相对于 body 进行定位,距离 body 的顶部和左边 30px。

现在,给 div.box2 加上一个相对定位,此时的绝对定位元素就会相对于 div.box2 来进行定位。

  1. .box2 { 

  2.   position: relative; 

  3.   border: 3px solid yellow; 

绝对定位除了定位的元素不同,它的初始位置也不会被保留,相当于脱离了文档流。这里我们可以用之前相对定位的案例,布局三个 div,让中间的 div 进行绝对定位。

  1. <style> 

  2.   div { 

  3.     display: inline-block; 

  4.     width: 200px; 

  5.     height: 200px; 

  6.   } 

  7.   .box1 { 

  8.     background: red; 

  9.   } 

  10.   .box2 { 

  11.     background: yellow; 

  12.   } 

  13.   .box3 { 

  14.     background: blue; 

  15.   } 

  16.   .absolute { 

  17.     position: absolute; 

  18.     top: 30px; 

  19.     left: 30px; 

  20.   } 

  21. </style> 

  22. <body> 

  23.   <div class="box1"></div> 

  24.   <div class="box2 absolute"></div> 

  25.   <div class="box3"></div> 

  26. </body> 

可以看到,中间的 div 会相对于 body 进行定位,同时,它原来的位置也不会被保留。

固定定位

理解了相对定位和绝对定位,固定定位就比较好理解了。固定定位会相对于视窗进行定位,而且和绝对定位一样也会脱离文档流。这里写一个简单的例子:

  1. <style> 

  2.   .box { 

  3.     width: 200px; 

  4.     height: 200px; 

  5.     border: 1px solid red; 

  6.     margin: 100px; 

  7.   } 

  8.   .fixed { 

  9.     position: fixed; 

  10.     top: 30px; 

  11.     left: 30px; 

  12.     width: 100px; 

  13.     height: 100px; 

  14.     background-color: cadetblue; 

  15.   } 

  16. </style> 

  17. <body> 

  18.   <div class="box"> 

  19.     <div class="fixed"></div> 

  20.   </div> 

  21. </body> 

粘性定位

前面的内容都是复习,这个粘性定位确实是最近刚刚接触的??,没办法 CSS 太菜了。

粘性定位可以理解为相对定位和固定定位的缝合,会出现这个属性主要是现在很多 H5 页面都会有这种在顶部固定的导航栏,看来 W3C 也是能看到我们普通开发者的需求的。

  1. .sticky { 

  2.   position: sticky; 

  3.   top: 0; 

  4.   margin-top: 50px; 

当我们给一个元素设置为粘性定位时,如果设置了 top: 0;,粘性定位的元素在它距离视窗顶部大于 0 的时候,会按照默认布局来,也就是和相对定位表现一致。一旦其距离顶部的距离等于 0,这元素会固定在窗口的这个地方,此时的表现和固定布局表现一致。

具体的效果如下:

有了这个属性就可以少些很多 JavaScript 代码了,通过几行 CSS 就能实现一起需要引入一个插件才能实现的功能。原来现在的 CSS 已经这么厉害了。


最近更新公众号的频率明显下降,而且内容也越来越水了,之前写的 Go 笔记也没什么深入的内容。最近因为换城市、换工作,然后也一时不知道写什么,导致质量有明显的下降,后面会慢慢恢复周更,然后会多写一点前端框架和工程化方面的东西,共勉。


css

相关推荐

PHP实现部分字符隐藏

沙雕mars · 1325浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 908浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 970浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 962浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1086浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页