我偶然发现 Safari 和 Chrome/Firefox 之间的布局渲染存在差异,我不知道哪个是“正确的”。
你可以在这里查看 jsfiddle
在 Firefox/Chrome 上,布局符合预期,黄色 div 紧随红色 div之后。但在 Safari 上,黄色 div 位于红色 div下方。
在调查了我做错了什么之后,我发现这个错误来自 CSS 类E
,它的属性margin-right
(值:-11px)大于width
我的 div 的属性(值:10px)。
我想我理解为什么 Safari 会以这种方式呈现它。class 的 div 的宽度B
被计算为其子级的宽度之和,因为它们具有 property float: left;
。
在这里,widthB = widthB2*2 + widthE + marginRightE + widthC
widthBmarginRightE < -widthE
不够大,无法包含彼此相邻的每个 div。
所以我的问题是:
- 我对 Safari 功能的理解是否正确?
- 为什么 Chrome 和 Firefox 的呈现方式不同?他们只是没有根据负数减少父 div 的宽度
margin-right
吗? - 在这种情况下,正确的修正是否总是
margin-right
小于或等于 div 的宽度?
谢谢!
HTML:
<div class="A">
<div class="C">
<div class="B">
<div class="B2"></div>
<div class="B2"></div>
<div class="E"></div>
<div class="C">
<div class="D"></div>
</div>
</div>
</div>
</div>
CSS:
.A {
background-color: blue;
height: 200px;
}
.B {
height:100px;
}
.B2 {
background-color: red;
height: 100px;
width: 100px;
float: left;
}
.C {
float: left;
}
.D {
height: 40px;
width: 40px;
float:left;
background-color: yellow;
}
.E {
height: 50px;
width: 10px;
position: relative;
left: -10px;
margin-right: -11px;
background-color: black;
float: left;
}