У меня уже есть переменные SCSS, определенные в src/styles/settings/_variables.scss, и я импортирую их в src/styles.scss, но все же эти переменные доступны не для каждого отдельного компонента.
Есть ли способ создать глобальный файл, в котором будут храниться все переменные SCSS для остальных моих компонентов? Потому что писать @import в каждом файле компонента .scss очень неприятно, особенно если у меня много вложенных компонентов.
Я знаю, подобных вопросов много, но вроде все они устарели и не относятся к последним версиям Angular.
Я использую Angular 7.3 с CLI.






Is there any ways to make global file with scss variables available for all components?
Без импорта глобального файла каждый раз в каждом компоненте вы хотите, чтобы эти sass-переменные были доступны, это невозможно.
Как это работает в SASS, при использовании частичных кодов для лучшей организации кода вы можете применить директиву @import для ссылок. Итак, если в shared/_variables.scss есть какие-то переменные sass:
$lightslategray: #778899;
$darkgray: #A9A9A9;
и эти переменные нужно использовать в другой таблице стилей, таблица стилей с ними должна быть сначала @import-ed в нее:
// Shared
@import "shared/variables";
.content {
background: $lightslategray;
}
В Angular это работает аналогичным образом (связанная ссылка на внешнюю таблицу стилей). Поэтому, если вам нужно, чтобы какие-то sass variables, mixins or functions использовались конкретным component.scss, нет другого простого способа, кроме как сослаться на них в этом component.scss с помощью директивы @import. Чтобы упростить задачу, вы можете создать файл src/_variables.scss и использовать такой синтаксис в своем component.scss:
@import “~variables.scss”;
Вам просто нужно добавить немного больше конфигурации, поэтому, когда вы объявляете свои глобальные переменные, вам нужно обернуть их в :root{}. Итак в src/styles/settings/_variables.scss.
:root
{
--blue: #00b; // or any global you wish to share with components
}
Затем, когда вы используете их в SCSS, вам нужно будет получить к ним доступ следующим образом.
.example-class {
background-color: var(--blue)
}
Чтобы добавить к этому комментарии, этот метод может использовать mixins, @media и keyframes и не ограничивается только цветами/шрифтом. Это был пример.
Насколько я понимаю, вам нужен глобальный файл src/assets/style/global, а затем импортировать каждый файл scss туда, где вы определяете их таким образом.
@import 'filename';
Если вы не хотите, чтобы глобальные переменные использовались внутри компонента, посмотрите, когда у вас работают глобальные переменные. Посмотрите на ViewEncapsulation, так как это можно использовать для их игнорирования.
Да, нативные переменные css уже довольно хороши, но это касается не только цветов и размера шрифта, но также некоторых миксинов и функций.
попробуйте удалить корень: {} если вам не повезло с вышеуказанным редактированием.
вау, это сработало. Где это в документации sass? Интересно, каковы его последствия...
поэтому, если бы я использовал эту переменную в моем @mixin в том же глобальном файле scss, завернутом в :root {}, как бы это работало? будет ли это распознано всеми другими компонентами, как если бы оно распознало переменную?
Это не решает проблему. Здесь используются переменные CSS custom-properties, а не переменные SCSS.
В angular 8 у меня работает.
В вашем файле _variable.scss вы должны добавить:
:root{--my-var:#fabada}
После этого перейдите в свой угловой.json и добавьте это в "стили":.
{"input":"yourPath/_variables.scss"}
шаг первый: перейдите в пользовательский файл scss (shared/css/_variable.scss) и напишите эту часть
:root{
--color-text: red;
--color-btn-success: green;
}после перейдите в style.scss (это основной файл) и импортируйте этот файл:
@import './shared/css/Variables';теперь вы можете использовать переменные во всех компонентах с этим синтаксисом:
.sample{
color : var(--color-text);
}Легко получить доступ к стилям sass из глобального файла. с двумя шагами.
includePaths в файле angular.json.angular.json
"architect": {
"build": {
...
"options": {
"stylePreprocessorOptions": {
"includePaths": [
"src/styles/var" // add path only, do not include file name
]
},
"styles": [
...
]
}
...
}
}
some-component.scss
@import "var";
mat-toolbar {
height: $toolbar-height;
}
Я использую то же самое, но знаете ли вы, как использовать определенную переменную в CSS, например box-shadow?