Пользовательский css что это

Кастомные свойства в CSS. Часть 1: что это такое и как работает

Авторизуйтесь

Кастомные свойства в CSS. Часть 1: что это такое и как работает

Рассказывает команда веб-факультета Яндекс.Практикума

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

Мы подготовили для вас три статьи о кастомных свойствах в CSS. Из них вы узнаете, что такое кастомные свойства и зачем они нужны, чем они отличаются от свойств в Sass, и какие есть ограничения при работе с кастомными CSS-свойствами. Чтобы разобраться в этом, вам понадобится знание CSS и основ JavaScript. В статьях мы разбираем простые примеры, которые помогут вам понять основы работы с кастомными свойствами.

Кастомные свойства или CSS-переменные?

Многие называют их CSS-переменными. Говоря «переменная», возникает вопрос о типах данных, которые в ней хранятся. Подразумевают, что в переменных могут храниться те типы данных, которые существуют в конкретном языке программирования. Но в CSS всё не так. В CSS есть много разных типов данных: от текста до цветов и единиц измерения. В переменных можно записать код цвета или размер элемента, но сохранятся эти данные как строки. Это накладывает ряд ограничений на разработчика при использовании кастомных свойств там, где важен тип данных. Например, в медиа-запросах. Именно поэтому мы используем термин «пользовательские» или «кастомные» свойства, принятый в документации.

Синтаксис

Кастомные свойства позволяют сконфигурировать будущий макет ещё до начала разработки компонентов. Верстальщик получает от дизайнера вместе с макетом набор правил, по которым будет выстраиваться палитра сайта, типографика, сетка. До появления кастомных свойств верстальщики использовали препроцессоры, чтобы изначально задать подобную систему в коде и следовать принципу «DRY» (Don’t Repeat Yourself с англ. «не повторяйся»). Они сохраняли набор этих правил в отдельные Sass- или Less-переменные, писали миксины и в целом применяли комплекс мер по оптимизации своей работы и структурированию кода. Это круто и удобно, но требует последующей компиляции в CSS, ведь этот язык понимает браузер.

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

Определив кастомное свойство на уровне корневого элемента, можно обращаться к его значению по имени кастомного свойства внутри блоков CSS, атрибутов style в HTML или атрибутов SVG-документа.

Синтаксис, которым нужно пользоваться:

Эти принципы должны быть вам знакомы, если вы использовали переменные в препроцессорах. Но почувствуйте разницу: вы работаете нативно, можете использовать кастомные свойства внутри атрибутов HTML и SVG.

Зачем это всё нужно?

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

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

Поддержка браузерами

Поддержка браузерами очень хорошая. Правда, если вам нужно поддерживать Internet Explorer, от кастомных свойств, вероятно, придётся отказаться или для IE11 воспользоваться полифилом. Его работа основана на поддержке этим браузером специфического синтаксиса для кастомных свойств. В этой статье мы не будем рассматривать этот подход. Сфокусируемся на том, что является стандартом в работе с кастомными свойствами. В ваших проектах полифил может стать неплохим решением, но учитывайте, что он немало весит и гарантированно замедлит сайт, так как будет искать циклом на JavaScript все элементы, на которые воздействуют кастомные свойства.

Пользовательский css что это

Поддержка кастомных свойств браузерами. Источник: caniuse.com

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

Создание фоллбэков можно автоматизировать плагином postcss-custom-properties при постпроцессинге через POSTCSS. Этот плагин проставит фоллбэки за вас, если кастомные свойства заданы на уровне корневого элемента. Если же кастомные свойства заданы на уровне отдельных блоков, у POSTCSS возникают проблемы. Расскажем об этом в следующей статье.

Синтаксис кастомных свойств позволяет указывать альтернативное значение в случае, если доступ к кастомному свойству по имени невозможен:

Так выглядит наш пример, если задать все необходимые фоллбэки. Обратите внимание, что свойство fill для svg-иконки мы вынесли из HTML-атрибута в CSS. Если раньше мы старались показать, как по-разному можно использовать кастомные свойства, то теперь организовали код так, чтобы создание фоллбэков можно было автоматизировать одним POSTCSS-плагином.

Реактивность и управление через JavaScript

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

Получить значение кастомного свойства через JavaScript можно в три шага:

Задать значения кастомных свойств элементу можно в два шага:

Такое разделение кастомных свойств на палитру и слой темизации решает две задачи:

Второй пункт лучше проиллюстрировать. Рассмотрим два примера.

Вместо изменения палитры, мы преобразовываем кастомные свойства уровня темизации, меняем связь между свойствами элементов страницы и цветами палитры. Читая JavaScript-код, сразу понятно, что мы делаем фон светлым, а текст — чёрным. Если не вводить отдельный слой кастомных свойств для темизации, мы можем получить что-то подобное:

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

Доработаем наш пример про отсутствие вечеринок — добавим переключатель темы с тёмной на светлую. Задачу будем решать «в лоб», чтобы было понятно.

Заключение

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

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

Источник

Использование переменных в CSS

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

CSS переменные подчиняются каскаду и наследуют значения от своих родителей.

Основное использование

Первый шаг с CSS Переменными

Начнём с этого простого CSS, который окрасит элементы разных классов одинаковым цветом:

Мы применим его к этому HTML:

что приводит нас к этому:

Обратите внимание на повторения в CSS. Коричневый фон установлен в нескольких местах. Для некоторых CSS объявлений можно указать этот цвет выше в каскаде и наследование CSS решит эту проблему. Но для нетривиальных проектов это не всегда возможно. Объявив переменную в псевдоклассе :root, автор CSS может избежать ненужных повторений, используя эту переменную.

Наследование переменных в CSS и возвращаемые значения

Пользовательские свойства могут наследоваться. Это означает, что если не установлено никакого значения для пользовательского свойства на данном элементе, то используется свойство его родителя:

В результате var(—test) будет:

Используя var() вы можете объявить множество возвращаемых значений когда данная переменная не определена, это может быть полезно при работе с Custom Elements и Shadow DOM.

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

В замещаемых значениях можно использовать запятые по аналогии с пользовательскими свойствами. Например, var(—foo, red, blue) определить red, blue как замещающее значение (от первой запятой и до конца определения функции)

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

Обоснованность и полезность

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

Источник

Введение в пользовательские CSS-свойства

Автор курса «HTML-верстка» Стас Мельников рассказал, что такое пользовательские CSS-свойства и почему их стоит изучить.

Обучение в онлайн-университете: курс «Старт в программировании»

Стандарт CSS Custom Properties изменил CSS. Появились безумные возможности, о которых раньше мы могли только мечтать. Рассказываем, какие именно и почему новичкам стоит изучить их как можно быстрее.

Что такое пользовательское свойство

Пользовательское свойство — это CSS-свойство, которое создал сам разработчик. Браузер ничего не знает о таком свойстве, пока его не объявили.

Объявление пользовательского свойства начинается с двойного дефиса, после которого указывают название, ставят двоеточие и добавляют значение.

Пользовательский css что это

Для примера объявим пользовательское свойство —netologyBrandColor со значением purple для элемента button:

Теперь браузер знает о нашем свойстве, но в чем его польза?

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

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

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

Пользовательский css что это

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

border: 2px solid var(—netologyBrandColor);

В браузере кнопка будет выглядеть так:

Пользовательский css что это

Зачем изучать пользовательские свойства, если есть переменные в Sass и они полностью устраивают?

После преобразования кода в браузере мы увидим следующий код:

border: 2px solid purple;

Исходя из примера, понятно, что после преобразования кода из Sass в CSS на место переменных компилятор вставил их значения, поэтому мы можем сказать, что Sass-переменных нет в браузере.

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

border: 2px solid var(—netologyBrandColor);

Пользовательский css что это

Теперь, если у кнопки сработает состояние hover, значения у свойств border и color изменятся. Именно из-за этой особенности пользовательские свойства и называют «живыми»: они могут изменяться прямо в браузере, и соответственно менять значения встроенных свойств, к которым они применяются.

В качестве еще одного примера изменю значение пользовательского свойства при состоянии focus.

border: 2px solid var(—netologyBrandColor);

outline: 3px solid var(—netologyBrandColor);

Пользовательский css что это

Способность динамического изменения пользовательских свойства можно сочетать с Sass-переменными или LESS-переменными.

Пользовательские свойства и media-выражения

Еще одна возможность пользовательских свойств — их значения можно переключать с помощью медиазапросов.

Для примера создадим два пользовательских свойства: —mq и —textColor. При помощи первого выведем название медиафункции на страницу, а второе нужно для переключения цвета. На экранах с шириной до 768px текст будет пурпурным, а от 769px — красным.

@media (max-width: 768px) <

@media (min-width: 769px) <

Пользовательский css что этоПользовательский css что это

Пользовательские свойства и функция calc

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

width: calc(100% / var(—childCount));

Если добавить значение 5 для пользовательского свойства —childCount в браузере, увидим следующую картину:

Пользовательский css что это

Для разнообразия изменю 5 на 7 и элементы перестроятся.

Пользовательский css что это

Пользовательские свойства и SVG

Еще одна возможность пользовательских свойств — с их помощью можно задать значение для таких SVG-свойств, как fill, stroke, stroke-width и других. Это можно сделать двумя способами.

В первом способе будем использовать атрибуты fill, stroke и stroke-width, к которым в качестве значения определим пользовательские свойства.

И добавим в CSS значения для пользовательских свойств:

Пользовательский css что это

Слева иконка без стилизации, а справа с нашими настройками. Вот так просто мы можем настраивать графику.

Второй способ — убрать атрибуты их и заменить на CSS-свойства.

Пользовательский css что это

Я специально добавил для свойств fill, stroke и stroke-width другие значение, чтобы визуально была заметна разница между примерами.

Поддержка браузерами

Согласно caniuse.com, пользовательские свойства работают в большинстве современных браузеров, кроме IE11.

Пользовательский css что это

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

Если же вам не нужно поддерживать IE11, смело используйте все возможности пользовательских свойств.

Заключение

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

Мнение автора и редакции может не совпадать. Хотите написать колонку для «Нетологии»? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

Источник

Введение в пользовательские CSS-свойства

Автор курса Нетологии «HTML-верстка» Стас Мельников рассказал, что такое пользовательские CSS-свойства и почему их стоит изучить.

Стандарт CSS Custom Properties изменил CSS. Появились безумные возможности, о которых раньше мы могли только мечтать. Рассказываем, какие именно и почему новичкам стоит изучить их как можно быстрее.

Что такое пользовательское свойство

Теперь браузер знает о нашем свойстве, но в чем его польза?

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

В браузере кнопка будет выглядеть так:

Пользовательский css что это

Зачем изучать пользовательские свойства, если есть переменные в Sass и они полностью устраивают?

После преобразования кода в браузере мы увидим следующий код:

Исходя из примера, понятно, что после преобразования кода из Sass в CSS на место переменных компилятор вставил их значения, поэтому мы можем сказать, что Sass-переменных нет в браузере.

Пользовательский css что это

Пользовательский css что это

Способность динамического изменения пользовательских свойства можно сочетать с Sass-переменными или LESS-переменными.

Пользовательские свойства и media-выражения

Еще одна возможность пользовательских свойств — их значения можно переключать с помощью медиазапросов.

Пользовательский css что это

Пользовательский css что это

Пользовательские свойства и функция calc

Пользовательский css что это

Для разнообразия изменю 5 на 7 и элементы перестроятся.

Пользовательский css что это

Пользовательские свойства и SVG

И добавим в CSS значения для пользовательских свойств:

Пользовательский css что это

Слева иконка без стилизации, а справа с нашими настройками. Вот так просто мы можем настраивать графику.

Второй способ — убрать атрибуты их и заменить на CSS-свойства.

Пользовательский css что это

Поддержка браузерами

Согласно caniuse.com, пользовательские свойства работают в большинстве современных браузеров, кроме IE11.

Пользовательский css что это

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

Если же вам не нужно поддерживать IE11, смело используйте все возможности пользовательских свойств.

Заключение

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

Источник

Кастомные свойства

Пользовательский css что это

Зачем нужны кастомные свойства и как они работают? — спрашивает наш зритель Андрей. Они пришли, чтобы навсегда изменить CSS, Андрей. Давайте разберёмся.

В языках программирования есть переменные: вы что-нибудь один раз объявляете, присваиваете значение, а потом снова и снова используете. Если значение переменной меняется, то оно меняется везде. Похоже на местоимения в языке: из предложения или абзаца всегда понятно, кто «мы» или что за «оно», мы их как будто объявили раньше и наверняка переопределим потом.

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

Как вообще работают препроцессоры? Вы пишете на каком-то языке, который внешне напоминает CSS, а иногда вообще не напоминает.

Потом это компилируется в настоящие стили. Переменные там — это такая сложная автозамена переменных на их значения. Sass, Less, Stylus, PostCSS-плагины — все они работают только так. Эти переменные существуют только в разработке, в браузере их уже нет.

Если сравнить такое поведение с JavaScript, то становится очень обидно за CSS. В JS переменные живут прямо в браузере, их можно создавать и менять на лету. Тем не менее, такие переменные и другие элементы программирования в CSS-препроцессорах получили огромную популярность. Уже почти не бывает больших проектов без препроцессоров.

К счаcтью нашлись люди, недовольные такими куцыми переменными. После ряда черновиков и вариаций синтаксиса, Таб Аткинс написал спецификацию полноценных CSS-переменных, точнее, кастомных свойств. Эти переменные поддерживаются уже в 70% браузеров по миру и сильно меняют принцип написания стилей.

Кастомные кто? Объясняю. Помните, я говорил, что CSS не очень-то готов к переменным? Чтобы сохранить синтаксическую совместимость со старыми браузерами и не противоречить модели языка, было решено сделать не просто переменные с долларом в начале, а механизм создания собственных свойств для нужд разработчика. Ещё их переводят как «пользовательские» свойства, но с этим возникает путаница: кто здесь пользователь, а кто здесь разработчик? Сразу скажу, синтаксис у них немножко странный, но вы поймёте почему.

Мы сейчас объявили новое свойство, которое потом можно повторно использовать снова и снова. А ещё свойства box-shadow-color никогда не было в природе и чтобы менять тени, например, по наведению, приходилось переписывать box-shadow целиком. А теперь по ховеру можно просто поменять значение переменной. Круто?

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

Из-за того, что это кастомные свойства, а не просто доллары с автозаменой, они ведут себя как обычные свойства: наследуются вглубь для всех детей элемента и не видны между элементами-соседями. Чтобы переменную точно было видно во всём документе, её нужно задать самому корневому элементу html, но лучше даже :root, на случай если это корневой элемент svg.

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

Кастомные свойства можно использовать даже внутри функции calc(), которая посчитает результат выражения внутри. Уже не очень похоже на привычный CSS, правда? Стоит ли говорить, что все препроцессоры уже умерли от зависти, глядя на такое.

Ещё кастомные свойства становятся идеальным транспортом для данных между скриптами и стилями. Например, вы можете динамически считать координаты мыши в JS и пробрасывать их в кастомные свойства через setProperty в нужный элемент.

Дальше в стилях уже можно решить: использовать их в top и left или transform: translate(). И наоборот: значение свойства можно получить в JS с помощью getPropertyValue.

И это я только кастомные свойства лапкой потрогал, дальше ещё куча интересного, что кардинально меняет работу со стилями. Читайте и смотрите дальше сами: статьи, видео и слайды в описании.

Кастомные свойства — это не border-radius, который либо делает красиво, либо нет. Бросаться всё переделывать на них пока рано, вёрстка может сильно поломаться в браузерах, которые их не поддерживают. Но уже пришло время пробовать и уметь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *