此问题的常见解决方案是使用绝对定位或裁剪浮动,但这些方法很棘手,因为如果您的列的数量+大小发生变化,它们需要进行大量调整,并且您需要确保您的“主”列始终是最长。相反,我建议您使用三种更强大的解决方案之一:
-
display: flex:到目前为止最简单和最好的解决方案并且非常灵活 - 但不受 IE9 和更早版本的支持。
-
table 或 display: table:非常简单,非常兼容(几乎所有浏览器),非常灵活。
-
display: inline-block; width:50% with a negative margin hack:很简单,但列底边框有点棘手。
1。 display:flex
这真的很简单,而且很容易适应更复杂或更详细的布局 - 但仅 IE10 或更高版本(除了其他现代浏览器)支持 flexbox。
示例: http://output.jsbin.com/hetunujuma/1
相关html:
<div class="parent"><div>column 1</div><div>column 2</div></div>
相关css:
.parent { display: -ms-flex; display: -webkit-flex; display: flex; }
.parent>div { flex:1; }
Flexbox 支持更多选项,但只要有上述任意数量的列就足够了!
2.<table> 或 display: table
一个简单且非常兼容的方法是使用table - 如果您需要旧版 IE 支持,我建议您先尝试一下。您正在处理列; divs + floats 根本不是最好的方法(更不用说多层嵌套 div 只是为了绕过 css 限制几乎没有比仅仅使用一个简单的表更“语义”)。如果您不想使用 table 元素,考虑使用 css display: table(IE7 和更早版本不支持)。
示例: http://jsfiddle.net/emn13/7FFp3/
相关的 html:(但请考虑改用普通的 <table>)
<div class="parent"><div>column 1</div><div>column 2</div></div>
相关css:
.parent { display: table; }
.parent > div {display: table-cell; width:50%; }
/*omit width:50% for auto-scaled column widths*/
这种方法比使用带有浮点数的overflow:hidden 更强大。您可以添加几乎任意数量的列;如果你愿意,你可以让它们自动缩放;并且您保留与古代浏览器的兼容性。与浮动解决方案不同,您也不需要事先知道哪一列最长;高度缩放就好了。
KISS:除非您特别需要,否则不要使用浮动技巧。如果 IE7 是一个问题,我仍然会选择一个带有语义列的普通表格,而不是一个难以维护、不太灵活的技巧 CSS 解决方案。
顺便说一句,如果您需要您的布局是响应式的(例如,在小型手机上没有列),您可以使用 @media 查询回退到小屏幕宽度的普通块布局 - 无论您使用 @ 987654341@ 或任何其他display: table 元素。
3。 display:inline block 带有负边距黑客。
另一种选择是使用display:inline block。
示例: http://jsbin.com/ovuqes/2/edit
相关 html:(div 标签之间没有空格很重要!)
<div class="parent"><div><div>column 1</div></div><div><div>column 2</div></div></div>
相关css:
.parent {
position: relative; width: 100%; white-space: nowrap; overflow: hidden;
}
.parent>div {
display:inline-block; width:50%; white-space:normal; vertical-align:top;
}
.parent>div>div {
padding-bottom: 32768px; margin-bottom: -32768px;
}
这有点棘手,负边距意味着列的“真实”底部被遮挡。这反过来意味着您不能相对于这些列的底部定位任何东西,因为它被overflow: hidden 截断。请注意,除了 inline-blocks 之外,您还可以使用浮点数实现类似的效果。
TL;DR:如果可以忽略 IE9 及更早版本,请使用 flexbox;否则尝试(css)表。如果这些选项都不适合您,则存在负边距黑客,但这些可能会导致在开发过程中很容易错过的奇怪显示问题,并且您需要注意布局限制。