Вот что происходит:
Сначала давайте посмотрим пробелы (они не появляются во многих случаях):
![enter image description here](https://i.stack.imgur.com/oblFL.png)
.wrapper {
display: grid;
grid-auto-rows: minmax(auto, auto);
grid-template-areas: "hd hd ft" "sd . ft" "sd main ft" "sd . ft";
}
.header {
grid-area: hd;
}
.footer {
grid-area: ft;
}
.content {
grid-area: main;
}
.sidebar {
grid-area: sd;
}
* {
box-sizing: border-box;
}
.wrapper {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
max-width: 940px;
margin: 0 auto;
}
.wrapper > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
<div class="wrapper">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="content">Content</div>
<div class="footer">Footer</div>
</div>
Вы видите рендеринг
( неразрывных пробелов ) символов в коде HTML.
![enter image description here](https://i.stack.imgur.com/xWKOT.png)
Как символы пробела, они невидимы, что затрудняет их обнаружение.Но как только вы удалите их, макет будет работать как положено.
![enter image description here](https://i.stack.imgur.com/qPqOo.png)
.wrapper {
display: grid;
grid-auto-rows: minmax(auto, auto);
grid-template-areas: "hd hd ft" "sd . ft" "sd main ft" "sd . ft";
}
.header {
grid-area: hd;
}
.footer {
grid-area: ft;
}
.content {
grid-area: main;
}
.sidebar {
grid-area: sd;
}
* {
box-sizing: border-box;
}
.wrapper {
border: 2px solid #f76707;
border-radius: 5px;
background-color: #fff4e6;
max-width: 940px;
margin: 0 auto;
}
.wrapper > div {
border: 2px solid #ffa94d;
border-radius: 5px;
background-color: #ffd8a8;
padding: 1em;
color: #d9480f;
}
<div class="wrapper">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="content">Content</div>
<div class="footer">Footer</div>
</div>
И, наконец, почему во многих случаях отображается неверный макет?
Когда вы копируете HTML-код какна веб-странице (например, скопируйте код непосредственно из вопроса), символы
, являющиеся HTML-кодом, уже отрисованы.Таким образом, копируется только простой (складной) пробел, и макет будет работать нормально.
Кроме того, если вы копируете HTML-код из некоторых редакторов кода в некоторых браузерах (например, редактор фрагмента стека в Edge)), символы
также не копируются.Мне нужно было скопировать код из редактора jsFiddle в Chrome, чтобы наконец увидеть проблему.
Кроме того, если вы нажмете кнопку «Tidy» в редакторе, используя оригинальный код, пробелы будут добавлены между строками.