Вот одно простое решение:
- Используйте свойство
grid-template-areas
для размещения элементов сетки. - Используйте пустой столбец с
1fr
, чтобы создать пустое пространство вmiddle. - Использование медиазапроса для переключения между макетами.
jsfiddle demo
.container {
display: grid;
grid-auto-columns: minmax(100px, 1fr);
/* OR, to allow the empty middle column to shrink below 100px:
grid-template-columns: repeat(3,minmax(100px,1fr)) 1fr repeat(3,minmax(100px,1fr));*/
grid-template-areas: " item1 item2 item3 . item4 item5 item6 ";
}
@media ( max-width: 600px ) {
.container {
grid-template-areas: " item4 item5 item6 "
" item1 item2 item3 ";
/* If you use the commented section above, add the following code here:
grid-template-columns: repeat(3,minmax(100px,1fr)); */
}
}
.item--1 { grid-area: item1; background-color: orangered; }
.item--2 { grid-area: item2; background-color: yellowgreen; }
.item--3 { grid-area: item3; background-color: blueviolet; }
.item--4 { grid-area: item4; background-color: palevioletred; }
.item--5 { grid-area: item5; background-color: royalblue; }
.item--6 { grid-area: item6; background-color: goldenrod; }
.item--7 { grid-area: item7; background-color: crimson; }
.item--8 { grid-area: item8; background-color: darkslategray; }
.item {
padding: 10px;
color: white;
font-family: sans-serif;
font-size: 30px;
}
<div class="container">
<div class="item item--1">A</div>
<div class="item item--2">B</div>
<div class="item item--3">C</div>
<div class="item item--4">D</div>
<div class="item item--5">E</div>
<div class="item item--6">F</div>
</div>