Categories: Разработка

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

Сначала простой ответ, ниже обсуждаем варианты.

Сразу нужно отметить, что нужно ставить экранирующий слеш перед селектором \:root
@function color($color-name)
  @return var(--color-#{$color-name})

\:root
  --color-gray-600: rgb(75, 85, 99)

p, span
  color: color(gray-600)

На выходе из этого получится такой CSS код:

:root {
  --color-gray-600: rgb(75, 85, 99);
}

p, span {
  color: var(--color-gray-600); 
}

Постановка задачи

Зачем же понадобилось использовать CSS переменные, если мы можем объявлять переменные в самом sass?

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

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

Сложности использования CSS переменных в Sass

Если вы хотите сделать как в примере ниже, то ничего не выйдет, потому что переменная $gray-50 не подставится.

$gray-50: rgb(249, 250, 251)

\:root
  --color-gray-50: $gray-50

p, span
  color: var(--color-gray-50)

Но можно собрать это с помощью map и each, предварительно определив переменные:

$colors: () !default
$colors: map-merge( ( "white": $white, "gray-600": $gray-600, "gray-800": $gray-800 ), $colors )

\:root
  @each $color, $value in $colors
    --#{$color}: #{$value}

На выходе получим что-то подобное:

:root {
  --white: white;
  --gray-600: #4b5563;
  --gray-800: #1f2937; }

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

И нет причин оборачивать CSS свойство в еще одну абстракцию в виде SASS переменной. Если только вы не хотите производить какие-то математические операции с цветами, которые доступны в Sass.

Admin

Share
Published by
Admin

Recent Posts

Отправка писем WooCommerce через GMail

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

7 месяцев ago

html audio play/pause button

jQuery аудио плейер на сайт для нескольких треков с кнопкой Play/Pause

1 год ago

Чек лист по закуску сайта

Favicon Фавиконка это маленькая пиктограмма сайта, нужна для отображения на вкладке браузера и в закладках.…

1 год ago

Не получается зайти в админку WordPress

При входе в админку происходит редирект на ту же страницу входа. Эта статья для вас,…

1 год ago

wp-cli RuntimeException: failed to get url No working transport found

Иногда можно получить такую ошибку: RuntimeException: failed to get url ... No working transport found…

1 год ago

wp-cli под Windows

Перед запуском wp-cli вам потребуется скачать и установить cygwin Весь wp-cli это один файл, который…

1 год ago