Combining scss files into one with imports - sass

If I want to split my scss into multiple files, does every file need an import statement.
Eg if I have
_variables.scss,
Header.scss
Footer.scss
Content.scss
Will the (bottom) 3 files require imports in them (if they're using variables)
I want to have a final file eg Site.scss that merges the 3 with imports
or should the variables imports go in Site.scss too?

Every file needs an import statement, but they can all be in the root file.
Here's a great little tutorial that I've been following to make it work:
How to Structure a SASS Project

In your Site.scss file, import the _variables.scss at the top and all other files below it
#import 'variables';
#import 'Header';
#import 'Footer';
#import 'Content';
That way all other files can use the variables. You don't need to include _variables.scss in every other files.

Related

Ruby sass and undefined variables in imported files

I have two scss files in a folder scss which will be included into a primary app.scss file. All of these are transpiled to corresponding css files in /css folder:
scss/global/swatches.scss:
$swatch-bg: rgba(30,30,45,1);
scss/global/panels.scss
.panel {
background-color: $swatch-bg;
}
And then they are both included in my app.scss file:
scss/app.scss:
#import 'global/swatches.scss';
#import 'global/panels.scss';
and then I run:
sass --watch scss:css
This correctly creates all expected files inthe css/folder.
However, if I now modify panels.scss which contains a reference to a variable (imported in app.scss) the watcher complains it can't find the variable. But if I edit and save app.scss after, it will correctly compile and the variable is correctly parsed too.
So it seems, if I edit app.scss, any variables defined in any of the imported files will be available to subsequent imported files when sass is compiling. But this is only true when editing app.scss.
How can I get it to compile correctly without having to add the same imports to each file? Is what I am trying to do even possible?
I managed to resolve this by using partials instead in the following manner:
Firstly, rename all my imports to include a prefix, for example:
global/_swatches.scss
and then in my main file (app.scss) import is as follows:
#import 'global/swatches';
Notice the lack of the underscore and .scss file extension

sccs mixins folder is not accepted by preprocessor

I've set up my own (Bootstrap 3) scss mixins as it is done in Bootstrap itself:
a mixin folder in my scss folder (template). Like this:
-scss (with template.scss)
-- bootstrap
-- template/mixins
linked it in the file template.scss: #import "template/mixins";
Prepros doesn't accept it: "File to import not found or unreadable: template/mixins".
How do I set this up?
Found it. The folder was set up correctly, but the corresponding #import was not. One level too high. #import mixins shouldn't be in template.scss, but in the template folder itself as _mixins.scss

SASS: "Autosave" imports of partials?

Novice web dev here getting set up with SASS for the first time. Currently using Grunt to compile my css from a main SASS file.
So I have three files:
//main.css
/*some css*/
//main.scss
#import 'header';
//_header.scss
/* some sass */
When I edit and save the _header.scss file, I also have to save the main.scss file. Only then will gulp compile changes in the main.css file.
Is there a way to "autosave" every file that contains an import of a partial?
Based on what your providing I am thinking it has something to do with your main.css stuff at the top of your file. I am assuming that you have actual css below that comment in the real file?
Best practice is to #import everything at the top of the file before you do anything else.
If that is exactly what you have in the real file then it might be with how your running grunt.. Would you be able to provide your grunt config file please?

How to compile all SASS files in a directory with Elixir?

I'm using elixir to compile my scss files.
assuming that this is my folder structure:
- app.scss
- header.scss
- footer.scss
- home/
- home1.scss
- home2.scss
For one file I can use mix.sass('app.scss'); but what if for all files in my directory without need to add them one by one?
I've tried:
mix.sass('*.scss');
mix.sass('**/*.scss');
mix.sass(['*.scss']);
mix.sass(['**/*.scss']);
and the only file I can get is the public/css/app.css
How can I compile all files in order to get something like:
- app.scss
- header.scss
- footer.scss
- home/
- home1.scss
- home2.scss
I think the wildcard solution doesn't work at all.
Have you tried to import your file dependencies, with #import "file2", and only process those files?
Assuming:
home1.scss
#import "../app"
#import "../header"
#import "../footer"
// home1 css
home2.scss
#import "./home1"
// home2 css
with:
mix.sass('home1.scss');
mix.sass('home2.scss');
you'll generate only home1.css and home2.css with the dependencies style on them.
This way you'll improve your code and get a better control from dependencies.
You can provide the file globs as an array, like this:
mix.sass(['./app.scss', './home.scss'])
Or you could import just one sass file in elixir and use the sass import directive in that file to include the rest of the files.
#import 'home.scss';
http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import

PHPStorm: How do I combine multiple Sass files into one?

I have _header.scss, _footer.scss and _main.scss and I want to combine them all into one and generate style.css.
I know it has to do with file watchers, but I haven't been able to figure out how to combine multiple files into one.
Create file styles.scss that contain this code
#import 'header';
#import 'main';
#import 'footer';
It's not a PHPStorm feature, it's a SASS feature.
In style.scss it should start out with:
#import "_header";
#import "_footer";
#import "_main";
PHPStorm doesn't have to combine the files, Scss does.
#SlawaEremkin above is correct.
Be sure that the import file is named without an underscore (not a SASS partial) otherwise there won't be an output CSS file.
Correct
styles.scss
Incorrect
_styles.scss

Resources