Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modular HTML & CSS

Shay Howe
September 27, 2012

Modular HTML & CSS

There are a million ways to write HTML and CSS, and everyone has their own, but is there a right way? Our code needs to be well structured, written in an organized manner, and performance driven. Sharing code amongst a team should be a joyful experience, not absolute terror.

Shay talks about how to how to write tactical HTML and CSS, crafting code that is maintainable, flexible, and extensible. Covering new methodologies such as OOCSS and SMACSS learn how to architect websites which are manageable and performant.

Shay Howe

September 27, 2012
Tweet

More Decks by Shay Howe

Other Decks in Programming

Transcript

  1. @shayhowe Modular HTML & CSS COMMON PROBLEMS • Websites have

    difficulty scaling • Code becomes brittle • Files and code bases begin to swell
  2. @shayhowe Modular HTML & CSS WHAT’S WRONG • Best practices

    aren’t exactly best practices • Standards need to evolve
  3. @shayhowe Modular HTML & CSS BEST BAD PRACTICES • Avoid

    extra elements • Avoid classes • Leverage type selectors • Leverage descendent selectors
  4. @shayhowe Modular HTML & CSS BEST BAD PRACTICES Avoiding classes

    section  ul#nav  li  {...} section:nth-­‐child(2)  div:nth-­‐child(7)  >  a  {...} Leveraging selectors a.btn  {...} #main  a.btn  {...} #main  div.feature  a.btn  {...}
  5. @shayhowe Modular HTML & CSS BEST BAD PRACTICES Bad #contact

     li:nth-­‐child(1)  input, #contact  li:nth-­‐child(2)  input  {    width:  160px; } #contact  li:nth-­‐child(3)  textarea  {    width:  280px; }
  6. @shayhowe Modular HTML & CSS BEST BAD PRACTICES Good .col-­‐1

     {    width:  160px; } .col-­‐2  {    width:  280px; }
  7. @shayhowe 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
  8. @shayhowe Modular HTML & CSS APPROACH • Stop thinking about

    pages • Start thinking about components • Take visual inventory
  9. @shayhowe Modular HTML & CSS TECHNIQUE Base • Core styles

    for entire site Normalize (Reset), Default Elements, Grid, Variables Components • User interface concepts & design patterns Alerts, Buttons, Forms, List, Pagination, Tooltips Modules • Business logic Aside, Header, Footer
  10. @shayhowe Modular HTML & CSS ASSEMBLE LAYOUT • Separate presentation

    (or theme) from layout • Create an object layer for layout • Create a skin layer for theme • Use a grid
  11. @shayhowe Modular HTML & CSS ASSEMBLE LAYOUT Bad .news  {

       background:  #eee;    color:  #666;    margin:  0  10px;    width:  400px; } <div  class="news">...</div>
  12. @shayhowe Modular HTML & CSS ASSEMBLE LAYOUT Good .grid-­‐4  {

       margin:  0  10px;    width:  400px; } .feat-­‐box  {    background:  #eee;    color:  #666; } <div  class="grid-­‐4  feat-­‐box">...</div>
  13. @shayhowe Modular HTML & CSS ACCOMMODATE CONTENT • Separate content

    from container • Stylize content regardless of container
  14. @shayhowe Modular HTML & CSS ACCOMMODATE CONTENT Bad .alert  {

       background:  #f2dede;    border-­‐radius:  10px;    color:  #b94a48;    padding:  10px  20px; } <div  class="alert">...</div>
  15. @shayhowe Modular HTML & CSS ACCOMMODATE CONTENT Good .alert  {

       border-­‐radius:  10px;    padding:  10px  20px; } .alert-­‐error  {    background:  #f2dede;    color:  #b94a48; } <div  class="alert  alert-­‐error">...</div>
  16. @shayhowe Modular HTML & CSS AVOID PARENT DEPENDENCY • Remove

    parent container dependency • Decouple CSS from HTML • Create components to be used anywhere
  17. @shayhowe Modular HTML & CSS AVOID PARENT DEPENDENCY Bad .feat-­‐box

     {    background:  #eee; } article  .feat-­‐box  {    background:  #fff; } <article>    <div  class="feat-­‐box">...</div> </article>
  18. @shayhowe Modular HTML & CSS AVOID PARENT DEPENDENCY Good .feat-­‐box

     {    background:  #eee; } .feat-­‐box-­‐alt  {    background:  #fff; } <article>    <div  class="feat-­‐box-­‐alt">...</div> </article>
  19. @shayhowe Modular HTML & CSS FAVOR SEMANTICS • Allow elements

    to adapt • Uses individual classes to extend modules
  20. @shayhowe Modular HTML & CSS FAVOR SEMANTICS Bad .feat-­‐box  h2

     {    color:  #f60;    font:  18px  Helvetica,  sans-­‐serif; } <div  class="feat-­‐box">    <h2>...</h2> </div>
  21. @shayhowe Modular HTML & CSS FAVOR SEMANTICS Good .feat-­‐subhead  {

       color:  #f60;    font:  18px  Helvetica,  sans-­‐serif; } <div  class="feat-­‐box">    <h2  class="feat-­‐subhead">...</h2> </div>
  22. @shayhowe Modular HTML & CSS MEASURING SPECIFICITY Formula • IDs,

    Classes/Pseudo-classes/Attributes, Elements High Specificity (Bad) #primary  #main  div.gallery  figure.media IDs: 2, Classes: 2, Elements: 2 — Compiled: 2–2–2 Low Specificity (Good) .gallery-­‐media IDs: 0, Classes: 1, Elements: 0 — Compiled: 0–1–0
  23. @shayhowe Modular HTML & CSS WATCH SPECIFICITY • Be explicit

    • Keep specificity low • Never use IDs or !important • Avoid nested selectors (#main  .spotlight  strong  span)
  24. @shayhowe Modular HTML & CSS WATCH SPECIFICITY Bad #primary  #main

     div.gallery  {    text-­‐transform:  uppercase; } #primary  #main  div.gallery  figure.media  {    background:  #ccc; }
  25. @shayhowe Modular HTML & CSS WATCH SPECIFICITY Good .gallery  {

       text-­‐transform:  uppercase; } .gallery-­‐media  {    background:  #ccc; }
  26. @shayhowe Modular HTML & CSS USE CLASSES • Write understandable

    class names • Avoid unnecessary nesting • Use same strength specificity
  27. @shayhowe Modular HTML & CSS USE CLASSES Bad .feat-­‐box  .callout

     .pr  {    font-­‐size:  12px; } .feat-­‐box  .callout  .pr  .un  {    color:  #39f; }
  28. @shayhowe Modular HTML & CSS USE CLASSES Good .feat-­‐box  .price

     {    font-­‐size:  12px; } .feat-­‐box  .unit  {    color:  #39f; }
  29. @shayhowe Modular HTML & CSS USE CLASSES Bad .btn.large  {

       font-­‐size:  24px;        padding:  15px  30px; } <div  class="btn  large">...</div>
  30. @shayhowe Modular HTML & CSS USE CLASSES Good .btn-­‐large  {

       font-­‐size:  24px;    padding:  15px  30px; } <div  class="btn-­‐large">...</div>
  31. @shayhowe Modular HTML & CSS METHODOLOGIES OOCSS • Object-Oriented CSS

    From Nicole Sullivan – oocss.org SMACSS • Scalable and Modular Architecture for CSS From Jonathan Snook – smacss.com
  32. @shayhowe Modular HTML & CSS REUSE CODE • Do not

    duplicate code • Remove old code • Defer loading subsequent styles
  33. @shayhowe Modular HTML & CSS REUSE CODE Bad .news  {

       background:  #eee;    color:  #666; } .social  {    background:  #eee;    color:  #666; }
  34. @shayhowe Modular HTML & CSS REUSE CODE Good .news, .social

     {    background:  #eee;    color:  #666; } Better .feat-­‐box  {    background:  #eee;    color:  #666; }
  35. @shayhowe Modular HTML & CSS MINIMIZE REQUEST • Combine like

    files (CSS & JS) • Use image sprites • Leverage data URIs • Icon fonts
  36. @shayhowe Modular HTML & CSS IMAGE SPRITES <span  class="icon  i-­‐twitter">...</span>

    <span  class="icon  i-­‐facebook">...</span> .icon  {    background:  url("icons.png")  0  0  no-­‐repeat; } .i-­‐twitter  {    background-­‐position:  0  -­‐16px; } .i-­‐facebook  {    background-­‐position:  0  -­‐32px; }
  37. @shayhowe Modular HTML & CSS DATA URIS HTML <img  height="100"

     width="660"  alt="Pattern"   src="data:imagepng;base64,..."> CSS .pattern  {    background:  url("data:imagepng;base64,...")          repeat; }
  38. @shayhowe Modular HTML & CSS COMPRESS & CACHE FILES •

    Utilize Gzip compression • Losslessly compress images • Cache common files
  39. @shayhowe Modular HTML & CSS GETTING STARTED Build a styleguide

    • Twitter Bootstrap, Zurb Foundation Review methodologies • OOCSS, SMACSS Test your code • CSS Lint, Inspector, PageSpeed