Высота 100% на дочернем столбце flexbox [дубликат]
этот вопрос уже есть ответ здесь:
у меня возникли проблемы с колонкой flexbox в том, что дети элемента flex'D не отвечают на height в процентах. Я только проверил это в Chrome, и из того, что я понимаю, это проблема только для Chrome. Вот мой пример:
HTML
<div class='flexbox'>
<div class='flex'>
<div class='flex-child'></div>
</div>
<div class='static'></div>
</div>
CSS
.flexbox{
position:absolute;
background:black;
width:100%;
height:100%;
display: flex;
flex-direction:column;
}
.flex{
background:blue;
flex:1;
}
.flex-child{
background:red;
height:100%;
width:100%;
display:block;
}
.static{
background:green;
width:100%;
height:5rem;
}
Я так хочу красный .flex-child заполняет синий .flex. Почему бы и нет height:100% работы?
1 ответ:
TL; DR: Set
.flexдоdisplay:flex, и избавиться отheight:100%on.flex-child. вы можете увидеть измененный CodePen здесь.почему это работает:
узнал от этот же вопрос, что в соответствии с на основе спецификаций, в
align-self:stretchзначение (значение по умолчанию для гибкого элемента б) изменения только использовать значение свойства кросс-размера элемента (в данном случаеheight). Проценты однако рассчитываются из указано значение свойства кросс-размера родителя, а не его используемого значения. Если вы когда-нибудь взломать ваш инспектор и посмотретьheight:100%в разделе "стили", ноheight:1200pxв разделе "вычислено", то это показывает вам указано и используется значения соответственно.кажется, что Chrome следует спецификации на тройник в этом отношении. Это означает, что установка
height:100%on.flex-childозначает 100% от указанногоheightof.flex. Так как мы не указалиheighton.flex, Это означает, что мы захватываем 100% по умолчаниюheight, которая составляетauto. Видите, почему механизм компоновки запутывается?задание
.flexдоdisplay:flexудаленияheight:100%С.flex-child(Так что он не пытается установить 100%auto) составит.flex-childзаполнить все.flexкогда это не работает:
это не будет работать, если вы пытаетесь заполнить только несколько из
.flex, исх. пытаюсь установить.flex-childдоheight:90%, потому что сгибание ребенка означает, что он заполнит все доступное пространство. Я думал, что вы могли бы взломать его с абсолютным позиционированием, но это, похоже, тоже не работает. Вы можете взломать, добавив второго ребенка в.flexчто мы называем.spacer, а параметр.spacerдоflex:1и.flex-childдоflex:9(не забудьте указатьflex-direction:columnon.flexтоже). Хак, но только так я мог это исправить. здесь Сайт CodePen.надеюсь, нам не нужно продолжать полагаться на это, хотя и они просто изменят спецификацию, чтобы действовать больше, как ожидалось.