Это сообщенная ошибка веб-набора (chrome / safari), дети родителей с минимальной высотой не могут наследовать свойство высоты: https://bugs.webkit.org/show_bug.cgi?id=26559
Очевидно, что Firefox тоже затронут (в данный момент не могу протестировать в IE)
Возможное решение:
- добавить позицию: относительно #containment
- позиция добавления: абсолютная к # сдерживающая тень-левая
Ошибка не показывает, когда внутренний элемент имеет абсолютное позиционирование.
Смотрите http://jsfiddle.net/xrebB/
Изменить 10 апреля 2014 г.
Поскольку в настоящее время я работаю над проектом, для которого мне действительно нужны родительские контейнеры min-height
и дочерние элементы, наследующие высоту контейнера, я провел еще несколько исследований.
Первое: я больше не уверен, является ли текущее поведение браузера ошибкой. Спецификации CSS2.1 говорят:
Процент рассчитывается относительно высоты содержащего блока сгенерированного блока. Если высота содержащего блока не указана явно (то есть зависит от высоты содержимого), и этот элемент не является абсолютно позиционированным, значение вычисляется как 'auto'.
Если я добавлю минимальную высоту в свой контейнер, я не буду явно указывать его высоту - поэтому мой элемент должен получить auto
высоту. И это именно то, что Webkit - и все другие браузеры - делают.
Во-вторых, я нашел обходной путь:
Если я установлю свой элемент контейнера display:table
с height:inherit
ним, он будет действовать точно так же, как если бы я дал ему min-height
100%. И - что более важно - если я установлю дочерний элемент, display:table-cell
он будет отлично наследовать высоту элемента контейнера - будь то 100% или более.
Полный CSS:
html, body {
height: 100%;
margin: 0;
}
#container {
background: green;
display: table;
height: inherit;
width: 100%;
}
#content {
background: red;
display: table-cell;
}
Разметка:
<div id="container">
<div id="content">
<p>content</p>
</div>
</div>
См. Http://jsfiddle.net/xrebB/54/ .
display:flex
иflex-direction:column
и дать ребенкуflex:1
.