К содержанию

Навигация

Шкалы и базовая единица

Все размеры Framework берутся из шкал, а не задаются произвольными числами. Здесь — базовая единица, шкала примитивов и соразмерные ступени.

Величины берутся из шкал

Шкалы — это общие ряды допустимых величин. Они дают интерфейсу ритм и позволяют менять размеры централизованно, одной переменной.

Зачем шкалы

Интерфейс читается спокойно, если в нём мало разных величин и между ними есть порядок. Шкалы дают три вещи:

  • Ритм. Отступы, высоты и кегли стоят на одной сетке и не спорят друг с другом.
  • Централизованное изменение. Проект меняет одну переменную, а не сотни чисел в CSS.
  • Адаптивность без лишних правил. Значение роли само меняется между мобильным и настольным режимом; компоненту не нужно своё правило для ширины экрана (см. Адаптивные размеры).

Три уровня величин

Уровень Что это Примеры Когда выбирать
Примитивы Неизменные ступени базовой шкалы в rem --sf-b6, --sf-c2, --sf-px Нужен точный системный размер или основа для своего токена
Адаптивные шкалы Соразмерные ступени, у которых есть мобильное и настольное значение --sf-space-1, --sf-text--size-3, --sf-radius-2 Ритм интерфейса и текста
Роли Величины с назначением --sf-content--space-block, --sf-heading-2--size, --sf-radius--surface, --sf-ui-1--control-height, --sf-focus--width Почти всегда в прикладном коде

Роль ссылается на ступень шкалы, ступень — на примитив. Если проект перенастраивает шкалу, роли меняются вместе с ней.

Порядок выбора

В CSS проекта величину выбирают в таком порядке:

  1. готовая утилита или токен-роль нужного назначения;
  2. ступень адаптивной шкалы;
  3. примитив --sf-a0…--sf-i9, если нужен точный размер;
  4. собственный токен проекта, который ссылается на системный.

Правила:

  • Нельзя писать голые числа в прикладном CSS.
  • Пиксели в справочных таблицах — только эквивалент для понимания, а не рекомендация.
  • Исключение — геометрия, которую измеряет браузер: координаты всплывающего окна, положение при перетаскивании, ширина полосы прокрутки. Это не выбор дизайна, а замер, и он остаётся в пикселях.

Виды значений

У каждой величины есть вид значения. Как значения записываются в классе, описано в Значения.

Вид Примеры Откуда
Размерные 0, px, a4, c2 Шкала примитивов (Базовая единица и шкала примитивов)
Соразмерные 1/4, 1/3, 1/2, 1…12 Адаптивные шкалы (Соразмерные ступени)
Процентные и доли 25, 50, full Доли ширины и высоты
Цветовые primary, surface-container Роли цвета (Цветовые роли)
Направления и выравнивание inline-start, start, center Логические стороны (Направление текста)

Смотрите также

Базовая единица и шкала примитивов

Шкала примитивов — неизменный ряд размеров в rem, на котором стоят все остальные шкалы. Она даёт точные системные размеры и позволяет переводить пиксели макета в ступени и обратно.

Почему rem

Все размеры Framework заданы в rem, то есть в долях корневого кегля браузера. Framework не меняет корневой кегль ни на мобильном экране, ни на настольном. Если человек увеличил шрифт в настройках браузера, интерфейс вырастает целиком и пропорционально: текст, кнопки, отступы и углы вместе.

Отсюда следствие: пиксельный эквивалент — не контракт. Все таблицы в этой части посчитаны при 1rem = 16px. При другом корневом кегле пиксели будут другими, а шкала останется прежней.

Основной кегль страницы назначается на body (или на внешний контейнер приложения), а не на html.

Буква и цифра

Примитивы названы буквой и цифрой: a4, b6, d2. Буква выбирает группу (диапазон и шаг), цифра — номер шага внутри группы. Групп девять, в каждой десять ступеней.

Группа Начало Шаг Последняя ступень
A 0 px 1 px a9 = 9 px
B 10 px 1 px b9 = 19 px
C 20 px 2 px c9 = 38 px
D 40 px 4 px d9 = 76 px
E 80 px 8 px e9 = 152 px
F 160 px 16 px f9 = 304 px
G 320 px 32 px g9 = 608 px
H 640 px 64 px h9 = 1216 px
I 1280 px 128 px i9 = 2432 px

Начиная с B, каждая следующая буква удваивает и начало, и шаг. Группа A — отдельный случай: это просто пиксели от 0 до 9.

Относительная точность шкалы постоянна: внизу различаются отдельные пиксели, вверху — десятки пикселей. На крупном размере разница в один-два пикселя не видна, и такие ступени не нужны.

Все девяносто примитивов (пиксели — при 1rem = 16px):

Токен rem px Токен rem px Токен rem px
--sf-a0 0 0 --sf-b0 0.625 10 --sf-c0 1.25 20
--sf-a1 0.0625 1 --sf-b1 0.6875 11 --sf-c1 1.375 22
--sf-a2 0.125 2 --sf-b2 0.75 12 --sf-c2 1.5 24
--sf-a3 0.1875 3 --sf-b3 0.8125 13 --sf-c3 1.625 26
--sf-a4 0.25 4 --sf-b4 0.875 14 --sf-c4 1.75 28
--sf-a5 0.3125 5 --sf-b5 0.9375 15 --sf-c5 1.875 30
--sf-a6 0.375 6 --sf-b6 1 16 --sf-c6 2 32
--sf-a7 0.4375 7 --sf-b7 1.0625 17 --sf-c7 2.125 34
--sf-a8 0.5 8 --sf-b8 1.125 18 --sf-c8 2.25 36
--sf-a9 0.5625 9 --sf-b9 1.1875 19 --sf-c9 2.375 38
Токен rem px Токен rem px Токен rem px
--sf-d0 2.5 40 --sf-e0 5 80 --sf-f0 10 160
--sf-d1 2.75 44 --sf-e1 5.5 88 --sf-f1 11 176
--sf-d2 3 48 --sf-e2 6 96 --sf-f2 12 192
--sf-d3 3.25 52 --sf-e3 6.5 104 --sf-f3 13 208
--sf-d4 3.5 56 --sf-e4 7 112 --sf-f4 14 224
--sf-d5 3.75 60 --sf-e5 7.5 120 --sf-f5 15 240
--sf-d6 4 64 --sf-e6 8 128 --sf-f6 16 256
--sf-d7 4.25 68 --sf-e7 8.5 136 --sf-f7 17 272
--sf-d8 4.5 72 --sf-e8 9 144 --sf-f8 18 288
--sf-d9 4.75 76 --sf-e9 9.5 152 --sf-f9 19 304
Токен rem px Токен rem px Токен rem px
--sf-g0 20 320 --sf-h0 40 640 --sf-i0 80 1280
--sf-g1 22 352 --sf-h1 44 704 --sf-i1 88 1408
--sf-g2 24 384 --sf-h2 48 768 --sf-i2 96 1536
--sf-g3 26 416 --sf-h3 52 832 --sf-i3 104 1664
--sf-g4 28 448 --sf-h4 56 896 --sf-i4 112 1792
--sf-g5 30 480 --sf-h5 60 960 --sf-i5 120 1920
--sf-g6 32 512 --sf-h6 64 1024 --sf-i6 128 2048
--sf-g7 34 544 --sf-h7 68 1088 --sf-i7 136 2176
--sf-g8 36 576 --sf-h8 72 1152 --sf-i8 144 2304
--sf-g9 38 608 --sf-h9 76 1216 --sf-i9 152 2432

Пример показывает примитивы в собственном CSS проекта:

CSS
.project-card {
    inline-size: var(--sf-f0); /* 160 px */
    padding: var(--sf-c2);     /* 24 px */
    gap: var(--sf-b2);         /* 12 px */
}

Примитив не заменяет роль. Если значение выражает устойчивую роль интерфейса, заведите переменную проекта с понятным именем и сошлитесь в ней на примитив.

Перевод в пиксели и обратно

Из ступени в пиксели:

Code
пиксели = начало группы + шаг × цифра

c8 = 20 + 2 × 8 = 36 px
d6 = 40 + 4 × 6 = 64 px
f2 = 160 + 16 × 2 = 192 px

Из пикселей в ступень:

  1. Найдите группу: наибольшее начало, которое не больше числа.
  2. Вычтите начало.
  3. Разделите остаток на шаг группы — получится цифра.
Code
48 px → группа D (40): 48 − 40 = 8, 8 ÷ 4 = 2 → d2
16 px → группа B (10): 16 − 10 = 6, 6 ÷ 1 = 6 → b6

Если деление не даёт целого, точной ступени нет. Тогда берите ближайшую. Шкала — это общий ряд, а не способ записать любое число: исключение стоит дороже, чем разница в два пикселя.

Как считать в уме. Достаточно помнить ряд удвоений: начала групп 10, 20, 40, 80, 160, 320, 640, 1280, шаги 1, 2, 4, 8, 16, 32, 64, 128. Буква задаёт обе величины сразу.

Особые значения

  • --sf-0 — ноль.
  • --sf-auto — auto.
  • --sf-px — ровно один CSS-пиксель. Это не начало второй шкалы, а именованная толщина для волосяных линий: границ, разделителей, обводок, кольца фокуса. --sf-a1 здесь не подходит: он задан в rem и растёт вместе с кеглем, а рамка должна оставаться тонкой.

Кратность четырём

Итоговая высота видимого элемента (кнопки, поля, строки списка, строки текста) кратна 0.25rem, то есть 4 px при 1rem = 16px. Внутренние части могут быть некратными, итоговый размер — нет. Все высоты строк и все высоты контролов во Framework подчиняются этому правилу (см. Одна лестница размеров и Типографика).

Смотрите также

Соразмерные ступени

Соразмерные ступени — единая запись ступеней для всех адаптивных шкал. Она позволяет понять величину по имени без таблицы.

Почти все адаптивные шкалы Framework названы одинаково: 1 — обычная ступень, дроби меньше её, целые числа больше.

Code
… 1/4  1/3  1/2  [1]  2  3  4 …
          меньше    обычная    больше

1/2 читается как «меньше обычного», 3 — как «заметно больше». Сокращения вроде sm и lg для размеров не используются, чтобы их не путали с префиксами ширины экрана (см. Ширина экрана: контрольные точки).

Одна и та же ступень у разных семейств означает одинаковую роль, но не одинаковые пиксели. --sf-space-1 (12/16 px), --sf-text--size-1 (14/16 px) и --sf-radius-1 (8 px) — это «обычная» ступень своего семейства. Где шкалы должны совпадать по смыслу, они явно связаны: высота контрола размера 1 строится из высоты строки текста 1 (Одна лестница размеров), угол блока ступени 3 — из отступа ступени 3 (Скругления).

Смотрите также

Поиск по документации

Введите минимум 2 символа

    Настройки

    Тема
    Размер шрифта
    Ширина страницы