Угловой импорт глобальных переменных SCSS

Я хотел бы перейти на SCSS в моем проекте Angular. Пока что единственное, что я хочу от SCSS, - это переменные. На данный момент я использую переменные CSS, которые работают очень хорошо, потому что вы объявляете их в :root в моем файле styles.css, а затем можете использовать их во всех файлах CSS компонентов в приложении.

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

Я немного разочарован тем, почему лучшая версия чего-то требует от меня этого. Поэтому я уверен, что должен быть способ не импортировать мои переменные в каждый SCSS, в котором они мне нужны.

Например, я хочу создать переменные в моем файле styles.scss, а затем иметь возможность использовать эти переменные в стилях любого из моих компонентов, ничего не импортируя. В CSS переменные типа --MyVar в :root доступны из CSS любых компонентов.

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

ESR 14.08.2018 08:11

Под глобальным я подразумеваю несколько файлов .css. !global - это всего лишь утверждение, которое применяется к текущему файлу .scss, в котором он находится. Если я неправильно понимаю, пожалуйста, добавьте официальный ответ с примером, если вы не возражаете :)

Paul Kruger 14.08.2018 09:22

@PaulKruger есть какие-нибудь ответы, решающие вашу проблему ???

malbarmavi 01.07.2019 21:37

Да, прости. Это было так давно! Спасибо за ваш ответ!

Paul Kruger 01.07.2019 21:42
Приемы 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 сценарий полностью изменился.
17
4
15 104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не думаю, что вам нужно импортировать переменную scss везде, где вы хотите ее использовать

Предположим, у вас есть файл

_variables.scss

$white:#fff;
$black:#000;

затем в main.scss вы можете импортировать этот файл

main.scss

@import "variables.scss";

Теперь предположим, что вы хотите использовать эти переменные, например, в файле _button.scss.

_button.scss

button{
 color:$black
}

Вы можете напрямую использовать эти переменные при условии, что вы импортируете файл _button.scss в файл main.scssпослеvariable.scss

Размещение его после файлов varibles.scss гарантирует, что переменные будут доступны в файле button.scss.

main.scss

@import "variables.scss";
@import "button.scss";

Что касается переменных CSS, вы можете использовать их SCSS,

попробуйте запустить следующий фрагмент в Sassmeister

:root{
  --gridWidth: 45px; 
  --gridHeight: 45px; 
}

.Grid {
    width: var(--gridWidth);
    height: var(--gridHeight);
    border: 1px solid black;
}

Это работает, но вы все еще пишете строку импорта. Я предполагаю, пишете ли вы строку импорта в main.scss или в любом другом component.scss, она по-прежнему пишет одну строку. Так что я не уверен, много ли вы здесь выигрываете.

Paul Kruger 21.08.2018 14:58
Ответ принят как подходящий

Вам не нужно каждый раз импортировать переменные, рассмотрите этот пример.

theme.scss

$primary-color:#00b289;
$secondary-color:#505050;

@import "components/_checkbox";
@import "components/_button";

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

другой способ - создать частичный файл sass, включающий все ваши переменные и импортированный один раз

theme.scss

@import "_variables.scss";
@import "components/_checkbox";
@import "components/_button";

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