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, но это уже совсем другая история