Sassive Aggressive
Using Sass to make your life easier
Who?
Joel Oliveira          Adam Darowski
 Developer, The47th     Web Developer, PatientsLikeMe
What is this “Sass”?

• CSS on steroids.
• Variables, Mixins, Nesting,
  Inheritance, and more…

• Two “flavors” - SASS & SCSS
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Compiling?
$ sass --watch ./sass/:./css/
# all .sass files compiled into ./css

$ sass --update 
sass/style.sass:css/style.css
# ... style.sass => style.css
Compiling?
... on the what?
      blech...
Compiling?
... on the what?
      blech...
Why?
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Why?
• Vendor Prefixes
• “DRY” - Don’t Repeat Yourself
• Instant Compression / Minification
• Organization - partials (“includes”)
• It’s the future - Chrome team
  already exploring these concepts.
Compress / Minify
~/sites/designsponge joel $ ls -hal style.css
-rw-r--r-- 1 joel staff      32K Mar 18 11:26 style.css

~/sites/designsponge joel $ cp style.css style.scss

~/sites/designsponge joel $ sass -t compressed style.scss
style_compressed.css

~/sites/designsponge joel $ ls -hal *.*css
-rw-r--r-- 1 joel staff      32K Mar 18 11:26 style.css
-rw-r--r-- 1 joel staff      32K Mar 18 11:33 style.scss
-rw-r--r-- 1 joel staff      26K Mar 18 11:34 style_compressed.css
Compress / Minify
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
The Goods
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
CSS3 Mix-ins
.foo {
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}

.bar {
  property: value;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}

.dude {
  property: value;
  property: value;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}

.guy {
  property: value;
  -moz-border-radius: 10px;
When using Sass…

.foo
  +border_radius(10px)


Will render as:
.foo {
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  border-radius: 10px;
}
The mixin:



@mixin border_radius($radius)
  -moz-border-radius: #{$radius}
  -webkit-border-radius: #{$radius}
  border-radius: #{$radius}
Another example:

.foo
  +box_shadow(0, 0, 5, #AAA)


Will render as:
.foo {
  -moz-box-shadow: 0 0 5px #AAA;
  -webkit-box-shadow: 0 0 5px #AAA;
  box-shadow: 0 0 5px #AAA;
}
Or, pre-populate the mixin:


   @mixin box_shadow($h_offset: 0, $v_offset: 0,
   -->$blur_radius: 5, $color: #AAA)
     -moz-box-shadow: #{$h_offset}px #{$v_offset}px
     -->#{$blur_radius}px #{$color}
     -webkit-box-shadow: #{$h_offset}px #{$v_offset}px
     -->#{$blur_radius}px #{$color}
     box-shadow: #{$h_offset}px #{$v_offset}px
     -->#{$blur_radius}px #{$color}




--> Denotes “not a real line break”
Now, no argument is needed:

.foo
  +box_shadow

Will render as:
.foo {
  -moz-box-shadow: 0 0 5px #AAA;
  -webkit-box-shadow: 0 0 5px #AAA;
  box-shadow: 0 0 5px #AAA;
}
Or, you can override:

.foo
  +box_shadow(2, 2, 10, #CCC)

Will render as:
.foo {
  -moz-box-shadow: 2px 2px 10px #CCC;
  -webkit-box-shadow: 2px 2px 10px #CCC;
  box-shadow: 2px 2px 10px #CCC;
}
Gradients!
   .foo
     +box_gradient(#FFFFFF, #000000)

   Will render as:
   .foo {
     background-image: -moz-linear-gradient(top, #FFFFFF,
     -->#000000)
     background-image: -o-linear-gradient(top, #FFFFFF,
     -->#000000);
     background-image: -webkit-gradient(linear,left top,left
     --> bottom,color-stop(0, #FFFFFF),color-stop(1, #000000))
     background-image: -webkit-linear-gradient(#FFFFFF,
     -->#000000)
     background-image: linear-gradient(top, #FFFFFF, #000000)
     filter: progid:DXImageTransform.Microsoft.gradient
     -->(startColorStr='#FFFFFF', EndColorStr='#000000')
   }

--> Denotes “not a real line break”         http://css3please.com/
The mixin:

  @mixin box_gradient($start,$end)
    background-image: -moz-linear-gradient(top, #{!start},
    -->#{!end})
    background-image: -o-linear-gradient(top, #FFFFFF,
    -->#000000);
    background-image: -webkit-gradient(linear,left top,left
    --> bottom,color-stop(0, #{!start}),color-stop(1,
    -->#{!end}))
    background-image: -webkit-linear-gradient(#{!start},
    -->#{!end})
    background-image: linear-gradient(top, #{!start}, #{!end})
    filter: progid:DXImageTransform.Microsoft.gradient
    -->(startColorStr='#{!start}', EndColorStr='#{!end}')




--> Denotes “not a real line break”
http://tech.patientslikeme.com/2010/09/10/deconstructing-my-favorite-sass-mixin/
.dropdown-inner {
  -moz-border-radius: 0 3px 3px 3px;
  -webkit-border-radius: 0 3px 3px 3px;
  border-radius: 0 3px 3px 3px;
  -moz-box-shadow: 1px 1px 4px #CCC;
  -webkit-box-shadow: 1px 1px 4px #CCC;
  box-shadow: 1px 1px 4px #CCC;
  background-image: -moz-linear-gradient(top, #FFFFFF,
  -->#FCF5DE)
  background-image: -o-linear-gradient(top, #FFFFFF,
  -->#000000);
  background-image: -webkit-gradient(linear,left top,left
  --> bottom,color-stop(0, #FFFFFF),color-stop(1, #FCF5DE))
  background-image: -webkit-linear-gradient(#FFFFFF,
  -->#FCF5DE)
  background-image: linear-gradient(top, #FFFFFF, #FCF5DE)
  filter: progid:DXImageTransform.Microsoft.gradient
  -->(startColorStr='#FFFFFF', EndColorStr='#FCF5DE')
}
.dropdown-inner {
  +border_radius(0 3px 3px 3px
  -moz-border-radius: 03px 3px) 3px;
  +box_shadow(1, 1, 4, #CCC)
  -webkit-border-radius: 0 3px 3px 3px;
  border-radius: 0 3px 3px 3px;
  +box_gradient(#FFFFFF, #FCF5DE)
  -moz-box-shadow: 1px 1px 4px #CCC;
  -webkit-box-shadow: 1px 1px 4px #CCC;
  box-shadow: 1px 1px 4px #CCC;
  background-image: -moz-linear-gradient(top, #FFFFFF,
  -->#FCF5DE)
  background-image: -o-linear-gradient(top, #FFFFFF,
  -->#000000);
  background-image: -webkit-gradient(linear,left top,left
  --> bottom,color-stop(0, #FFFFFF),color-stop(1, #FCF5DE))
  background-image: -webkit-linear-gradient(#FFFFFF,
  -->#FCF5DE)
  background-image: linear-gradient(top, #FFFFFF, #FCF5DE)
  filter: progid:DXImageTransform.Microsoft.gradient
  -->(startColorStr='#FFFFFF', EndColorStr='#FCF5DE')
}
More with mixins:


• Re-usable interface elements (buttons,
  headers—with or without arguments).

• Reset styles (data tables, lists, etc.).
• References to frequently-accessed sprites.
• Frequently used IE hacks.
• Etc.
Organization &
 Refactoring
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
“.Class Soup”
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)
Math
Color Manipulation:



.gray
  background-color: fade_out(#000, 0.4)


Will render as:
.gray {
  background-color: rgba(0, 0, 0, 0.6);
}
lighten & darken:



.lighter
  background-color: lighten(#000064, 30%)


Will render as:
.lighter {
  background-color: #4B4BFF;
}
With a variable:


$default_color: #000064
.level1
  background-color: $default_color
.level2
  background-color: lighten($default_color,   15%)
.level3
  background-color: lighten($default_color,   30%)
.level4
  background-color: lighten($default_color,   45%)
.level5
  background-color: lighten($default_color,   60%)
With a variable:


.level1 {
  background-color:   #000064; }
.level2 {
  background-color:   #0000b1; }
.level3 {
  background-color:   #0000fd; }
.level4 {
  background-color:   #4b4bff; }
.level5 {
  background-color:   #9797ff; }
Simple math:

$container_width: 1000px
$photo_width: 480px
.caption
  width: $container_width - $photo_width

Will render as:
.caption {
  width: 520px;
}
https://github.com/adarowski/The-Hall-of-wWAR
<ul id="timeline-in">
  <li id="dwhite" class="3b level5">White</li>
  <li id="canson" class="1b hof level2">Anson</li>
  <li id="jorourke" class="hof lf level4">O'Rourke</li>
  <li id="pgalvin" class="p hof level2">Galvin</li>
  <li id="mward" class="hof ss level5">Ward</li>
  <li id="jmccormick" class="p level3">McCormick</li>
  <li id="kkelly" class="hof rf level5">Kelly</li>
  <li id="ggore" class="cf level5">Gore</li>
  <li id="jglasscock" class="ss level4">Glasscock</li>
  ...
  <li id="jbagwell" class="1b level2"></li>
</ul>
ul
  list-style: none
  padding: 40px 0 0
  margin: 0
li
  cursor: pointer
  margin: 0 0 5px
  padding: 0
  display: block
  padding: 2px
  color: white
  position: relative
We need
padding-left
 and width.
The mixin:



@mixin bar($start,$end)
  $start_value: $start - 1870
  margin-left: ($start_value*8) + px
  $length: $end - $start
  width: ($length*8) - 4px
The mixin:



@mixin bar($start,$end)
  $start_value: $start - 1870             Pass in
  margin-left: ($start_value*8) + px   arguments for
                                       start and end
  $length: $end - $start
                                            year.
  width: ($length*8) - 4px
The mixin:



@mixin bar($start,$end)
                                       $start_value is
  $start_value: $start - 1870
                                       the difference
  margin-left: ($start_value*8) + px    between the
  $length: $end - $start               start year and
  width: ($length*8) - 4px                 1870.
The mixin:



@mixin bar($start,$end)
  $start_value: $start - 1870               Multiply
                                        $start_value by
  margin-left: ($start_value*8) + px
                                       8 to get the left-
  $length: $end - $start               margin (8 pixels
  width: ($length*8) - 4px                 per year).
The mixin:



@mixin bar($start,$end)
  $start_value: $start - 1870          Career $length
                                       will be used to
  margin-left: ($start_value*8) + px
                                       determine the
  $length: $end - $start                width of the
  width: ($length*8) - 4px                   box.
The mixin:



@mixin bar($start,$end)
  $start_value: $start - 1870           Again, multiply
  margin-left: ($start_value*8) + px    by 8 to get the
                                        width, and also
  $length: $end - $start
                                       subtract 4 pixels
  width: ($length*8) - 4px                (padding).
The magic:

#jbagwell
  +bar(1991, 2005)


@mixin bar(1991,2005)
  $start_value: 1991 -   1870 = 121
  margin-left: (121*8)   + px = 968px
  $length: 2005 - 1991   = 14
  width: (14*8) - 4px)   = 108px
The magic:

#jbagwell
  +bar(1991, 2005)


Will render as:
#jbagwell {
  margin-left: 968px;
  width: 108px;
}
margin-left: 16px;
            width: 164px; }
          #pgalvin {

Repeat:     margin-left: 40px;
            width: 132px; }
          #kkelly {
            margin-left: 64px;
            width: 116px; }
          #mward {
            margin-left: 64px;
            width: 124px; }
          #dbrouthers {
            margin-left: 72px;
            width: 196px; }
          #mwelch {
            margin-left: 80px;
            width: 92px; }
          #tkeefe {
            margin-left: 80px;
            width: 100px; }
          #rconnor {
            margin-left: 80px;
            width: 132px; }
          #bewing {
            margin-left: 80px;
            width: 132px; }
          #cradbourn {
            margin-left: 88px;
            width: 76px; }
          #jclarkson {
            margin-left: 96px;
            width: 92px; }
          #bmcphee {
            margin-left: 96px;
            width: 132px; }
          #tmccarthy {
            margin-left: 112px;
            width: 92px; }
https://github.com/adarowski/The-Hall-of-wWAR
Wrapping Up
Installation
$ sudo gem install haml

c:> ruby gem install haml
Resources
• sass-lang.com
• beta.compass-style.org
• @sasswatch
• wiseheartdesign.com/weblog/
• rubyinstaller.org (windows)
• github.com/adarowski
• github.com/jayroh
Joel @jayroh

Adam @adarowski
Questions?

More Related Content

PDF
Accelerated Stylesheets
PDF
Compass, Sass, and the Enlightened CSS Developer
PPTX
Raleigh Web Design Meetup Group - Sass Presentation
PDF
Theming and Sass
KEY
FCIP SASS Talk
KEY
Stylesheets of the future with Sass and Compass
PDF
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
KEY
Sass, Compass
Accelerated Stylesheets
Compass, Sass, and the Enlightened CSS Developer
Raleigh Web Design Meetup Group - Sass Presentation
Theming and Sass
FCIP SASS Talk
Stylesheets of the future with Sass and Compass
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
Sass, Compass

What's hot (20)

PDF
CSS Extenders
PDF
Taking Perl to Eleven with Higher-Order Functions
PDF
Sass - Making CSS fun again.
PPTX
CSS: A Slippery Slope to the Backend
PDF
HTML5 and CSS3 Refresher
PDF
McrFRED 39 | CSS Processors
PDF
Finding your way with Sass+Compass
PDF
CSS3 Refresher
KEY
Fields in Core: How to create a custom field
KEY
Advanced Technology for Web Application Design
PPTX
Web Application Development using PHP Chapter 4
PDF
WordCamp Bristol 2019 - WordPress custom theme building
PDF
Confoo: You can use CSS for that!
PDF
Functional pe(a)rls: Huey's zipper
PDF
Steven Kingston - OS open data – visualisation and gazetteer searching with q...
PDF
Jina Bolton
PDF
Leveraging the Power of Graph Databases in PHP
PDF
Ruby on Rails 3.1: Let's bring the fun back into web programing
PDF
Leveraging the Power of Graph Databases in PHP
ODP
Php 102: Out with the Bad, In with the Good
CSS Extenders
Taking Perl to Eleven with Higher-Order Functions
Sass - Making CSS fun again.
CSS: A Slippery Slope to the Backend
HTML5 and CSS3 Refresher
McrFRED 39 | CSS Processors
Finding your way with Sass+Compass
CSS3 Refresher
Fields in Core: How to create a custom field
Advanced Technology for Web Application Design
Web Application Development using PHP Chapter 4
WordCamp Bristol 2019 - WordPress custom theme building
Confoo: You can use CSS for that!
Functional pe(a)rls: Huey's zipper
Steven Kingston - OS open data – visualisation and gazetteer searching with q...
Jina Bolton
Leveraging the Power of Graph Databases in PHP
Ruby on Rails 3.1: Let's bring the fun back into web programing
Leveraging the Power of Graph Databases in PHP
Php 102: Out with the Bad, In with the Good
Ad

Viewers also liked (6)

PDF
Sassive Aggressive: Level Up Your CSS with Sass
PDF
The Hall of Stats
PDF
Liiikes: Using statistics to find the best content on Dribbble.
PDF
Javascript status 2016
PDF
Sassive Aggressive: Level Up Your CSS with Sass
PDF
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Sassive Aggressive: Level Up Your CSS with Sass
The Hall of Stats
Liiikes: Using statistics to find the best content on Dribbble.
Javascript status 2016
Sassive Aggressive: Level Up Your CSS with Sass
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Ad

Similar to Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version) (20)

KEY
Wrangling the CSS Beast with Sass
PDF
Sass & Compass (Barcamp Stuttgart 2012)
PDF
Big Design Conference: CSS3
PDF
Preprocessor presentation
PDF
Work and play with SASS & Compass
PDF
Getting Started with Sass & Compass
PDF
Workshop 6: Designer tools
KEY
Using Sass - Building on CSS
KEY
Sass&compass
PDF
Sencha Touch
PPTX
Software programming tools for creating/managing CSS files
PDF
LESS : The dynamic stylesheet language
PPT
Learn to Love CSS3 [English]
PPT
Learn to love CSS3 | Joomla! Day Deutschland
PPTX
Simple introduction Sass
PPTX
Patrick Kettner - Creating magic with houdini
KEY
Sass, Compass and the new tools - Open Web Camp IV
PPTX
Doing More With Less
PDF
Sass and Compass - Getting Started
PDF
LessCSS Presentation @ April 2015 GTALUG Meeting
Wrangling the CSS Beast with Sass
Sass & Compass (Barcamp Stuttgart 2012)
Big Design Conference: CSS3
Preprocessor presentation
Work and play with SASS & Compass
Getting Started with Sass & Compass
Workshop 6: Designer tools
Using Sass - Building on CSS
Sass&compass
Sencha Touch
Software programming tools for creating/managing CSS files
LESS : The dynamic stylesheet language
Learn to Love CSS3 [English]
Learn to love CSS3 | Joomla! Day Deutschland
Simple introduction Sass
Patrick Kettner - Creating magic with houdini
Sass, Compass and the new tools - Open Web Camp IV
Doing More With Less
Sass and Compass - Getting Started
LessCSS Presentation @ April 2015 GTALUG Meeting

Recently uploaded (20)

PDF
Improvisation in detection of pomegranate leaf disease using transfer learni...
PDF
Accessing-Finance-in-Jordan-MENA 2024 2025.pdf
PDF
Getting started with AI Agents and Multi-Agent Systems
PDF
STKI Israel Market Study 2025 version august
PPT
Geologic Time for studying geology for geologist
PDF
Architecture types and enterprise applications.pdf
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Credit Without Borders: AI and Financial Inclusion in Bangladesh
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PDF
Five Habits of High-Impact Board Members
PPTX
Benefits of Physical activity for teenagers.pptx
PPTX
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
DOCX
Basics of Cloud Computing - Cloud Ecosystem
PPTX
TEXTILE technology diploma scope and career opportunities
PDF
Enhancing plagiarism detection using data pre-processing and machine learning...
PPTX
Configure Apache Mutual Authentication
PDF
Statistics on Ai - sourced from AIPRM.pdf
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PDF
Comparative analysis of machine learning models for fake news detection in so...
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Improvisation in detection of pomegranate leaf disease using transfer learni...
Accessing-Finance-in-Jordan-MENA 2024 2025.pdf
Getting started with AI Agents and Multi-Agent Systems
STKI Israel Market Study 2025 version august
Geologic Time for studying geology for geologist
Architecture types and enterprise applications.pdf
Module 1.ppt Iot fundamentals and Architecture
Credit Without Borders: AI and Financial Inclusion in Bangladesh
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
Five Habits of High-Impact Board Members
Benefits of Physical activity for teenagers.pptx
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
Basics of Cloud Computing - Cloud Ecosystem
TEXTILE technology diploma scope and career opportunities
Enhancing plagiarism detection using data pre-processing and machine learning...
Configure Apache Mutual Authentication
Statistics on Ai - sourced from AIPRM.pdf
A proposed approach for plagiarism detection in Myanmar Unicode text
Comparative analysis of machine learning models for fake news detection in so...
How ambidextrous entrepreneurial leaders react to the artificial intelligence...

Sassive Aggressive: Using Sass to Make Your Life Easier (Refresh Boston Version)

  • 1. Sassive Aggressive Using Sass to make your life easier
  • 2. Who? Joel Oliveira Adam Darowski Developer, The47th Web Developer, PatientsLikeMe
  • 3. What is this “Sass”? • CSS on steroids. • Variables, Mixins, Nesting, Inheritance, and more… • Two “flavors” - SASS & SCSS
  • 6. Compiling? $ sass --watch ./sass/:./css/ # all .sass files compiled into ./css $ sass --update sass/style.sass:css/style.css # ... style.sass => style.css
  • 7. Compiling? ... on the what? blech...
  • 8. Compiling? ... on the what? blech...
  • 14. Why? • Vendor Prefixes • “DRY” - Don’t Repeat Yourself • Instant Compression / Minification • Organization - partials (“includes”) • It’s the future - Chrome team already exploring these concepts.
  • 15. Compress / Minify ~/sites/designsponge joel $ ls -hal style.css -rw-r--r-- 1 joel staff 32K Mar 18 11:26 style.css ~/sites/designsponge joel $ cp style.css style.scss ~/sites/designsponge joel $ sass -t compressed style.scss style_compressed.css ~/sites/designsponge joel $ ls -hal *.*css -rw-r--r-- 1 joel staff 32K Mar 18 11:26 style.css -rw-r--r-- 1 joel staff 32K Mar 18 11:33 style.scss -rw-r--r-- 1 joel staff 26K Mar 18 11:34 style_compressed.css
  • 25.   -moz-border-radius: 10px;   -webkit-border-radius: 10px;   border-radius: 10px; } .bar {   property: value;   -moz-border-radius: 10px;   -webkit-border-radius: 10px;   border-radius: 10px; } .dude {   property: value;   property: value;   -moz-border-radius: 10px;   -webkit-border-radius: 10px;   border-radius: 10px; } .guy {   property: value;   -moz-border-radius: 10px;
  • 26. When using Sass… .foo   +border_radius(10px) Will render as: .foo {   -moz-border-radius: 10px;   -webkit-border-radius: 10px;   border-radius: 10px; }
  • 27. The mixin: @mixin border_radius($radius)   -moz-border-radius: #{$radius}   -webkit-border-radius: #{$radius}   border-radius: #{$radius}
  • 28. Another example: .foo   +box_shadow(0, 0, 5, #AAA) Will render as: .foo {   -moz-box-shadow: 0 0 5px #AAA;   -webkit-box-shadow: 0 0 5px #AAA;   box-shadow: 0 0 5px #AAA; }
  • 29. Or, pre-populate the mixin: @mixin box_shadow($h_offset: 0, $v_offset: 0, -->$blur_radius: 5, $color: #AAA)   -moz-box-shadow: #{$h_offset}px #{$v_offset}px -->#{$blur_radius}px #{$color}   -webkit-box-shadow: #{$h_offset}px #{$v_offset}px -->#{$blur_radius}px #{$color}   box-shadow: #{$h_offset}px #{$v_offset}px -->#{$blur_radius}px #{$color} --> Denotes “not a real line break”
  • 30. Now, no argument is needed: .foo   +box_shadow Will render as: .foo {   -moz-box-shadow: 0 0 5px #AAA;   -webkit-box-shadow: 0 0 5px #AAA;   box-shadow: 0 0 5px #AAA; }
  • 31. Or, you can override: .foo   +box_shadow(2, 2, 10, #CCC) Will render as: .foo {   -moz-box-shadow: 2px 2px 10px #CCC;   -webkit-box-shadow: 2px 2px 10px #CCC;   box-shadow: 2px 2px 10px #CCC; }
  • 32. Gradients! .foo   +box_gradient(#FFFFFF, #000000) Will render as: .foo {   background-image: -moz-linear-gradient(top, #FFFFFF, -->#000000) background-image: -o-linear-gradient(top, #FFFFFF, -->#000000);   background-image: -webkit-gradient(linear,left top,left --> bottom,color-stop(0, #FFFFFF),color-stop(1, #000000))   background-image: -webkit-linear-gradient(#FFFFFF, -->#000000)   background-image: linear-gradient(top, #FFFFFF, #000000)   filter: progid:DXImageTransform.Microsoft.gradient -->(startColorStr='#FFFFFF', EndColorStr='#000000') } --> Denotes “not a real line break” http://css3please.com/
  • 33. The mixin: @mixin box_gradient($start,$end)   background-image: -moz-linear-gradient(top, #{!start}, -->#{!end}) background-image: -o-linear-gradient(top, #FFFFFF, -->#000000);   background-image: -webkit-gradient(linear,left top,left --> bottom,color-stop(0, #{!start}),color-stop(1, -->#{!end}))   background-image: -webkit-linear-gradient(#{!start}, -->#{!end})   background-image: linear-gradient(top, #{!start}, #{!end})   filter: progid:DXImageTransform.Microsoft.gradient -->(startColorStr='#{!start}', EndColorStr='#{!end}') --> Denotes “not a real line break”
  • 35. .dropdown-inner {   -moz-border-radius: 0 3px 3px 3px;   -webkit-border-radius: 0 3px 3px 3px;   border-radius: 0 3px 3px 3px;   -moz-box-shadow: 1px 1px 4px #CCC;   -webkit-box-shadow: 1px 1px 4px #CCC;   box-shadow: 1px 1px 4px #CCC;   background-image: -moz-linear-gradient(top, #FFFFFF, -->#FCF5DE) background-image: -o-linear-gradient(top, #FFFFFF, -->#000000);   background-image: -webkit-gradient(linear,left top,left --> bottom,color-stop(0, #FFFFFF),color-stop(1, #FCF5DE))   background-image: -webkit-linear-gradient(#FFFFFF, -->#FCF5DE)   background-image: linear-gradient(top, #FFFFFF, #FCF5DE)   filter: progid:DXImageTransform.Microsoft.gradient -->(startColorStr='#FFFFFF', EndColorStr='#FCF5DE') }
  • 36. .dropdown-inner {   +border_radius(0 3px 3px 3px   -moz-border-radius: 03px 3px) 3px;   +box_shadow(1, 1, 4, #CCC)   -webkit-border-radius: 0 3px 3px 3px;   border-radius: 0 3px 3px 3px; +box_gradient(#FFFFFF, #FCF5DE)   -moz-box-shadow: 1px 1px 4px #CCC;   -webkit-box-shadow: 1px 1px 4px #CCC;   box-shadow: 1px 1px 4px #CCC;   background-image: -moz-linear-gradient(top, #FFFFFF, -->#FCF5DE) background-image: -o-linear-gradient(top, #FFFFFF, -->#000000);   background-image: -webkit-gradient(linear,left top,left --> bottom,color-stop(0, #FFFFFF),color-stop(1, #FCF5DE))   background-image: -webkit-linear-gradient(#FFFFFF, -->#FCF5DE)   background-image: linear-gradient(top, #FFFFFF, #FCF5DE)   filter: progid:DXImageTransform.Microsoft.gradient -->(startColorStr='#FFFFFF', EndColorStr='#FCF5DE') }
  • 37. More with mixins: • Re-usable interface elements (buttons, headers—with or without arguments). • Reset styles (data tables, lists, etc.). • References to frequently-accessed sprites. • Frequently used IE hacks. • Etc.
  • 51. Math
  • 52. Color Manipulation: .gray   background-color: fade_out(#000, 0.4) Will render as: .gray {   background-color: rgba(0, 0, 0, 0.6); }
  • 53. lighten & darken: .lighter   background-color: lighten(#000064, 30%) Will render as: .lighter {   background-color: #4B4BFF; }
  • 54. With a variable: $default_color: #000064 .level1 background-color: $default_color .level2 background-color: lighten($default_color, 15%) .level3 background-color: lighten($default_color, 30%) .level4 background-color: lighten($default_color, 45%) .level5 background-color: lighten($default_color, 60%)
  • 55. With a variable: .level1 { background-color: #000064; } .level2 { background-color: #0000b1; } .level3 { background-color: #0000fd; } .level4 { background-color: #4b4bff; } .level5 { background-color: #9797ff; }
  • 56. Simple math: $container_width: 1000px $photo_width: 480px .caption width: $container_width - $photo_width Will render as: .caption { width: 520px; }
  • 58. <ul id="timeline-in"> <li id="dwhite" class="3b level5">White</li> <li id="canson" class="1b hof level2">Anson</li> <li id="jorourke" class="hof lf level4">O'Rourke</li> <li id="pgalvin" class="p hof level2">Galvin</li> <li id="mward" class="hof ss level5">Ward</li> <li id="jmccormick" class="p level3">McCormick</li> <li id="kkelly" class="hof rf level5">Kelly</li> <li id="ggore" class="cf level5">Gore</li> <li id="jglasscock" class="ss level4">Glasscock</li> ... <li id="jbagwell" class="1b level2"></li> </ul>
  • 59. ul list-style: none padding: 40px 0 0 margin: 0 li cursor: pointer margin: 0 0 5px padding: 0 display: block padding: 2px color: white position: relative
  • 61. The mixin: @mixin bar($start,$end) $start_value: $start - 1870 margin-left: ($start_value*8) + px $length: $end - $start width: ($length*8) - 4px
  • 62. The mixin: @mixin bar($start,$end) $start_value: $start - 1870 Pass in margin-left: ($start_value*8) + px arguments for start and end $length: $end - $start year. width: ($length*8) - 4px
  • 63. The mixin: @mixin bar($start,$end) $start_value is $start_value: $start - 1870 the difference margin-left: ($start_value*8) + px between the $length: $end - $start start year and width: ($length*8) - 4px 1870.
  • 64. The mixin: @mixin bar($start,$end) $start_value: $start - 1870 Multiply $start_value by margin-left: ($start_value*8) + px 8 to get the left- $length: $end - $start margin (8 pixels width: ($length*8) - 4px per year).
  • 65. The mixin: @mixin bar($start,$end) $start_value: $start - 1870 Career $length will be used to margin-left: ($start_value*8) + px determine the $length: $end - $start width of the width: ($length*8) - 4px box.
  • 66. The mixin: @mixin bar($start,$end) $start_value: $start - 1870 Again, multiply margin-left: ($start_value*8) + px by 8 to get the width, and also $length: $end - $start subtract 4 pixels width: ($length*8) - 4px (padding).
  • 67. The magic: #jbagwell +bar(1991, 2005) @mixin bar(1991,2005) $start_value: 1991 - 1870 = 121 margin-left: (121*8) + px = 968px $length: 2005 - 1991 = 14 width: (14*8) - 4px) = 108px
  • 68. The magic: #jbagwell +bar(1991, 2005) Will render as: #jbagwell { margin-left: 968px; width: 108px; }
  • 69. margin-left: 16px; width: 164px; } #pgalvin { Repeat: margin-left: 40px; width: 132px; } #kkelly { margin-left: 64px; width: 116px; } #mward { margin-left: 64px; width: 124px; } #dbrouthers { margin-left: 72px; width: 196px; } #mwelch { margin-left: 80px; width: 92px; } #tkeefe { margin-left: 80px; width: 100px; } #rconnor { margin-left: 80px; width: 132px; } #bewing { margin-left: 80px; width: 132px; } #cradbourn { margin-left: 88px; width: 76px; } #jclarkson { margin-left: 96px; width: 92px; } #bmcphee { margin-left: 96px; width: 132px; } #tmccarthy { margin-left: 112px; width: 92px; }
  • 72. Installation $ sudo gem install haml c:> ruby gem install haml
  • 73. Resources • sass-lang.com • beta.compass-style.org • @sasswatch • wiseheartdesign.com/weblog/ • rubyinstaller.org (windows) • github.com/adarowski • github.com/jayroh