Вертикальная проблема рендеринга прокрутки в Flexbox в Firefox
Я хочу содержать гибкий элемент внутри родителя, чтобы он не разливался вне родителя. Только элемент flex должен иметь полосу прокрутки (при необходимости).
Мой стиль отлично работает в Chrome и IE11, но не в Firefox. Я подозреваю, что существует разница в интерпретации стиля flex-basis
, установленного на #wrapper
, но я не могу понять, почему Firefox делает это по-другому.
Здесь желаемый рендеринг, как показано в Chrome:
И вот что происходит в Firefox:
Я могу применить исправление "клейкой ленты", добавив #left { height: calc(100vh - 50px); }
, но я предпочел бы, если возможно, выявить фактическую несогласованность.
body, html, h1 {
padding: 0;
margin: 0;
}
header {
background-color: rgba(0, 255, 255, 0.2);
height: 50px;
}
#main {
height: 100vh;
background-color: rgba(0, 255, 255, 0.1);
display: flex;
flex-flow: column;
}
#wrapper {
display: flex;
flex-grow: 2;
flex-basis: 0%;
}
#left {
overflow-y: scroll;
background-color: rgba(0, 255, 255, 0.2);
width: 30%;
}
.box {
margin: 5px 0;
height: 50px;
width: 100%;
background-color: rgba(0, 0, 0, 0.2);
}
<div id="main">
<header>
<h1>Header</h1>
</header>
<div id="wrapper">
<div id="left">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
</div>
Ответы
Ответ 1
Это связано с flexbox спецификацией подразумеваемый минимальный алгоритм калибровки.
Это ошибка Firefox.
Добавление min-width: 0; min-height: 0
в #wrapper
похоже на трюк:
#wrapper {
display: flex;
flex-grow: 2;
flex-basis: 0%;
min-height: 0; /* NEW */
min-width: 0; /* NEW */
}
DEMO
Оригинальный ответ Ниже
<я > В настоящее время для #left
применяется overflow-y: scroll
.
Если вы также применяете overflow-y: scroll
к #wrapper
, вертикальная прокрутка запускается в Firefox.
Что касается того, почему Firefox интерпретирует код по-другому, чем Chrome, я не могу сказать. У двигателей рендеринга есть свои отличия. Недавно я обратился к еще одной проблеме интерпретации flexbox между IE11 и Chrome:
Дополнительная информация: