Css 同级div匹配容器中的高度

Css 同级div匹配容器中的高度,css,Css,我在一个容器中有三个div: 一个div有很多内容。如何使内容较少的另外两个divs与最长div的高度相匹配 我尝试将height:100%添加到所有divs中,但不起作用,因为这需要div.container上的height,在渲染之前我不知道。我建议使用display:table行和显示:表格单元格用于此。简而言之,您要做的是创建一个表布局,但要使用标记,然后将它们设置为与表类似的样式 这比仅仅出于语义和可访问性的原因使用表要好 但一般来说,CSS并没有提供很多方法来以这种方式引用元素的同级

我在一个容器中有三个div:

一个div有很多内容。如何使内容较少的另外两个
div
s与最长
div
的高度相匹配


我尝试将
height:100%
添加到所有
div
s中,但不起作用,因为这需要
div.container
上的
height
,在渲染之前我不知道。

我建议使用
display:table行
显示:表格单元格用于此。简而言之,您要做的是创建一个表布局,但要使用
标记,然后将它们设置为与表类似的样式

这比仅仅出于语义和可访问性的原因使用表要好

但一般来说,CSS并没有提供很多方法来以这种方式引用元素的同级。
标记确实如此,但它会混淆屏幕阅读器和其他东西

如果您想要更多的行,您将拥有更多的
.container
s,然后创建另一个
包装它们,并为其提供
显示:表

因此,使用与您相同的HTML,此CSS可以满足您的需要:

.container
{
    display: table-row;
}

.tile
{
    display: table-cell;
    width: 100px;
    background: #eee;
    border: 1px solid black;
}​
请参见


注意:而
显示:表格等,IE直到版本8才添加支持。如果您计划为IE 7或更低版本支持此功能,您将被迫使用更复杂的方法,例如。

这是一个非常常见的问题。看看这篇文章。。。它有所有的答案:

现在,这里有一个快速的小提琴把它使用。尝试单击任何“Column#”文本元素以将其从文档中删除。。。列将很好地调整大小:)

HTML
您可以使用flexbox解决此问题

.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


此“display:flex;”和“对齐项目:拉伸;”在容器中,应该使所有的孩子都具有相同的高度,只要它是所需的高度。

这是旧方法,非常糟糕。CSS已经发展并拥有比现在更好的工具。JS删除功能非常好。你确定你的
display:table行
显示:表格单元格解决方案是否兼容跨浏览器?这表明它得到了广泛的支持,是的。IE 7和更早版本不支持它,如果这是一个问题的话;这是一个很好的观点,我会把它添加到我的答案中。非常酷!感谢您向我指出这一点:)以后我将通过提供两种解决方案来回答类似的问题。请注意,并非所有浏览器都以相同的方式解释Flexbox规范。我在这方面遇到了一些问题,请看我在这里的示例:我只在容器中使用display:table。这个答案已经有10年的历史了,可能不再是最好的解决方案了,因为flexbox已经得到了广泛的支持。除非您需要支持非常旧的遗留浏览器,否则我建议使用Twirlman的答案instead@AlexvonBrandenfels同意,flex是更好的解决方案。。。几乎所有的布局问题,真的,这些天。虽然我不知道为什么Twirlman应用了
display:flex到瓷砖,或
柔性包裹:包裹任何东西。除非我遗漏了什么,否则这两项都不需要实现所需的布局。
#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;
}​
.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;
}
<div id="container">
  <div id="div1">1</div>
  <div id="div2">2</div>
  <div id="div3">3</div>
</div>
#container {
  display: flex;
  align-items: stretch;
}

#div1 {
  display: flex;
}

#div2 {
  display: flex;
}

#div3 {
  display: flex;
}