Переменные в css. Нативные переменные в CSS. Уже пора…. Переменные и calc

Функция var() позволяет вставлять значения пользовательских переменных в значения стилевых свойств. var() нельзя использовать в именах селекторов и в свойствах.

Сами пользовательские переменные и их значения описываются внутри произвольного селектора и должны начинаться с двух дефисов. Через двоеточие переменной присваивается любое допустимое для CSS значение.

Aside { --my-font: Helvetica, Arial, sans-serif; }

Для обращения к переменной --my-font используется запись var(--my-font) , которую можно вставлять в качестве значения свойства. При этом область видимости переменной ограничена указанным селектором (aside в данном случае) и применение var(--my-font) в другом селекторе не даст результата. Для создания глобальных переменных их следует описать внутри селектора :root .

Обозначения

Описание Пример
<тип> Указывает тип значения. <размер>
A && B Значения должны выводиться в указанном порядке. <размер> && <цвет>
A | B Указывает, что надо выбрать только одно значение из предложенных (A или B). normal | small-caps
A || B Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. width || count
Группирует значения. [ crop || cross ]
* Повторять ноль или больше раз. [,<время>]*
+ Повторять один или больше раз. <число>+
? Указанный тип, слово или группа не является обязательным. inset?
{A, B} Повторять не менее A, но не более B раз. <радиус>{1,4}
# Повторять один или больше раз через запятую. <время>#
×

Значения

<переменная> Имя переменной, обозначается двумя дефисами впереди (--my-font). <значение> Резервное значение, которое подставляется вместо заданного, в том случае, если переменная не определена. Через запятую можно указать несколько значений.

Пример

var()

Кнопки

В данном примере вводятся две переменные: --primary-color и --info-color . Переменная --white не определена, поэтому подставляется указанное значение по умолчанию. Для селектора p.info значение переменной --primary-color переопределяется.

Спецификация

Каждая спецификация проходит несколько стадий одобрения.

  • Recommendation (Рекомендация ) - спецификация одобрена W3C и рекомендована как стандарт.
  • Candidate Recommendation (Возможная рекомендация ) - группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
  • Proposed Recommendation (Предлагаемая рекомендация ) - на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
  • Working Draft (Рабочий проект ) - более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
  • Editor"s draft (Редакторский черновик ) - черновая версия стандарта после внесения правок редакторами проекта.
  • Draft (Черновик спецификации ) - первая черновая версия стандарта.
×

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

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

Для начала нужно понять, как объявлять и использовать переменные. Переменные объявляются в селекторах:

:root { --body-background: #ccc; } body { background-color: var(--body-background); }
Как видно из листинга выше, переменные объявляются двумя дефисами перед именем:
--variable-name

Чтобы использовать переменную, необходимо воспользоваться функцией var . Она имеет 2 параметра. Это, естественно, имя переменной, а вторым необязательным параметром идёт значение свойства, которое необходимо использовать в случае отсутствия переменной.

На этом набор новых возможностей с приходом переменных, разумеется, не заканчивается. Имея переменные в арсенале CSS, мы получаем большую гибкость в написании стилей. Например, теперь чтобы составить медиазапрос для экранов <320px в ширину, не нужно переопределять свойство целиком. Достаточно изменить значение переменной. Т.е.

Title { --wrapper-width: 50%; width: var(--wrapper-width); } @media (max-width: 320px) { --wrapper-width: 100%; }
Всё! Этого достаточно, чтобы свойство width изменило свое значение!

Если CSS способен отслеживать изменения своих переменных, это значит, что с этим можно взаимодействовать различными способами.

Что насчёт JavaScript?

Управляя аттрибутом style, можно изменить стиль, прибегая к минимальным затратам усилий. Приведу грубый пример на React.

Title { --background: blue; background-color: var(--background); }
changeColor() { this.setState({ style: {"--background": "green"} }); }

Title

Теперь по клику на элемент с классом title будет меняться цвет фона у элемента. Круто? Ещё бы! Не нужно добавлять новый класс, переопределять свойство или делать другие действия, способствующие изменению фонового цвета у элемента.

Ремарка

Если кто-то не знаком с React или кому-то просто непонятно, что произошло. Мы просто средствами JavaScript изменили аттрибут style у элемента, изменив значение переменной
--background


Используя переменные, изменять css извне стало проще, методов использования можно придумать массу, а мы пойдем дальше.

Области видимости

Нужно сказать пару слов об области видимости CSS переменных, здесь всё просто. Объявленная переменная доступна всем селекторам дочерних элементов данного селектора. Т.е. в листинге ниже использовать переменную --b в тэге html будет нельзя. А вот переменная --a в body и всех дочерних элементах будет работать без проблем (если её конечно не переопределят где-то ниже).

Html { --a: #ccc; } body { --b: #a3a3a3; }
(я знаю, что цвета в примерах скучные, но я плохо помню цвета по hex-коду:))

Переменные и calc

Как и любое числовое значение свойства, вы можете использовать переменную в функции calc .

Title { --title-width: 300px; width: calc(var(--title-width) + 150px); }
Круто! Особенно если учесть что переменную --title-width , можно менять как внутри CSS, так и извне.

Заметьте, что величину мы обязаны положить в переменную. Дописать px , % , rem и т.д. к вызванной переменной у нас не получится. Однако ничто не мешает нам умножить с помощью функции calc значение на единицу в необходимой нам величине.

Title { --title-width: 300; /* так не сработает */ width: var(--title-width)px; /* так сработает */ width: calc(var(--title-width) * 1px); }

В заключение

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

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

Объявление и использование переменных в CSS

На переменные в CSS распространяются те же ограничения и правила наследования, что и на обычные CSS правила. Самый простой способ использовать их — объявить их глобально в псевдо-классе :root , так все остальные селекторы смогут его наследовать.

:root{ --awesome-blue: #2196F3; }

Для доступа к значению переменной надо использовать конструкцию var(…) . Обратите внимание, что имена зависят о регистра, то есть —foo != —FOO .

Some-element{ background-color: var(--awesome-blue); }

Поддержка

На данный момент Firefox поддерживает переменные в CSS. В Google Chrome начиная с версии 49 это возможность включена, если вы используете версию 48 или более старую, то вы можете вручную включить поддержку, перейдя на страницу chrome://flags/ и включить Enable experimental Web Platform features .

Пример 1 — Цветовые схемы

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

Теперь, если заказчик захотел поменять цвет на странице, мы можем изменить весь стиль поменяв одну строку (строку объявления переменной). Без переменных нам пришлось бы менять все места, где используется этот цвет.

Пример 2 — Понятные названия для сложных свойств

Еще одна замечательная возможность, которую дают CSS переменные — спрятать сложное свойство за коротким понятным именем. Хороший пример — CSS свойства с несколькими параметрами, например: box-shadow , transform и font .

Объявив переменную с понятным именем мы сможем использовать её не тратя время на разбор сложного свойства.

Пример 3 — Динамические переменные

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

Наведите на зеленый и на синий блоки.

Заключение

Как видите переменные довольно просты в использовании и их определенно стоит попробовать. Рассмотрим еще пару вещей, на которые стоит обратить внимание:

  • Функция var() имеет второй параметр, который будет использован в качестве значения, если переменная вызовет ошибку: width: var(--custom-width, 20%);
  • При объявлении собственного правила так же можно использовать переменные: --base-color: #f93ce9; --background-gradient: linear-gradient(to top, var(--base-color), #444);
  • Переменные можно использовать с еще одним нововведением в CSS — функцией calc(). Однако работает это пока только в Firefox: --container-width: 1000px; max-width: calc(var(--container-width) / 2);

На этом все! Попробуйте использовать CSS переменные, но пока избегайте их в серьезных проектах.

Единственным качеством, которым должен обладать язык, чтобы претендовать на статус языка программирования, это переменные. Они считаются невероятно полезными, экономят разработчикам кучу часов и сил. Кроме того, переменные способны всестороннее улучшить процесс написания кода.

Это именно то, чего в CSS не хватало. Такие динозавры, как Sass и Less использовали переменные, но в стандартной CSS никогда не было переменных. До сегодняшнего дня.

Они долго маячили на горизонте, но лишь недавно переменные начали внедряться в CSS. Итак, как же они работают?

Поддержка браузеров

В настоящее время переменные CSS поддерживаются только Firefox Nightly . И в действительности мы не можем их использовать. Тем не менее, не смотря на то, что они ещё очень и очень сырые (в состоянии бета-тестивания) мы все с нетерпением ожидаем, что они появятся в нашей жизни в ближайшее время.

Для браузеров на движке Webkit уже есть путь для получения переменных. Кроме того, ещё они доступны для некоторых версий Chrome , которые активируются через flag в chrome://flags и с помощью префикса -webkit- .

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

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

Мы все прекрасно знаем, как работают переменные, поэтому только синтаксис претерпел некоторые изменения. Вот как мы будем объявим переменные в CSS:

Var-variable-name: value;

Глобальные переменные

Как и в других языках программирования, можно также установить переменные в качестве глобальных. Например, так:

:root { var-blue-color: #2980A6; var-text-color: #E0E0E0; }

Я использую root псевдо элемент из-за того, что интерфейс верхнего уровня в DOM будет тот, который держит эти переменные. А они, в свою очередь, будут работать вниз по дереву тегов DOM для всех наших элементов.

Когда дело доходит до применения переменных, мы используем функцию var() для вызова переменной. Это можно сделать так:

Test { background-color: var(blue-color); } p { color: var(text-color); }

После того, как мы объявили переменную в корне документа, теперь мы вправе использовать её в любом месте.

Контекстные переменные

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

One { var-blue-color: #004F70; } .one a { color: var(blue-color); }

В данном конкретном примере якорные теги унаследует новые значения, которые мы поставили в их родительском элементе. Тем не менее, ничего за пределами этого div не будет использовать значения, заданные в корневом элементе.

Вывод

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

  • Урок подготовлен: командой сайт

Кто уже давно занимается вёрсткой, много раз чувствовали, что CSS-код труден для правок. Например, Вам захотелось поменять цветовую гамму на всей странице. Что для этого нужно? Поменять у всех блоков один цвет на другой. Неудобно? Согласен, для этого придумали SASS и LESS , однако, это так себе выход. Например, Вам хочется заменить всю цветовую гамму через JavaScript , или увеличить ширину нескольких блоков в 2 раза? Очевидно, что работа эта требует написание однообразного кода. К счастью, относительно недавно появилась возможность задавать переменные прямо в CSS , и браузеры их без проблем обрабатывают. Об этом мы поговорим в этой статье.

Давайте разберём следующий код:







Заголовок

Некоторый текст...


Подвал


Объявляются в псевдоэлементе root (хотя можно и прямо в самих элементах объявлять переменные). Использование же их очень простое: вместо конкретного значения свойства пишется var(имя_переменной) . Особенно интересно использование переменных вместе с функцией calc() . Благодаря этому можно увеличивать или уменьшать множество элементов на сайте, сохраняя при этом все пропорции.

В продолжение темы:
Роутеры

Сохранение для игры Grand Theft Auto 5 PC - Сейв обновлен 06.05.2015 - Игра пройдена на 90% - Полностью пройдена сюжетная линия (69 из 69 заданий) - После последнего...