Краткое руководство по переменным CSS и основам их использования.
Вы когда-нибудь устали повторно использовать кучу свойств CSS снова и снова в большом проекте? Или, что еще хуже, менять каждого из них, когда его об этом просят? На протяжении десятилетий это было большой проблемой для веб-разработчиков, что привело к тому, что мы перешли на препроцессоры, такие как SASS. Уже нет! CSS теперь предоставляет переменные изначально без необходимости повышения уровня для каких-либо препроцессоров. Классно, правда? Давайте начнем, чтобы увидеть, как мы можем внедрить это в наши проекты.
TL; DR
В этой статье мы рассмотрим-
1. Как использовать переменные CSS в нашем проекте.
2. Некоторые концепции, такие как резервное копирование и наследование .
3. Как использовать переменные CSS в Javascript.
Основное использование
Переменные в CSS объявляются с использованием префикса - перед именем.
Объявление переменной: element-name{
--main-bg: black;
}
Здесь имя переменной --main-bg
, а ее значение black
.
Доступ к переменным осуществляется с помощью функции var()
.
Доступ к переменной: element-name{
background-color: var(--main-bg);
}
Здесь значение черного применяется к CSS-атрибуту background-color.
Теперь, когда мы знаем, как определить и получить к нему доступ, давайте посмотрим на пример его использования .
В приведенном ниже примере есть два файла: index.html
(не перегружайте его, большинство из них - просто служебные, и их рекомендуется включать) и style.css
. Мы бы определяли наш CSS в файле style.css
-
index.html
<!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8"> <meta name=”viewport” content=”width=device-width, initial-scale=1.0"> <meta http-equiv=”X-UA-Compatible” content=”ie=edge”> <title>CSS Variables Tutorial</title> <link rel=”stylesheet” href=”style.css”> </head> <body> <div class=”first-level”> <div class=”second-level”> <div class=”third-level-1"></div> <div class=” third-level-2"></div> </div> </div> </body> </html>
style.css
:root { --main-bg-color: brown; } .first-level { color: white; background-color: var(--main-bg-color); margin: 10px; width: 50px; height: 50px; display: inline-block; } .second-level { color: white; background-color: black; margin: 10px; width: 150px; height: 70px; display: inline-block; } .third-level-1 { background-color: white; color: var(--main-bg-color); margin: 10px; width: 75px; } .third-level-2 { color: white; background-color: var(--main-bg-color); margin: 10px; width: 100px; }
Ладно, у нас тут много чего происходит, верно? Шучу, это просто набор объявлений классов CSS, в которых мы использовали объявления переменных CSS и их извлечение. Давайте разберемся по порядку.
Во-первых, у нас есть псевдокласс :root
. Это используется в основном, чтобы убедиться, что все элементы в HTML могут получить доступ к переменным, объявленным внутри него. Однако не обязательно использовать :root
для объявления переменной, мы также можем объявлять переменные в других классах, мы вернемся к этому позже.
Мы определили цвет, который можно использовать во многих классах, и дали ему имя--main-bg-color
. Его использование присутствует в .first-level
, .third-level-1
и .third-level-2
.
Наследование CSS и резервные варианты
Все еще не знаете, как использовать псевдокласс :root
? Не волнуйтесь! Пример ниже проясняет концепции еще больше. Давайте определим переменную в одном классе и будем использовать ее в другом классе. Здесь у нас есть контейнер div
, который содержит еще div
класса hero и тег paragraph.
<div class=”container”> <div class=”hero”> <p>I am the hero paragraph</p> </div> <p> I am the container paragraph</p> </div>
Давайте теперь определим для него CSS -
.hero{ --bold-style: bold; } .container, .hero{ font-weight: var(--bold-style); }
Результат выглядит примерно так:
I am the hero paragraph I am the container paragraph
Обратите внимание, что абзац за пределами hero div
не получил стиля, даже когда мы применили переменную к обоим классам. Это связано с наследованием переменных, при котором переменная для стилизации дочернего div
не будет иметь никакого влияния на стиль родительского div
.
Чтобы преодолеть это ограничение, мы можем использовать концепцию резервных копий. Запасные варианты - это стили, которые применяются к тем классам, на которые не влияют вызовы переменных.
Давайте теперь изменим наш CSS на следующий:
.container, .hero{ font-weight: var(--bold-style, bold); }
Теперь мы можем увидеть желаемый результат -
I am the hero paragraph I am the container paragraph
Здесь резервные значения применяются к классам, в которых переменные undefined. функция var()
может иметь несколько уровней отката, но это на другой раз.
CSS в Javascript
Мы зашли так далеко с переменными, так почему бы не добавить к ним некоторые приправы Javascript? Вот несколько примеров того, как мы можем это сделать:
// get variable from inline style element.style.getPropertyValue(“--my-var”); // get variable from wherever getComputedStyle(element).getPropertyValue(“--my-var”); // set variable on inline style. Here jsVar is some variable. element.style.setProperty(“--my-var”, jsVar + 4);
Вот и все! Пора поработать руками с этой новой и мощной функцией в наших следующих проектах, без необходимости выбирать SASS или SCSS!
Источники-
Видео на Youtube от DesignCourse:
https://www.youtube.com/watch?v=GZTZTZ69bqY
Веб-сайт разработчиков Mozilla:
https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables