В примерах, которые были рассмотрены в предыдущих статьях, ширина столбцов и длина строк устанавливались на основании фиксированных значений, которые передаются свойствам grid-template-columns и grid-template-rows. Для определения размеров мы можем использовать самые различные единицы измерения, которые нам доступны в CSS (px, em, rem, pt, %), например:
Кроме точных размеров можно задавать автоматические размеры с помощью слова auto. В этом случае ширина столбцов и высота строк вычисляются исходя из размеров содержимого:
Здесь задано три строки и ти столбца. Первый столбец имеет фиксированную ширину в 8em, а второй и третий столбцы - автоматическую ширину. И также первая и третья строки имеют автоматическую высоту, а вторая строка - фиксированную.
Для установки пропорциональных размеров применяется специальная единица измерения fr. Она представляет собой часть пространства (fraction), которое отводится для данного столбца или строки. Значение fr еще называют flex-фактором (flex factor).
Вычисление пропорциональных размеров производится по формуле:
1
flex-фактор * доступное_пространство / сумма всех flex-факторов
При этом под доступным пространством понимается все пространство grid-контейнера за исключением фиксированных значений строк и столбцов.
В данном случае имеются три столбца с шириной 2fr, 8em, 1fr. Поэтому ширина второго столбца будет вычисляться по формуле:
1
2 * (ширина_грида - 8em) / (2 + 1)
Ширина третьего столбца будет вычисляться по формуле:
1
1 * (ширина_грида - 8em) / (2 + 1)
И если первый столбец фиксированный с шириной 8em, то ширина второго и третьего столбца будут зависеть от ширины контейнера и будут автоматически масштабироваться при ее изменении.