css中position:absolute与position:relative的使用问题

问题描述:

“如果用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内容本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值