Переменные CSS в чистом CSS — начало работы за 5 минут или меньше

Опубликовано: 2019-07-15

CSS-переменные (или официально: пользовательские свойства ) в чистом CSS значительно экономят время для тех, кто готов потратить пять минут на изучение того, как их использовать. Они существуют со времен CSS3, и у 92% всех пользователей есть браузеры, которые их поддерживают. Использование переменных CSS не требует каких-либо существенных изменений в существующих таблицах стилей или новых инструментов и может быть легко применено к старым проектам. Вместо того, чтобы записывать шестнадцатеричный код цвета в сотнях мест в файле, вы можете определить его только в одном месте — с помощью переменной CSS. Огромная экономия времени и помощь в создании более согласованных таблиц стилей.

Переменные CSS в чистом CSS:

  • никаких дополнительных инструментов, программного обеспечения или «специальных» изменений в существующих таблицах стилей не требуется.
  • 92% всех пользователей имеют браузеры, полностью поддерживающие переменные CSS.
  • старые проекты могут быть легко модернизированы для их использования
  • Переменные CSS обеспечивают согласованность, аккуратность и скорость в таблицах стилей любого размера.
  • если вы знаете CSS, вы разберетесь с ними за считанные минуты

Подождите, так это Saas or Less, верно?

Нет, здесь мы говорим о чистом CSS, а не о CSS в сочетании с препроцессором, таким как Saas, Less или SCSS. Использование переменных CSS не требует никаких дополнительных инструментов, редакторов или изменений в вашем рабочем процессе или чем-то еще, что вы используете. Таким образом, существующие файлы CSS без переменных не требуют каких-либо «особых» изменений, и вы можете смешивать и сочетать — использовать переменные только для частей файла или только в некоторых файлах вашего проекта.

Препроцессоры CSS, такие как Saas или Less, также поддерживают переменные. Кроме того, они имеют гораздо больше функций и опций, которые вы можете использовать. Однако, как следует из названия, для них требуется препроцессор — инструмент, который преобразует CSS, написанный в Saas, в чистый CSS. Если вам нужны только переменные — в чистом CSS есть все, что вам нужно.

Переменные CSS — это нативная функция, и это делает их замечательными. С минимальными усилиями ваши таблицы стилей станут гораздо более читабельными и согласованными. Более того, любые изменения, которые вам придется вносить позже, сделать намного проще — определенно быстрее, чем выполнять поиск и замену, когда вам нужно изменить цветовой код в сотнях мест .

Кто знал, что вам не нужен препроцессор, такой как Saas или Less, для использования переменных #CSS. Это нативная функция CSS, простая в использовании и экономящая часы при написании кода.

НАЖМИТЕ, ЧТОБЫ НАПИСАТЬ

Давайте создадим несколько переменных

Как и в любом языке программирования, использование переменных состоит из двух шагов : присвоение им значения (определение их) и их использование (помещение их во все места, где вам нужно это значение). Мы сделаем то же самое;

:root {
  --my-red: #ff0080;
  --my-shadow: 3px 3px 10px green;
  --my-border: 1px solid #222222;
}

.custom-box {
  box-shadow: var(--my-shadow);
}

.custom-text {
  color: var(--my-red);
  border: var(--my-border);
}

Если вы хотите использовать переменную глобально (где угодно) в файле CSS, вы должны определить ее в псевдоклассе :root . Расположение в файле не имеет значения. Это может быть начало или конец файла. Но вы должны поместить переменную в :root . Имя должно начинаться с двойного тире и не может содержать пробелов -- Переменные CSS могут содержать любое значение, которое вы обычно присваиваете свойству CSS; от простых значений, таких как цвета, до сложных выражений для сокращенных свойств, таких как фон или тень.

Чтобы использовать переменную (чтобы получить ее значение), поместите ее в функцию var() . Не забывайте, что все имена переменных начинаются с -- . Это все, что вам нужно знать, чтобы начать.

Использование резервных значений

В случае, если переменная не определена, резервное значение может быть предоставлено функции var() в качестве второго параметра.

:root {
  --my-red: #ff0080;
  --my-blue: #0020ff;
  --my-shadow: 3px 3px 10px green;
}

.custom-box {
  box-shadow: var(--my-shadow, 2px 2px 5px blue);
}

.custom-text {
  color: var(--my-red, var(--my-blue, red));
}

Не беспокойтесь, если значение свойства является сложным. Запасной параметр позволяет использовать запятые (см. пример box-shadow ). Он также позволяет объединять несколько функций var() , как показано для цвета в .custom-text . Если --my-red и --my-blue не определены, то в качестве цвета будет использоваться красный цвет.

Комбинация var() и calc() тоже работает без каких-либо сюрпризов в синтаксисе. Вот пример, включающий локальную переменную, доступную только в классе, в котором она была определена.

.box {
  --padding: 10px;
  
  height: calc(var(--padding) + 100px);
  padding: var(--padding);
}

Используйте calc() экономно. Это неплохо, но при чрезмерном использовании становится довольно проблематично отлаживать и поддерживать.

Получение и установка переменных CSS через JavaScript

Используя простой JavaScript, вы можете устанавливать новые переменные CSS и получать доступ к их значениям. Я не использую этот метод. Вместо этого я предпочитаю изменять класс элемента. Однако нет ничего плохого, если вы хотите получить доступ к переменным CSS через JavaScript. Это, безусловно, полезно в некоторых ситуациях. Те, кто придерживается jQuery, могут преобразовать код в плагин jQuery.

Чтобы создать новую переменную или изменить значение существующей, используйте:

// set var value
document.documentElement.style.setProperty('--my-var', 'blue');

Доступ к переменной немного сложнее. Если переменная определена через JS, используйте:

// get var value if defined via JS
document.documentElement.style.getPropertyValue('--my-var');

Однако, если он определен через CSS (а так обычно и бывает), используйте этот код:

// get var value if defined via CSS
getComputedStyle(document.documentElement,null).getPropertyValue('--my-var');

Проблемы и на что обратить внимание

Теперь, когда вы знаете, как использовать переменные, не переборщите с ними и создайте переменную для каждого отдельного значения свойства в таблице стилей. Например, это было бы излишеством и злоупотреблением всей концепцией;

:root {
  --spacing-10: 10px;
}

.custom-box {
  padding: var(--spacing-10);
}

Ты ничего не добился. Только что получил --spacing-10 вместо 10px . Вскоре вы создадите еще двадцать переменных для каждого значения пикселя отступа от 5 до 100 пикселей. Если вы стремитесь к согласованности, используйте концепцию --small-padding, --medium-padding, --large-padding и назначьте соответствующие числовые значения.

Хотя это и не требуется стандартом CSS, я искренне рекомендую определять все переменные в одном месте и в начале файла CSS . Таким образом, вы всегда будете знать, где они находятся, и сможете быстро изменить значения. Если вы разбросаете определения по всему файлу, вам будет сложно отслеживать вещи, и вы можете в конечном итоге определить одну и ту же переменную в нескольких местах. Отладка этого не будет веселой задачей.

Нет причин не использовать переменные CSS

В Интернете все происходит быстро (например, файлы cookie заменяются локальным хранилищем). Для больших проектов и больших команд переход на препроцессоры CSS, такие как Saas, — правильный путь. Однако для небольших проектов или существующих проектов, требующих обслуживания, CSS-переменные в чистом CSS — правильное решение . Они не требуют абсолютно никаких изменений, обновлений программного обеспечения или инструментов или чего-то еще. Вы определяете переменную и начинаете ее использовать.

Не лучше ли, быстрее и разумнее определить код цвета один раз, а затем использовать переменную во всем файле вместо того, чтобы иметь один и тот же шестнадцатеричный код в сотне мест?