CSS Сетка предназначена для определения макетов сетки.
Il позволит вам определить столько макетов, сколько вы хотите, но вы не сможете переключаться между макетами, полагаясь только на на CSS сетках.
Вам придется обрабатывать это программно или с помощью других функций CSS (например, медиа-запросов, если вы хотите выбрать макет на основе ширины экрана).
Способ сделать это - определить макеты сетки с указанными c CSS классами в контейнере сетки и переключаться между классами, используя внешний скрипт (или условие, основанное на состоянии вашего приложения, если оно уже есть).
Демонстрация: https://jsbin.com/jolupoguni/1/edit?html, css, js, выход
JS:
const toggleLayout = () => {
var element = document.getElementById("grid");
if (element.classList.contains('grid--layout-1')) {
element.classList.remove('grid--layout-1');
element.classList.add('grid--layout-2');
} else {
element.classList.remove('grid--layout-2');
element.classList.add('grid--layout-1');
}
}
CSS:
.grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
}
.grid--layout-1 .block-a {
grid-column: span 12;
}
.grid--layout-1 .block-b {
grid-column: span 6;
}
.grid--layout-1 .block-c {
grid-column: span 6;
}
.grid--layout-2 .block-a {
grid-column: span 12;
}
.grid--layout-2 .block-b {
display: none
}
.grid--layout-2 .block-c {
grid-column: span 12;
}
HTML
<button onclick="toggleLayout()">Switch layout</button>
<div id="grid" class="grid grid--layout-1">
<div class="block block-a">Block A</div>
<div class="block block-b">Block B</div>
<div class="block block-c">Block C</div>
</div>
Для получения дополнительной информации о CSS сетках, курс Wes Bos 'CSS Grid - фантастический c ресурс https://cssgrid.io/