CSS Grid Overlap

На сайте есть грид-контейнер 3х3 и два элемента в сетке — шапка сайта и блок с навигацией. Менеджеры хотят провести A/B-тест: нужно переместить навигацию в шапку сайта. Менять разметку нежелательно: это что-то сломает в стилях или гипотеза не подтвердится. Тогда придётся с болью возвращать всё в исходное состояние. Вы должны придумать другой способ наложить их друг на друга.

.header {
  grid-column: 1/4;
  grid-row: 1/2;
}

.nav {
  grid-column: 1/3;
  grid-row: 1/2;
} 

Pasted image 20221201194852.png

Значения grid-column и grid-row пересекаются, накладывая элементы друг на друга

Теперь шапка сайта перекрывает и блокирует навигацию. Исправить это позволяет свойство z-index — оно работает и в гридах. Чем больше значение z-index, тем «выше» располагается элемент:

.header {
  grid-column: 1/4;
  grid-row: 1/2;
}

.nav {
  grid-column: 1/3;
  grid-row: 1/2;
  z-index: 1;
} 

Осталось выровнять навигацию уже знакомым свойством align-self:

.header {
  grid-column: 1/4;
  grid-row: 1/2;
}

.nav {
  grid-column: 1/3;
  grid-row: 1/2;
  z-index: 1;
  align-self: end;
} 

Pasted image 20221201195033.png

Этот способ наложения — временное решение. Вёрстка начнёт ломаться, когда в блоках станет больше элементов или их размеры изменятся. Если гипотеза подтвердится, наложение придётся переделать. Но в бизнесе такие быстрые решения уместны.

#css-grid