Slide 1

Slide 1 text

LESS VS SASS Battle for CSS Efficiency! By: Jon Kinney (@j2fly) - and - Chris Schmitz (@ccschmitz)

Slide 2

Slide 2 text

CSS IS PAINFUL • Verbose • Repetitive • Hard to maintain • Browser inconsistencies • It’s old-school

Slide 3

Slide 3 text

PREPROCESSORS RELIEVE THE PAIN

Slide 4

Slide 4 text

FEATURES • Variables • Mixins / Extend • Nesting • Operations • Color functions • File organization

Slide 5

Slide 5 text

VARIABLES $color: red; div { color: $color; } @color: red; div { color: @color; }

Slide 6

Slide 6 text

VARIABLES $color: black; .scoped { $bg: blue; $color: white; color: $color; background-color: $bg; } .unscoped { color: $color; } // compiles to: .scoped { color: white; background-color: blue; } .unscoped { color: black; } @color: black; .scoped { @bg: blue; @color: white; color: @color; background-color: @bg; } .unscoped { color: @color; } // compiles to: .scoped { color: white; background-color: blue; } .unscoped { color: black; }

Slide 7

Slide 7 text

MIXINS @mixin bordered { border-top: dotted 1px black; border-bottom: solid 2px black; } #menu a { @include bordered; } .bordered { border-top: dotted 1px black; border-bottom: solid 2px black; } #menu a { .bordered; }

Slide 8

Slide 8 text

MIXINS (WITH PARAMS) @mixin bordered($width: 2px) { border: $width solid black; } #menu a { @include bordered(4px); } .bordered(@width: 2px) { border: @width solid black; } #menu a { .bordered(4px); }

Slide 9

Slide 9 text

MIXINS (EXTEND) .bordered { border: 1px solid back; } #menu a { @extend .bordered; } // compiles to: .bordered, #menu a { border: 1px solid back; }

Slide 10

Slide 10 text

NESTING p { a { color: red; &:hover { color: blue; } } }

Slide 11

Slide 11 text

OPERATIONS 1cm * 1em => 1 cm * em 2in * 3in => 6 in * in (1cm / 1em) * 4em => 4cm 2in + 3cm + 2pc => 3.514in 3in / 2in => 1.5 1cm * 1em => Error 2in * 3in => 6in (1cm / 1em) * 4em => Error 2in + 3cm + 2pc => Error 3in / 2in => 1.5in

Slide 12

Slide 12 text

COLOR FUNCTIONS lighten($color, $amount) darken($color, $amount) saturate($color, $amount) desaturate($color, $amount) lighten(@color, @amount) darken(@color, @amount) saturate(@color, @amount) desaturate(@color, @amount)

Slide 13

Slide 13 text

FILE ORGANIZATION @import "/stylesheets/reset.css" @import "mixins/_variables.css.sass" @import "mixins/_css3.css.sass" @import "mixins/_mixin.css.sass" body { background: #f0efee color: $text }

Slide 14

Slide 14 text

DIFFERENCES • JavaScript compiler • Namespaces • Pattern matching • @extend • Ruby compiler • Control structures SASS LESS

Slide 15

Slide 15 text

GETTING STARTED Drop the JavaScript compiler in the head of your document: SASS LESS From the command line: gem install sass sass --watch style.scss => style.css

Slide 16

Slide 16 text

GUI COMPILERS • Scout • LiveReload • Codekit