Запретить SCSS компилировать переменные CSS - Angular-CLI

Я использую Angular5 с sass v1.3.2.

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

В моем _variables.css цвет определяется глобально как:

$brand: #123123;

И, например, используется как:

h1 {
    color: $brand;
}

Я узнал, что могу изменить цвет, если использую переменные CSS, такие как:

# CSS
:root {
    --brand: #123123
}

#JS
document.documentElement.style.setProperty('--brand', '#456456');
# OR
document.querySelector(':root').style.setProperty('--brand', '#456456');

Однако, чтобы сделать это с помощью SCSS, мне нужно было использовать миксин css-vars как таковой:

$brand: #123123;

:root {
  @include css-vars((
    --brand: #{$brand},
  ));
}

И используйте его как:

h1 {
    color: var(--brand);
}

Две проблемы:

  • На самом деле --brand все еще не отображается в корневом каталоге.
  • Кроме того, CSS, сгенерированный в <script type = "text/css"> с помощью angular-cli, нигде не содержит --brand, он фактически компилирует переменную CSS в #123123, поэтому вывод будет:

    h1 { цвет: # 123123; }

Есть идеи о том, как я могу добиться изменения глобального цвета во время выполнения? Или как получить мой CSS в :root, а затем как заставить SASS не компилировать его?

ОБНОВИТЬ

Как показал @JonUleis, нет необходимости использовать css-var. Теперь переменная --brand отображается в DOM по адресу :root.

Однако теперь строка color: var(--brand); по-прежнему не отображается в CSS, а h1 вообще не имеет цветового стиля.

После обновления node-sass до последней версии 4.9.0 с 4.8.3 он отлично заработал.

Если вы все еще используете $brand, а не var(--brand) в значениях свойств, почему бы его не скомпилировать?

jhpratt 14.05.2018 22:07

«Однако, чтобы сделать это с помощью SCSS, мне нужно было использовать миксин css-vars как таковой» - вот где вы меня теряете. Зачем нужно использовать css-vars?

Jon Uleis 14.05.2018 22:08

@jhpratt Я ожидаю, что $brand в :root будет скомпилирован, но я не ожидаю, что выходной css покажет h1 { color: #123123 }, а на самом деле покажет h1 { color: var(--brand); }, но проблема в том, что кажется, что SASS компилирует var(--brand) в #123123, как если бы это SASS var .

zed 14.05.2018 22:09

@JonUleis, поскольку вы не можете записать --brand: #123123; в файл SCSS, он недействителен.

zed 14.05.2018 22:09

@zed Похоже, вы используете устаревшую версию Sass. Прекрасно работает при экспериментировании с SassMesiter.

Jon Uleis 14.05.2018 22:10

@JonUleis Я только что пробовал в SassMeister: --brand: #123123;, вывод: Invalid CSS after "--brand: #123123": expected "{", was ";"

zed 14.05.2018 22:12

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

zed 14.05.2018 22:15

@zed Вот что я вижу: i.imgur.com/8ZXmhzE.png

Jon Uleis 14.05.2018 22:15

@JonUleis обновлен

zed 14.05.2018 22:44

@JonUleis не стесняйтесь писать свой ответ, чтобы я мог принять его как правильный ответ.

zed 15.05.2018 22:31

@zed Готово - спасибо!

Jon Uleis 15.05.2018 22:37
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
11
502
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, вы используете устаревшую версию node-sass, которая еще не была совместима с синтаксисом настраиваемых свойств CSS.

Вот ваш пример кода, успешно компилируемого с использованием Sassmeister без использования миксина css-vars:

Другие вопросы по теме