Первое, на что нужно обратить внимание, это то, что, когда вы используете display: grid
для элемента контейнера, его непосредственные дочерние элементы станут grid-items
, и к этим элементам будет применяться компоновка сетки, которую вы создадите.
Допустим, у нас есть следующее:
<div class="container">
<div class="child-1">
<div class="child-2"></div>
<div class="child-2"></div>
</div>
<div class="child-1"></div>
<div class="child-1"></div>
<div class="child-1"></div>
</div>
А это CSS:
.container{
display: grid;
}
Тогда только child-1
станут элементами сетки и смогут применять к ним свойства, подобные grid-area
; все остальное внутри .child-1
, например .child-2
, будет вести себя нормально, как будто нет Grid. Если вы также не укажете элемент .child-1
как сетку с display: grid
.
В вашем случае ваш элемент header
является прямым потомком элемента .container
, поэтому он является элементом сетки и может быть расположен в любом месте сетки, но элементы logo
и navi
являются потомками header
, поэтому компоновка сетки к ним не относится. Вам нужно будет либо убрать их из header
, чтобы написанные вами правила вступили в силу, либо создать другую сетку в заголовке и позволить ей использовать полную первую строку. Посмотрите этот пример и обратите внимание, как вложение элементов влияет на них.
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: minmax(50px, auto);
grid-template-areas: "logo navi navi";
margin-bottom: 20px;
border: 1px solid black;
}
.logo {
border: 1px solid red;
grid-area: logo;
}
.navi {
border: 1px solid blue;
grid-area: navi;
}
<div class="container">
<div class="logo">Logo</div>
<div class="navi">Nav</div>
</div>
<div class="container">
<header>
<div class="logo">Logo</div>
<div class="navi">Nav</div>
</header>
</div>