#html #css #html-table #css-grid
#HTML #css #html-таблица #css-grid
Вопрос:
Я хотел бы создать таблицу с использованием CSS grid, таблица имеет следующую (плохо нарисованную, но передающую сообщение) форму:
Я объясню. Допустим, размер ячейки заголовка равен 2x / 2y. Ячейка каждой строки заголовка равна x / 2y, а каждая ячейка столбца заголовка равна 2x / y. Внутренний размер ячейки таблицы (выделен красным цветом) равен x / y.
Все, кроме ячейки заголовка, является динамическим, например, я могу получить 7 строк и 3 столбца из данных.
Как мне сделать эту таблицу динамической?
Для столбца заголовка я написал:
grid-template-rows: repeat(auto-fill, 145px);
и для строк заголовка, которые я добавил:
grid-template-columns: repeat(auto-fill, 145px);
Но я все еще чего-то не хватает. Как я могу сделать эту таблицу динамической в соответствии с данными и в соответствии с ограничениями размера, которые я написал для каждой ячейки?
Комментарии:
1. ваш попытавшийся код был бы полезен.
2. Вы всегда устанавливаете для них ширину 145 пикселей. Вы также можете задать динамическую ширину следующим образом:
grid-template-columns: repeat(auto-fill, minmax(145px, 1fr))
3. CSS-Grid не является заменой таблиц. я предлагаю вам использовать правильный инструмент для работы.
4. Если вы хотите сделать таблицу динамической, вам нужно использовать таблицы, а не css grid
Ответ №1:
Хотя приведенное ниже не очень практично или полезно, я подумал, что попробую это из любопытства:
x
иy
в вашем вопросе были сохранены как переменные CSS,- используйте
grid-template-columns
аналогично тому, что вы сделали, но с добавлением ширины первого столбца, напримерgrid-template-columns: calc(var(--x) * 2) repeat(auto-fill, var(--x))
, - поместите первую строку, используя
grid-template-rows: calc(var(--y) * 2)
, - разместите свои строки под заголовком, используя неявные сетки — используйте
grid-auto-rows: var(--y)
.
Смотрите демонстрацию ниже:
:root {
--y: 75px;
--x: 75px;
}
.container {
display: grid;
grid-template-columns: calc(var(--x) * 2) repeat(auto-fill, var(--x));
grid-template-rows: calc(var(--y) * 2);
grid-auto-rows: var(--y);
}
.container > div {
border: 1px solid red;
}
<div class="container">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</div>