Сетка и шкала отступов: как расставлять расстояния на сайте
Шкала отступов на основе 4 px, карточка на глаз и по шкале, закон близости, сетка на 12, 8 и 4 колонки и ритм страницы — с живыми примерами.
Коротко
Шкала отступов — короткий набор расстояний от 4 до 96 px, из которого берутся все поля, отступы и промежутки сайта. Сетка — система колонок, промежутков и полей, по которой блоки встают на странице: обычно 12 колонок на десктопе, 8 на планшете и 4 на телефоне. Вместе они превращают вёрстку из череды догадок в несколько правил: маленькие расстояния внутри группы, большие — между группами, блоки — по колонкам. Страница выглядит спокойной и дорогой, элементы выравниваются между секциями, а новые страницы собираются быстрее, потому что никто не подбирает расстояния на глаз.
Шкала отступов: девять ступеней на основе 4 px
Каждая полоса — в настоящем размере. Мелкие ступени отличаются на 4 px, крупные растут быстрее — ровно так, как глаз замечает разницу.
- --space-1 4 px
- --space-2 8 px
- --space-3 12 px
- --space-4 16 px
- --space-5 24 px
- --space-6 32 px
- --space-7 48 px
- --space-8 64 px
- --space-9 96 px
Почему 4 и 8: эти числа хорошо делятся, попадают в целые пиксели на любом экране и совпадают с размерами большинства значков и шрифтов. Точная основа важна меньше, чем сам факт, что она есть, а у ступеней есть имена: дизайнер и разработчик говорят «space-5», а не «где-то 25 пикселей».
Карточка на глаз и по шкале
Одна и та же карточка. Справа подсвечены поля и промежутки — все они ступени одной шкалы.
Дубовый стол
Массив дуба, масло с воском, 160 × 90 см
Дубовый стол
8Массив дуба, масло с воском, 160 × 90 см
24Отступы группируют: закон близости
Элементы, которые стоят ближе друг к другу, читаются как одна группа. Одинаковые отступы везде дают список без структуры.
Доставка
По городу за 3 дня
Сборка
В день доставки
Гарантия
5 лет на каркас
Доставка
По городу за 3 дня
Сборка
В день доставки
Гарантия
5 лет на каркас
Правило, которое работает везде: расстояние внутри группы меньше расстояния между группами — минимум вдвое. Заголовок ближе к своему тексту, чем к предыдущему блоку; подпись ближе к своему полю, чем к следующему.
Модульная сетка: 12, 8 и 4 колонки
Переключите экран: колонки показаны поверх макета, а блоки перестраиваются по сетке каждого размера.
колонка промежуток 24 px поле страницы
Двенадцать колонок делятся на половины, трети, четверти и шестые — поэтому они стандарт для десктопа. На планшете хватает восьми, на телефоне — четырёх: содержимое обычно занимает всю ширину, а сетка держит поля и выравнивание.
Словарь сетки
Семь слов, которых достаточно, чтобы договориться о сетке между дизайном и кодом.
| Термин | Что это | Типичное значение |
|---|---|---|
| Колонка | вертикальная полоса, на которую встаёт содержимое | 12 / 8 / 4 |
| Промежуток | расстояние между колонками | 16–24 px |
| Поле | расстояние от края экрана | 16 px на телефоне, от 48 на десктопе |
| Предельная ширина | до какой ширины растёт страница | 1200–1440 px |
| Точка перелома | ширина, на которой меняется сетка | 768 и 1024 px |
| Охват | сколько колонок занимает блок | span 4, span 7, 1 / -1 |
| Расстояние между секциями | воздух между крупными блоками страницы | 48 px на телефоне, 96 на десктопе |
Ритм страницы: воздух между секциями
Большие расстояния между секциями и меньшие внутри них — главный рычаг дорогого вида.
Отступы и сетка в коде: 2 примера
Шкала как CSS-переменные и сетка, которая меняет число колонок вместе с экраном.
Шкала отступов
Имена — по ступеням, комментарии — по ролям: шкала читается с одного взгляда.
/* Шкала отступов на основе 4px: любое поле, отступ и промежуток — одна из ступеней */
:root {
--space-1: 0.25rem; /* 4px — значок и его подпись */
--space-2: 0.5rem; /* 8px — внутри группы */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px — внутри карточки */
--space-5: 1.5rem; /* 24px — поля карточки, промежуток сетки */
--space-6: 2rem; /* 32px — между группами */
--space-7: 3rem; /* 48px — между секциями на телефоне */
--space-8: 4rem; /* 64px */
--space-9: 6rem; /* 96px — между секциями на десктопе */
}
.card { padding: var(--space-5); display: grid; gap: var(--space-2); }
.section + .section { margin-top: var(--space-7); }
@media (min-width: 64em) { .section + .section { margin-top: var(--space-9); } }
Сетка
Одно правило меняет число колонок, промежуток и поля на каждой точке перелома.
/* Сетка: 4 колонки на телефоне, 8 на планшете и 12 на десктопе */
.page {
--columns: 4;
--gutter: var(--space-4);
display: grid;
grid-template-columns: repeat(var(--columns), minmax(0, 1fr));
column-gap: var(--gutter);
padding-inline: var(--space-4);
max-width: 80rem;
margin-inline: auto;
}
@media (min-width: 48em) { .page { --columns: 8; --gutter: var(--space-5); padding-inline: var(--space-6); } }
@media (min-width: 64em) { .page { --columns: 12; padding-inline: var(--space-7); } }
.hero { grid-column: 1 / -1; }
.text { grid-column: 1 / -1; }
@media (min-width: 64em) { .text { grid-column: span 7; } }
6 правил отступов и сетки
-
01
Только ступени шкалы
Расстояние, которого нет в шкале, — повод проверить макет.
-
02
Внутри меньше, чем между
Промежуток внутри группы — не больше половины промежутка между группами.
-
03
gap вместо внешних отступов
Расстояния задаёт родитель; дочерние элементы не расталкивают друг друга.
-
04
Блоки — по колонкам
Края текста, фото и карточек попадают на линии сетки.
-
05
Воздух растёт с экраном
48 px между секциями на телефоне, 96 на десктопе — пропорция сохраняется.
-
06
Одни имена везде
У шкалы в макете и в коде одинаковые имена ступеней.
Частые ошибки с отступами и сеткой
-
Одинаковые отступы везде
Страница теряет группы и читается как один длинный список.
-
Расстояния вроде 13 и 17
Близкие значения выглядят ошибкой и ломают выравнивание между блоками.
-
Слишком мало воздуха
Слипшиеся секции делают дешёвым даже хороший дизайн.
-
Десктопная сетка на телефоне
Двенадцать колонок на 375 px дают колонки уже одного слова.
-
Схлопывающиеся отступы
Вертикальные отступы соседей сливаются; gap у родителя ведёт себя предсказуемо.
-
Сетка только в макете
Если код её не повторяет, выравнивание исчезает при первой правке.
Вопросы об отступах и сетке
Что такое шкала отступов?
Короткий набор расстояний, из которого берутся все поля, отступы и промежутки сайта.
Основа 4 px или 8 px?
8 px проще; 4 px добавляет мелкие ступени для плотных интерфейсов. Работают обе, если команда их держится.
Сколько колонок нужно сайту?
Обычно 12 на десктопе, 8 на планшете и 4 на телефоне.
Что такое промежуток (gutter)?
Расстояние между колонками; в CSS его задают через column-gap.
Сколько воздуха между секциями?
Около 96 px на десктопе и 48 px на телефоне — и всегда больше, чем внутри секций.
Grid или flexbox?
Grid — для раскладки страницы и карточек, flexbox — для ряда элементов внутри компонента.
Форма
Вёрстка
по системе
Проектирую и верстаю на шкале отступов и сетке, которые живут и в макете, и в коде, — страницы остаются цельными, сколько бы их ни стало. Расскажите о проекте — отвечу в течение рабочего дня.