Я зіткнувся з дивною ситуацією з флексбокомде я хотів би мати вкладений гнучкий контейнер з іншим напрямком згинання, але чомусь контейнер займає висоту 0, внаслідок чого елементи перекриваються.
https://jsfiddle.net/4co25fau/
Фрагмент:
body, html, main {
height: 100%;
}
.flex {
display: flex;
}
.flex-row {
flex-direction: row
}
.flex-column {
flex-direction: column
}
.flex-grow {
flex-grow: 1;
}
.overflow-y-auto {
overflow-y: auto;
}
<main class="flex flex-column">
<div class="flex flex-row">
<h1>TEST</h1>
<h1>TEST2</h1>
</div>
<h2>SUBTITLE</h2>
<div class="flex-grow overflow-y-auto">
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
<div>content</div>
</div>
</main>
Це працює в Firefox, але не в Chrome. Чи є якісь обхідні шляхи, щоб цього уникнути?
Відповіді:
1 для відповіді № 1Ви можете просто скористатися скороченням flex:1;
щоб зробити його простим (і уникати різної поведінки від браузера до браузера), оскільки контейнер, мабуть, заповнює все, що залишилося.
https://jsfiddle.net/4co25fau/2/
Для безпеки я б заперечував мінімальну висоту основного контейнера, щоб уникнути переповнення, перекриття та зменшення до 0 деяких контейнерів.
@RahatAhmed написав: Щоб уточнити,
flex: 1
також встановлюєflex-basis: 100%
як за замовчуванням, що є конкретним правилом, яке виправляє проблему
0 для відповіді № 2
Якщо ви хочете, щоб він відповідав цілому екрану
height:100vh;
Вибачте, я б прокоментував, але мені не вистачає представника.
0 для відповіді № 3
Видалено main
від body, html {}
& додано overflow: hidden
до нього, потім додав height: 100%
до .flex
так само.