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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12716525/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-29 20:22:40  来源:igfitidea点击:

Sibling divs match height in container

css

提问by atp

I have three divs in a container: http://jsfiddle.net/fBe9y/

我在一个容器中有三个 div:http: //jsfiddle.net/fBe9y/

One div has a lot of content. How do I get the other two divs, with less content, to match the height of the longest div?

一个div有很多内容。我如何让其他两个div内容较少的 s 与最长的高度相匹配div

I tried adding height: 100%to all the divs, but it doesn't work because that would need a heighton div.container, which I don't know before rendering.

我尝试添加height: 100%到所有divs,但它不起作用,因为这需要一个heighton div.container,我在渲染之前不知道。

采纳答案by KRyan

I recommend using display: table-row;and display: table-cell;for this. In short, what you do is make a table layout, but using <div>tags, and then style them to behave like a table.

我建议为此使用display: table-row;display: table-cell;。简而言之,您要做的是制作表格布局,但使用<div>标签,然后将它们的样式设置为像表格一样。

This is better than just using a table for semantic and accessibility reasons.

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

But generally speaking, CSS does not give you many ways to refer to an element's siblings this way. The <table>tag does, but then it confuses screen readers and things.

但是一般来说,CSS 并没有给你很多方法来引用一个元素的兄弟元素。该<table>标签呢,但后来它混淆了屏幕阅读器和东西。

If you wanted more rows, you would have more .container<div>s, and then create another <div>wrapping them all, and give it display: table;.

如果你想要更多的行,你会有更多的.container<div>s,然后创建另一个<div>包装它们,并给它display: table;

So with the same HTML you had, this CSS does what you want:

因此,使用您拥有的相同 HTML,此 CSS 可以满足您的需求:

.container
{
    display: table-row;
}

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

See Fiddle.

小提琴

Of note: while display: table;et al. are widely supported, IE did not add support until version 8. If you plan on supporting this for IE 7 or lower, you'll be forced to use a more complicated approach, like @Hristo's.

值得注意的是:而display: table;等人。得到广泛支持,IE 直到第 8 版才添加支持。如果您计划为 IE 7 或更低版本支持此功能,您将被迫使用更复杂的方法,例如@Hristo 的.

回答by Twirlman

You can solve this using flexbox

您可以使用 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;
}

回答by Isaac Koh

HTML

HTML

<div id="container">
  <div id="div1">1</div>
  <div id="div2">2</div>
  <div id="div3">3</div>
</div>

CSS

CSS

#container {
  display: flex;
  align-items: stretch;
}

#div1 {
  display: flex;
}

#div2 {
  display: flex;
}

#div3 {
  display: flex;
}

this 'display: flex;' and 'align-items: stretch;' in the container should make all the children div same height, as long as it is of the desired height.

这个'显示:flex;' 和“对齐项目:拉伸;” 在容器中应该使所有孩子的 div 高度相同,只要它是所需的高度。

回答by Hristo

This is a very common question. Take a look at this article... it has all the answers:

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

http://matthewjamestaylor.com/blog/equal-height-columns-cross-browser-css-no-hacks

http://matthewjamestaylor.com/blog/equal-height-columns-cross-browser-css-no-hacks

Now, here's a quick fiddle of putting that to use. Try clicking on any of the "Column #" text elements to remove them from the document... the columns will resize nicely :)

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

http://jsfiddle.net/UnsungHero97/qUT3d/9/

http://jsfiddle.net/UnsungHero97/qUT3d/9/

HTML

HTML

<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>

CSS

CSS

#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;
}?