I do already have SCSS variables defined in src/styles/settings/_variables.scss
and I am importing them into src/styles.scss
, but still these variables
You just need to add a little more config, so where you are declaring your global variables, you need to wrap it up in :root{}
. So in src/styles/settings/_variables.scss
.
:root
{
--blue: #00b; // or any global you wish to share with components
}
Then when you use them in the SCSS you will need to access them like so.
.example-class {
background-color: var(--blue)
}
To add to this regarding comments, this method can use mixins
, @media
and keyframes
and is not limited to just colours / font. That was an example.
From my understanding you need a global file src/assets/style/global
and then to import each scss file into there where you are defining them like so.
@import 'filename';
If you dont want global variables to be used in within a component look when you have the globals working. Look into ViewEncapsulation, as this can be used to ignore them.
In angular 8 work for me.
In your _variable.scss file you have to add:
:root{--my-var:#fabada}
After that go in your angular.json and add this in "styles":
{"input":"yourPath/_variables.scss"}
Is there any ways to make global file with scss variables available for all components?
Without importing global file everytime in each component, you want those sass variables been available, it's not possible.
The way it works in SASS, if using partials to better organize code, you can apply @import
directive for referencing. So if there're some sass variables in shared/_variables.scss
:
$lightslategray: #778899;
$darkgray: #A9A9A9;
and these variables need to be used in another stylesheet, stylesheet with them must be @import-ed into it firstly:
// Shared
@import "shared/variables";
.content {
background: $lightslategray;
}
In Angular it works in a similar way (related referencing external stylesheet). So if you need some sass variables, mixins or functions
to be used by a particular component.scss
, there is no other clean way, but to reference them in that component.scss
using @import
directive. To ease the task, you can create a file src/_variables.scss
and use syntax like this in your component.scss
:
@import “~variables.scss”;