#css #css3 #css_grid #grid_layout
Как расположить колонки разной высоты друг под другом, при помощи Grid? Как показано на изображении. Тут пример кода: .gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 30px; } .gallery__grid-item { background: #000; } .gallery__grid-item:nth-child(even) { height: 150px; } .gallery__grid-item:nth-child(odd) { height: 120px; }
Ответы
Ответ 1
Как вы уже поняли CSS Grid позволяет генерировать разметку только с прямоугольными элементами. Поэтому чтобы у вас получилось, можно поиграться с position: relative и отрицательными margin. Пример (будет работать для любого кол-ва строк с элементами): .gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 15px; } .gallery__grid-item { background: orange; height: 120px; } .gallery__grid-item:nth-child(2) { height: 135px; margin-top: -15px; } .gallery__grid-item:nth-child(3n + 2) { position: relative; top: 15px; } .gallery__grid-item:nth-last-child(1), .gallery__grid-item:nth-last-child(3) { height: 135px; }Данный пример будет работать корректно, если у нас 3 столбца и кол-во элементов кратно трём.Ответ 2
Мне кажется, CSS Grid задумывался не для того что бы играться с марджинами, поставьте ваши ячейки в нужные строчки или используйте grid-areas. .gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 100px 40px 100px; grid-gap: 30px; } .gallery__grid-item { background: #000; } .gallery__grid-item:nth-child(1) { grid-row-start: 1; grid-row-end: 3; } .gallery__grid-item:nth-child(4) { grid-row-start: 2; grid-row-end: 4; } .gallery__grid-item:nth-child(5) { grid-row-start: 1; grid-row-end: 3; }Вариант с регионами .gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 100px 40px 100px; grid-gap: 30px; grid-template-areas: "a a a" "b b b" "c c c"; /* называем регионы */ } .gallery__grid-item { background: #000; } .gallery__grid-item:nth-child(1) { grid-area: 1 / auto / 3 / auto; /*grid-area: a / auto / b / auto; тоже самое что и выше*/ } .gallery__grid-item:nth-child(4) { grid-area: 2 / auto / 4 / auto; /*grid-area: b / auto / c / auto; тоже самое что и выше*/ } .gallery__grid-item:nth-child(5) { grid-area: 1 / auto / 3 / auto; /*grid-area: a / auto / b / auto; тоже самое что и выше*/ }Ответ 3
Вы можете также сделать это с помощью очень маленьких строк через свойство grid-auto-rows, задавая каждому элементу нужный row span через свойство griw-row. Результат: .gallery__grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 5px; grid-auto-flow: row dense; } .gallery__grid-item { background: orange; grid-row: span 24; margin-bottom: 15px; margin-left: 7.5px; margin-right: 7.5px; } .gallery__grid-item:nth-child(2) { grid-row: span 27; } .gallery__grid-item:nth-last-child(2), .gallery__grid-item:nth-last-child(3) { margin-bottom: 0; }К сожаленью, в данном способе видны два явных минуса: Из-за смещения, пятый и шестой, восьмой и девятый и т.д. элементы поменялись местами. Из-за этого пришлось немного менять вёрстку. Приходится использовать margin вместо grid-gaps для задания промежутка между ячейками.123456789
Комментариев нет:
Отправить комментарий