Chrome игнорирует гибкую основу в расположении столбцов
У меня возникли проблемы с тем, что Chrome обратит внимание на гибкую основу flex: 1 1 25%
в макете flex-direction: column
. Он отлично работает в макете row
.
Ниже представлен фрагмент ниже: желтые, синие и розовые полосы имеют гибкую основу 50px, 25% и 75%, как показано в обоих направлениях.
Если вы запустите его в Firefox (или IE11 или Edge), то столбец и строка разделите область как ожидалось:
Но если вы запустили его в Chrome (47) или в Safari (9.0.3), расположение столбцов слева, похоже, полностью игнорирует флеш-основу - высота баров, похоже, не имеет отношения к flex -базис:
Единственное различие между левым и правым - это flex-direction
.
.container {
width: 400px;
height: 200px;
display: flex;
background: #666;
position: relative;
}
.layout {
flex: 1 1 100%; /* within .container */
margin: 10px;
display: flex;
}
.row {
flex-direction: row;
}
.column {
flex-direction: column;
}
.exact {
flex: 1 1 50px;
background: #ffc;
}
.small {
flex: 1 1 25%;
background: #cff;
}
.large {
flex: 1 1 75%;
background: #fcf;
}
<div class="container">
<div class="layout column">
<div class="exact">50px</div>
<div class="small">25%</div>
<div class="large">75%</div>
</div>
<div class="layout row">
<div class="exact">50px</div>
<div class="small">25%</div>
<div class="large">75%</div>
</div>
</div>
Ответы
Ответ 1
Три вопроса для рассмотрения:
-
Сумма всех высот более 100%
В макете .column
у вас есть три элемента гибкости. Их высота 75% + 25% + 50px
. Это само по себе превышает применяемый height: 100%
. Это не вызывает переполнение, потому что у вас flex-shrink
установлено значение 1
.
-
Маргинальное пространство
Вы указали margin: 10px
для обеих макетов. Таким образом, есть дополнительные 20px высоты от верхнего и нижнего полей. В макете .column
это действительно вызывает переполнение в Chrome.
Отрегулируйте для этих дополнительных 20px, и переполнение прошло:
.column {
flex-direction: column;
height: calc(100% - 20px); /* new */
}
.container {
width: 400px;
height: 200px;
display: flex;
background: #666;
position: relative;
}
.layout {
flex: 1 1 100%; /* within .container */
margin: 10px;
display: flex;
}
.row {
flex-direction: row;
}
.column {
flex-direction: column;
height: calc(100% - 20px); /* NEW */
}
.exact {
flex: 1 1 50px;
background: #ffc;
}
.small {
flex: 1 1 25%;
background: #cff;
}
.large {
flex: 1 1 75%;
background: #fcf;
}
<div class="container">
<div class="layout column">
<div class="exact">50px</div>
<div class="small">25%</div>
<div class="large">75%</div>
</div>
<div class="layout row">
<div class="exact">50px</div>
<div class="small">25%</div>
<div class="large">75%</div>
</div>
</div>