CSS Extenders

52
http://flic.kr/p/768ooD Bonus: Compass Framework LESS SASS Intro to CSS Extenders: PyWeb-IL #22 / 27 Dec 2010

description

Slides from talk I gave at PyWeb-IL #22, 27 Dec 2010.

Transcript of CSS Extenders

Page 1: CSS Extenders

http://flic.kr/p/768ooD

Bonus: Compass Framework

LESS

SASS

Intro to CSS Extenders:

PyWeb-IL #22 / 27 Dec 2010

Page 2: CSS Extenders

http://flic.kr/p/5cCATU

This frontend dude maintains…

a production site with lots of CSS

a heavy drinking habit

a growing hatred for humanity

Page 3: CSS Extenders

SMILE

CSS can be annoying.Here are some workarounds

that might make you

Page 4: CSS Extenders

CSS ANNOYANCESvariables

class mixins

rule nesting

math

Page 5: CSS Extenders

CSS ExtendersCSS Preprocessors is a crappy name.

Page 6: CSS Extenders

srsly? at pyweb?(please don’t shoot me)

Page 7: CSS Extenders

SASSsass-lang.com

LESSlesscss.org

Page 8: CSS Extenders

CleverCSSvery similar • not as mature • not actively developed

Page 9: CSS Extenders
Page 10: CSS Extenders

variables

class mixins

rule nesting

math

variables

class mixins

rule nesting

math

Page 11: CSS Extenders

CleverCSS SASS LESS

DSL is for losers.

DSL CSS Superset

Page 12: CSS Extenders

CleverCSS SASS(.scss)

LESS

Yeah, um,what he said…

DSL CSS Superset

Page 13: CSS Extenders

INSTALLING

Page 14: CSS Extenders

gem install less

.less

gem install haml

.scss

DSL: .sass

Page 15: CSS Extenders

VARIABLES & OPERATIONS

Page 16: CSS Extenders

@mycolor: #ddeeff;@myborder: 3px;

#mynav {background-color: @mycolor;color: @mycolor + #111;

}

.hasborder {border: @myborder solid black;padding: @myborder * 4;

}

$mycolor: #ddeeff;$myborder: 3px;

#mynav {background-color: $mycolor;color: $mycolor + #111;

}

.hasborder {border: $myborder solid black;padding: $myborder * 4;

}

Page 17: CSS Extenders

Basic Color Math@mycolor + #111

Basic Color Math$mycolor + #111

Fancy color functionslighten($mycolor, 20%)

Advantage: SASS

Page 18: CSS Extenders

MIXINS

Page 19: CSS Extenders

.sidebar {font-size: 14px;background-color: #ddd;width: 100px

}

.sidebar_right {.sidebar;float: right;

}

.sidebar_left {.sidebar;float: left;

}

@mixin sidebar {font-size: 14px;background-color: #ddd;width: 100px;

}

.sidebar_right {@include sidebar;float: right;

}

.sidebar_left {@include sidebar;float: left;

}

Page 20: CSS Extenders

.sidebar(@width: 100px) {font-size: 14px;background-color: #ddd;width: @width;

}

.sidebar_right {.sidebar;float: right;

}

.sidebar_right_wide {.sidebar(150px);float: right;

}

@mixin sidebar($width: 100px) {font-size: 14px;background-color: #ddd;width: $width;

}

.sidebar_right {@include sidebar;float: right;

}

.sidebar_right_wide {@include sidebar(150px);float: right;

}

Page 21: CSS Extenders

NESTED RULES

Page 22: CSS Extenders

#header {color: green;

}

#header a {text-decoration: none;color: red;

}

Page 23: CSS Extenders

#header#header a#header ul#header ul li#header ul li strong#content a#content ul…#FML

Page 24: CSS Extenders

#header {color: green;a {

text-decoration: none;color: red;

}a.special {

font-weight: bold;color: blue;

}}

#header {color: green;a {

text-decoration: none;color: red;

}a.special {

font-weight: bold;color: blue;

}}

Page 25: CSS Extenders

#header {color: green;border: {

width: 1px;color: black;style: solid;

}}

?

Page 26: CSS Extenders

INHERITANCE

Page 27: CSS Extenders

.error {color: red;

}

.error.severe {@extend .error;font-weight: bold;

}

?

Page 28: CSS Extenders

INCLUDES

Page 29: CSS Extenders

/* mysnippet.less */…

/* style.less */@import “mysnippet”

/* _mysnippet.scss */…

/* style.scss */@import “mysnippet”

Page 30: CSS Extenders

Rope!enough for you to hang yourself with.

Page 31: CSS Extenders

USAGE & DEPLOYMENT

Page 32: CSS Extenders

lessc style.lesssass style.scss:style.css

sass srcdir/sass:srcdir/css

Page 33: CSS Extenders

lessc style.less

lessc style.less --watch

sass style.scss:style.css

sass srcdir/sass:srcdir/css

sass --watch style.scss:style.css

sass --watch srcdir/sass:srcdir/css

Page 34: CSS Extenders

Less functionality

Less documentation

Took ideas from SASS

Core is the same

More functionality

More documentation

Took ideas from LESS

Core is the same

Page 35: CSS Extenders

Less functionality

Less documentation

Took ideas from SASS

Core is the same

More functionality

More documentation

Took ideas from LESS

Core is the same

Page 36: CSS Extenders

A CSS Authoring Frameworkbased on SASS

http://compass-style.orgbut really, you should see

http://beta.compass-style.org

Page 37: CSS Extenders

Like Django for CSSextensible, best-practice implementations

that you don’t need to reinvent

Page 38: CSS Extenders

Installinggem install compass

compass create /path/to/project

Page 39: CSS Extenders

_BASE.SCSS$brand_color: #acd29f;$base_font_size: 16px;

@import “compass/reset”;@import “compass/utilities”;

Page 40: CSS Extenders

MYAPP.CSS@import “base”;

/* your sassy styles go here. */

Page 41: CSS Extenders

DEJA VU?{% extends “base.html” %}

<!-- your markup goes here. -->

Page 42: CSS Extenders

END PRESENTATIONAL MARKUP

<body id=“blog-detail”><article class=“wrap”>

<header class=“grid-12”>…</header><div class=“grid-8” id=“content”>…</div><aside class=“grid-4” id>…</aside><footer class=“grid-12”>…</footer>

</article></body>

Page 43: CSS Extenders

END PRESENTATIONAL MARKUP

@import “blueprint”

@mixin two-column {/* two-col layout on a 12-col grid */article {

@include container;header, footer { @include column(12); }aside { @include column(4); }.content { @include column(8); }

}}

body#blog-detail,body#blog-list { @include two-column; }

Page 44: CSS Extenders

END PRESENTATIONAL MARKUP<body id=“blog-detail”>

<article class=“wrap”><header class=“grid-12”>…</header><div class=“grid-8” id=“content”>…</div><aside class=“grid-4” id>…</aside><footer class=“grid-12”>…</footer>

</article></body>

<body id=“blog-detail”><article>

<header>…</header><div id=“content”>…</div><aside>…</aside><footer>…</footer>

</article></body>

Page 45: CSS Extenders

COST: LARGER CSSGenerated CSS

body#blog-detail article { /* wrap styles copied here */ }

body#blog-detail article header,body#blog-detail article footer { /* grid-12 styles copied here */}

body #blog-detail article aside { /* grid-4 styles copied here */ }

Page 46: CSS Extenders

VENDOR PREFIX HELL@import “compass/css3”.alert {

background-color: red;@include border-radius(4px)

}

Page 47: CSS Extenders

VENDOR PREFIX HELL.alert {

background-color: red;-webkit-border-radius: 4px;-moz-border-radius: 4px;-o-border-radius: 4px;-ms-border-radius: 4px;-khtml-border-radius: 4px;border-radius: 4px;

}

Page 48: CSS Extenders

SAME POWERFUL TECHNIQUES,NEW LOW PRICE

cross-browser hacks and fixes

shortcuts around verbose CSS

pre-baked layout (ex: sticky footer)

spriting

extensions!

Page 49: CSS Extenders

DEPLOYMENTI still haven’t completely figured this out.

Trigger compilation from Fabric.

Bonus:

sass --style compressed infile:outfile

Page 50: CSS Extenders

Powercomplexity

can’t use fancy GUI editors (SASS)toolchain addition

Still pretty awesome.

Page 51: CSS Extenders

Questions?

Page 52: CSS Extenders

Thank you!@idangazit