I decided to write my own playbook that covers Scss file structure standards - I will probably add to this as I go.
I have spent a lot of time looking at different Sass/Scss formatting, naming, and architecture standards. The bible probably being Hugo Giraudel’s Sass Guidelines - Although very comprehensive, well maintained, and well written the standards were a little too thorough for my needs.
scss/ # Import all ‘-dir.scss’ files
|
|- abstracts/
| |- __abstracts-dir.scss # Import all abstracts .scss files
| |- _fonts.scss # Font Import
| |- _mixins.scss # Scss Mixins
| |- _variables.scss # Scss Variables
|
|- base/
| |- __base-dir.scss # Import all base .scss files
| |- _reset.scss # Custom Reset/Normalize
| |- _typography.scss # Typography Rules
| … # Etc.
|
|- components/
| |- __components-dir.scss # Import all components .scss files
| |- _button.scss # Button Styles
| |- _input.scss # Input Styles
| |- _modal.scss # Modal Styles
| … # Etc.
|
|- layouts/
| |- __layouts-dir.scss # Import all layouts .scss files
| |- _footer.scss # Footer Styles
| |- _main-navigation.scss # Main Navigation Styles
| … # Etc.
|
|- vendor/
| |- __vendor-dir.scss # Import vendor folders
| |- bourbon/ # Bourbon
| |- fontawesome/ # Font Awesome
| |- neat/ # Bourbon Neat
| |- normalize/ # Normalize
| … # Etc.
|
`styles.scss # Main Scss File
-dir.scss
files should be imported@charset 'utf-8';
//Vendor
@import "vendor/__vendor-dir";
//Abstracts
@import "abstracts/__abstracts-dir";
//Base Styles
@import "base/__base-dir";
//Components
@import "components/__components-dir";
//Layout
@import "layouts/__layouts-dir";
__vendors-dir.scss
@import
per line/*
This file is used to contain all vendor imports.
*/
//Import Vendor files
@import "bourbon/bourbon"; //4.2.6
@import "neat/neat"; //1.7.2
@import "fontawesome/font-awesome"; //4.4.0
@import "normalize/normalize"; //3.0.3
/* Additonal Vendor Tools */
__abstracts-dir.scss
@import
per line_fonts.scss
_mixins.scss
_variables.scss
/*
This file is used to contain all abstracts imports.
Files inside this folder can contain abstract settings, helpers or functions. They have no direct output.
*/
//Import Abstracts files
@import "fonts";
@import "mixins";
@import "variables";
_fonts.scss
//Font Imports
@include font-face("Open Sans", "../fonts/open-sans/OpenSans-Light", 300, $file-formats: ttf);
_variables.scss
//Variables
//Colors
$red: #EF4B46;
$blue: dodgerblue;
$yellow: rgba(239, 181, 67, 1);
__base-dir.scss
h1-6
, p
, a
, blockquote
, etc.) should be includedbody
, main
, article
, div
, etc.) should also be included@import
per line_reset.scss
_typography.scss
/*
This file is used to contain all base imports.
Files inside this folder can contain global styles used in the project.
*/
//Import Base files
@import "reset";
@import "typography";
/* Additonal Base Stylesheets */
__components-dir.scss
@import
per line/*
This file is used to contain all component imports.
Files inside this folder should contain all styles relating to a reusable component.
*/
//Import Component files
@import "button";
@import "input";
@import "modal";
/* Additonal Component Stylesheets */
_button.scss
//Button
.btn {
display: block;
color: $red;
border-color: transparent;
&:disabled,
&.disabled {
pointer-events: none;
}
}
//Alternate Button
.btn.alt {
color: $blue;
}
__layouts-dir.scss
@import
per line/*
This file is used to contain all component imports.
Files inside this folder can contain specific element styles and layout.
*/
//Import Layout files
@import "main-navigation";
@import "footer";
//Additonal Layouts Stylesheets
_footer.scss
//Footer
footer {
@include display(flex);
@include justify-content(space-between);
width: 100%;
&.dark {
background: rgba(0,0,0,1);
}
}
//Footer Buttons
footer .btn {
@include flex(0 0 auto);
color: $red;
}
-dir.scss
file.__components-dir.scss
/*
This file is used to contain all component imports.
Files inside this folder should contain all styles relating to a reusable component.
*/
//Import Component files
@import "button";
@import "input";
@import "modal";
@import "accordion";
@import "dropdown";
@import "carousel";
@import "form";
@import "icon";
@import "label";
__layouts-dir.scss
/*
This file is used to contain all component imports.
Files inside this folder can contain specific element styles and layout.
*/
//Import Layout files
@import "main-navigation";
@import "footer";
@import "sidebar";
@import "masthead";
_footer.scss
//Footer
footer {
@include display(flex);
@include justify-content(space-between);
width: 100%;
&.dark {
background: rgba(0,0,0,1);
}
.container {
padding: 1em;
}
}
//Footer Buttons
footer .btn {
@include flex(0 0 auto);
color: $red;
}
//Footer Copyright Message
footer .copyright {
text-align: center;
}
// This element will move when it’s parent is active
/*
This file is used in all instances of a button
Colors used within the button.scss file are defined here
*/
The following lines of code in the _config.yml
file tell Jekyll what to compile.
sass:
sass_dir: assets/_scss # Scss location
style: :compressed
I have added a few example stylesheets to /base
, /components
, and /layouts
too.