在设计布局时,我决定尝试将主要列的基于浮动的布局与子元素的基于表格的布局结合起来。因此,我的 html/css 标记是这样的:
HTML:
<div class="column">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
<div class="column">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
...
CSS:
.column {
float: left;
display: table;
width: 15%;
margin: 2%;
/* ... */
}
.sub-element {
display: table-cell;
/* ... */
}
具体的宽度和边距并不重要。请参阅此 jsFiddle以获取参考示例。
我看到发生的情况是,从左到右穿过页面的每个列块的边距都比上一个略小。由于没有额外的标记或 CSS 来实现这一点,我很困惑。在尝试了不同的值之后,我发现注释掉会display: table
导致我期望的正常行为,例如恒定的列宽。
现在,我可以使用其他方法来获得我想要的布局,这不是问题;但我真的很好奇为什么会这样。有什么想法吗?
编辑
看起来这是一个 webkit 错误。display: table
浮动和边距在 Firefox 中工作正常。关于为后代修复 webkit 的任何建议?
进一步编辑
我刚刚在 Safari 中进行了测试,它似乎也可以在那里工作。WTF 铬??
最终编辑
在 Firefox 18、Safari 和 Chrome Canary(除了标准 Chrome)中进行测试后,看来这实际上是 Chrome 特有的错误。
最简单的解决方法是在每个浮动的内容中添加一个简单的附加包装器 div 以包含内容并将包装器的 CSS 设置为width: 100%; height:100%; display: table;
,然后display: table
从浮动的外部元素中删除 。奇迹般有效。
HTML:
<div class="column">
<div class="sub-element-wrapper">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
</div>
<div class="column">
<div class="sub-element-wrapper">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
</div>
...
CSS:
.column {
float: left;
width: 15%;
margin: 2%;
/* ... */
}
.sub-element-wrapper {
width: 100%;
height: 100%;
display: table;
}
.sub-element {
display: table-cell;
/* ... */
}