Кроме появления новых свойств CSS для сетки, появилась и новая единица измерения fr (fractional unit). Чтобы лучше представить её назначение, начнём с базового примера.
Если мы будем уменьшать размеры окна браузера, то увидим, что содержимое не реагирует на изменения (кроме второго столбца, так как мы задали auto). Выглядит неуклюже. Размеры ячеек заданы в пикселях и они не меняются. Чтобы избежать этой проблемы, была придумана новая единица измерения fr.
Заменим пиксели на fr
.container {
background-color: gray;
display: grid;
grid-template-columns: 300px 300px 300px;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 10px;
}
Теперь мы видим, что блоки равномерно разместились в сетке. А при изменении размеров окна они сжимаются. При этом величина промежутков между ячейками grid-gap сохраняется.
Как вы поняли, новая единица измерения работает как пропорция. Напоминает рецепт составления коктейля: 100 г сока, 100 г виски, 200 г молока (какой ужас).
Мы можем сочетать новые единицы измерения с другими. Например, так.
.container3 {
...
grid-template-columns: 2fr 1fr 300px;
...
}
Обратите внимание, что мы указали ширину только для двух столбцов. Остальные ряды останутся со своими фиксированными значениями.
Теперь при изменении размеров ячейки первых двух столбцов будут сжиматься в пропорции 2 к 1, а третий столбец будет оставаться неизменным в 300 пикселей.
Такое поведение может быть полезным, когда нужно иметь ячейки с неизменяемыми размерами.
Существуют укороченные формы записи. Если ширина всех столбцов совпадает, то можно использовать запись.
grid-template-columns: repeat(3, 1fr);
Соответственно, запись repeat(9, 1fr) выведет все девять блоков равномерно в один ряд.
Подобный синтаксис справедлив и для grid-template-rows:
grid-template-rows: repeat(3, 1fr);
Можно объединить оба свойства в один.
grid-template: repeat(2, 1fr) / repeat(3, 1fr);
Можете поиграться с другими вариантами.
grid-template-rows: repeat(2, 1fr 2fr);
grid-template-rows: 100px repeat(2, 1fr 2fr);
Можно задать минимальный и максимальный размер колонки через minmax().
grid-template-columns: minmax(200px, 300px) 1fr 1fr;
Измените размеры браузера, чтобы увидеть поведение.
Можно подстраиваться автоматически под размер содержимого ячейки.
grid-auto-row: minmax(100px, auto);
Первая ячейка стал больше из-за дополнительного текста и остальные ячейки ряда автоматически увеличили свой размер.
Вернуться в раздел о CSS Grid Layout