Проблема легко описывается, но может не иметь простого решения (в зависимости от ваших требований).
Проблема на самом деле ясна в самом заголовке:
Содержимое строки сетки Css с авторазмером и переполнением
Элементы авторазмера не могут переполняться. Они авто размера . Это означает, что элемент сжимается и расширяется в зависимости от размера его содержимого, при этом никогда не возникает необходимости переполнения.
Должно быть что-то, что устанавливает фиксированную длину контейнера. Граница, которая может пересекаться, вызывая условие переполнения.
С MDN : *
Чтобы overflow
имел эффект, контейнер уровня блока должен иметь либо установленную высоту (height
или max-height
), либо white-space
, установленную на nowrap
.
Высота строк недостаточна для переполнения:
grid-template-rows: min-content minmax(min-content, max-content) min-content
Но как-то так будет работать:
grid-template-rows: 10% 80% 10%
К сожалению, приведенный выше код работает только в Chrome. Чтобы макет также работал в Firefox и Edge, сделайте следующее:
grid-template-rows: 10% minmax(0, 80%) 10%
body {
display: block;
height: 100vh;
width: 100%;
background-color: white;
margin: 0;
}
.container {
max-height: 100%;
display: grid;
grid-template-areas: "header header" "side content" "footer footer";
grid-template-columns: 50px auto;
grid-template-rows: 10% minmax(0, 80%) 10%; /* adjustment */
}
.header {
grid-area: header;
background-color: rgba(255, 255, 0, 0.3);
}
.side {
grid-area: side;
background-color: rgba(0, 255, 0, 0.3);
}
.content {
grid-area: content;
background-color: rgba(0, 0, 255, 0.3);
}
.overflow {
overflow: auto;
}
.content-item {
height: 20px;
margin-bottom: 5px;
background-color: white;
}
.footer {
grid-area: footer;
background-color: rgba(255, 0, 255, 0.3);
}
<div class="container">
<div class="header">header</div>
<div class="side">side</div>
<div class="content">
<div class="container container__inner">
<div class="header header__inner">header</div>
<div class="side side__inner">side</div>
<div class="content content__inner overflow">
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
<div class="content-item"></div>
</div>
<div class="footer footer__inner">footer</div>
</div>
</div>
<div class="footer">footer</div>
</div>
По сути, вам нужно найти способ установить фиксированный предел высоты в строке переполнения, чтобы полоса прокрутки работала.
Для объяснения различий браузера, описанных выше, смотрите эти сообщения: