/* I have a grid inside another grid. The parent grid is set as follows: */
.container {
display: grid;
height: 100vh;
grid-template-columns: 2.409fr 2.409fr 1fr;
grid-template-rows: 1.5fr 5.5fr 5.5fr 1fr;
grid-template-areas:
"header header sidePanel"
"pageContent pageContent sidePanel"
"pageContent pageContent sidePanel"
"footer footer sidePanel";
}
/* the pageContent class contains another 2x2 grid, with three elements: */
.content {
grid-area: pageContent;
background: #d123;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
grid-template-areas:
"content-1 content-2"
"content-1 content-3";
}
.header {
grid-area: header;
}
.footer {
grid-area: footer;
}
.sidePanel {
grid-area: sidePanel;
}
.content {
grid-area: pageContent;
}
.content-1 {
grid-area: content-1;
}
.content-2 {
grid-area: content-2;
}
.content-3 {
grid-area: content-3;
}
<!DOCTYPE html>
<html lang = "en" dir = "ltr">
<head>
<meta charset = "utf-8">
<title></title>
<link rel = "stylesheet" href = "style.css">
</head>
<body>
<div class = "container">
<div class = "header">My Header</div>
<div class = "sidePanel">My sidePanel</div>
<div class = "content">
<div class = "content-1">
<span class = "title">Main Article</span>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum rem ratione dolorum ducimus quaerat officiis voluptates obcaecati ab illo sequi, blanditiis vel dolore possimus labore asperiores architecto quia nobis accusantium beatae doloremque
eveniet saepe excepturi laborum exercitationem delectus! Dolor, natus perferendis deleniti sequi veniam. In nemo mollitia dolor ipsam. Ipsa illum delectus eveniet. Explicabo perspiciatis eum distinctio vel quo iure, deleniti tempora dolorem
facilis iste? Reprehenderit maxime neque porro optio, animi praesentium laboriosam recusandae! Ex nesciunt maxime dicta quo hic placeat laboriosam possimus totam, ab velit iure quisquam assumenda odit adipisci, eos voluptatum at qui sint aperiam
blanditiis quos. Quos ratione, molestiae possimus repellendus eveniet et temporibus alias sunt perferendis quod odio, quis tenetur natus obcaecati! Doloremque omnis numquam quia.</p>
</div>
<div class = "content-2">
Content 2
</div>
<div class = "content-3">
Content 3
</div>
</div>
<div class = "footer">My Footer</div>
</div>
</body>
</html>
Моя самая большая трудность - размещение текста. Если я помещаю текст, например, в контент-1 и изменяю размер страницы по высоте, текст перекрывается за нижним колонтитулом, выходит за его сетку и даже сетку контейнера. Есть ли способ подогнать текст к его «области сетки» и соответствующим образом изменить его размер?
@tacoshy Я отредактировал вопрос. Пытался прилепить вопрос к фрагментам кода.
Ваша проблема в том, что вы устанавливаете «фиксированную» высоту для своих строк. Когда ты говоришь:
grid-template-rows: 1.5fr 5.5fr 5.5fr 1fr;
это означает, что как только доступная высота будет установлена, ваша сетка будет иметь определенную высоту и не будет изменять размер в соответствии с текстом.
Мое предложение состояло бы в том, чтобы просто изменить эту строку. Например, вы можете просто указать фиксированную высоту для верхнего и нижнего колонтитула:
grid-template-rows: 100px auto auto 200px;
есть много причин использовать фиксированную высоту. Особенно, если вы хотите подать в суд на приложения или в сочетании с 100vh, как это делает OP. Однако в этом случае вам нужно добавить правило переполнения, чтобы определенные поля могли прокручивать свое содержимое. Итак, вы видите, что фиксированная высота не является проблемой, и нарушение дизайна, созданного для 100vh, не может рассматриваться как решение.
вам просто нужно добавить правило переполнения. Я только что добавил .content-1 { overflow-y: auto; }
к вашему коду, и теперь вы получите полосу прокрутки, если текст выше высоты блока.
body {
margin: 0;
}
.container {
box-sizing: border-box;
display: grid;
height: 100vh;
grid-template-columns: 2.409fr 2.409fr 1fr;
grid-template-rows: 1.5fr 5.5fr 5.5fr 1fr;
grid-template-areas:
"header header sidePanel"
"pageContent pageContent sidePanel"
"pageContent pageContent sidePanel"
"footer footer sidePanel";
}
.content {
grid-area: pageContent;
background: #d123;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
grid-template-areas:
"content-1 content-2"
"content-1 content-3";
}
.header {
grid-area: header;
}
.footer {
grid-area: footer;
}
.sidePanel {
grid-area: sidePanel;
}
.content {
grid-area: pageContent;
}
.content-1 {
grid-area: content-1;
}
.content-2 {
grid-area: content-2;
}
.content-3 {
grid-area: content-3;
}
.content-1,
.content-2,
.content-3 {
overflow-y: auto;
}
<!DOCTYPE html>
<html lang = "en" dir = "ltr">
<head>
<meta charset = "utf-8">
<title></title>
<link rel = "stylesheet" href = "style.css">
</head>
<body>
<div class = "container">
<div class = "header">My Header</div>
<div class = "sidePanel">My sidePanel</div>
<div class = "content">
<div class = "content-1">
<span class = "title">Main Article</span>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum rem ratione dolorum ducimus quaerat officiis voluptates obcaecati ab illo sequi, blanditiis vel dolore possimus labore asperiores architecto quia nobis accusantium beatae doloremque
eveniet saepe excepturi laborum exercitationem delectus! Dolor, natus perferendis deleniti sequi veniam. In nemo mollitia dolor ipsam. Ipsa illum delectus eveniet. Explicabo perspiciatis eum distinctio vel quo iure, deleniti tempora dolorem
facilis iste? Reprehenderit maxime neque porro optio, animi praesentium laboriosam recusandae! Ex nesciunt maxime dicta quo hic placeat laboriosam possimus totam, ab velit iure quisquam assumenda odit adipisci, eos voluptatum at qui sint aperiam
blanditiis quos. Quos ratione, molestiae possimus repellendus eveniet et temporibus alias sunt perferendis quod odio, quis tenetur natus obcaecati! Doloremque omnis numquam quia.</p>
</div>
<div class = "content-2">
Content 2
</div>
<div class = "content-3">
Content 3
</div>
</div>
<div class = "footer">My Footer</div>
</div>
</body>
</html>
без HTML его трудно воспроизвести. Однако самый простой способ исправить это — использовать правило переполнения.