Slide 1

Slide 1 text

clean out your junk-drawer! CampSass 2014 SF

Slide 2

Slide 2 text

clean out your junk-drawer! CampSass 2014 SF

Slide 3

Slide 3 text

That’s me! That’s where ! I ‘work’ @ANOTHERUIGUY That’s a ninja

Slide 4

Slide 4 text

!

Slide 5

Slide 5 text

Slide 6

Slide 6 text

Slide 7

Slide 7 text

early conceptions of modular design

Slide 8

Slide 8 text

early implementation of modular design

Slide 9

Slide 9 text

Slide 10

Slide 10 text

How to use this new knowledge?

Slide 11

Slide 11 text

I get it! All the big things are made up of small things!

Slide 12

Slide 12 text

I get it! All the big things are made up of small things! Start from the INSIDE, not the OUTSIDE!

Slide 13

Slide 13 text

I get it! All the big things are made up of small things! Start from the INSIDE, not the OUTSIDE! Wait! If this is so awesome, why is not EVERYONE talking about this?!

Slide 14

Slide 14 text

I get it! All the big things are made up of small things! Start from the INSIDE, not the OUTSIDE! Wait! If this is so awesome, why is not EVERYONE talking about this?! I MUST TELL THE WORLD!

Slide 15

Slide 15 text

@ANOTHERUIGUY a modular UI tour Mobile Monday Madison MadMongers (Madison Perl Mongers) Milwaukee PHP The Milwaukee Web Design Pattern Libraries, CSS Frameworks & more Mobile Monday Madison Meeting Madison Web Design & Dev Mad-Railers Madison PHP Meetup Group

Slide 16

Slide 16 text

@ANOTHERUIGUY a modular UI tour Mobile Monday Madison MadMongers (Madison Perl Mongers) Milwaukee PHP The Milwaukee Web Design Pattern Libraries, CSS Frameworks & more Mobile Monday Madison Meeting Madison Web Design & Dev Mad-Railers Madison PHP Meetup Group This is great! Where is your framework? Does it have a grid?

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

It’s the file structure that makes it good!

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

New dude! ! Hey, honest opinion, what do you think of our Sass? Sure! Show me the codes.

Slide 26

Slide 26 text

That’s 18491

Slide 27

Slide 27 text

That’s 18491

Slide 28

Slide 28 text

How did this happen? How could they have gone so amazingly wrong?

Slide 29

Slide 29 text

How did this happen? How could they have gone so amazingly wrong? These are smart people?

Slide 30

Slide 30 text

How did this happen? How could they have gone so amazingly wrong? These are smart people? Variables that make no sense? Mixins randomly all over the place. @import where?

Slide 31

Slide 31 text

How did this happen? How could they have gone so amazingly wrong? These are smart people? Variables that make no sense? Mixins randomly all over the place. @import where? MY GOD! That ‘partials’ folder has how many files in it? That makes no sense!?

Slide 32

Slide 32 text

How did this happen? How could they have gone so amazingly wrong? These are smart people? Variables that make no sense? Mixins randomly all over the place. @import where? How to tell them? MY GOD! That ‘partials’ folder has how many files in it? That makes no sense!?

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

! For many of us getting started with Sass, at one time or another have created a junk- drawer of files. Fo mi a

Slide 35

Slide 35 text

! ed k- For most, this was a rookie mistake, but for others, this is a continuing issue with our architecture and file management techniques. Sas ru d

Slide 36

Slide 36 text

! e is r Sass doesn't come with any real rules for file management so developers are pretty much left to their own devices.

Slide 37

Slide 37 text

increased complexity

Slide 38

Slide 38 text

the good ‘ol days .selection { font-size: 12px; line-height: 13px; font-family: Arial, Helvetica, sans-serif; text-align: center; margin-top: 10px; } .selection ul,li { font-size: 12px; line-height: 14px; font-family: Arial, Helvetica, sans-serif; text-align: left; vertical-align: top; margin-left: 10px; width: auto; height: auto; }

Slide 39

Slide 39 text

things got much more complicated /* GLOBALHEADER */ #globalheader { position:relative; display:block; width:980px; height:36px; margin: 18px auto; text-align:left; z-index:9998; background:url(/global/nav/images/ globalheader.png) repeat-x; -khtml-border-radius:4px; -ms-border-radius:4px; -o-border-radius:4px; -moz-border- radius:4px; -webkit-border-radius:4px; border-radius:4px; -khtml-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -ms-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -o-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -moz-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -webkit-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; box-shadow:rgba(0,0,0,0.3) 0 1px 2px; font:12px/18px "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; } @media only screen and (max-device-width:768px) { #globalheader { z-index:1; } } #globalheader #globalnav { position:relative; display:block; margin:0; padding:0; zoom:1; z-index:3; } #globalheader #globalnav:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } #globalheader #globalnav li { display:inline; } #globalheader #globalnav li a { float:left; width:102px; height:36px; overflow:hidden; That’s a lot 
 of code!

Slide 40

Slide 40 text

we tried ... but failed @import url(‘path/reset.css’); @import url(‘path/evil.css’); @import url(‘path/more-evil.css’); @import url(‘path/bootstrap-sucks.css’); That’s a performance killer bro!

Slide 41

Slide 41 text

Slide 42

Slide 42 text

Text Text /* GLOBAL VARIABLES */ $prefix_defaults: -moz- -webkit- -o- -ms- '' !default; $webkit_support: -webkit- '' !default; $moz_support: -moz- '' !default; $ms_support: -ms- '' !default; $moz_webkit_support: -moz- -webkit- '' !default; $moz_ms_support: -moz- -ms- '' !default; $webkit_ms_support: -webkit- -ms- '' !default; ! $grid-width: 980px; $max-device-width: 768px; $background-position-full: 100%; $background-position-half: 50%; $link-color: #7F7F7F; $text-color: #333; ! /* Mixins */ @mixin border_radius ($border_radius, $prefixes: $webkit_support) { @each $prefix in $prefixes { #{$prefix}border-radius: $border_radius; } } ! @mixin box_shadow ($shadow_color: $shadow_color, $shadow: $shadow, $prefixes: $prefix_defaults) { @each $prefix in $prefixes { #{$prefix}box-shadow: $shadow_color $shadow; } } ! Variables and Mixins. NICE!

Slide 43

Slide 43 text

! ! /* GLOBALHEADER */ #globalheader { position:relative; display:block; width:$grid-width; height:36px; margin: 18px auto; text-align:left; z-index:9998; background:url(/global/nav/images/ globalheader.png) repeat-x; -khtml-border-radius:4px; -ms-border-radius:4px; -o-border-radius:4px; -moz-border- radius:4px; -webkit-border-radius:4px; border-radius:4px; -khtml-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -ms-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -o-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -moz-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; - webkit-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; box-shadow:rgba(0,0,0,0.3) 0 1px 2px; font:12px/18px "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; } @media only screen and (max-device-width:$max-device-width) { #globalheader { z-index:1; } } #globalheader #globalnav { position:relative; display:block; margin:0; padding:0; zoom:1; z-index:3; } #globalheader #globalnav:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } #globalheader #globalnav li { display:inline; } #globalheader #globalnav li a { float:left; width:102px; height:36px; overflow:hidden; text-indent:-9999px; background:url(/global/nav/images/globalnav.png) no-repeat; cursor:pointer; } ! /* VML FOR IE */ v\:roundrect, v\:fill { behavior:url(#default#VML); } #globalheader-roundrect, #globalheader-fill { display:block; position:absolute; width:; height:35px; top:0; left:0; z-index:2; } #globalheader-shadow { display:block; position:absolute; width:$grid-width; height:35px; top:-1px; left:-2px; z-index:1; -ms- filter:"progid:DXImageTransform.Microsoft.Blur(pixelRadius=2)"; filter:progid:DXImageTransform.Microsoft.Blur(pixelRadius=2); } ! /* VARIANTS */

Slide 44

Slide 44 text

! ! /* GLOBALHEADER */ #globalheader { position:relative; display:block; width:$grid-width; height:36px; margin: 18px auto; text-align:left; z-index:9998; background:url(/global/nav/images/ globalheader.png) repeat-x; -khtml-border-radius:4px; -ms-border-radius:4px; -o-border-radius:4px; -moz-border- radius:4px; -webkit-border-radius:4px; border-radius:4px; -khtml-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -ms-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -o-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; -moz-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; - webkit-box-shadow:rgba(0,0,0,0.3) 0 1px 2px; box-shadow:rgba(0,0,0,0.3) 0 1px 2px; font:12px/18px "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; } @media only screen and (max-device-width:$max-device-width) { #globalheader { z-index:1; } } #globalheader #globalnav { position:relative; display:block; margin:0; padding:0; zoom:1; z-index:3; } #globalheader #globalnav:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } #globalheader #globalnav li { display:inline; } #globalheader #globalnav li a { float:left; width:102px; height:36px; overflow:hidden; text-indent:-9999px; background:url(/global/nav/images/globalnav.png) no-repeat; cursor:pointer; } ! /* VML FOR IE */ v\:roundrect, v\:fill { behavior:url(#default#VML); } #globalheader-roundrect, #globalheader-fill { display:block; position:absolute; width:; height:35px; top:0; left:0; z-index:2; } #globalheader-shadow { display:block; position:absolute; width:$grid-width; height:35px; top:-1px; left:-2px; z-index:1; -ms- filter:"progid:DXImageTransform.Microsoft.Blur(pixelRadius=2)"; filter:progid:DXImageTransform.Microsoft.Blur(pixelRadius=2); } ! /* VARIANTS */ die hard

Slide 45

Slide 45 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss

Slide 46

Slide 46 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss overly simplified

Slide 47

Slide 47 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss overly simplified too much code in one file

Slide 48

Slide 48 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss overly simplified too much code in one file base, elements, modules and layout in the same files

Slide 49

Slide 49 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss overly simplified too much code in one file base, elements, modules and layout in the same files cats and dogs living together, mass hysteria!

Slide 50

Slide 50 text

early days of file management style.scss mixins.scss variables.scss typography.scss forms.scss overly simplified too much code in one file base, elements, modules and layout in the same files cats and dogs living together, mass hysteria!

Slide 51

Slide 51 text

! seemed like a good idea

Slide 52

Slide 52 text

file structures of inspiration app/ models/ views/ controllers/ admin/ blog/ shared/

Slide 53

Slide 53 text

file structures of inspiration app/ models/ views/ controllers/ admin/ blog/ shared/ THE MVC IS AWESOME! ! LET’S USE THIS TO ORGANIZE THE SASS!

Slide 54

Slide 54 text

where do I put the abstracted stuff? style.scss mixins variables forms typography partials views

Slide 55

Slide 55 text

where do I put the abstracted stuff? style.scss mixins variables forms typography partials views attempts to break out mixins and variables == lots of files dumped into folders

Slide 56

Slide 56 text

where do I put the abstracted stuff? style.scss mixins variables forms typography partials views attempts to break out mixins and variables == lots of files dumped into folders UI modules and patterns inevitably ended up within the View styles

Slide 57

Slide 57 text

where do I put the abstracted stuff? style.scss mixins variables forms typography partials views attempts to break out mixins and variables == lots of files dumped into folders UI modules and patterns inevitably ended up within the View styles But code is being duplicated? Oh yeah, make it a partial!

Slide 58

Slide 58 text

where do I put the abstracted stuff? style.scss mixins variables forms typography partials views attempts to break out mixins and variables == lots of files dumped into folders UI modules and patterns inevitably ended up within the View styles But code is being duplicated? Oh yeah, make it a partial! That’s a junk- drawer bro!

Slide 59

Slide 59 text

! learn from ‘doing it wrong’

Slide 60

Slide 60 text

our perspective was all wrong

Slide 61

Slide 61 text

our perspective was all wrong Styles are written based on placement in the view

Slide 62

Slide 62 text

our perspective was all wrong Styles are written based on placement in the view CSS too specific. Very fragile with placement

Slide 63

Slide 63 text

our perspective was all wrong Styles are written based on placement in the view CSS too specific. Very fragile with placement Presentation classes in the markup

Slide 64

Slide 64 text

our perspective was all wrong Styles are written based on placement in the view CSS too specific. Very fragile with placement Presentation classes in the markup Poor code reuse, if any at all. To much ‘⌘C / ⌘V`

Slide 65

Slide 65 text

our perspective was all wrong Styles are written based on placement in the view CSS too specific. Very fragile with placement Presentation classes in the markup Poor code reuse, if any at all. To much ‘⌘C / ⌘V` A major case of the div’itus

Slide 66

Slide 66 text

our perspective was all wrong Styles are written based on placement in the view CSS too specific. Very fragile with placement Presentation classes in the markup Poor code reuse, if any at all. To much ‘⌘C / ⌘V` A major case of the div’itus Using IDs for styling to over-ride the cascade

Slide 67

Slide 67 text

start with the smaller parts

Slide 68

Slide 68 text

start with the smaller parts Buttons Typography Color pallet standard icons borders and line widths

Slide 69

Slide 69 text

start small and build up

Slide 70

Slide 70 text

start small and build up Header module Hero module Nav module Hero copy module Article module List module

Slide 71

Slide 71 text

! nature has taught us everything

Slide 72

Slide 72 text

code the base, create the module and assemble the layout buttons/ color/ forms/ layouts/ modules/ typography/ ui_patterns/ _buttons.scss _config.scss _forms.scss _reset.scss _typography.scss application.scss

Slide 73

Slide 73 text

a powerful weapon in the Sass arsenal // Following sequence will load the necessary libraries // ----------------------------------------------------------- @import “rwd-toolkit"; @import “color-scale”; @import “type-rhythm-scale“; @import "vendor/manifest"; ! ! // This where you start building your own styles. // ----------------------------------------------------------- @import "typography"; @import "forms"; @import "buttons"; @import "ui_patterns/manifest"; // manifest files @import "modules/manifest"; // manifest files @import "layouts/manifest"; // manifest files

Slide 74

Slide 74 text

a powerful weapon in the Sass arsenal // Following sequence will load the necessary libraries // ----------------------------------------------------------- @import “rwd-toolkit"; @import “color-scale”; @import “type-rhythm-scale“; @import "vendor/manifest"; ! ! // This where you start building your own styles. // ----------------------------------------------------------- @import "typography"; @import "forms"; @import "buttons"; @import "ui_patterns/manifest"; // manifest files @import "modules/manifest"; // manifest files @import "layouts/manifest"; // manifest files Nicely organized!

Slide 75

Slide 75 text

a powerful weapon in the Sass arsenal // Following sequence will load the necessary libraries // ----------------------------------------------------------- @import “rwd-toolkit"; @import “color-scale”; @import “type-rhythm-scale“; @import "vendor/manifest"; ! ! // This where you start building your own styles. // ----------------------------------------------------------- @import "typography"; @import "forms"; @import "buttons"; @import "ui_patterns/manifest"; // manifest files @import "modules/manifest"; // manifest files @import "layouts/manifest"; // manifest files Nicely organized! Have you read ‘Bower all the things’

Slide 76

Slide 76 text

this can really save your bacon

Slide 77

Slide 77 text

manage the smart defaults for your UI /////// Typography configuration/////// // ----------------------------------------------------------------------------- $font_size: 12; // $heading_1: 46; $heading_2: 32; $heading_3: 28; $heading_4: 18; $heading_5: 18; $heading_6: 18; // $line: $font_size * 1.5; // $small_point_size: 10; $large_point_size: 14; // $primary_font_family: #{"Helvetica Neue", Arial, sans-serif}; $secondary_font_family: #{"Helvetica Neue", Arial, sans-serif}; $heading_font_family: #{"Helvetica Neue", Arial, sans-serif}; ! $icon_font_alpha: #{‘ico-fonts'}; ! /////// Default webfont directory/////// // ----------------------------------------------------------------------------- $webfont_directory: "/fonts/"; ! /////// default image directory /////// // ----------------------------------------------------------------------------- No CSS to speak of, all logic.

Slide 78

Slide 78 text

where we begin our work

Slide 79

Slide 79 text

@import "typography/manifest"; ! // Customize the following to fit your specifications //* --------------------------------------------------------- html { font: em($font-size, 16) $primary-font-family; line-height: baseline($font-size); color: $primary-text } ! /////// Include custom font families // *--------------------------------------------------------- @include font-face($default-icon-font-family, $default-icon-font-name); ! // Heading CSS rules //* ---------------------------------------------------------- h1, h2, h3, h4, h5, h6, [role=heading] { @include heading(); } h1, [aria-level="1"] { section & { @include text($heading-2); } } all CSS, NO LOGIC!

Slide 80

Slide 80 text

where’z u go?

Slide 81

Slide 81 text

functional vs. presentational buttons/ _mixins.scss _extends.scss _buttons.scss _manifest.scss

Slide 82

Slide 82 text

functional vs. presentational buttons/ _mixins.scss _extends.scss _buttons.scss functional presentational _manifest.scss

Slide 83

Slide 83 text

organize your thoughts // Custom button extends and mixins // ---------------------------------------------- @import "buttons/manifest"; ! // buttons // ---------------------------------------------- button, a.button { @inlcude button($button-color); }

Slide 84

Slide 84 text

organize your thoughts // Custom button extends and mixins // ---------------------------------------------- @import "buttons/manifest"; ! // buttons // ---------------------------------------------- button, a.button { @inlcude button($button-color); } functional presentational

Slide 85

Slide 85 text

seeing is believing

Slide 86

Slide 86 text

simplicity in organization Module Sass is exclusive to a particular interaction of the application. ! ! Modules will come in all shapes and sizes. ! ! Larger modules may also consist of smaller modules or smaller UI patterns.

Slide 87

Slide 87 text

simplicity in organization modules/ _extends.scss registration/ _functions.scss _mixins.scss _module_registration.scss _module_personalInfo.scss

Slide 88

Slide 88 text

simplicity in organization modules/ _extends.scss registration/ _functions.scss _mixins.scss _module_registration.scss _module_personalInfo.scss _extends.scss purchase/ _functions.scss _mixins.scss _module_order-summary.scss _module_purchase.scss

Slide 89

Slide 89 text

simplicity in organization modules/ _extends.scss registration/ _functions.scss _mixins.scss _module_registration.scss _module_personalInfo.scss directory name primary module

Slide 90

Slide 90 text

name-space by the module itself %order-summary { %form-header { border-radius: em(5) em(5) 0 0; margin-bottom: 0; } %order-summary-container { @extend %Grid4ThreeSideBox; } %initial-assetListing { @media #{$mobile} { display: none; } } %price { text-align: right; } %total { font-size: em($large_point_size); } %footer {

Slide 91

Slide 91 text

! bringing the picture into focus

Slide 92

Slide 92 text

make up the view

Slide 93

Slide 93 text

make up the view module module module module module

Slide 94

Slide 94 text

manage your grid .checkout-experience { .customer-checkout { @media #{$tablet} { @include grid(10, $grid_context: 10); } } .order-summary { @extend %grid_5; @media #{$tablet_portrait} { @include grid(10, $grid_context: 10); } @media #{$mobile} { @include grid(4, $grid_context: 4); } .scrollBox { @include grid(5, $grid_uom: em);

Slide 95

Slide 95 text

what have we learned?

Slide 96

Slide 96 text

what have we learned? CSS management has come a long way

Slide 97

Slide 97 text

what have we learned? Vanilla CSS has NO TOOLS for code management CSS management has come a long way

Slide 98

Slide 98 text

what have we learned? Vanilla CSS has NO TOOLS for code management outside-in BAD! ! inside-out BETTER! CSS management has come a long way

Slide 99

Slide 99 text

what have we learned? Vanilla CSS has NO TOOLS for code management outside-in BAD! ! inside-out BETTER! modular files with @import system === WINNING! CSS management has come a long way

Slide 100

Slide 100 text

what have we learned? Vanilla CSS has NO TOOLS for code management outside-in BAD! ! inside-out BETTER! modular files with @import system === WINNING! elements, modules and then the view CSS management has come a long way

Slide 101

Slide 101 text

what have we learned? Vanilla CSS has NO TOOLS for code management outside-in BAD! ! inside-out BETTER! modular files with @import system === WINNING! elements, modules and then the view CSS management has come a long way Take everything you know AND SET IT ON FIRE!

Slide 102

Slide 102 text

what have we learned? Vanilla CSS has NO TOOLS for code management outside-in BAD! ! inside-out BETTER! modular files with @import system === WINNING! elements, modules and then the view CSS management has come a long way Take everything you know AND SET IT ON FIRE! Organize your Sass! ! it will hurt less

Slide 103

Slide 103 text

you, in the front ...

Slide 104

Slide 104 text

Thanks!