css中relative、absolute和float

position:relative和position:absolute都可以改变元素在文档流中的位置,设置position:relative或position:absolute都可以让元素激活left、top、right、bottom和z-index属性(默认情况下,这些属性未激活,设置也无效)

 

网页虽然看起来是平面的二维结构,但其实是有z轴的,z轴的大小由z-index控制,默认情况下,所有元素都是在z-index:0这一层的。元素根据自己的display类型、长度、内外边距等属性顺序排列在z-index:0之一层中,这就是文档流。

 

设置position:relative和position:absolute会让元素“浮”起来,也就是z-index值大于0,它会改变正常情况下的文档流。

 

不同的是postion:relative会保留自己在z-index:0的占位,left、top、right、bottom值是相对于自己在z-index:0的位置,虽然它的实际位置可能因为设置了left、top、right、bottom值而偏离原来在文档流中的位置,但对其他仍然在z-index:0层的元素不会造成任何影响。

 

而position:absolute会完全脱离文档流,不再在z-index:0层保留占位符,其left、top、right、bottom值是相对于自己最近的一个设置了position:relative或position:absolute的祖先元素的,如果祖先元素全部都没有设置position:relative或position:absolute,那么就相对于body元素。

 

除了position:relative和position:absolute,float也能改变文档流,不同的是,float属性不会让元素“上浮”到另一个z-index层,它仍然让元素在z-index:0层排列,float不像position:relative和position:absolute那样,它不能通过left、top、right、bottom属性精确地控制元素坐标,它只能通过float:left和float:right来控制元素在同层里“左浮”和“右浮”。float会改变正常的文档流排列,影响到周围元素。

另一个有趣的现象是,position:absolute和float会隐式地改变display类型,不论之前什么类型的元素(display:none(元素不显示)除外),只要设置了position:absolute、float:left或float:right中任意一个,都会让元素以display:inline-block的方式显示:可以设置长宽,默认宽度并不占满父元素。就算我们显示地设置了display:inline或者display:block,也仍然无效,(float在IE6下的双倍边距bug就是利用添加display:inline来解决的)。值得注意的是,position:relative却不会隐式改变display类型。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值