CSS переменные

В крупных проектах часто используется ограниченная палитра цветов, составленная дизайнером. В ходе разработки, мы используем эту палитру по всему проекту. Проект растёт, количество файлов в нём, соответственно, тоже. И вот, наступает он — РЕДИЗАЙН. Слово, доставляющее боль и страдания любому верстальщику. Так уж получилось, что вам повезло и в проекте просто поменялось несколько цветов. Допустим, салатовый стал ярко-зелёным, а красный стал томатным. Звучит не так уж и сложно. Простенький такой редизайн. И пошли мы по всем CSS-файлам проекта искать изменённые цвета. Причём, через какое-то время мы ещё и заметили, что в прошлый раз, дизайнер немножко ошибался с цветами и вместо одного кода салатового цвета#3bff00, он использовал множество вариаций, незначительно отличающихся друг от друга. К примеру,#3bff01. Как мы понимаем, простым поиском и заменой нам уже не обойтись. Теперь придётся искать на всех страницах вашего сайта салатовые элементы. Уже представляете, сколько времени у вас на это уйдёт? А ведь нам еще красный на томатный менять.

В борьбу с такими вот проблемами включились CSS переменные (CSS custom properties) (пользовательские свойства CSS) . Мы можем изначально задать переменную для салатового цвета и использовать только её. А если мы при разработке увидим, что есть два почти одинаковых салатовых цвета, то можем подойти к дизайнеру и спросить, какой из них правильный. Дизайнеры тоже люди и тоже ошибаются. Это надо учитывать. Итак, зададим два цвета: салатовый и томатный:

:root {
  --green-light: #3bff00;
  --tomato: #ff6347;
}

Как вы видите, CSS переменные задаются в псевдо-классе:root

Теперь будем использовать эти переменные в CSS:

menu {
  background-color: var(--green-light);
  border: 1px solid var(--tomato);
}

К следующему редизайну, когда#3bff00поменяется на#00ad68, мы лишь изменим код цвета в:root, и весь проект перекрасится. Одна секунда вместо часов страданий.

Рекомендую называть переменные не так, как в примере. Наиболее правильными будут названия, исходя из того, где используется цвет или вообще какие-то абстрактные названия. Например--accent, --primary, --frame-shadow, ...

Улучшение адаптивности

В CSS переменные можно задавать не только цвета, но и числа. А ещё мы можем изменять переменные, в зависимости от того,

каким устройством пользуется посетитель нашего сайта.

:root {
  --font-large: 20px;
}

h3 {
  font-size: var(--font-large);
}

@media(min-width: 700px) {
  :root {
   --font-large: 32px;
  }
}

Так, если ширина экрана пользователя больше 700 пикселей, все свойства, использующие переменную --font-large, увеличатся.

Кроме того, к CSS переменным можно получить доступ из JavaScript, но это уже совсем другая история