该文章总结自张鑫旭慕课,以及自己的使用经验和建议。
relative的具体作用
-
relative
限制absolute
- 限制偏移(绝对定位根据相对定位元素进行偏移)
- 与
overflow: hidden
截断隐藏超出部分(如果没有relative
的overfloww:hidden
对于绝对定位的元素失效) -
relative
会影响本身有z-index
属性的绝对定位元素(如果a
元素的z-index: 1;
,b
元素的z-index:3;
,此时a
在b
下面,假如a
的父元素有[relative
]的z-index: 3
,而b
父元素有[relative
]的z-index:2
,不管a
和b
元素的z-index
如何,a
元素始终高于b
元素。)
-
relative
与定位- 相对自身定位
- 无侵入,不影响文档流(跟
margin
比较一下) -
top
下bottom
失效,left
下right
失效 - 设置
relative
元素的图片会盖过没有设置relative
的图片(用margin-left: -xxpx
试一下就知道了)
-
新建层叠上下文与层级控制
上面讲的
relative
影响层级情况就是新建层叠上下文的原因,又在上面的基础上衍生出这些情况。- 如果
b
元素的带有relative
的父元素的Z-index
设置为auto
时,此时父元素的relative
不再对子元素的z-index
有限制作用,所以此时b
的z-index
变成3
(层叠上下文不存在),此时b
便会超过a
- 但是这种情况不限于
ie6&ie7
,因为ie6&ie7
的z-index: auto
也会出现新建层叠上下文,此时也就是说a
依旧是比b
高的。(这是bug
)
- 如果
应用
为了避免relative
覆盖,有下面两个经验应用
-
避免使用
relative
(绝对定位不依赖于relative
,具体看绝对定位一节) -
relative
最小化
把img定位在左上角,一般的做法是<div style="position: relative;"> <img style="position: absolute; top: 0;left: 0;"> <div></div> <div></div> <div></div> <div></div> </div>
这里会出现的问题就是很可能会因为父级的relative出现层级覆盖。
现在可以这样子做:
<div> <div style="position: relative;"> <img style="position: absolute; top: 0;left: 0;"> </div> <div></div> <div></div> <div></div> <div></div> </div>
以上, 便是实现relative最小化,这里面的div进行相对定位以后并不会对布局造成任何影响。
网友评论