3 Steps to Make Better & Faster Frontends

37
3 Steps to Make Better & Faster Frontends

description

3 Steps to Make Better & Faster Frontends with SCSS/Sass, Compass and Lemonade for CSS sprites. I gave this talk at Railscamp Germany 4.

Transcript of 3 Steps to Make Better & Faster Frontends

Page 1: 3 Steps to Make Better & Faster Frontends

3 Steps to Make Better & Faster

Frontends

Page 2: 3 Steps to Make Better & Faster Frontends

SCSS > DRY CSS

Compass > Simple CCS3

Lemonade > Easy Sprites

Page 3: 3 Steps to Make Better & Faster Frontends

gem install haml

Page 4: 3 Steps to Make Better & Faster Frontends

Variables$my-color: #ab42ef;

body { background: $my-color;}

Page 5: 3 Steps to Make Better & Faster Frontends

Color Calculationsh1 { background: lighten($my-color, 23%); color: darken(#c24, 10%); border-color: desaturate(red, 50%);}

Page 6: 3 Steps to Make Better & Faster Frontends

Color Functions★ opacify(color, amount)★ transparentize(color, amount)★ lighten(color, amount)★ darken(color, amount)★ saturate(color, amount)★ desaturate(color, amount)★ adjust-hue(color, degrees)★ mix(color1, color2, weight)★ grayscale(color)★ complement(color)

Page 7: 3 Steps to Make Better & Faster Frontends

RGBA Colorsh2 { background: rgba(#00f, 0.7);}

R, G, B#hex

colorconst$variables

Page 8: 3 Steps to Make Better & Faster Frontends

Cascadingh1 { color: red; a { color: blue; }}

Page 9: 3 Steps to Make Better & Faster Frontends

Mixins@mixin my-style { background: red;}

.my-box { @include my-style;}

Page 10: 3 Steps to Make Better & Faster Frontends

Mixin Parameters@mixin my-style($color: red) { background: darken($color, 5%);}

.my-box { @include my-style(#ff0);}

Page 11: 3 Steps to Make Better & Faster Frontends

Cascading Mixins@mixin my-style { a { background: red; }}

.my-box { @include my-style;}

Page 12: 3 Steps to Make Better & Faster Frontends

Extending.box { background: red;}

.bordered-box { border: 1px black solid; @extend .box;}

Page 13: 3 Steps to Make Better & Faster Frontends

Result.box, .bordered-box { background: red;}

.bordered-box { border: 1px black solid;}

Page 14: 3 Steps to Make Better & Faster Frontends

@extend=

inverse mixin

Page 15: 3 Steps to Make Better & Faster Frontends

Alternative Syntax=my-style($color: red) background: darken($color, 5%)

.my-box color: red +my-style(#ff0) a, span color: blue *.sass

*.scss

Page 16: 3 Steps to Make Better & Faster Frontends

More to Learn★ Include partials

(no asset packer needed)

★ Auto compress CSS files

★ @if, @for, @while syntax

★ “&” as current cascading placeholder

Page 17: 3 Steps to Make Better & Faster Frontends

SCSS > DRY CSS

Compass > Simple CCS3

Lemonade > Easy Sprites

Page 18: 3 Steps to Make Better & Faster Frontends

gem install compass

Page 19: 3 Steps to Make Better & Faster Frontends

CSS3@import "compass";

.box { background: red; @include border-radius(4px); @include box-shadow( rgba(#ccc, 0.5), 3px, 3px, 5px));}

Page 20: 3 Steps to Make Better & Faster Frontends

Helpersh1 { @include ellipsis; @include clearfix;}

a { @include hover-link;}

Page 21: 3 Steps to Make Better & Faster Frontends

Frameworks@import "blueprint";

@include blueprint;

.box { @include column(3);}

Page 22: 3 Steps to Make Better & Faster Frontends

★ Easy to extend with your own gem

★ Use other frameworks(960gs, suzy, YUI, YAML, jqTouch, …)

★ Write own frameworks

More to Learn

Page 23: 3 Steps to Make Better & Faster Frontends

SCSS > DRY CSS

Compass > Simple CCS3

Lemonade > Easy Sprites

Page 24: 3 Steps to Make Better & Faster Frontends

gem install lemonade

Page 25: 3 Steps to Make Better & Faster Frontends

Simple Sprites.add { background: sprite-image("icons/pl.png");}

.remove { background: sprite-image("icons/rm.png");}

all icons by p.yusukekamiyamane.com (CC by 3.0)

Page 26: 3 Steps to Make Better & Faster Frontends

Output.add { background: url("icons.png");}

.remove { background: url("icons.png") 0 -16px;}

Page 27: 3 Steps to Make Better & Faster Frontends

Right Aligned.something { background: sprite-image("i/wide.png");}a.next { background: yellow no-repeat sprite-image("i/n.png", 100%); padding-right: 20px;}

Page 28: 3 Steps to Make Better & Faster Frontends

Result.something { background: url("i.png");}a.next { background: yellow no-repeat url("i.png") 100% -20px; padding-right: 20px;}

Example link

Page 29: 3 Steps to Make Better & Faster Frontends

Empty Space.add { background: sprite-image("icons/pl.png");}.remove { background: yellow no-repeat sprite-image("icons/rm.png"); padding: 20px;}

Page 30: 3 Steps to Make Better & Faster Frontends

Could be Better.add { background: url("icons.png");}.remove { background: url("icons.png") 0 -16px; padding: 20px;}

Example link

Page 31: 3 Steps to Make Better & Faster Frontends

Empty Space.add { background: sprite-image("icons/pl.png");}.remove { background: yellow no-repeat sprite-image("icons/rm.png", 0, 0, 20px); padding: 20px; }

Page 32: 3 Steps to Make Better & Faster Frontends

Just Perfect.add { background: url("icons.png");}.remove { background: url("icons.png") 0 -36px; padding: 20px;}

Example link

Page 33: 3 Steps to Make Better & Faster Frontends

Sprite Generation★ Sprite image named by directory:

“icons/*.png” > “icons.png”

★ Background position added only if needed

★ Add “no-repeat” by yourself:background: sprite-image("…") no-repeat;

Page 34: 3 Steps to Make Better & Faster Frontends

Any questions?

Page 37: 3 Steps to Make Better & Faster Frontends

[email protected]

twitter

blog

first name

last name