TGViewer
mefody.dev mefody.dev @mefody_dev · 5.39K subscribers
Post #81 2.29K
Как вычисляются CSS-переменные

Хотя, как мне кажется, правильнее было бы назвать статью «Как НЕ вычисляются CSS-переменные».

Крайне полезная статья от Стэфани Эклз про то, какие особенности есть у CSS-переменных. Несколько важных фактов, которые нужно учитывать при вёрстке с их использованием:

1. Если у обычных наследуемых свойств некорректные значения приводят к дальнейшему поиску корректного значения по каскаду, то для CSS-переменных нет понятия корректного значения (если не использовать @property), это просто строка, поэтому обработка ошибки идёт уже во время вызова var(--my-color), по месту применения определяется, а может ли быть такое значение в принципе.

2. Некорректный var() обрабатывается очень похоже на то, как обрабатывается значение unset.

3. Фолбэки внутри var() тоже обрабатываются во время вызова, поэтому если их задать неправильно, срабатывает тот же принцип. То есть нельзя написать так:

color: var(--my-color, rgb(0, 0, 0));
color: var(--my-color, oklch(40.1% 0.123 21.57));


в надежде на то, что если браузер не умеет в oklch, то откатится на простой rgb. Нет, он снова сделает unset.

4. Сами CSS-переменные вычисляются на самом раннем возможном этапе. Поэтому нельзя мыслить о них, как о функциях, если делать что-то вроде --my-color: var(--accent-color).

:root {
--font-size: 14px;
--font-size-large: calc(2 * var(--font-size));
}

h1 {
--font-size: 20px;
font-size: var(--font-size-large);
}

В этом примере у заголовка размер будет не 40px, а всего лишь 28px. Уже во время обхода :root вычислится значение переменной, а во время вызова в h1 внутри var() — подставится вычисленное.

https://moderncss.dev/how-custom-property-values-are-computed/
Modern CSS Solutions How Custom Property Values are Computed | Modern CSS Solutions Review behaviors to be aware of regarding how the browser computes final custom property values. A misunderstanding of this process may lead to an unexpected or missing value and difficulty troubleshooting and resolving the issue.
  • ❤ 27
  • 🐳 2
  • 👍 1
More from @mefody_dev
  1. Sep 28, 2026View Transitions Toolkit Брамус делится своей коллекцией утилит, чтобы можно было более уд…
  2. Sep 25, 2026Эффект одометра Люблю такие демки, когда на чистом CSS делают что-то необычное, для чего я…
  3. Sep 23, 2026Цена ошибок гидрации В React есть много ухищрений, чтобы серверный кусок страницы обновилс…
  4. Sep 16, 2026Какие анимации более производительные: CSS или JS? Лучше пару раз увидеть, чем много откуд…
  5. Sep 14, 2026Единица измерения lh Если коротко, то 1lh = 1 line height. И это не размер шрифта, который…
  6. Sep 11, 2026<mermaid-element> Ещё одна полезная библиотека. Брамус собрал кастомный элемент, которому…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →