Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Getting Sassy with CSS: An Introduction to Writ...
Search
Erin Smith
November 15, 2019
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Getting Sassy with CSS: An Introduction to Writing CSS with Sass
Erin Smith
November 15, 2019
More Decks by Erin Smith
See All by Erin Smith
Website Maintenance: What You Need To Know to Keep Your Site in Peak Condition
girlybrackets
0
150
Other Decks in Programming
See All in Programming
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
450
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
150
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
AmebaブログはKMPから卒業します
kmars0605
0
190
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
130
ActionController meets Protocol Buffers
sorah
0
530
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
600
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Designing for humans not robots
tammielis
254
26k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
sira's awesome portfolio website redesign presentation
elsirapls
0
460
Git: the NoSQL Database
bkeepers
PRO
433
67k
Side Projects
sachag
456
43k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Transcript
Getting Sassy with CSS Erin Smith
What we are covering: What are CSS preprocessors What advantages
do they have How to get set up to use them yourself
None
None
Input Output
Basics .scss .sass Uses CSS syntax Indentation instead of brackets
Newlines instead of semicolons Other modifications Can be easier to read and write
$variables
SCSS CSS $yellow: #fce473; .quote { border-left: 5px solid $yellow;
} .quote { border-left: 5px solid #fce473; }
SCSS CSS $yellow: #fce473; $pink: #c71585; $green: #32cd32; $blue: #1d90ff;
$primary-color: $green; .quote { border-left: 5px solid $primary-color; } .button { background: $primary-color; } .sidebar a:hover { border-bottom-color: $primary-color; } .footer a { color: $primary-color; } .quote { border-left: 5px solid #32cd32; } .button { background: #32cd32; } .sidebar a:hover { border-bottom-color: #32cd32; } .footer a { color: #32cd32; }
SCSS CSS $yellow: #fce473; $pink: #c71585; $green: #32cd32; $blue: #1d90ff;
$primary-color: $pink; .quote { border-left: 5px solid $primary-color; } .button { background: $primary-color; } .sidebar a:hover { border-bottom-color: $primary-color; } .footer a { color: $primary-color; } .quote { border-left: 5px solid #c71585; } .button { background: #c71585; } .sidebar a:hover { border-bottom-color: #c71585; } .footer a { color: #c71585; }
Math
$numPerRow: 4; $margin: 2%; width: ((100% - (($numPerRow - 1)
* $margin)) / $numPerRow);
Nesting
SCSS CSS nav { ul { margin: 0; padding: 0;
list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } } nav ul { margin: 0; padding: 0; list-style: none; } nav li { display: inline-block; } nav a { display: block; padding: 6px 12px; text-decoration: none; }
@imports
None
SCSS //main.scss /* base */ @import “base/reset”; @import “base/typography”; /*
components */ @import “components/buttons”; @import “components/nav”; @import “components/dropdown”; |— base/ | |— _reset.scss #Reset/normalize | |— _typography.scss #Typography rules | |— components/ | |— _buttons.scss #Buttons | |— _navigation.scss #Navigation | |— _dropdown.scss #Dropdown
@mixins
SCSS CSS @mixin overlay() { bottom: 0; left: 0; position:
absolute; right: 0; top: 0; } .modal-background { @include overlay(); background: black; opacity: 0.9; } .modal-background { bottom: 0; left: 0; position: absolute; right: 0; top: 0; background: black; opacity: 0.9; }
SCSS CSS @mixin overlay() { bottom: 0; left: 0; position:
absolute; right: 0; top: 0; } .modal-background { @include overlay(); background: black; opacity: 0.9; } .product-link { @include overlay(); background: blue; opacity: 0.6; } .modal-background { bottom: 0; left: 0; position: absolute; right: 0; top: 0; background: black; opacity: 0.9; } .product-link { bottom: 0; left: 0; position: absolute; right: 0; top: 0; background: blue; opacity: 0.6; }
SCSS CSS @mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius:
$radius; border-radius: $radius; } .box { @include border-radius(3px); } .box { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; border-radius: 3px; }
$numPerRow: 4; $margin: 2%; width: ((100% - (($numPerRow - 1)
* $margin)) / $numPerRow); @mixin columnMaker($numPerRow, $margin) { width: ((100% - (($numPerRow - 1) * $margin)) / $numPerRow); &:nth-child(n) { margin-bottom: $margin; margin-right: $margin; } &:nth-child(#{$numPerRow}n) { margin-right: 0; margin-bottom: 0; } }
@extend
SCSS CSS %message-shared { border: 1px solid #ccc; padding: 10px;
color: #333; } %equal-heights { display: flex; flex-wrap: wrap; } .success { @extend %message-shared; border-color: green; } .error { @extend %message-shared; border-color: red; } .warning { @extend %message-shared; border-color: yellow; } .success, .error, .warning { border: 1px solid #ccc; padding: 10px; color: #333; } .success { border-color: green; } .error { border-color: red; } .warning { border-color: yellow; }
@extend - rulesets are inherently related - near to each
other in the code @mixin - inject dynamic values into repeated construct - Sassy copy/paste
Loops
@if @for @each @while
SCSS CSS $list: adam john wynn mason kuroir; @mixin author-images
{ @each $author in $list { .photo-#{$author} { background: image-url(‘/images/#{$author}.png’) no-repeat; } } } .author-bio { @include author-images; } .author-bio .photo-adam { background: url(‘/images/adam.png’) no-repeat; } .author-bio .photo-john { background: url(‘/images/adam.png’) no-repeat; } .author-bio .photo-wynn { background: url(‘/images/adam.png’) no-repeat; } .author-bio .photo-mason { background: url(‘/images/adam.png’) no-repeat; } .author-bio .photo-kuroir { background: url(‘/images/adam.png’) no-repeat; }
Pre-built Functions
lighten($color, $amount) grayscale($color) complement($color) unquote($string) to-upper-case($string) random()
$notification-confirm: hsla(101, 72%, 37%, 1); $notification-warning: #ffc53a; $notification-alert: rgb(172, 34,
34); %notification { border-radius: 10px; display: block; font-size: 1.5em; font-family: sans-serif; padding: 1em 2em; margin: 1em auto; width: 30%; text-align: center; } SCSS
@function set-notification-text-color($color) { @if (lightness($color) > 50) { @return #000000;
} @else { @return #ffffff; } } .notification { @extend %notification; } .notification-confirm { background: $notification-confirm; color: set-notification-text-color($notification-confirm); } .notification-warning { background: $notification-warning; color: set-notification-text-color($notification-warning); } .notification-alert { background: $notification-alert; color: set-notification-text-color($notification-alert); } SCSS
Getting Started WordPress.com Plugin WP-SCSS Command Line NPM: nom install
-g sass Chocolatey: choco install sass Homebrew: brew install sass/sass/sass sass styles.scss styles.css Application CodeKit Compass.app Koala PHPStorm
Resources: sass-lang.com marksheet.io thesassway.com sassisfaction.com