Developing WordPress Themes with Modular Sass

Michael DeWitt

devdewitt.com

@devdewitt

Bones, sage, _s

What is Modular?

What is Sass?

//NESTING
.pricing-page {
    .link {
        text-decoration: none;

        &:hover {
            text-decoration: underline;
        }
    }
}

//CSS

.pricing-page .link {
    text-decoration: none;
}

.pricing-page .link:hover {
    text-decoration: underline;
}
//NESTING - .sass
.pricing-page
    .link
        text-decoration: none

        &:hover
            text-decoration: underline
   

.feature-page
    text-align: center

//CSS

.pricing-page .link {
    text-decoration: none;
}

.pricing-page .link:hover {
    text-decoration: underline;
}

.feature-page {
    text-align: center;
}

beware of over nesting!

2-3 levels deep is ideal.

//VARIABLES
$blue: #00f;
$black: #000;
$link-color: $blue;

.pricing-page {
    .link {
        color: $link-color;

        &:hover {
            color: $black;
        }
    }
}

//CSS

.pricing-page .link {
    color: #00f;
}
.pricing-page .link:hover {
    color: #000;
}

Change it once

change it everywhere

//Build some columns with interpolation
$columns: 4;

@for $i from 1 through $columns {
  .cols-#{$i} {
    width: ((100 / $columns) * $i) * 1%;
  }
}
//...The previous snippet would be compiled as:

.cols-1 {
  width: 25%;
}

.cols-2 {
  width: 50%;
}

.cols-3 {
  width: 75%;
}

.cols-4 {
  width: 100%;
}

Check out sass maps

//MIXINS
@mixin css-gradient($from: #dfdfdf, $to: #f8f8f8) {
	background-color: $to;
	background-image: -webkit-gradient(linear, left top, left bottom, from($from), to($to));
	background-image: -webkit-linear-gradient(top, $from, $to);
	background-image: -moz-linear-gradient(top, $from, $to);
	background-image: -o-linear-gradient(top, $from, $to);
	background-image: linear-gradient(to bottom, $from, $to);
}

.button {
    @include css-gradient($orange, $darkOrange);
}

//CSS

.button {
    background-color: #CF5615;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#FB691A), to(#CF5615));
    background-image: -webkit-linear-gradient(top, #FB691A, #CF5615);
    background-image: -moz-linear-gradient(top, #FB691A, #CF5615);
    background-image: -o-linear-gradient(top, #FB691A, #CF5615);
    background-image: linear-gradient(to bottom, #FB691A, #CF5615);
}

bourbon.io/docs/

//FUNCTIONS

.button {
    @include css-gradient($orange, darken($orange, 10%));
}

//THREE SASS FEATURES, TIED TOGETHER
//EXTEND - create a module and customize it
%button {
    @include css-gradient(@orange, darken(@orange, 10%);
    color: @white;
    font-size: 0.75em;

    &:hover {
        @include css-gradient(@orange, darken(@orange, 20%);
    }
}

.big-button {
    @extend %button;
    font-size: 1em;
    padding: 1em;
}
@import "partials/normalize";

// Sass variables
@import "partials/variables";

// typography
@import "partials/typography";

// Sass functions
@import "partials/functions";

// import mixins
@import "partials/mixins";

// the grid
@import "partials/grid";
@media only screen and (min-width: 481px) {
	// styles in 481up.scss
	@import "breakpoints/481up";
} 

@media only screen and (min-width: 768px) {
	// styles in 768up.scss
	@import "breakpoints/768up";
}

@media only screen and (min-width: 1030px) {
	// styles in 1030up.scss
	@import "breakpoints/1030up";
} 

@media only screen and (min-width: 1240px) {
	// styles in 1240up.scss
	@import "breakpoints/1240up";
} 

Can Browsers Read Sass?

Compiling:

  • WP-SCSS

  • Native Ruby Gem

  • COMPASS (CONFIG.RB)

  • GULP/GRUNT

QUEStions

Modular Sass

By Michael DeWitt

Modular Sass

  • 5,523