<div>
<div>A column</div>
<div>A column</div>
<div>A column</div>
<div>A column</div>
</div>
我有这样的CSS:
div {
background: #ccc;
}
div div {
background: #eee;
display: inline-block;
width: 25%;
}
-> 点此查看示例 <-
当在浏览器中显示时(目前仅在Chrome中测试),嵌套的div元素之间的空白符(在此示例中是由换行符引起的)被呈现出来,从而破坏了我的布局。
显然,我可以让我的嵌套div浮动...
div {
background: #ccc;
}
div div {
background: #eee;
width: 25%;
float: left;
}
-> 点我,试试看 <-
然而我的容器div会塌陷,我不想使用CSS clearfix技巧或者额外的HTML来打开它。
或者我可以修改我的HTML,将空白部分去掉...
<div><div>A column</div><div>A column</div><div>A column</div><div>A column</div></div>
但这使得它难以处理。将标签分开以使其更易读的替代方案让我感到不太舒服...
<div>
<div>A column</
div><div>A column</
div><div>A column</
div><div>A column</div>
</div>
我找到了一些资源或者方法(在SO上没找到),但是我并不喜欢这些解决方案——它们都是权宜之计,如果必须的话我会使用,但肯定有其他的办法吧?
所以我的问题是......有没有一种跨浏览器、符合w3c标准、无需使用javascript、无需hack、整洁的HTML代码,能够在使用display:inline-block
时防止浏览器渲染HTML中的空格?或者有没有其他的替代方案,没有不良副作用?
编辑
假设这确实是不可能的,最好的解决方案是不需要额外的HTML标记和“灵活”的CSS。换句话说,网站管理员可以像平常一样编辑HTML而不用考虑破坏布局,CSS(无论是hack还是其他方式)都将适应网站管理员的修改,而无需自行修改。
我的“权宜之计”
好吧,看来必须得让出点什么。在我这种情况下,更重要的是拥有不需要额外标记的HTML,因此最好的解决方案是在嵌套的div中添加一个hack并将其浮动。
div div {
float: left;
}
div::before,
div::after {
content: "";
display: table;
}
div::after {
clear: both;
}
div {
*zoom: 1;
}
这是我使用已久并希望避免的解决方法的衍生版本。这个简洁版的解决方法可以在这个网站上找到。
因此,现在标记中的每个div都已应用clearfix hack,无论是否需要。我还不知道将其应用于所有 div是否会产生任何副作用-当出现任何问题时,我期待着调试和修复;-)