我在一个容器中有三个div:http://jsfiddle.net/fBe9y/
其中一个div的内容比较多。如何让其他两个高度较短的div与最长的div的高度相匹配?
我尝试将 height: 100%
添加到所有的div上,但是这不起作用,因为需要在渲染之前就要在 div.container
上设置一个高度,而我不知道该设多高。
我在一个容器中有三个div:http://jsfiddle.net/fBe9y/
其中一个div的内容比较多。如何让其他两个高度较短的div与最长的div的高度相匹配?
我尝试将 height: 100%
添加到所有的div上,但是这不起作用,因为需要在渲染之前就要在 div.container
上设置一个高度,而我不知道该设多高。
我建议使用 display: table-row;
和 display: table-cell;
。简单来说,你要做的就是创建一个表格布局,但是使用 <div>
标签,并将其样式设置为表格行和单元格。
出于语义化和可访问性方面的考虑,这比仅使用表格更好。
但总的来说,CSS 并没有太多的方法可以这样引用元素的同级。虽然 <table>
标签可以实现,但会让屏幕阅读器和其他设备感到困惑。
如果你想要更多的行,你可以有更多的带有 .container
类的 <div>
,然后再创建另一个包裹它们所有的 <div>
,并给它设置 display: table;
。
所以,使用相同的 HTML 代码,以下 CSS 可以实现你想要的效果:
.container
{
display: table-row;
}
.tile
{
display: table-cell;
width: 100px;
background: #eee;
border: 1px solid black;
}
请查看Fiddle。
需要注意的是,尽管display: table;
等属性被广泛支持,但IE直到版本8才添加了支持。如果您计划支持IE 7或更低版本,则必须使用更复杂的方法,例如@Hristo的方法。
.container{
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.tile{
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
HTML
<div id="container">
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
</div>
CSS
#container {
display: flex;
align-items: stretch;
}
#div1 {
display: flex;
}
#div2 {
display: flex;
}
#div3 {
display: flex;
}
这个容器中的 'display: flex;' 和 'align-items: stretch;' 应该使所有子 div 的高度相同,只要它是所需的高度。
这是一个非常常见的问题。看看这篇文章吧...它包含了所有的答案:
http://matthewjamestaylor.com/blog/equal-height-columns-cross-browser-css-no-hacks
现在,这里有一个快速的小技巧可以让你实现它。尝试点击任何一个“列#”文本元素将其从文档中移除... 列会自动调整大小 :)
http://jsfiddle.net/UnsungHero97/qUT3d/9/
<div id="container3">
<div id="container2">
<div id="container1">
<div id="col1">Column 1</div>
<div id="col2">Column 2</div>
<div id="col3">Column 3</div>
</div>
</div>
</div>
#container3 {
float:left;
width:100%;
background:green;
overflow:hidden;
position:relative;
}
#container2 {
float:left;
width:100%;
background:yellow;
position:relative;
right:30%;
}
#container1 {
float:left;
width:100%;
background:red;
position:relative;
right:40%;
}
#col1 {
float:left;
width:26%;
position:relative;
left:72%;
overflow:hidden;
}
#col2 {
float:left;
width:36%;
position:relative;
left:76%;
overflow:hidden;
}
#col3 {
float:left;
width:26%;
position:relative;
left:80%;
overflow:hidden;
}
display: table-row;
和 display: table-cell;
解决方案是跨浏览器兼容的吗? - Hristo
display: flex;
应用到瓷砖上,或者将flex-wrap: wrap;
应用到任何东西上。除非我漏掉了什么,否则这两个属性都不是实现所需布局所必需的。 - KRyan