Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to...

34
Beginner’s Guide to SASS WordCamp Norrköping 2015 28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Transcript of Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to...

Page 1: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Beginner’s Guide to SASSWordCamp Norrköping 2015

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Page 2: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Who am I?

• Bernhard Kau

• Berlin, Germany

• PHP Developer

• WordPress Plugin Developer

• CSS Tinkerer

• Organizer of the WP Meetup Berlin

• Blogger on kau-boys.de

• Twitter @2ndkauboy

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 2

Page 3: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

What is SASS?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 3

SASS: „Syntactically Awesome Style Sheets“

Page 4: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

So what is SASS then?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 4

SASS is a CSS preprocessor

Page 5: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

A what?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 5

It‘s something like: „coding in CSS“

Page 6: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

SASS has two syntaxes

SASS (indented syntax) SCSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 6

navul

margin: 0padding: 0list-style: none

lidisplay: inline-block

adisplay: blockpadding: 6px 12pxtext-decoration: none

nav {ul {

margin: 0;padding: 0;list-style: none;

}

li { display: inline-block; }

a {display: block;padding: 6px 12px;text-decoration: none;

}}

Page 7: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Important SASS features

• Variables

• Nesting

• Partials

• Import

• Mixins

• Extend/Inheritance

• Operators

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 7

Page 8: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Variables

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 8

$font-stack: Helvetica, sans-serif;$primary-color: #333;

body {font: 100% $font-stack;color: $primary-color;

}

body {font: 100% Helvetica, sans-serif;color: #333;

}

Page 9: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Nesting

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 9

nav {ul {

margin: 0;padding: 0;list-style: none;

}

li { display: inline-block; }

a {display: block;padding: 6px 12px;text-decoration: none;

}}

nav ul {margin: 0;padding: 0;list-style: none;

}

nav li {display: inline-block;

}

nav a {display: block;padding: 6px 12px;text-decoration: none;

}

Page 10: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Partials

/*Theme Name: My ThemeTheme URI: http://example.com/my-themeAuthor: MeAuthor URI: http://example.com/Description: Just a random theme*/@import "_variables"; // Sass files with leadering underscore@import "_normalize";@import "_navigation";

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 10

Page 11: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Import

/*Theme Name: Twentyfifteen ChildTheme URI: http://example.com/my-themeAuthor: MeAuthor URI: http://example.com/Description: Just a random themeTemplate: twentyfifteen*/// this is an ordinary CSS import@import "../twentyfifteen/style.css"; // files without a extension in will merge in (they must have the extension .sass or .scss)@import "_variables"; @import "_child_theme_styles";

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 11

Page 12: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Mixins („Functions“ in CSS)

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 12

@mixin border-radius($radius) {-webkit-border-radius: $radius;-moz-border-radius: $radius;-ms-border-radius: $radius;border-radius: $radius;

}

.box { @include border-radius(10px); }

.box {-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;border-radius: 10px;

}

Page 13: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Extend/Inheritance

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 13

.message {border: 1px solid #ccc;padding: 10px;color: #333;

}

.success {@extend .message;border-color: green;

}

.error {@extend .message;border-color: red;

}

.message, .success, .error {border: 1px solid #cccccc;padding: 10px;color: #333;

}

.success {border-color: green;

}

.error {border-color: red;

}

Page 14: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Operators

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 14

.container { width: 100%; }

article[role="main"] {float: left;width: 600px / 960px * 100%;

}

aside[role="complimentary"] {float: right;width: 300px / 960px * 100%;

}

.container {width: 100%;

}

article[role="main"] {float: left;width: 62.5%;

}

aside[role="complimentary"] {float: right;width: 31.25%;

}

Page 15: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Extensions

• There are several extensions to add more features to SASS

• Probably the most used of those extensions is Compass

• It extends SASS with useful helpers and mixins

• Especially when using it for CSS3

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 15

Page 16: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Compass examples

SCSS CSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 16

@import "compass";

.button {@include border-radius(2px);@include box-shadow(0 0 10px #666);@include background(

linear-gradient(to bottom, #ccc 0%,#eee 100%

));

}

.button {-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;-moz-box-shadow: 0 0 10px #666666;-webkit-box-shadow: 0 0 10px #666666;box-shadow: 0 0 10px #666666;background: url('data:image/svg+xml;base64,PD9…==');background: -webkit-gradient(

linear, 50% 0%, 50% 100%,color-stop(0%, #cccccc), color-stop(100%, #eee)

);background: -moz-linear-gradient(top, #ccc 0%, #eee 100%);background: -webkit-linear-gradient(top, #ccc 0%, #eee 100%);background: linear-gradient(to bottom, #ccc 0%, #eee 100%);

}

Page 17: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

OK, so which browser supports SASS?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 17

NOT A SINGLE ONE!

Page 18: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

And how does it work then?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 18

SASS will be compiled

Page 19: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

How will SASS be compiled?

• SASS/Compass (Ruby gem)

• libsass (C/C++ library, implemented in many programming languages)

• grunt-sass (libsass)/grunt-contrib-sass (ruby)

• grunt-compass (veraltet)/grunt-contrib-compass (ruby)

• gulp-sass (libsass)/gulp-ruby-sass (ruby)

• gulp-compass (ruby)

• CodeKit (Mac, commercial)

• Compass.app (Mac, commercial)

• http://sassmeister.com/ (Online-Compiler with many extensions)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 19

Page 20: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Alternatives

• CSS-Preprozessors:• LESS

• Stylus

• Myth

• CSS-Postprozessors• Autoprefixer

• Pleeease (node.js)

• CSS3/CSS4

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 20

Page 21: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (comments)

Beware of comments!

• SASS knows two kinds of comments• single line comments (which do not exist in CSS)

• block comments

• single line comments will be deleted on compilation

• block comments will remain in the compiled file

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 21

Page 22: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (comments)

SCSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 22

CSS

$main-font-color: black;$main-background-color: white;

body {color: $main-font-color;

}

.content {// color: $main-font-color;/*background-color: $main-background-color;margin: 0;*/margin: 0 auto;

}

body {color: black;

}

.content {/*background-color: $main-background-color;margin: 0;*/margin: 0 auto;

}

Page 23: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (nesting)

HTML

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 23

SCSS

<div class="main-nav"><ul class="nav-list">

<li class="nav-node"><a class="nav-link" href="#"></a>

</li><li class="nav-node">

<a class="nav-link" href="#"></a></li><li class="nav-node">

<a class="nav-link" href="#"></a></li>

</ul></div>

.main-nav {.nav-list {

padding-left: 0;.nav-node {display: inline-block;.nav-link {color: black;}

}}

}

Page 24: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (nesting)

SCSS (bad!)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 24

CSS

.main-nav {.nav-list {padding-left: 0;.nav-node {

display: inline-block;.nav-link {color: black;}

}}

}

.main-nav .nav-list {padding-left: 0;

}.main-nav .nav-list .nav-node {display: inline-block;

}.main-nav .nav-list .nav-node .nav-link {color: black;

}

Page 25: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (nesting)

SCSS (better!)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 25

CSS

.main-nav {.nav-list {

padding-left: 0;}.nav-node {

display: inline-block;}.nav-link {

color: black;}

}

.main-nav .nav-list {padding-left: 0;

}.main-nav .nav-node {display: inline-block;

}.main-nav .nav-link {color: black;

}

Page 26: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (The Parent Selector „&“)

SCSS

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 26

CSS

/* wrong */.nav-link {color: black;.active { color: navy; }:hover { color: gray; }

}/* correct */.nav-link {color: black;&.active { color: navy; }&:hover { color: gray; }

}

/* wrong */.nav-link { color: black; }.nav-link .active { color: navy; }.nav-link :hover { color: gray; }

/* correct */.nav-link { color: black; }.nav-link.active { color: navy; }.nav-link:hover { color: gray; }

Page 27: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (The Parent Selector „&“)

SCSS (not easy to understand)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 27

CSS

.social-link {border: 0;&-facebook {background-image: url(facebook.png);}&-twitter {background-image: url(twitter.png);}

}

.social-link {border: 0;

}.social-link-facebook {background-image: url(facebook.png);

}.social-link-twitter {background-image: url(twitter.png);

}

Page 28: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (The Parent Selector „&“)

SCSS (redundat nesting)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 28

SCSS (optimized)

.message {span {

a {border-color: gray;

}}

}body.error .message {span {

a {border-color: red;

}}

}

.message {span {

a {border-color: gray;body.error & {

border-color: red;}

}}

}

Page 29: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (useful Mixins)

Different contents per pixel ratio (Retina)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 29

@mixin pixel-ratio($ratio){@media (-webkit-min-device-pixel-ratio: $ratio), /* Webkit browsers */

(min--moz-device-pixel-ratio: $ratio), /* old Firefox (prior to FF 16) */(min-resolution: #{$ratio}dppx), /* the standard using dppx */(min-resolution: #{$ratio * 96}dpi){ /* fallback using dpi */

@content;}

}

Page 30: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (useful Mixins)

Different background images per pixel ratio

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 30

@mixin background-image-hidpi($normalImage, $hdpiImage, $ratio){// normal imagebackground-image: url('#{$normalImage}');// high dpi image@include pixel-ratio($ratio){

background-image: url('#{$hdpiImage}');}

}

Page 31: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (useful Mixins)

Mobile First with IE<9

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 31

@mixin respond-to-ie($size){@if $old-ie {

@content;} @else {

@media all and (min-width: $size) {@content;

}}

}

$old-ie: false !default;@import "_respond-to-ie";

@include respond-to-ie($breakMedium){body {

margin: 0;}

}

$old-ie: true;@import styles.scss

style.scss

old_ie.scss<!--[if lte IE 8]><link rel="stylesheet" href="old_ie.css" media="all" /><![endif]--><!--[if gt IE 8]><!--><link rel="stylesheet" href="styles.css" media="all" /><!--<![endif]-->

Page 32: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Tips (alternative stylesheets)

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 32

<link rel="stylesheet" title="(current)" href="topnav_current.css" /><link rel="stylesheet alternate" title="red" href="topnav_red.css" /><link rel="stylesheet alternate" title="blue" href="topnav_blue.css" /><link rel="stylesheet alternate" title="green" href="topnav_green.css" />

// overwrite navigation Colors$topnavBackgroundColor: transparent;$topnavColor: $colorWhite;$topnavHoverBackgroundColor: $colorWhite;$topnavHoverColor: $colorWhite;$topnavActiveBackgroundColor: #3F80E9;$topnavActiveColor: $colorWhite;$subnavBackgroundColor: #3F80E9;$subnavColor: $colorWhite;$subnavDividerColor: $colorWhite;

@import "topnav_medium";

Page 33: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Sources/Links

• http://sass-lang.com/

• http://compass-style.org

• http://sass-compatibility.github.io/

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 33

Page 34: Beginner’s Guide to SASS - Kau-Boys · •There are several extensions to add more features to SASS •Probably the most used of those extensions is Compass •It extends SASS with

Questions?

28.08.2015 Bernhard Kau | @2ndkauboy | kau-boys.de 34

Thanks and have fun with SASS!