<div id="parent">
<div id="child1"></div>
<div id="child2"></div>
</div>
#parent{
width: 100px;
height: 100px;
padding: 10px;
margin: 5px;
border: 3px solid pink;
}
#child1{
width: 50px;
height: 30px;
background-color: burlywood;
}
#child2{
width: 40px;
height: 40px;
background-color: blue;
}
现在给 child1 设置相对定位,如下图。
absolute或者fixed定位会让元素脱离文档流,元素不会占据文档流中原本的空间,才能让之后的内容来占据这个元素让出的空间,产生覆盖重叠。
而relative 不会让元素脱离文档流,元素还是会占据文档流中原本的空间。就不会与之后的内容覆盖重叠。
用下面代码修改做测试,对B div取消relative定位可以看出A位置没有变化,说明A是相对B原始位置定位而不是B重新定位后的位置定位。
B改为absolute定位后,A相对于C定位,不在参考B
有帮助麻烦点个采纳【本回答右上角】,谢谢~~
<!doctype html>
<div style=" width: 100px; height: 100px; padding: 10px; margin: 5px; border: 3px solid pink;">
<div style="width:100px;height:50px;background:#ccc">C</div>
<div style=" width: 50px; height: 30px; background-color: burlywood; position: relative; top: 30px">B</div>
<div style="width: 40px; height: 40px; background-color: blue; position: relative; z-index: 1; top: 20px">A</div>
</div>
用z-index;
relative是相对于之前的兄弟节点定位,假设这个节点为A(top:20px)。如果A前一个节点是absolute或者fixed定位脱离了文档流则往前找第一个非absolute或者fixed定位的兄弟节点,如果不存在此类节点则相对父元素定位。找到之前的兄弟节点后,假设为B,如果B是relative,则A是相对B原来的位置定位,而不是B按照自身样式定位后的位置定位,有点拗口,意思就是B relative 定位并且top:20px,A是相对原来B原来top:0时的位置定位,这样A和B会连一起,而不是隔开有20px空白了。
如果absolute或者fixed定位,则会相对第一个出现的absolute,relative,fixed定位的父元素来定位,如果不存在则相对于body定位