modular html & css turbo workshop

93
TACTICAL HTML & CSS MODULAR HTML & CSS TURBO WORKSHOP Shay Howe @shayhowe learn.shayhowe.com Darby Frey @darbyfrey darbyfrey.com

Upload: shay-howe

Post on 21-Jan-2017

89 views

Category:

Design


6 download

TRANSCRIPT

Page 1: Modular HTML & CSS Turbo Workshop

TACTICALHTML & CSS

MODULAR

HTML & CSSTURBO WORKSHOP

Shay [email protected]

Darby [email protected]

Page 2: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

Shay Howe@shayhowe

learn.shayhowe.com

Darby Frey@darbyfrey

darbyfrey.com

Page 3: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

1. The Problem2. Groundwork3. Assembling Layout4. Accommodating Content5. Turbo with SCSS 6. Onward

OUR SCHEDULE

Page 4: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

THEPROBLEM

Page 5: Modular HTML & CSS Turbo Workshop

The Gust by Willem van de Velde the Younger

Page 6: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMMON PROBLEMS• Websites have difficulty scaling

• Code becomes brittle

• Files and code bases begin to swell

Page 7: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

WHAT’S WRONG• Best practices aren’t exactly best practices

• Standards need to evolve

Page 8: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

BEST BAD PRACTICES• Avoid extra elements

• Avoid classes

• Leverage type selectors

• Leverage descendent selectors

Page 9: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

BEST BAD PRACTICESAvoiding classessection  ul#nav  li  {...}section:nth-­‐child(2)  div:nth-­‐child(7)  >  a  {...}

Leveraging selectorsa.btn  {...}#main  a.btn  {...}#main  div.feature  a.btn  {...}

Page 10: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

BEST BAD PRACTICESBad#contact  li:nth-­‐child(1)  input,#contact  li:nth-­‐child(2)  input  {    width:  160px;}#contact  li:nth-­‐child(3)  textarea  {    width:  280px;}

Page 11: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

BEST BAD PRACTICESGood.col-­‐1  {    width:  160px;}.col-­‐2  {    width:  280px;}

Page 12: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SPECIFICITY?• Specificity determines which styles are applied

• Each selector has a specificity weight

• High specificity beats low specificity

• Low specificity is key

Page 13: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

MEASURING SPECIFICITYFormula

• IDs, Classes/Pseudo-classes/Attributes, Elements

High Specificity (Bad)

#primary  #main  div.gallery  figure.mediaIDs: 2, Classes: 2, Elements: 2 — Compiled: 2–2–2

Low Specificity (Good)

.gallery-­‐mediaIDs: 0, Classes: 1, Elements: 0 — Compiled: 0–1–0

Page 14: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

Page 15: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

WATCH SPECIFICITY• Be explicit

• Keep specificity low

• Never use IDs or !important

• Avoid nested selectors (#main  .spotlight  strong  span)

Page 16: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

WATCH SPECIFICITYBad#primary  #main  div.gallery  {    text-­‐transform:  uppercase;}#primary  #main  div.gallery  figure.media  {    background:  #ccc;}

Page 17: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

WATCH SPECIFICITYGood.gallery  {    text-­‐transform:  uppercase;}.gallery-­‐media  {    background:  #ccc;}

Page 18: Modular HTML & CSS Turbo Workshop

Parade of the Black Sea Fleet by Ivan Aivazovsky

Page 19: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

MAINTAINABILITYCode must be...

• Organized

• Modular

• Performant

Page 20: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

METHODOLOGIESOOCSS

• Object-Oriented CSSFrom Nicole Sullivan – oocss.org

SMACSS

• Scalable and Modular Architecture for CSSFrom Jonathan Snook – smacss.com

Page 21: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

GROUNDWORK

Page 22: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

REUSE CODE• Do not duplicate code

• Remove old code

• Defer loading subsequent styles

Page 23: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

REUSE CODEBad.news  {    background:  #eee;    color:  #666;}.social  {    background:  #eee;    color:  #666;}

Page 24: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

REUSE CODEGood.news,.social  {    background:  #eee;    color:  #666;}

Better.feat-­‐box  {    background:  #eee;    color:  #666;}

Page 25: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

USE CLASSES• Write understandable class names

• Avoid unnecessary nesting

• Use same strength specificity

Page 26: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

USE CLASSESBad.feat-­‐box  .callout  .pr  {    font-­‐size:  12px;}.feat-­‐box  .callout  .pr  .un  {    color:  #39f;}

Page 27: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

USE CLASSESGood.feat-­‐box  .price  {    font-­‐size:  12px;}.feat-­‐box  .unit  {    color:  #39f;}

Page 28: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

USE CLASSESBad.btn.large  {    font-­‐size:  24px;        padding:  15px  30px;}

<div  class="btn  large">...</div>

Page 29: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

USE CLASSESGood.btn-­‐large  {    font-­‐size:  24px;    padding:  15px  30px;}

<div  class="btn-­‐large">...</div>

Page 30: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ASSEMBLINGLAYOUT

Page 31: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ABSTRACT STRUCTURE• Separate presentation (or theme) from layout

• Create an object layer for layout

• Create a skin layer for theme

• Use a grid

Page 32: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ABSTRACT STRUCTUREBad.news  {    background:  #eee;    color:  #666;    margin:  0  10px;    width:  400px;}

<div  class="news">...</div>

Page 33: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ABSTRACT STRUCTUREGood.grid-­‐4  {    margin:  0  10px;    width:  400px;}.feat-­‐box  {    background:  #eee;    color:  #666;}

<div  class="grid-­‐4  feat-­‐box">...</div>

Page 34: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TRANSPARENTIZE ELEMENTS• Stylize elements to be transparent

• Keep visual properties apart from layout properties

Page 35: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TRANSPARENTIZE ELEMENTSBad.pagination  {    border-­‐radius:  5px;    border:  1px  solid  #eee;    margin:  0  10px;    width:  620px;}

<ul  class="pagination">...</ul>

Page 36: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TRANSPARENTIZE ELEMENTSGood.grid-­‐8  {    margin:  0  10px;    width:  620px;}.offset-­‐box  {    border-­‐radius:  5px;    border:  1px  solid  #eee;}

<ul  class="grid-­‐8  offset-­‐box">...</ul>

Page 37: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

CREATE ADAPTABLE LAYOUTS• Height and width should be flexible

• Height should extend with content

• Width should extend with a grid

Page 38: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

CREATE ADAPTABLE LAYOUTSBad#main  {    float:  left;    margin:  0  10px;    width:  620px;}#aside  {    float:  left;    margin:  0  10px;    width:  300px;}

Page 39: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

CREATE ADAPTABLE LAYOUTSGood.grid-­‐4,.grid-­‐8  {    float:  left;    margin:  0  10px;}.grid-­‐4  {    width:  300px;}.grid-­‐8  {    width:  620px;}

Page 40: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ASSEMBLING LAYOUT

IN PRACTICEhttp://bit.ly/modular-html-css

Page 41: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ACCOMMODATINGCONTENT

Page 42: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SEPARATE CONTENT• Separate content from container

• Stylize content regardless of container

Page 43: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SEPARATE CONTENTBad.alert  {    background:  #f2dede;    border-­‐radius:  10px;    color:  #b94a48;    padding:  10px  20px;}

<div  class="alert">...</div>

Page 44: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SEPARATE CONTENTGood.alert  {    border-­‐radius:  10px;    padding:  10px  20px;}.alert-­‐error  {    background:  #f2dede;    color:  #b94a48;}

<div  class="alert  alert-­‐error">...</div>

Page 45: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

AVOID PARENT DEPENDENCY• Remove parent container dependency

• Decouple CSS from HTML

• Create components to be used anywhere

Page 46: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

AVOID PARENT DEPENDENCYBad.feat-­‐box  {    background:  #eee;}article  .feat-­‐box  {    background:  #fff;}

<article>    <div  class="feat-­‐box">...</div></article>

Page 47: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

AVOID PARENT DEPENDENCYGood.feat-­‐box  {    background:  #eee;}.feat-­‐box-­‐alt  {    background:  #fff;}

<article>    <div  class="feat-­‐box-­‐alt">...</div></article>

Page 48: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

FAVOR SEMANTICS• Allow elements to adapt

• Uses individual classes to extend modules

Page 49: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

FAVOR SEMANTICSBad.feat-­‐box  h2  {    color:  #f60;    font:  18px  Helvetica,  sans-­‐serif;}

<div  class="feat-­‐box">    <h2>...</h2></div>

Page 50: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

FAVOR SEMANTICSGood.feat-­‐subhead  {    color:  #f60;    font:  18px  Helvetica,  sans-­‐serif;}

<div  class="feat-­‐box">    <h2  class="feat-­‐subhead">...</h2></div>

Page 51: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ACCOMMODATING CONTENT

IN PRACTICEhttp://bit.ly/modular-html-css

Page 52: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TURBOWITH SCSS

Page 53: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SETUP

Page 54: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SCSS• CSS preprocessor

• Extension of CSS3

• Compiled using Ruby

• Adds nested rules, variables, mixins, selector inheritance, and more

Page 55: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SCSSSCSS Syntax.new  {    color:  #f60;    .item  {        font-­‐size:  24px;    }}

Compiled CSS.new  {    color:  #f60;}.new  .item  {    font-­‐size:  24px;}

Page 56: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SCSS VS. SASSSCSS Syntax.new  {    color:  #f60;    .item  {        font-­‐size:  24px;    }}

Sass Syntax.new    color:  #f60    .item        font-­‐size:  24px

Page 57: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMPASS• Built on top of Sass

• Includes reusable patterns

• Provides cross browser CSS3 mixins

Page 58: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SCOUT APP• GUI for compiling Sass and Compass

• Available for both Mac and Windows

Page 59: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SETUP

IN PRACTICEhttp://bit.ly/modular-html-css

Page 60: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ORGANIZATION

Page 61: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TECHNIQUESettings• Utility styles (Extends, Mixins, Variables)

Base• Core styles for entire site (Layout, Typography)

Components• UI concepts & design patterns (Buttons, List, Navigation)

Modules• Business logic (Aside, Header, Footer)

Page 62: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

TECHNIQUE

Page 63: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

PARTIALS• Must begin with an underscore, _

• Must have a file extension of .scss, not .css.scss

Page 64: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

IMPORTSworkshop.css.scss//  Compass@import  "compass/css3";

//  Settings@import  "settings/variables";

//  Base@import  "base/layout";

...

Page 65: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ORGANIZATION

IN PRACTICEhttp://bit.ly/modular-html-css

Page 66: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SETTINGS

Page 67: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

VARIABLES• Allow common values to be shared

• Assigned with a dollar sign, name, colon, and value

• May be a number, string, boolean, null, or multiple comma separated values

Page 68: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

VARIABLESSCSS Syntax$font-­‐base:  14px;$sans-­‐serif:  "Open  Sans",  sans-­‐serif;p  {    font:  $font-­‐base  $sans-­‐serif;}

Compiled CSSp  {    font:  14px  "Open  Sans",  sans-­‐serif;}

Page 69: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

EXTENDS• Share common styles without duplicating them

• Keep code weight low

• Generates detailed selectors

• Assigned with the @extend  rule followed by the

selector

Page 70: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

EXTENDSSCSS Syntax.alert  {    border-­‐radius:  10px;}.alert-­‐error  {    @extend  .alert;    color:  #b94a48;}.alert-­‐success  {    @extend  .alert;    color:  #468847;}

Compiled CSS.alert,.alert-­‐error,.alert-­‐success  {    border-­‐radius:  10px;}.alert-­‐error  {    color:  #b94a48;}.alert-­‐success  {    color:  #468847;}

Page 71: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

PLACEHOLDERS• Similar to extends

• Selector is assigned with a percentage sign

• Extended selector is not output, only the styles

Page 72: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

PLACEHOLDERSSCSS Syntax%alert  {    border-­‐radius:  10px;}.alert-­‐error  {    @extend  %alert;    color:  #b94a48;}.alert-­‐success  {    @extend  %alert;    color:  #468847;}

Compiled CSS.alert-­‐error,.alert-­‐success  {    border-­‐radius:  10px;}.alert-­‐error  {    color:  #b94a48;}.alert-­‐success  {    color:  #468847;}

Page 73: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

MIXINS• Share similar styles based off given arguments

• Duplicates properties, providing different values

• Assigned with the @mixin  rule followed by the

name and arguments

Page 74: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

MIXINSSCSS Syntax@mixin  btn($color)  {      color:  $color;}.btn  {    @mixin  btn(#f60);}

Compiled CSS.btn  {    color:  #f60;}

Page 75: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

SETTINGS

IN PRACTICEhttp://bit.ly/modular-html-css

Page 76: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

REFACTOR

Page 77: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMMENTS• Two different types of comments

• Standard CSS comments as normal

• Silent comments, assigned with two forward slashes, not compiled in the output

Page 78: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMMENTSSCSS Syntax/*  Normal  comment  */.awesome  {    color:  #3276b1;}//  Omitted  comment.very-­‐awesome  {    color:  #47a447;}

Compiled CSS/*  Normal  comment  */.awesome  {    color:  #3276b1;}.very-­‐awesome  {    color:  #47a447;}

Page 79: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

PARENT SELECTOR• Add styles to a previous selector

• Commonly used with pseudo classes

• Assigned with an ampersand

• May also be used as the key selector

Page 80: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

PARENT SELECTORSCSS Syntaxa  {    color:  #8ec63f;    &:hover  {        color:  #f7941d;    }}

Compiled CSSa  {    color:  #8ec63f;}a:hover  {    color:  #f7941d;}

Page 81: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

INTERPOLATION• Occasionally SCSS need to be interpolated

• Most commonly happens as part of a class name, property name, or inside a string plain text

• Assigned by placing the value inside #{...}

Page 82: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

INTERPOLATIONSCSS Syntax$logo:  twitter;$offset:  left;.#{$logo}  {    #{$offset}:  20px;}

Compiled CSS.twitter  {    left:  20px;}

Page 83: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

REFACTOR

IN PRACTICEhttp://bit.ly/modular-html-css

Page 84: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMPILE

Page 85: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

OUTPUT STYLES• SCSS has multiple output styles

• Nested or expanded is best for development

• Compact or compressed is best for production

Page 86: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

COMPILE

IN PRACTICEhttp://bit.ly/modular-html-css

Page 87: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

ONWARD

Page 88: Modular HTML & CSS Turbo Workshop

Ships on the Roadstead by Willem van de Velde the Younger

Page 89: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

APPROACH• Stop thinking about pages

• Start thinking about components

• Take visual inventory

Page 90: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

THEMES• Decouple HTML and CSS

• Separate presentation from layout

• Separate content from container

• Extend elements with classes

Page 91: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

OUTCOMES• Maintainability!

• Reusable code, less duplication

• Flexibility and extensibility

• Improved standards

Page 92: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

WHAT’S NEXTBuild a style guide

• Twitter Bootstrap, Zurb Foundation

Review methodologies

• OOCSS, SMACSS

Test your code

• CSS Lint, Inspector, PageSpeed

Page 93: Modular HTML & CSS Turbo Workshop

@shayhowe & @darbyfrey Modular HTML & CSS

THANK YOU!Questions?

@shayhowe

@darbyfrey