Преимущества пользовательских свойств в CSS

Источник: «The Power Of Custom Properties In CSS»
Пользовательские свойства CSS, известные как переменные, — это мощная функция, позволяющая разработчикам определять многократно используемые значения в таблицах стилей. Использование пользовательских свойств позволяет значительно повысить удобство повторного использования и сопровождения кода, а также создавать динамические стили для своих веб-проектов. Цель данной статьи — всесторонне объяснить пользовательские свойства CSS и их применение с помощью функции var.

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

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

Традиционный CSS

В следующем примере показан традиционный способ определения цветов в таблице стилей (путём задания цветов для каждого конкретного элемента):

See the Pen

Этот код создаёт простой HTML-документ со стилями CSS для страницы с синей тематикой. Цвет фона страницы — синий, заголовки имеют синее подчёркивание, контейнер имеет белый фон, синий текст и подложку вокруг содержимого. Кроме того, две кнопки имеют синий текст, белый фон и синие границы. При таком традиционном подходе вы заметили, что класс .container и селектор button в стиле CSS имеют одинаковые значения color и background-color.

Однако для больших проектов код может быть улучшен. В стилях CSS и класс .container, и селектор button имеют одинаковые значения color и background-color, установленные соответственно на синий и белый. Если необходимо настроить цвета для всего проекта, это будет неудобно, поскольку придётся менять каждое значение отдельно.

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

Важность использования функций var в CSS

Функция var — это ключ к раскрытию потенциала пользовательских свойств CSS. Она позволяет использовать сохранённые значения пользовательских свойств во всей таблице стилей. Используя функцию var, разработчики могут ссылаться на значение пользовательского свойства везде, где это необходимо, что упрощает поддержание согласованности и обновление значений в рамках всего проекта.

Преимущества использования функции var, как это будет подробно показано в данной статье, заключаются в следующем:

  1. Возможность повторного использования кода: С помощью var разработчики могут повторно использовать одно и то же значение пользовательского свойства в нескольких местах таблицы стилей, что уменьшает избыточность и повышает удобство сопровождения.
  2. Глобальные изменения: Поскольку пользовательские свойства определяются глобально, изменение их значений может мгновенно применить изменения ко всем элементам, использующим данную переменную.
  3. Динамический стиль: Комбинируя var с другими функциями и выражениями CSS, разработчики могут создавать динамические и адаптивные стили, изменяющиеся в зависимости от взаимодействия с пользователем, размеров области просмотра или других условий.

Изучение пользовательских свойств CSS

Перейдём к рассмотрению пользовательских свойств CSS.

Определение и синтаксис пользовательских свойств CSS

Определение пользовательского свойства CSS предполагает использование префикса --, за которым следует уникальное имя, и присвоение ему значения. Синтаксис выглядит следующим образом:

:root {
--custom-property-name: value;
}

В приведённом выше синтаксисе :root относится к элементу самого высокого уровня (обычно к тегу html) и гарантирует, что пользовательское свойство будет доступно глобально. Однако пользовательские свойства могут быть определены и внутри конкретных элементов для создания локальной области видимости, что мы рассмотрим далее.

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

Определение переменных CSS: Чтобы определить CSS-переменную, её объявляют в блоке селектора или в псевдоклассе :root, что делает её глобальной и доступной во всей таблице стилей. Вот пример определения переменных CSS:

:root {
--primary-color: #1e90ff;
--background-color: #738fab;
--button-padding: 5px;
}

В данном примере мы определили три переменные с соответствующими значениями: --primary-color, --background-color и --button-padding.

Использование переменных CSS: Вы можете использовать определённые CSS-переменные, ссылаясь на них с помощью функции var(). Вот как можно использовать переменные в стилях:

body {
background-color: var(--background-color);
}

h2 {
border-bottom: 2px solid var(--primary-color);
}

.container {
color: var(--primary-color);
background-color: #ffffff;
padding: var(--button-padding);
}

button {
background-color: #ffffff;
color: var(--primary-color);
border: 1px solid var(--primary-color);
padding: var(--button-padding);
}

В данном примере мы использовали CSS-переменные --background-color, --primary-color и --button-padding в соответствующих стилях, что позволяет легко применять согласованные значения во всей таблице стилей.

See the Pen

В этом примере мы создали простую HTML-страницу с предоставленными CSS-стилями. CSS-переменные уровня :root установлены для --background-color, --primary-color и --button-padding. Затем стили CSS используют эти переменные для придания соответствующего стиля элементам.

Фоновый цвет <body> задаётся с помощью var(--background-color), цвет нижней границы элемента <h2> — с помощью var(--primary-color), а цвет текста, цвет фона и отступ элемента .container — с помощью var(--primary-color) и var(--button-padding) соответственно. Аналогично, элементы <button> используют определённые CSS-переменные для цвета текста, фона, границы и отступов.

Настраивать цветовую схему становится гораздо проще, если использовать эти переменные во всех стилях. Изменение значения переменных --background-color или --primary-color в :root приведёт к мгновенному применению новых цветов ко всей странице, включая фон, заголовки, контейнеры и кнопки. Такой подход позволяет поддерживать и обновлять цветовую тему для всего проекта из одной точки.

Поддержка браузеров и совместимость

Пользовательские свойства CSS, включая функцию var, широко поддерживаются браузерами, причём совместимость распространяется на современные версии основных браузеров, включая Chrome, Firefox, Safari, Edge и Opera. Однако для обеспечения совместимости с более старыми браузерами необходимо проверять конкретные поддерживаемые версии, особенно если требуется поддержка Internet Explorer.

На момент написания этой статьи большинство современных браузеров обеспечивают отличную поддержку пользовательских свойств CSS и функции var, что делает её надёжным средством для современной веб-разработки.

Управление глобальным и локальным диапазонами

Пользовательские свойства CSS имеют либо глобальную, либо локальную область применения. Если пользовательское свойство определено в :root, оно доступно глобально и может быть использовано в любом месте таблицы стилей. С другой стороны, определение пользовательского свойства в определённом селекторе ограничивает его область применения этим селектором и его потомками.

Переменная в глобальной области

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

Пример кода

:root {
/* Глобальные переменные для цветов темы */
--primary-color: #007bff;
--secondary-color: #6c757d;
--accent-color: #ffc107;
--text-color: #333333;
--background-color: #f8f8f8;

/* Глобальные переменные для значений отступов */
--spacing-small: 8px;
--spacing-medium: 16px;
--spacing-large: 24px;

/* Глобальные переменные для типографики */
--font-family: 'Arial', sans-serif;
--font-size-small: 14px;
--font-size-medium: 18px;
--font-size-large: 24px;
}

/* Пример использования глобальных переменных для цветов темы */
.theme-element {
color: var(--text-color);
background-color: var(--background-color);
}

/* Пример использования глобальных переменных для значений отступов */
.spacer {
margin: var(--spacing-medium);
}

/* Пример использования глобальных переменных для типографики */
.custom-text {
font-family: var(--font-family);
font-size: var(--font-size-large);
}

Вот пояснение к коду:

  1. Селектор :root — это специальный селектор, представляющий корень документа, в данном случае HTML-документа. В этом блоке задаётся несколько глобальных переменных для цветов темы, интервалов и типографики. Эти переменные имеют префикс --, указывающий на то, что они являются пользовательскими свойствами.
  2. Параметры --primary-color, --secondary-color, --accent-color, --text-color и --background-color являются пользовательскими свойствами для цветов темы. Им присваиваются определённые значения цветов. Например, --primary-color имеет значение #007bff (оттенок синего).
  3. Параметры --spacing-small, --spacing-medium и --spacing-large являются пользовательскими свойствами для значений отступов. Им присваиваются различные числовые значения, представляющие собой единицы пикселей. Например, для параметра --spacing-medium установлено значение 16px.
  4. Свойства --font-family, --font-size-small, --font-size-medium и --font-size-large являются пользовательскими свойствами для типографики. Они задают семейство и размер шрифта для различных элементов.
  5. Класс .theme-element использует пользовательские свойства для цветов темы. Он устанавливает свойство color в var(--text-color), которое преобразуется в значение --text-color. Аналогичным образом устанавливается свойство background-color в var(--background-color).
  6. Класс .spacer использует пользовательские свойства для отступов. Он устанавливает свойство margin в var(--spacing-medium), которое преобразуется в значение --spacing-medium.
  7. Класс .custom-text использует пользовательские свойства для типографики. Он устанавливает свойство font-family в var(--font-family), которое преобразуется в значение --font-family. Также устанавливается свойство font-size в var(--font-size-large), которое разрешается в значение --font-size-large.

В данном примере представлены четыре различных класса: .container, .theme-element, .spacer и .custom-text, каждый из них демонстрирует использование пользовательских свойств для цвета темы, интервала и шрифта соответственно. Пользовательские свойства, определённые в блоке :root, применяются к этим элементам, обеспечивая согласованность и многократное использование стилей во всем документе.

See the Pen

Переменная локальной области

Локальные переменные, с другой стороны, полезны для специфических стилей компонентов или в случаях, когда в разных частях проекта требуются разные значения. Это позволяет избежать непредвиденных побочных эффектов при изменении глобальных переменных.

/* Локальные стили компонента с использованием локальных переменных */
.component-container {
/* Локальные переменные для данного компонента */
--button-background-color: #ffc107;
--button-text-color: #ffffff;
display: flex;
flex-direction: column;
align-items: center;
margin: 24px;
}

.component-button {
/* Использование локальных переменных для стилей кнопок */
background-color: var(--button-background-color);
color: var(--button-text-color);
font-size: 16px;
}

Мы используем локальные переменные для конкретных компонентов, определяя пользовательские свойства CSS внутри класса .component-container. Каждый компонент может иметь свои локальные переменные для настройки его внешнего вида.

Класс .component-button внутри .component-container использует эти локальные переменные для цвета фона и цвета текста, уникальны для каждого компонента. Таким образом, изменение локальных переменных затрагивает только стили соответствующего компонента и не влияет на другие компоненты или глобальные стили. Такой подход позволяет избежать нежелательных побочных эффектов при изменении глобальных переменных.

See the Pen

В данном примере мы имеем простой HTML-документ с контейнером-компонентом, содержащим кнопку с классом component-button. Класс .component-container определяет локальные переменные --button-background-color и --button-text-color, являющиеся специфическими для данного компонента.

Класс .component-button использует эти локальные переменные для стилизации кнопок background-color и color. Вместо того чтобы жёстко кодировать цвета непосредственно в классе .component-button, мы используем var(--button-background-color) и var(--button-text-color) для ссылки на значения, определённые в классе .component-container.

Таким образом, кнопка всегда будет иметь цвет фона и текста, заданный локальными переменными в её родительском .component-container. Если вы используете класс .component-container в нескольких местах на своём сайте, вы можете легко изменить внешний вид кнопки, изменив значения локальных переменных в этом контейнере.

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

Избегание конфликтов имён и поддержание чистоты таблицы стилей

Используйте описательные имена для пользовательских свойств, чтобы избежать конфликта имён с существующими или будущими свойствами CSS. Кроме того, рекомендуется документировать назначение каждого пользовательского свойства, чтобы обеспечить ясность для всех, кто работает с таблицей стилей.

Поддержание чистоты и организованности таблицы стилей предполагает группировку связанных между собой пользовательских свойств и использование последовательного соглашения об именовании.

See the Pen

В этом фрагменте кода мы создали описательные имена для пользовательских свойств CSS, такие, как --main-background-primary-color, --main-button-background-primary-color, --main-primary-font-size, --main-primary-text-color-one, --main-primary-text-color-two, --main-button-secondary-color, --main-background-secondary-color, --main-secondary-font-size и --main-font-family. Каждое пользовательское свойство представляет собой определённый аспект стиля.

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

Кроме того, для всех пользовательских свойств, относящихся к основной теме, мы используем префикс "main-". Это позволяет избежать конфликтов с существующими или будущими CSS-свойствами и облегчает другим разработчикам понимание назначения каждого пользовательского свойства.

Следуя этим принципам, мы обеспечиваем ясность и предотвращаем конфликты, что приводит к созданию более чистой и удобной таблицы стилей.

Заключение

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

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

Дополнительные материалы

Предыдущая Статья

Введение в htmx

Следующая Статья

Vim: Выравнивание сплитов