awesome-everything EN
↑ Обратно к восхождению

Архитектура фронтенда

Design-токены: чтение кода и конфигов

Суть Читайте реальный CSS, DTCG JSON и theme-override; предсказывайте, как каскад разрешает каждый токен, и выбирайте фикс, оставляющий компоненты независимыми от темы.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги токенов живут в CSS и JSON, а не в дизайн-доке. Прочитайте каждый сниппет, проследите, как каскад или сборка его разрешают, и выберите фикс, который senior сделает первым.

Цель

Потренируйтесь читать код токенов так, как его дебажат: проследите ссылку через тиры, предскажите, что пере-разрешает theme-override, и заметьте ту единственную строку, что запирает компонент вне тематизации.

Сниппет 1 — ссылка между тирами

:root {
  --color-blue-600: #0052CC;                  /* primitive */
  --color-interactive: var(--color-blue-600); /* semantic  */
}

.button { background: var(--color-blue-600); }
.link   { color: var(--color-interactive); }
Викторина

Позже dark-тема переопределяет --color-interactive (не primitive). Какой элемент после этого следует за dark mode и в чём фикс для второго?

Сниппет 2 — DTCG-источник

{
  "color": {
    "blue": { "600": { "$value": "#0052CC", "$type": "color" } },
    "interactive": { "$value": "{color.blue.600}", "$type": "color" }
  },
  "space": {
    "4": { "$value": "16px", "$type": "dimension" }
  }
}
Викторина

Style Dictionary собирает этот DTCG-источник для web и Android. Что верно о том, как color.interactive и space.4 выходят под каждую платформу?

Сниппет 3 — theme-override

:root              { --color-surface: #FFFFFF; --color-text: #111111; }
[data-theme="dark"]{ --color-surface: #0B0B0F; --color-text: #F5F5F5; }

.card {
  background: var(--color-surface);
  color: var(--color-text);
  border: 1px solid #E5E7EB;   /* hardcoded */
}
Викторина

Переключение data-theme в dark перекрашивает большую часть .card, но оставляет один видимый дефект. В чём он и каков фикс?

Сниппет 4 — fallback

.badge {
  /* --brand-accent задаётся некоторыми host-страницами, отсутствует на других */
  color: var(--brand-accent);
  padding: var(--space-2, 8px);
}
Викторина

На host-странице, которая никогда не задаёт --brand-accent, как ведёт себя каждое свойство и чему учит var()-fallback?

Итог

Баги токенов читаются в CSS и JSON: компонент, называющий primitive, выпадает из тематизации, пока его сосед на semantic-ссылке перекрашивается; DTCG-сборка разрешает алиасы, затем трансформирует значения, так что один источник корректен под платформу; единственный hardcoded literal переживает переключение темы как видимый двухцветный дефект; а var() с fallback — это ремень безопасности для токенов, которые потребитель может не определить. Проследите ссылку через тиры — и фикс почти всегда «ссылайся на semantic-токен, с fallback».

Продолжить восхождение ↑Design-токены: соберите тематизированный пайплайн токенов
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.