【发布时间】:2012-12-30 12:50:53
【问题描述】:
我偶然发现了 Safari 和 Chrome/Firefox 在布局渲染上的差异,我不知道哪个是“正确的”。
你可以查看jsfiddle here
在 Firefox/Chrome 上,布局与预期一致,黄色 div 正好在 红色 div 之后。但在 Safari 上,黄色 div 位于 在红色 div 之下。
在调查了我做错了什么之后,我发现错误来自 CSS 类 E,其属性 margin-right(值:-11px)大于我的 div 的 width 属性(值:10px)。
我想我理解为什么 Safari 会以这种方式呈现它。 B 类的 div 的宽度计算为其子级的宽度之和,因为它们具有属性 float: left;。
这里是widthB = widthB2*2 + widthE + marginRightE + widthC 或marginRightE < -widthE,所以widthB 不够大,无法包含相邻的每个div。
所以我的问题是:
- 我对 Safari 功能的理解是否正确?
- 为什么 Chrome 和 Firefox 的呈现方式不同?他们只是没有根据否定的
margin-right减小父 div 的宽度吗? - 在这种情况下,正确的修正是否总是使
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;
}
【问题讨论】:
-
我刚刚在 chrome 和 Firefox 中查看了这个,在 chrome 中黄色框在红色下方,但在 Firefox 中它在红色旁边。所以,我的 chrome 浏览器就像你的 safari 浏览器一样。不幸的是,我在编写 HTML 代码时经常遇到这样的问题。在 chrome 中以一种方式显示的东西在 IE 中看起来非常不同。或野生动物园。我认为有些命令只适用于某些浏览器。此外,浏览器的版本可能会有所不同。
-
感谢您的回复。您能告诉我您使用的是哪个版本的 Chrome 以及您的操作系统吗?我知道浏览器有不同的行为。我想要的是确保我的理解是正确的,并最终找到解决此布局的方法!
-
我使用的是 windows XP 并且拥有 chrome 版本 15.0.874.121。
-
我在 Win7 上的 Chrome 中遇到了一些奇怪的东西。如果您在 WebInspector 中检查 secong
.B2并停用float: left并立即激活它,.B的宽度计算为 239px,而beginning为 240px。因此,经过某种重绘后,Chrome 的行为就像 Safari 一样。这不适用于 FF 浏览器。 -
您已经使用了 CSS 类
C两次。你把float: left放在课堂上。外层.C真的需要吗?