Отображение IE: дочерний элемент таблицы-таблицы игнорирует высоту: 100%
Мне нужно динамически строить таблицу для хранения некоторых данных.
Я придерживался обычного подхода к использованию div с display: table
, display: table-row
и display: table-cell
:
.tab {
display: table;
height:100%;
width: 200px;
}
.row {
height: 100%;
display: table-row;
}
.elem {
border: 1px solid black;
vertical-align: top;
display: table-cell;
height:100%;
background: blue;
}
.content {
height: 100%;
background: greenyellow;
}
<div class="tab">
<div class="row">
<div class="elem">
<div class="content">
Content
</div>
</div>
<div class="elem">
<div class="content">
Longer content that will need to wrap around eventually you know and don't you hate it when things don't end as you expect them octopus
</div>
</div>
</div>
</div>
Ответы
Ответ 1
К сожалению, влияние процентных значений для height
на элементы display: table-row
и display: table-cell
составляет undefined в соответствии с спецификацией:
CSS 2.1 не определяет, как вычисляется высота ячеек таблицы и строк таблицы, когда их высота задается с использованием процентных значений.
Таким образом, хотя браузер может заявить о полной поддержке макета таблицы, некоторые аспекты, такие как высоту процента, могут не выполняться последовательно во всех браузерах, потому что нет правильного поведения. Вы можете попытаться поднять вопрос в Microsoft Connect в надежде, что они изменят поведение, чтобы быть совместимым, но в то же время вам нужно будет найти другое обходное решение (и даже тогда вы не можете гарантировать, что поведение останется совместимым, даже в другие браузеры).
Что еще хуже, я только что протестировал, и это затрагивает все версии IE до 11, включая 11, что означает, что здесь будет не хватать IE-специфического взлома. Если вам нужно использовать макет таблицы CSS, о чем свидетельствует тот факт, что вам необходимо поддерживать IE8, тогда обходное решение с чистым CSS, вероятно, не выполнимо.
Ответ 2
Для Internet Explorer 8-10 table-cells
с height: 100%;
необходимо обернуть table-row
с помощью height: 100%;
.
Html для IE должен выглядеть следующим образом:
table > table-row > table-cell
В то время как другие браузеры будут корректно работать с
table > table-row
or
table > table-cell
[edit] Я снова просмотрел вопрос и заметил, что вы хотите установить 100% высоту не для ячеек таблицы, а для содержимого внутри нее.
решение 1. Таким образом, для высоты содержимого Internet Explorer связан с ближайшим элементом с высотой, установленной в абсолютных единицах, например пикселями, em, если вы хотите использовать% высоты, вам также может понадобиться чтобы установить высоту 100% для всех родительских элементов, это будет html и body.
рабочий пример
решение 2: просто добавьте
.content {
padding-bottom: 9999px;
margin-bottom: -9999px;
}
.elem {
overflow: hidden;
}
Вам не нужно устанавливать высоту в любом из родительских элементов в этом случае.
рабочий пример.
Надеюсь, что это поможет.