CSS Grid: можно ли применить цвет к пробелам сетки?
есть ли способ стилизовать больше, чем просто ширину линий сетки или разрывов сетки в модуле CSS grid? Я не могу найти ничего об этом в документации, однако можно было бы подумать, что это возможно, поскольку линии сетки имеют тенденцию окрашиваться во многих дизайнах. Если это невозможно, есть ли обходной путь?
4 ответов
к сожалению, в спецификации CSS Grid в настоящее время нет способа style grid-gap
. Я придумал решение, которое работает хорошо, хотя это включает только html и css: показывать линии сетки границ только между элементами
например: если у вас есть сетка квадратов 5x5, это единственный способ получить цветные линии сетки, чтобы заполнить сетку 25 элементами и применить границы к тем же элементам?
вы можете сделать это, но границы сетки не сворачиваются так же, как границы таблицы могут с border-collapse
свойство, и в отличие от зазоров сетки они будут применяться к периметру вашей сетки вместе с внутренними границами, что может быть нежелательно. Плюс, если у вас есть grid-gap
декларации, пробелы будут отделять ваши границы элемента сетки так же, как border-collapse: separate
С границы таблицы.
grid-gap
- это идиоматический подход для элементов сетки интервалов, но он не идеален, поскольку пробелы сетки - это просто: пустое пространство, а не физические поля. С этой целью единственный способ раскрасить эти пробелы-применить цвет фона к контейнеру сетки.
использовать решение выше я рекомендую использовать border
С псевдоклассами, потому что если у вас есть нерегулярное количество "ячеек таблицы", вы получите уродливую цветную ячейку в конце "таблицы".
Если вы хотите использовать границы между "ячейками таблицы", и у вас не всегда одинаковое количество ячеек, вы можете сделать что-то вроде этого (этот пример также будет работать с адаптируемых блоков):
.wrapper {
display: grid;
grid-template-columns: repeat(2, auto);
/* with flexbox:
display: flex;
flex-wrap: wrap;
*/
}
/* Add border bottom to all items */
.item {
padding: 10px;
border-bottom: 1px solid black;
/* with flexbox:
width: calc(50% - 21px);
*/
}
/* Remove border bottom from last item & from second last if its odd */
.item:last-child, .item:nth-last-child(2):nth-child(odd) {
border-bottom: none;
}
/* Add right border to every second item */
.item:nth-child(odd) {
border-right: 1px solid black;
}
<div class="wrapper">
<div class="item">BOX 1</div>
<div class="item">BOX 2</div>
<div class="item">BOX 3</div>
<div class="item">BOX 4</div>
<div class="item">BOX 5</div>
</div>
вы можете использовать границы вместо ручки или просто изменить цвет фона, если это работает.
.yourDiv {
border-right: 5px solid rgb(110, 0, 210);
border-top: 10px solid rbg(255, 255, 0);
}
надеюсь, что это помогает!