Ответ 1
Проблема, похоже, связана с тем, что вы комбинируете свойства height
и flex-basis
в одном блоке объявлений. Кажется, это создает конфликт. В моем ответе ниже я удалил высоты и использовал flex-basis
. Вы также заметите пару других настроек.
Изменение:
(1)
<div class="green-border"
style="flex: 1 1 auto; display: flex; flex-direction: row; width: 100%; height: 100%;" >
К
<div class="green-border"
style="flex: 1 1 100%; display: flex; flex-direction: row; width: 100%;" >
примечания: удалено height
; вместо этого используется flex-basis
;
(2)
<div style="flex: 1 1 auto; width: 100%; height: 100%;">
К
<div style="flex: 1 1 100%; width: 100%; display: flex;">
примечания: удалено height
; вместо этого использовался flex-basis
; установленный вложенный гибкий контейнер;
(3)
<div style="background-color: #ff6500; width: 100%; height: 100%;">center</div>
К
<div style="background-color: #ff6500; width: 100%; flex: 1 1 100%;">center</div>
примечания: удалено height
; вместо этого использовался flex-basis
; добавлено свойство flex
;
Наконец, синяя рамка не показывалась из-за опечатки.
(4)
clsas="blue-border"
К
class="blue-border"
С настройками выше, макет отобразится в Chrome следующим образом:
Все ящики лежат внутри их контейнеров.
Применение высоты 100% к вложенным, негибким элементам
В большинстве случаев при использовании процентных высот для дочерних элементов также должна быть указана процентная высота для родительского элемента и всех элементов-предков, вплоть до корневого элемента.
html, body { height: 100%; }
Я объяснил причину этого здесь:
Но внимательно посмотрите на спецификация показывает исключение:
Процент рассчитывается по отношению к высоте сгенерированный блок, содержащий блок. Если высота содержащего блок явно не указан (т.е. зависит от содержимого высота), и этот элемент не является абсолютно позиционированным, значение вычисляет "авто".
Обратите внимание на часть:... и элемент не совсем расположен.
Следовательно, попробуйте это в поле "center":
Изменение:
(5)
<div style="background-color: #ff6500; width: 100%; flex: 1 1 100%;">center</div>
К
<div style="background-color: #ff6500; width: 100%; flex: 1 1 100%; position: relative;">
<div style="border: 5px solid yellow; position: absolute; height: 100%; width: 100%;">
center</div>
</div>
Примечания:
- добавлен
position: relative
, чтобы установить ближайшего позиционного предка для абсолютного позиционирования - создан новый, вложенный, негибкий
div
контейнер - применяется абсолютное позиционирование к новому
div
с помощьюheight: 100%
.
При абсолютном позиционировании вам не нужно применять процентные высоты к родительским контейнерам.