Mixins are a smart way of reusing our code.
One of the last steps in refactoring is replacing common patterns in our code with reusable mixins.
Refactoring Style Into Mixins
Let’s start by writing a mixin that writes our @font-face declarations
Let’s say we want to refactor the following code existing inside the _typography.scss partial.
/* Web Fonts -------------------- */
@font-face {
font-family: 'Abolition Regular';
src: url('../fonts/abolition-regular-webfont.eot');
src: url('../fonts/abolition-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/abolition-regular-webfont.woff') format('woff'),
url('../fonts/abolition-regular-webfont.ttf') format('truetype');
}
...
1. Create Mixins Partial
First, create the _mixins.scss partial file.
Styles File Structures
scss
|__ style.scss
|__ base
| _index.scss
| _base.scss
| _mixins.scss
| _variables.scss
|__ components
| _index.scss
| _extends.scss
| _buttons.scss
| _icons.scss
| _typography.scss
| etc...
|__ layout
_index.scss
_extends.scss
_header.scss
_footer.scss
_containers.scss
_columns.scss
etc...
2. Import Mixins Partial
Import _mixins.scss partial file in the _index.scss base partial file.
Always import your mixins right after the variables partial.
_index.scss
/* Base Imports ======================*/
@import 'variables';
@import 'mixins';
@import 'base';
3. Write Your Mixins Code
Refactor the above font face code into a dynamic mixin.
_mixins.scss
// Web Fonts
@mixin font-face($family, $file) {
@font-face {
font-family: $family;
src: url('#{$path-font}/#{$file}-webfont.eot');
src: url('#{$path-font}/#{$file}-webfont.eot?#iefix') format('embedded-opentype'),
url('#{$path-font}/#{$file}-webfont.woff') format('woff'),
url('#{$path-font}/#{$file}-webfont.ttf') format('truetype');
}
}
4. Include the Mixins in Your Style
Now include your mixin instead of the old font face code.
_typography.scss
/* Web Fonts -------------------- */
@include font-face('Abolition Regular', abolition-regular);
...