Цель состоит в том, чтобы вставить боковые поля для более широких экранов, сохраняя при этом весь заголовок по всей ширине.
![side margins through dead DIVs](https://i.stack.imgur.com/sDxQQ.png)
Обычно мы пишем
.inner {
margin: 0 5%;
}
, чтобы получить такие поля, но оказывается, что HTML-сетки настолько гибки, что делают возможными боковые поля через DIVs с мертвой сеткой.
Но каким-то образом использование мертвых DIV кажется не совсем правильным,Есть ли способ получить боковые поля в сетке. Я вижу, как это можно сделать с помощью смеси flex
и grid
. Здесь мне интересно, можно ли это сделать только с помощью сеток.
body {
height: 100vh; margin: 0; display: flex;
}
.outer{
margin: 5px; border: 5px; padding: 5px;
display: flex;
flex-grow: 1;
}
.inner {
flex-grow: 1;
margin: 5px; border: 5px; padding: 5px; grid-gap: 5px;
display: grid;
grid-template-rows: 100px 5fr 100px;
grid-template-columns: 1fr;
grid-template-areas: "header" "content" "side";
}
@media screen and (min-width: 600px) {
.inner {
grid-template-rows: 100px 6fr;
grid-template-columns: 5fr 100px;
grid-template-areas:
"header header"
"content side";
}
}
@media screen and (min-width: 800px) {
.inner {
grid-template-rows: 100px 6fr;
grid-template-columns: 1fr 5fr 100px 1fr;
grid-template-areas:
"header header header header"
"leftmargin content side rightmargin";
}
}
.box {
padding: 10px; margin: 5px;
border: 5px solid #444;
background-color: #eee;
font-size: 150%;
position: relative;
}
.header { grid-area: header; }
.content { grid-area: content; }
.side { grid-area: side; }
.leftmargin { grid-area: leftmargin; }
.rightmargin { grid-area: rightmargin; }
<div class="outer">
<div class="inner">
<div class="box header">Header</div>
<div class="box content">Content</div>
<div class="box side">Side</div>
</div>
</div>