TL; DR: Есть ли что-то похожее table-layout: fixed
на CSS-сетки?
Я попытался создать календарь на год с большой сеткой 4x3 для месяцев и вложенными сетками 7x6 для дней.
Календарь должен заполнить страницу, поэтому контейнер годовой сетки получает ширину и высоту 100% каждый.
.year-grid {
width: 100%;
height: 100%;
display: grid;
grid-template: repeat(3, 1fr) / repeat(4, 1fr);
}
.month-grid {
display: grid;
grid-template: repeat(6, 1fr) / repeat(7, 1fr);
}
Вот рабочий пример: https://codepen.io/loilo/full/ryXLpO/
Для простоты, каждый месяц в этой ручке имеет 31 день и начинается в понедельник.
Я также выбрал смехотворно маленький размер шрифта, чтобы продемонстрировать проблему:
Элементы сетки (= дневные ячейки) довольно сжаты, поскольку на странице их несколько сотен. И как только метки чисел дня станут слишком большими (не стесняйтесь поиграть с размером шрифта на ручке с помощью кнопок в левом верхнем углу), сетка просто увеличится в размере и превысит размер тела страницы.
Есть ли способ предотвратить такое поведение?
Сначала я объявил, что моя годовая сетка имеет ширину и высоту 100%, поэтому, возможно, с этого и стоит начать, но я не смог найти какие-либо свойства CSS, связанные с сеткой, которые бы соответствовали этой потребности.
Отказ от ответственности: я знаю, что есть довольно простые способы стилизовать этот календарь без использования CSS Grid Layout. Однако этот вопрос больше касается общих знаний по теме, чем решения конкретного примера.
источник
Ответы:
По умолчанию элемент сетки не может быть меньше размера его содержимого.
Элементы сетки имеют начальный размер
min-width: auto
иmin-height: auto
.Вы можете переопределить это поведение, устанавливая элементы сетки в
min-width: 0
,min-height: 0
илиoverflow
с любым значением, кромеvisible
.Из спецификации:
Вот более подробное объяснение, охватывающее гибкие элементы, но оно также применимо и к элементам сетки:
В этом посте также рассматриваются потенциальные проблемы с вложенными контейнерами и известные различия рендеринга среди основных браузеров .
Чтобы исправить макет, внесите следующие изменения в свой код:
пересмотренный кодекс
1fr
противminmax(0, 1fr)
Решение выше работает на уровне элемента сетки. Для решения на уровне контейнера, см. Этот пост:
источник
min-width: 0;
не помогает. Я что-то упускаю?Предыдущий ответ довольно хорошо, но я также хотел бы отметить , что это фиксированный эквивалент макета для сетей, вам просто нужно написать
minmax(0, 1fr)
вместо того , чтобы1fr
как вашего размера трека.источник
minmax(0, 1fr)
работает, потому что1fr
это действительно сокращениеminmax(auto,1fr)
, что не является правильным значением для исходного вопроса.Существующие ответы решают большинство случаев. Однако я натолкнулся на случай, когда мне нужно было содержимое ячейки сетки
overflow: visible
. Я решил это с помощью абсолютного позиционирования внутри оболочки (не идеальный, но лучший из известных мне), вот так:https://codepen.io/bjnsn/pen/vYYVPZv
источник
проще будет установить максимальную ширину элемента сетки следующим образом:
источник