SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
CSS Preprocessors
Sass, Less and Stylus
Patrick Arlt - @patrickarlt
Some Background
I'm an Designer and Developers at Geoloqi Esri.
Design, UX, HTML, CSS, JS, lots of it everyday...
Ok Ok, which is best?
Really Short Answer
SASS or Stylus
Slightly Longer Answer
SASS if you are using Ruby. Stylus if you using Node. LESS if
you afraid of the command line.
80/20
80% of SASS, LESS and Stylus is the same.
The 20% that is different is in advanced usage.
Installing
SASS
LESS
Stylus
$ gem install sass
$ sass --watch style.scss:style.css
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>
$ npm install less
$ lessc styles.less
$ npm install stylus
$ stylus css --watch
The 80%
Variables
Color Transformation
Mixins
Nesting
Loops & Conditionals
Importing
Variables
SASS
LESS
Stylus
$button-background: #27adec;
.btn {
background: $button-background;
}
@button-background: #27adec;
.btn {
background: @button-background;
}
button-background = #27adec
.btn
background button-background
Color Transformations
SASS
LESS
Stylus
lighten(@color, 10%);
mix($dark-blue, $light-blue, 25%);
body
color: #444 + #111;
Without Params With Params
LESS Mixins
.bordered {
border: 1px solid #000;
border-top-color: #444;
border-bottom-color: #444;
}
#main {
.bordered;
}
.border-radius (@r) {
-webkit-border-radius: @r;
-moz-border-radius: @r;
border-radius: @r;
}
#main {
.border-radius(4px);
}
SASS Mixins
@mixin border-radius ($radius: 5px) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
#main {
@include border-radius(4px);
}
Stylus Mixins
border-radius(n)
-webkit-border-radius n
-moz-border-radius n
border-radius n
#main
border-radius(5px)
Nesting
You can nest selectors in all three frameworks.
#main{
margin: 0 auto;
.title {
font-size: 4em;
}
a {
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
Imports
All 3 support importing from other files or libraries...
@import "compass/css3";
@import "susy";
@import "animation/animate";
@import "myfile.scss";
#main {
@include border-radius(5px); // from compass/css3
@include span-columns(10); // from susy
@include animation(fadeIn); // from animation/animate
background: $background-color; // from myfile.scss
}
#sidebar {
@include span-columns(2 omega); // from susy
}
More Features
Conditionals like "if, "when"
MATH!
SASS and Stylus
Loops like "for", "while", and "each"
Much more depth then LESS
Custom functions without the Ruby/JS API
The 20%
SASS
@extend
@media
@content
@extend
.button {
background: $blue;
color: #fff
}
.my-special-button {
@extend .button;
font-size: 2em;
}
.button, .my-special-button {
background: $blue;
color: #fff
}
.my-special-button {
font-size: 2em;
}
@extend Selectors
// This won't be compiled
#context a%extreme {
color: red;
font-weight: bold;
font-size: 2em;
}
.notice {
@extend %extreme;
}
#content a.notice {
color: $red;
font-weight: bold;
font-size: 2em;
}
@media
Declare media queries inside selectors
#content {
width: 65%;
margin: 0 auto;
@media only screen and (max-width : 767px) {
width: 90%;
}
}
#content {
width: 65%;
margin: 0 auto;
}
@media only screen and (max-device-width : 768px) {
#content {
width: 90%;
}
}
@content
My favorite SASS feature. Lets you pass whole style blocks
into mixins. Similar to Rubys "yeild". Use it for...
Media Query Helpers
Retina Images
IE Specific Styles
CSS3 Polyfills
@content Example
<!--[if IE 7 ]><html class="ie ie7" lang="en"><![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"><![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
@mixin for-ie(){
html.ie &{
@content;
}
}
#browser-warning {
display:none;
@include for-ie(){
display:block
}
}
Compass
makes SASS even more awesome
CSS3 mixins, supports almost every CSS3 feature
Typography styling helpers
Generates CSS sprites
Produces cross browser CSS for IE6,7,8
Plugin framework via Rubygems
Compass
Compass Bootstrap
Foundation Framework
Susy - Responsive Grids
Compass Animation
LESS
Mixins
Namespaces
Scoped Variables
Client Side Processing
Mixins
In LESS every class is a mixin
.clearfix() {
zoom: 1;
&:before { content: ''; display: block; }
&:after { content: ''; display: table; clear: both; }
}
#content {
.clearfix();
}
Namespaceing Mixins
Organize your mixins into namespaces
#my-framework {
.button () {
display: block;
border: 1px solid @dark-blue;
background-color: @blue;
color: @light-blue;
}
}
.a-button {
#my-framework > .button;
}
Scoped Variables
Variables have scope which makes them it easy to override
@text-color: #444;
@background-color: #fafafa;
body {
color: @text-color;
background: @background-color;
}
.inverse {
@text-color: #fafafa;
@background-color: #444;
color: @text-color;
background: @background-color;
}
h1 { color: @text-color + #111; }
Client-Side Compiling
Great for static HTML sites
Sites where you don't have a real server (S3)
You can evaluate Javascript in your .less files
Evalute Javascipt
You can evalute a javascript expression as a variable
@height: `document.body.clientHeight`;
@width: `document.body.clientWidth`;
Stylus
Syntax
Language Features
@keyframes
Javascript API
Stylus Syntax
Whitespace Based
Can omit { : ; }
The biggest problem I have with Stylus is with its syntax
border-radius()
-webkit-border-radius arguments
-moz-border-radius arguments
border-radius arguments
body
font 12px Helvetica, Arial, sans-serif
a.button
border-radius(5px)
Stylus Language
Stylus feels very much like a simple programming language
Ruby-like ranges [1..5], [0...5]
for/in loops
real operator precidence
complex conditionals if/else if/else, unless/else, postfix
conditionals
@keyframe Support
CSS3 keyframes are awesome, Stylus makes then easy
This is awesome!
@keyframes pulse
0%, 100%
-webkit-transform translateX(0);
20%, 60%
-webkit-transform translateX(-10px);
40%, 80%
-webkit-transform translateX(10px);
Javascript API
You could do a whole talk on the Stylus API, here are some
ideas...
Declare really custom functions
Use Node modules like canvas
Do Compass-like sprite generation
Create your own CSS framework
Nib
CSS3 helpers - gradiants, border-radius, ect...
Mixins for common css patterns
Extends CSS with new properties and values
#feedback
fixed: bottom right
#logo
image: '/img/logo.png'
h1
overflow: ellipsis
Smackdown!
Who Wins?
LESS Looses
LESS just doesn't have the features or power of SASS or
Stylus
Nothing like Compass or Nib
No plugin system
Can't define your own functions with just LESS
Doesn't output any debugging info
SASS vs. Stylus
Both have similar features, a powerful plugin ecosystem,
and lots of CSS3 helpers.
SASS syntax is close to CSS
Stylus is closer to a programming language
If you use Ruby you will probally use SASS
If you use Node you will probally use Stylus
Questions
Patrick Arlt - @patrickarlt
CSS Preprocessors. Comparing SASS, LESS and Stylus

Mais conteúdo relacionado

Destaque

باللغة العربية jQuery دورة
 باللغة العربية jQuery دورة باللغة العربية jQuery دورة
باللغة العربية jQuery دورةanees abu-hmaid
 
Canvas دورة باللغة العربية
Canvas دورة باللغة العربيةCanvas دورة باللغة العربية
Canvas دورة باللغة العربيةanees abu-hmaid
 
java script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربيةjava script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربيةanees abu-hmaid
 
باللغة العربية SASS دورة
  باللغة العربية SASS دورة   باللغة العربية SASS دورة
باللغة العربية SASS دورة anees abu-hmaid
 
باللغة العربية JSON دورة
  باللغة العربية JSON دورة   باللغة العربية JSON دورة
باللغة العربية JSON دورة anees abu-hmaid
 
Bootstrap3 دورة باللغة العربية
Bootstrap3 دورة باللغة العربيةBootstrap3 دورة باللغة العربية
Bootstrap3 دورة باللغة العربيةanees abu-hmaid
 
Ecmascript 6 (ES6) جافا سكربت (6)
Ecmascript 6 (ES6) جافا سكربت (6)Ecmascript 6 (ES6) جافا سكربت (6)
Ecmascript 6 (ES6) جافا سكربت (6)anees abu-hmaid
 
구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)Nam Hyeonuk
 
دورة CSS3 باللغة العربية
دورة CSS3 باللغة العربيةدورة CSS3 باللغة العربية
دورة CSS3 باللغة العربيةanees abu-hmaid
 
Intro to css & sass
Intro to css & sassIntro to css & sass
Intro to css & sassSean Wolfe
 
Blue ocean strategy arabic
Blue ocean strategy arabicBlue ocean strategy arabic
Blue ocean strategy arabicMohammad Alyan
 
Sass - Getting Started with Sass!
Sass - Getting Started with Sass!Sass - Getting Started with Sass!
Sass - Getting Started with Sass!Eric Sembrat
 
Sass and compass workshop
Sass and compass workshopSass and compass workshop
Sass and compass workshopShaho Toofani
 
게임 스타트업 시작하기
게임 스타트업 시작하기게임 스타트업 시작하기
게임 스타트업 시작하기기룡 남
 
[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례NAVER D2
 
[D2]pinpoint 개발기
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기NAVER D2
 

Destaque (19)

jQuery UI (Effect)
jQuery UI (Effect) jQuery UI (Effect)
jQuery UI (Effect)
 
باللغة العربية jQuery دورة
 باللغة العربية jQuery دورة باللغة العربية jQuery دورة
باللغة العربية jQuery دورة
 
Canvas دورة باللغة العربية
Canvas دورة باللغة العربيةCanvas دورة باللغة العربية
Canvas دورة باللغة العربية
 
java script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربيةjava script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربية
 
باللغة العربية SASS دورة
  باللغة العربية SASS دورة   باللغة العربية SASS دورة
باللغة العربية SASS دورة
 
باللغة العربية JSON دورة
  باللغة العربية JSON دورة   باللغة العربية JSON دورة
باللغة العربية JSON دورة
 
Bootstrap3 دورة باللغة العربية
Bootstrap3 دورة باللغة العربيةBootstrap3 دورة باللغة العربية
Bootstrap3 دورة باللغة العربية
 
Ecmascript 6 (ES6) جافا سكربت (6)
Ecmascript 6 (ES6) جافا سكربت (6)Ecmascript 6 (ES6) جافا سكربت (6)
Ecmascript 6 (ES6) جافا سكربت (6)
 
구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)
 
Sass presentation
Sass presentationSass presentation
Sass presentation
 
دورة CSS3 باللغة العربية
دورة CSS3 باللغة العربيةدورة CSS3 باللغة العربية
دورة CSS3 باللغة العربية
 
Intro to css & sass
Intro to css & sassIntro to css & sass
Intro to css & sass
 
Blue ocean strategy arabic
Blue ocean strategy arabicBlue ocean strategy arabic
Blue ocean strategy arabic
 
Sass - Getting Started with Sass!
Sass - Getting Started with Sass!Sass - Getting Started with Sass!
Sass - Getting Started with Sass!
 
Sass and compass workshop
Sass and compass workshopSass and compass workshop
Sass and compass workshop
 
c#
c#c#
c#
 
게임 스타트업 시작하기
게임 스타트업 시작하기게임 스타트업 시작하기
게임 스타트업 시작하기
 
[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례
 
[D2]pinpoint 개발기
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기
 

Último

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 

Último (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 

CSS Preprocessors. Comparing SASS, LESS and Stylus

  • 1. CSS Preprocessors Sass, Less and Stylus Patrick Arlt - @patrickarlt
  • 2. Some Background I'm an Designer and Developers at Geoloqi Esri. Design, UX, HTML, CSS, JS, lots of it everyday...
  • 3. Ok Ok, which is best? Really Short Answer SASS or Stylus Slightly Longer Answer SASS if you are using Ruby. Stylus if you using Node. LESS if you afraid of the command line.
  • 4. 80/20 80% of SASS, LESS and Stylus is the same. The 20% that is different is in advanced usage.
  • 5. Installing SASS LESS Stylus $ gem install sass $ sass --watch style.scss:style.css <link rel="stylesheet/less" type="text/css" href="styles.less"> <script src="less.js" type="text/javascript"></script> $ npm install less $ lessc styles.less $ npm install stylus $ stylus css --watch
  • 7. Variables SASS LESS Stylus $button-background: #27adec; .btn { background: $button-background; } @button-background: #27adec; .btn { background: @button-background; } button-background = #27adec .btn background button-background
  • 9. Without Params With Params LESS Mixins .bordered { border: 1px solid #000; border-top-color: #444; border-bottom-color: #444; } #main { .bordered; } .border-radius (@r) { -webkit-border-radius: @r; -moz-border-radius: @r; border-radius: @r; } #main { .border-radius(4px); }
  • 10. SASS Mixins @mixin border-radius ($radius: 5px) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } #main { @include border-radius(4px); }
  • 12. Nesting You can nest selectors in all three frameworks. #main{ margin: 0 auto; .title { font-size: 4em; } a { text-decoration: none; &:hover { text-decoration: underline; } } }
  • 13. Imports All 3 support importing from other files or libraries... @import "compass/css3"; @import "susy"; @import "animation/animate"; @import "myfile.scss"; #main { @include border-radius(5px); // from compass/css3 @include span-columns(10); // from susy @include animation(fadeIn); // from animation/animate background: $background-color; // from myfile.scss } #sidebar { @include span-columns(2 omega); // from susy }
  • 14. More Features Conditionals like "if, "when" MATH! SASS and Stylus Loops like "for", "while", and "each" Much more depth then LESS Custom functions without the Ruby/JS API
  • 17. @extend .button { background: $blue; color: #fff } .my-special-button { @extend .button; font-size: 2em; } .button, .my-special-button { background: $blue; color: #fff } .my-special-button { font-size: 2em; }
  • 18. @extend Selectors // This won't be compiled #context a%extreme { color: red; font-weight: bold; font-size: 2em; } .notice { @extend %extreme; } #content a.notice { color: $red; font-weight: bold; font-size: 2em; }
  • 19. @media Declare media queries inside selectors #content { width: 65%; margin: 0 auto; @media only screen and (max-width : 767px) { width: 90%; } } #content { width: 65%; margin: 0 auto; } @media only screen and (max-device-width : 768px) { #content { width: 90%; } }
  • 20. @content My favorite SASS feature. Lets you pass whole style blocks into mixins. Similar to Rubys "yeild". Use it for... Media Query Helpers Retina Images IE Specific Styles CSS3 Polyfills
  • 21. @content Example <!--[if IE 7 ]><html class="ie ie7" lang="en"><![endif]--> <!--[if IE 8 ]><html class="ie ie8" lang="en"><![endif]--> <!--[if (gte IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]--> @mixin for-ie(){ html.ie &{ @content; } } #browser-warning { display:none; @include for-ie(){ display:block } }
  • 22. Compass makes SASS even more awesome CSS3 mixins, supports almost every CSS3 feature Typography styling helpers Generates CSS sprites Produces cross browser CSS for IE6,7,8 Plugin framework via Rubygems Compass Compass Bootstrap Foundation Framework Susy - Responsive Grids Compass Animation
  • 24. Mixins In LESS every class is a mixin .clearfix() { zoom: 1; &:before { content: ''; display: block; } &:after { content: ''; display: table; clear: both; } } #content { .clearfix(); }
  • 25. Namespaceing Mixins Organize your mixins into namespaces #my-framework { .button () { display: block; border: 1px solid @dark-blue; background-color: @blue; color: @light-blue; } } .a-button { #my-framework > .button; }
  • 26. Scoped Variables Variables have scope which makes them it easy to override @text-color: #444; @background-color: #fafafa; body { color: @text-color; background: @background-color; } .inverse { @text-color: #fafafa; @background-color: #444; color: @text-color; background: @background-color; } h1 { color: @text-color + #111; }
  • 27. Client-Side Compiling Great for static HTML sites Sites where you don't have a real server (S3) You can evaluate Javascript in your .less files Evalute Javascipt You can evalute a javascript expression as a variable @height: `document.body.clientHeight`; @width: `document.body.clientWidth`;
  • 29. Stylus Syntax Whitespace Based Can omit { : ; } The biggest problem I have with Stylus is with its syntax border-radius() -webkit-border-radius arguments -moz-border-radius arguments border-radius arguments body font 12px Helvetica, Arial, sans-serif a.button border-radius(5px)
  • 30. Stylus Language Stylus feels very much like a simple programming language Ruby-like ranges [1..5], [0...5] for/in loops real operator precidence complex conditionals if/else if/else, unless/else, postfix conditionals
  • 31. @keyframe Support CSS3 keyframes are awesome, Stylus makes then easy This is awesome! @keyframes pulse 0%, 100% -webkit-transform translateX(0); 20%, 60% -webkit-transform translateX(-10px); 40%, 80% -webkit-transform translateX(10px);
  • 32. Javascript API You could do a whole talk on the Stylus API, here are some ideas... Declare really custom functions Use Node modules like canvas Do Compass-like sprite generation Create your own CSS framework
  • 33. Nib CSS3 helpers - gradiants, border-radius, ect... Mixins for common css patterns Extends CSS with new properties and values #feedback fixed: bottom right #logo image: '/img/logo.png' h1 overflow: ellipsis
  • 35. LESS Looses LESS just doesn't have the features or power of SASS or Stylus Nothing like Compass or Nib No plugin system Can't define your own functions with just LESS Doesn't output any debugging info
  • 36. SASS vs. Stylus Both have similar features, a powerful plugin ecosystem, and lots of CSS3 helpers. SASS syntax is close to CSS Stylus is closer to a programming language If you use Ruby you will probally use SASS If you use Node you will probally use Stylus
  • 37. Questions Patrick Arlt - @patrickarlt