Разновидности сиблинга соответствуют высоте в контейнере

У меня есть три divs в контейнере: http://jsfiddle.net/fBe9y/

У одного div есть много контента. Как получить два других div s с меньшим количеством содержимого, чтобы соответствовать высоте самого длинного div?

Я попробовал добавить height: 100% ко всем div s, но он не работает, потому что для этого потребуется height on div.container, который я не знаю перед рендерингом.

Ответы

Ответ 1

Я рекомендую использовать для этого display: table-row; и display: table-cell;. Короче говоря, то, что вы делаете, это компоновка таблицы, но с использованием тегов <div>, а затем стиль их поведения, как таблица.

Это лучше, чем просто использование таблицы по причинам семантики и доступности.

Но, вообще говоря, CSS не дает вам много способов ссылаться на элементарных братьев таким образом. Тег <table> делает, но затем он сбивает с экрана читателей и многое другое.

Если вам нужно больше строк, у вас будет больше .container <div> s, а затем создайте еще один <div>, обернув их все и дайте ему display: table;.

Итак, с тем же HTML, что и вы, этот CSS делает то, что вы хотите:

.container
{
    display: table-row;
}

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

См. Fiddle.

Примечание: while display: table; et al. широко поддерживается, IE не добавлял поддержку до версии 8. Если вы планируете поддерживать это для IE 7 или ниже, вы будете вынуждены использовать более сложный подход, например @Hristo.

Ответ 2

Вы можете решить эту проблему, используя 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;
}

Ответ 3

Это очень распространенный вопрос. Взгляните на эту статью... у нее есть все ответы:

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

Теперь, здесь быстрая скрипка, чтобы использовать это. Попробуйте щелкнуть по любому из текстовых элементов "Столбец #", чтобы удалить их из документа... столбцы будут значительно изменять размер:)

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

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

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