css中position:absolute与position:relative的使用问题
问题描述:“如果用position来布局页面,父级元素的position属性必须为relative”这一段经常在网上看到,一开始以为是官方标配,后面在学习的过程中有些疑问,故特意拿出来研究学习了下,发现并非如此,先说结论:绝对定位的父级节点只要是relative、fixed、absolute其中一个即可实现容器内相对布局,以下是找到的资料印证的。(特别说明,两个position:abs...
问题描述:
“如果用position来布局页面,父级元素的position属性必须为relative”
这一段经常在网上看到,一开始以为是官方标配,后面在学习的过程中有些疑问,故特意拿出来研究学习了下,发现并非如此,先说结论:
绝对定位的父级节点只要是relative、fixed、absolute其中一个即可实现容器内相对布局,以下是找到的资料印证的。(特别说明,两个position:absolute会从当前文档流中删除,即都是浮层,可能会挡住后面的内容,这个要注意下)
https://www.jianshu.com/p/d1e02e3abd11(第一部分,以下是引用内容)
css position属性允许你定位一个元素,通过使用top,left,bottom,right属性,当然你必须先设定position的属性值,以便告诉浏览器依据什么方式进行定位。
- static
元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。 - relative
元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。 - absolute
元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。 - fixed
元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
因为绝对定位(position:absolute)在实际应用中有着十分重要的地位,特别进行深度探究以便在使用中能更得心应手。
元素设置position:absolute后主要会带来4个影响。
1.脱离文档流,其在文档流中所占空间会被关闭。
2.可相对与已被定位的父元素进行定位,逐级向上直到找到为止。
3.生成一个块级框,不论原来它在正常流中生成何种类型的框。(其实就是形成bfc)。
4.拥有z-index属性,可以进行层级设定,最大为2147483647。(等值按网页代码中层出现的顺序,后出现的层高于先出现的层)
1、2、和4都好理解这里对2进行着重分析。
因为定位可以是realitive、absolute和fixed。故父级元素会出现3中情况。
1.父元素relative(√)。.parents{width: 200px;height:200px;position: relative;background: #f60;} .box{width: 100px;height:100px;position: absolute;background: #06f;top: 50px; left: 50px;
2.父元素fixed(√).parents{width:200px;height:200px;position:fixed;background: #f60;letf:100px;top:100px;} .box{width: 100px;height:100px;position: absolute;background: #06f;top: 50px; left: 50px;
3.父元素absolute(√).parents{width:200px;height:200px;position:absolute;background: #f60;letf:100px;top:100px;} .box{width: 100px;height:100px;position: absolute;background: #06f;top: 50px; left: 50px;
结论:relative、fixed、absolute表现效果一致,父容器只要定位position就有效。
第二个问题top、right、bottom、left定位到最近一个具有定位设置父元素的边缘的距离。这个边缘指的是什么?
因为盒子的margin 、border、padding、及content都会影响盒子的尺寸。在这里对父元素为relative的模型进行依次添加。
1.添加margin:50px 0 0 50px;
2.添加border-left: 50px solid #000;border-top: 50px solid #000;
3添加padding:50px 0 0 50px;
结论:定位所依据的父容器的边缘指的是padding+元素内容整体的边界。
第三个问题left除了设置length具体尺寸,%相对于父容器的尺寸,默认会设置成auto,通过浏览器来计算位置。那么具体是怎么计算的呢。父元素为relative的模型进行探究。
1.子元素top: auto;left: auto;
2.父元素添加margin-left:50px;
1.png
3.父元素继续添加border-left:50px solid #000;
4.父元素继续添加padding-left:50px;
5.父元素继续添加padding-top:50px;
结论:可以看出设置auto后,left等属性计算距离的边界变为content内容本身。
更多推荐
所有评论(0)