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

Keys to Frontend Architecture

Nima Izadi
January 22, 2013

Keys to Frontend Architecture

I try to give some keys to create great frontend architectures.
First, presenting some HTML basics.
Then introducing the notion of OOCSS.

Nima Izadi

January 22, 2013
Tweet

More Decks by Nima Izadi

Other Decks in Programming

Transcript

  1. HTML is not that simple If you think so, then

    check the specs (http://www.w3.org/TR/html5/) W3C Team, May 2011 Don’t make them work for nothing
  2. Bad habit %div Lorem ipsum dolor sit amet, consectetur adipisicing

    elit, sed do eiusmod. %br %br Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  3. Good habit %p Lorem ipsum dolor sit amet, consectetur adipisicing

    elit, sed do eiusmod. %p Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  4. Bad habit %div#menu.menu %div.item Menu 1 %div.item Menu 2 ...

    %div#main-title.title Main title %div.paragraph <span class="bold">Lorem</span> ipsum <span class="small">dolor </span> sit amet, consectetur adipisicing elit, sed do eiusmod
  5. Good habit %nav %ul %li Menu 1 %li Menu 2

    %h1 Main title %p <em>Lorem</em> ipsum <small>dolor</small> sit amet, consectetur adipisicing elit, sed do eiusmod Basic HTML tags More semantic More maintainable
  6. Just to be clear Lorem ipsum dolor sit amet, consectetur

    adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <p>This is a paragraph</p> <h1>THIS IS A TITLE</h1> •Element A •Element B •Element C <ul> <li>This</li> <li>Is</li> <li>A</li> <li>List</li> </ul>
  7. And lot more... <input type="search"> <input type="email"> Inputs <input type="url">

    <input type="time"> <input type="color"> <input type="reset"> <input type="range"> <input type="tel">
  8. .modal { margin: 1em; padding: 1em; width: auto; } A

    class for Structure A class for SKIN .brand { color: $brand_color; background... } Structure VS SKIN
  9. Container VS Content .an-object h2 .an-object h2.category h2 h2.category “An

    object should look the same no matter where you put it”
  10. Container VS Content h2 { ... }! ! ! !

    // General application header h2.category { ... } !// Category header that can be reused Describe your object instead of being too specific h2 { ... } .myObject h2 { ... }
  11. Variables SASS $white! ! ! ! ! : #EFEFEF; $blue!!

    ! ! ! : #00A8DD; $green! ! ! ! ! : #7cb848 $brand_color ! : $blue;
  12. Variables SASS $white! ! ! ! ! : #EFEFEF; $blue!!

    ! ! ! : #00A8DD; $green! ! ! ! ! : #7cb848 $brand_color ! : $green; Change your app design instantly!
  13. Separate logic from CSS _config.scss // Typography $font_size: 12; $heading_1:

    46; $heading_2: 32; $heading_3: 28; $heading_4: 18; $heading_5: 16; $heading_6: 14; $line: $font-size * 1.5; // Etc.
  14. First attempt Nesting body { section form { .inline-group {

    label { display: inline-block; } } } } } It’s cool, but don’t overuse it! You don’t want to use !important in the future
  15. First attempt Nesting body { section form { .inline-group {

    label { display: inline-block; } } } } } It’s cool, but don’t overuse it! You don’t want to use !important in the future
  16. Really want to mimic? Indent. Nesting .search-panel { ... }

    .search-panel-header { ... } .search-panel-content { ... } .search-panel-label { ... }
  17. How you don’t do !"" css # !"" style.css (2483

    lines) Keeping all your CSS in one file is bad This hurts my eyes
  18. How you don’t do !"" css # !"" page_1.css #

    !"" page_2.css # !"" page_3.css # !"" page_4.css # !"" page_5.css Having one file per page is not better
  19. How you can do !"" css/ # !"" partials/ #

    # !"" base/! ! // HEADINGS, links, ... # # !"" generic/! // @mixins, resets, helpers, ... # # !"" objects/! // .buttons, .breadcrumbs, ... # !"" inuit.scss ! ! // Import all the partials! !"" _vars.scss ! ! ! // Did I mention it was the file for variables? !"" _config.scss ! !"" your-project.scss
  20. Inspirational sources Harry Roberts – Breaking Good Habits https://speakerdeck.com/u/csswizardry/p/breaking-good-habits-1 Harry

    Roberts – Big CSS https://speakerdeck.com/u/csswizardry/p/big-css-1 David Demaree – Designing the Hi-DPI Web https://speakerdeck.com/u/ddemaree/p/designing-the-hi-dpi-web Chris Coyer – Writing Better HTML & CSS https://speakerdeck.com/chriscoyier/writing-better-html-css
  21. Inspirational sources Dale Sande – Sass 3.2: Silent Classes https://speakerdeck.com/anotheruiguy/sass-32-silent-classes

    Dale Sande – Module design & UI Dev patterns https://speakerdeck.com/anotheruiguy/module-design-ui-dev-patterns Dale Sande – Clean out your Sass Junk-Drawer https://speakerdeck.com/anotheruiguy/clean-out-your-sass-junk-drawer Nicole Sullivan – What is Object Oriented CSS? http://www.slideshare.net/stubbornella/what-is-object-oriented-css