Slide 1

Slide 1 text

WYNNNETHERLAND COMPASS, SASS, AND THE ENLIGHTENED WEB

Slide 2

Slide 2 text

whoami

Slide 3

Slide 3 text

+

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Native Oklahoman Naturalized Texan or “Okie” in the local vernacular.

Slide 6

Slide 6 text

Like you, I work on the Interwebs.

Slide 7

Slide 7 text

... but my story begins in

Slide 8

Slide 8 text

the DARK AGES

Slide 9

Slide 9 text

Literally. this still works : brew install lynx

Slide 10

Slide 10 text

gopher:// look it up, kids. anyone?

Slide 11

Slide 11 text

Flight of the Navigator technology from the future!

Slide 12

Slide 12 text

These were perilous times.

Slide 13

Slide 13 text

Full of strange magic.

Slide 14

Slide 14 text

Slide 15

Slide 15 text

Slide 16

Slide 16 text

Slide 17

Slide 17 text

Remember this? And this? Nested tables FTW.

Slide 18

Slide 18 text

JavaScript vs. JScript

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Sometimes we’d hide these and update the page without a refresh, back when Ajax was something Momma used to clean the bathtub.

Slide 21

Slide 21 text

DOM level 0.

Slide 22

Slide 22 text

document.formName.inputName

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Why am I sharing all this?

Slide 25

Slide 25 text

Consider it inoculation against CURMUDGEONRY.

Slide 26

Slide 26 text

THAT’S THE WAY IT WAS AND WE LIKED IT.

Slide 27

Slide 27 text

“GET OFF MY LAWN.” Nathan Smith Creator, 960.gs RefreshOKC headliner Reformed Curmudgeon

Slide 28

Slide 28 text

Back to our story

Slide 29

Slide 29 text

the RENAISSANCE

Slide 30

Slide 30 text

JavaScript Frameworks

Slide 31

Slide 31 text

CSS Frameworks

Slide 32

Slide 32 text

HTML5

Slide 33

Slide 33 text

CSS3

Slide 34

Slide 34 text

border-radius

Slide 35

Slide 35 text

border-image

Slide 36

Slide 36 text

www.zurb.com/playground/awesome-overlays

Slide 37

Slide 37 text

background-size

Slide 38

Slide 38 text

gradients

Slide 39

Slide 39 text

RGBA, HSL, HSLA colors rgba (0,0,0,1) is the new black!

Slide 40

Slide 40 text

text-shadow

Slide 41

Slide 41 text

box-shadow

Slide 42

Slide 42 text

word wrap

Slide 43

Slide 43 text

outline

Slide 44

Slide 44 text

columns

Slide 45

Slide 45 text

@font-face Typographic freedom! means

Slide 46

Slide 46 text

New selectors Cool

Slide 47

Slide 47 text

* E .class #id E F E > F E + F E[attribute] E[attribute=value] E[attribute~=value] E[attribute|=value] :first-child :link :visited :lang() :before ::before :after ::after :first-letter ::first-letter :first-line ::first-line E[attribute^=value] E[attribute$=value] E[attribute*=value] E ~ F :root :last-child :only-child :nth-child() :nth-last-child() :first-of-type :last-of-type :only-of-type :nth-of-type() :nth-last-of-type() :empty :not() :target :enabled :disabled :checked CSS3 selectors (and some golden oldies) :header Steal this from jQuery, please

Slide 48

Slide 48 text

This is not a talk about CSS Follow @smashingmag for your CSS tips & tricks

Slide 49

Slide 49 text

REAL stylesheet innovation I want to talk about

Slide 50

Slide 50 text

HOW we write stylesheets I want to talk about

Slide 51

Slide 51 text

how we MAINTAIN stylesheets I want to talk about

Slide 52

Slide 52 text

how we SIMPLIFY stylesheets I want to talk about

Slide 53

Slide 53 text

We're gonna see a brave new world where they run everybody a wire and hook us all up to a grid. Yes, sir, a veritable age of reason. Like the one they had in France. Not a moment too soon. ~ Ulysses Everett McGill

Slide 54

Slide 54 text

the AGE OF ENLIGHTENMENT

Slide 55

Slide 55 text

Sass

Slide 56

Slide 56 text

Syntax options

Slide 57

Slide 57 text

table.users { tr { td { background: #d1d1d; a { color: #111; } } } } Syntax options - SCSS Sassy CSS!

Slide 58

Slide 58 text

table.users tr td background: #d1d1d a color: #111 Syntax options - Indented I — whitespace

Slide 59

Slide 59 text

Nested rules

Slide 60

Slide 60 text

table.users tr td a {color: #111} table.users tr.alt td a {color: #333} Nested rules - selectors

Slide 61

Slide 61 text

table.users tr td a color: #111 td.alt a color: #333 Nested rules - selectors Look, Ma, no braces or semicolons But you can use both if you wanna

Slide 62

Slide 62 text

table.users tr td color: #111 &.alt color: #333 &:hover color: #666 Nested rules - selectors Change this ... and you change these

Slide 63

Slide 63 text

.users font: size: 1.2em style: italics weight: bold Nested rules - properties

Slide 64

Slide 64 text

Variables

Slide 65

Slide 65 text

.user { background: #333; border-size: 2px; } .owner { background: #333; border-size: 2px; } .admin { background: #666; border-size: 4px; } Variables

Slide 66

Slide 66 text

!gray = #333 !default_border = 2px .user background: = !gray border-size: = !default_border .owner background: = !gray border-size: = !default_border .admin background: = !gray + #333 border-size: = !default_border + 2px Variables Even math! and color mixing!

Slide 67

Slide 67 text

Variables $font-apres: Apres, Arial, sans-serif $dark-gray: #1e1e1e !default $body-text: #bbb !default $strong-text: lighten($body-text, 40%) $muted-text: darken($body-text, 40%) $content-background: #fff $content-text: #555 $content-border: #ccc $form-background: rgba(0, 0, 0, .5) $blue-primary: #6095c2 $blue-secondary: #1742db $green-primary: #64b900 $green-secondary: #298527 $pink-primary: #f44ab7

Slide 68

Slide 68 text

Mixins

Slide 69

Slide 69 text

.avatar { padding: 2px; border: solid 1px #ddd; position: absolute; top: 5px; left: 5px; } p img { padding: 2px; border: solid 1px #ddd; } Mixins

Slide 70

Slide 70 text

=frame(!padding_width = 2px, !border_color = #ddd) padding = !padding_width border: width: 1px style: solid color = !border_color .avatar +frame position: absolute top: 5px left: 5px p img +frame(1px, #ccc) Mixins defines the mixin mixes in the rules

Slide 71

Slide 71 text

Selector inheritance

Slide 72

Slide 72 text

.flash { padding: 5px; border-width: 1px; font-weight: bold; } .error { color: #8a1f11; background: #fbe3e4; } .notice { color: #514721; background: #fff6bf; } Selector inheritance

Slide 73

Slide 73 text

.flash padding: 5px border-width: 1px font-weight: bold .error.flash color: #8a1f11 background: #fbe3e4 .notice.flash color: #514721 background: #fff6bf Selector inheritance

Slide 74

Slide 74 text

.flash, .error, .notice { padding: 5px; border-width: 1px; font-weight: bold; } .error { color: #8a1f11; background: #fbe3e4; } .notice { color: #514721; background: #fff6bf; } Selector inheritance now we can use a single class in our markup

Slide 75

Slide 75 text

Imports

Slide 76

Slide 76 text

@import url(/css/reset.css) @import url(/css/typography.css) @import url(/css/layout.css) Imports parent + 3 @imports = 4 http requests

Slide 77

Slide 77 text

@import reset.sass # _reset.sass @import typography.sass # _typography.sass @import layout.sass # _layout.sass Imports Included at compile time - just one http request

Slide 78

Slide 78 text

Imports + Mixins Now it gets fun!

Slide 79

Slide 79 text

@import compass/css3.sass .callout +border-radius(5px) +linear-gradient("left top", "left bottom", #fff, #ddd) .callout { -moz-border-radius: 5px; -webkit-border-radius: 5px; -border-radius: 5px; background-image: -moz-linear-gradient(top, bottom, from(#fff), to (#ddd)); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #fff), color-stop(1.00, #ddd)); } Compass CSS3 mixins very different syntax

Slide 80

Slide 80 text

css3/border_radius.sass css3/inline_block.sass css3/opacity.sass css3/text_shadow.sass css3/box_shadow.sass css3/columns.sass css3/box_sizing.sass css3/gradient.sass css3/background_clip.sass css3/background_origin.sass css3/background_size.sass css3/font_face.sass css3/transform.sass css3/transition.sass Compass CSS3 mixins

Slide 81

Slide 81 text

Bring your favorite CSS Framework

Slide 82

Slide 82 text

...
...
...
A Blueprint example boo

Slide 83

Slide 83 text

@import blueprint/reset.sass @import partials/base.sass @import blueprint @import blueprint/modules/scaffolding.sass #wrapper +container #content +column(7) +append(1) #featured +column(5, true) #sidebar +column(3, true) +prepend(1) A Blueprint example

Slide 84

Slide 84 text

Functions

Slide 85

Slide 85 text

Very. Powerful. Functions.

Slide 86

Slide 86 text

hue(#cc3) => 60deg saturation(#cc3) => 60% lightness(#cc3) => 50% adjust-hue(#cc3, 20deg) => #9c3 saturate(#cc3, 10%) => #d9d926 desaturate(#cc3, 10%) => #bfbf40 lighten(#cc3, 10%) => #d6d65c darken(#cc3, 10%) => #a3a329 grayscale(#cc3) => desaturate(#cc3, 100%) = #808080 complement(#cc3) => adjust-hue(#cc3, 180deg) = #33c mix(#cc3, #00f) => #e56619 mix(#cc3, #00f, 10%) => #f91405 mix(#cc3, #00f, 90%) => #d1b72d Sass 2.4 color functions http://nex-3.com/posts/89-powerful-color-manipulation-with-sass

Slide 87

Slide 87 text

mix(rgba(51, 255, 51, 0.75), #f00) => rgba(178, 95, 19, 0.875) mix(rgba(51, 255, 51, 0.90), #f00) => rgba(163, 114, 22, 0.95) alpha(rgba(51, 255, 51, 0.75)) => 0.75 opacity(rgba(51, 255, 51, 0.75)) => 0.75 opacify(rgba(51, 255, 51, 0.75), 0.1) => rgba(51, 255, 51, 0.85) fade-in(rgba(51, 255, 51, 0.75), 0.1) => rgba(51, 255, 51, 0.85) transparentize(rgba(51, 255, 51, 0.75), 0.1) => rgba(51, 255, 51, 0.65) fade-out(rgba(51, 255, 51, 0.75), 0.1) => rgba(51, 255, 51, 0.65) Sass 2.4 color functions with alpha support! http://nex-3.com/posts/89-powerful-color-manipulation-with-sass

Slide 88

Slide 88 text

Who makes this syntactic sugar?

Slide 89

Slide 89 text

Sass and Compass CSS extensions & compiler Patterns & plugins

Slide 90

Slide 90 text

...like peas and carrots.

Slide 91

Slide 91 text

$ sudo gem install haml $ sudo gem install compass --pre CALL IT FROM THE COMMAND LINE $ sass screen.sass screen.css OR COMPASS-IZE YOUR PROJECT $ compass --rails -f blueprint OR WATCH A FOLDER $ compass --watch Sass and Compass

Slide 92

Slide 92 text

A quick survey of Compass

Slide 93

Slide 93 text

Blueprint

Slide 94

Slide 94 text

Blueprint ★ Buttons ★ Colors ★ Debug ★ Fancy Type ★ Form ★ Grid ★ Interaction ★ Internet Explorer ★ Link Icons ★ Liquid ★ Print ★ Reset ★ Rtl ★ Scaffolding ★ Typography ★ Utilities

Slide 95

Slide 95 text

CSS3

Slide 96

Slide 96 text

CSS3 ★ Appearance ★ Background Clip ★ Background Origin ★ Background Size ★ Border Radius ★ Box ★ Box Shadow ★ Box Sizing ★ CSS3 Pie ★ Columns ★ Font Face ★ Gradient ★ Images ★ Inline Block ★ Opacity ★ Shared Utilities ★ Text Shadow ★ Transform ★ Transform (legacy) ★ Transition

Slide 97

Slide 97 text

Image sprites

Slide 98

Slide 98 text

@import "icon/*.png" .actions .new +icon-sprite(new) .edit +icon-sprite(edit) .save +icon-sprite(save) .delete +icon-sprite(delete) Image sprites .icon-sprite, .actions .new, .actions .edit, .actions .save, .actions .delete { background: url('/images/icon-34fe0604ab.png') no-repeat; } .actions .new { background-position: 0 -64px; } .actions .edit { background-position: 0 -32px; } .actions .save { background-position: 0 -96px; } .actions .delete { background-position: 0 0; } @import "icon/*.png" public/images/icon/new.png public/images/icon/edit.png public/images/icon/save.png public/images/icon/delete.png 1. 2. 3. I like the Sprite in you®

Slide 99

Slide 99 text

URL helpers

Slide 100

Slide 100 text

#nav background: image-url("nav_bg.png") repeat-x top center DEVELOPMENT #nav { background: url("/images/nav_bg.png") repeat-x top center; } PRODUCTION #nav { background: url("http://assets.example.com/images/nav_bg.png") repeat-x top center; } URL helpers relative paths for development, absolute for production

Slide 101

Slide 101 text

stylesheet-url($path) font-url($path) image-url($path) URL helpers

Slide 102

Slide 102 text

Share your patterns

Slide 103

Slide 103 text

http://brandonmathis.com/projects/fancy-buttons/

Slide 104

Slide 104 text

@import "fancy-buttons" button, a.button +fancy-button(#2966a8)

Slide 105

Slide 105 text

compass-960

Slide 106

Slide 106 text

$ninesixty-columns: 16 #wrap +grid-container #left-nav +alpha +grid(5) #main-content +grid-prefix(1) +grid(10) +omega Compass 960 https://github.com/chriseppstein/compass-960-plugin

Slide 107

Slide 107 text

compass-wordpress

Slide 108

Slide 108 text

$ gem install compass-wordpress CRANK OUT A NEW SASS-Y WORDPRESS THEME $ compass -r compass-wordpress \ -f wordpress -p thematic \ --sass-dir=sass --css-dir=css \ -s compressed my_awesome_theme AUTOCOMPILE YOUR CHANGES $ compass --watch Compass and WordPress shameless plug

Slide 109

Slide 109 text

compass-formalize Announcing!

Slide 110

Slide 110 text

No content

Slide 111

Slide 111 text

INSTALL THE GEM $ gem install compass_formalize CREATE THE COMPASS PROJECT $ compass create my-great-app -r compass_formalize $ cd my-great-app APPLY THE PATTERN $ compass install formalize/jquery Compass and Formalize

Slide 112

Slide 112 text

Stats

Slide 113

Slide 113 text

Stats | --------------------------------- | ----- | ---------- | -------------- | ----------- | --------- | -------------- | | Filename | Rules | Properties | Mixins Defs | Mixins Used | CSS Rules | CSS Properties | | --------------------------------- | ----- | ---------- | -------------- | ----------- | --------- | -------------- | | app/stylesheets/_960.sass | 198 | 141 | 0 | 0 | -- | -- | | app/stylesheets/_animation.sass | 2 | 2 | 0 | 0 | -- | -- | | app/stylesheets/application.sass | 268 | 607 | 0 | 33 | 1131 | 3684 | | app/stylesheets/_data_table.sass | 39 | 66 | 0 | 4 | -- | -- | | app/stylesheets/_datepicker.sass | 125 | 242 | 0 | 0 | -- | -- | | app/stylesheets/_formalize.sass | 82 | 78 | 0 | 4 | -- | -- | | app/stylesheets/_forms.sass | 227 | 242 | 0 | 21 | -- | -- | | app/stylesheets/ie.sass | 0 | 0 | 0 | 0 | 0 | 0 | | app/stylesheets/_jscrollpane.sass | 20 | 43 | 0 | 0 | -- | -- | | app/stylesheets/_prettify.sass | 16 | 16 | 0 | 0 | -- | -- | | app/stylesheets/print.sass | 0 | 0 | 0 | 0 | 0 | 0 | | app/stylesheets/_reset.sass | 111 | 18 | 0 | 0 | -- | -- | | app/stylesheets/_text.sass | 27 | 18 | 0 | 0 | -- | -- | | app/stylesheets/_tiptip.sass | 19 | 40 | 0 | 0 | -- | -- | | app/stylesheets/_util.sass | 56 | 54 | 0 | 0 | -- | -- | | app/stylesheets/_vars.sass | 0 | 6 | 2 | 0 | -- | -- | | --------------------------------- | ----- | ---------- | -------------- | ----------- | --------- | -------------- | | Total (16 files): | 1190 | 1573 | 2 | 62 | 1131 | 3684 | | --------------------------------- | ----- | ---------- | -------------- | ----------- | --------- | -------------- |

Slide 114

Slide 114 text

Isn’t she Sassy, folks? GET THE BOOK.

Slide 115

Slide 115 text

sass40 Save 40% and get early access! Sadly, sass100 is not a valid code.

Slide 116

Slide 116 text

Resources sass-lang.com beta.compass-style.org wynn.fm/okc blog: wynnnetherland.com twitter: @pengwynn email: [email protected] linkedin.com/in/netherland and thanks for having me! grab the slides!