Download pdf - Dominate The Theme Layer

Transcript
Page 1: Dominate The Theme Layer

DOMINATE THE THEME LAYER August 21st.

Page 2: Dominate The Theme Layer

Jesper Wøldiche Rahkonen

Themer / architect at Bysted. Markup Marine / Journalist / Frontend United /

@woeldiche

Page 3: Dominate The Theme Layer

BEFORE WE GET STARTED… Last chance to run.

Page 4: Dominate The Theme Layer

Focus on the themer.

Page 5: Dominate The Theme Layer

It’s just OOCSS. Or smacss.

Page 6: Dominate The Theme Layer

There will be slides with code.

Page 7: Dominate The Theme Layer

There will be (more) slides without code.

Page 8: Dominate The Theme Layer

Presenter will be opinionated.

Page 9: Dominate The Theme Layer

Code available on Github.

Page 10: Dominate The Theme Layer

IN THIS SESSION. A quick outline.

Page 11: Dominate The Theme Layer

A beautiful beast. But a still a beast.

Page 12: Dominate The Theme Layer

Submissive markup is efficient markup.

Page 13: Dominate The Theme Layer

Overview of the session.

1 - The gentle way.

2 - The dominating way.

3 - Submissive markup in four easy steps.

4 - Tools of domination.

Page 14: Dominate The Theme Layer

DANGERS OF A GENTLE TOUCH. A common approach.

Page 15: Dominate The Theme Layer

Don’t let contrib trick you.

Page 16: Dominate The Theme Layer

Results

> Bloated css

Page 17: Dominate The Theme Layer

Results

> Bloated css

> Tied to markup

Page 18: Dominate The Theme Layer

Results

> Bloated css

> Tied to markup

> Low extensibility

Page 19: Dominate The Theme Layer

Results

> Bloated css

> Tied to markup

> Low extensibility

> High maintenance

Page 20: Dominate The Theme Layer

COMMON PITFALLS Stuff you don’t want to do, really.

Page 21: Dominate The Theme Layer

Style by Drupal module

#form-­‐campaignmonitor-­‐signup  h2  {      Styles  don’t  go  here…  }    

Page 22: Dominate The Theme Layer

Style by Drupal module #form-­‐campaignmonitor-­‐signup  h2  a  {      Styles  don’t  go  here…  }  

 

Low extensibility.

Page 23: Dominate The Theme Layer

Style by Drupal module #form-­‐campaignmonitor-­‐signup  h2  a  {      Styles  don’t  go  here…  }  

 

Low extensibility.

Same block, different visuals.

Page 24: Dominate The Theme Layer

Style by page or content type

body.page-­‐article  h2  a  {      Styles  don’t  go  here…  }  

#maincontent  .meta  a  {      Styles  don’t  go  here…  }  

Page 25: Dominate The Theme Layer

Style by page or content type body.page-­‐article  h2  a  {      Styles  don’t  go  here…  }  

#maincontent  .meta  a  {      Styles  don’t  go  here…  }  

Redundant code.

Page 26: Dominate The Theme Layer

Style by page or content type body.page-­‐article  h2  a  {      Styles  don’t  go  here…  }  

#maincontent  .meta  a  {      Styles  don’t  go  here…  }  

Redundant code.

Expensive to maintain.

Page 27: Dominate The Theme Layer

Using tags as selectors

.node  .node-­‐meta  span  {      Styles  don’t  go  here…  }  

Page 28: Dominate The Theme Layer

Using tags as selectors .node  .node-­‐meta  span  {      Styles  don’t  go  here…  }  

Ties styles to markup. Harder to re-use.

Page 29: Dominate The Theme Layer

Using tags as selectors .node  .node-­‐meta  span  {      Styles  don’t  go  here…  }  

Ties styles to markup. Harder to re-use.

Sometimes the date is <p>, sometimes <span>,  sometimes <data>  

Page 30: Dominate The Theme Layer

Using tags as selectors .node  .node-­‐meta  span  {      Styles  don’t  go  here…  }  

Ties styles to markup. Harder to re-use.

Sometimes the date is <p>, sometimes <span>, sometimes <data>

<a>, <img>  etc. are the exceptions.

Page 31: Dominate The Theme Layer

Styling headings by tag

h1  {  Styles  don’t  go  here…  }  

h2  {  Styles  don’t  go  here…  }  

h3  {  Styles  don’t  go  here…  }

Page 32: Dominate The Theme Layer

Styling headings by tag h1  {  Styles  don’t  go  here…  }  h2  {  Styles  don’t  go  here…  }  h3  {  Styles  don’t  go  here…  }  

Visual hierarchy will not always match outline

Page 33: Dominate The Theme Layer

Styling headings by tag h1  {  Styles  don’t  go  here…  }  h2  {  Styles  don’t  go  here…  }  h3  {  Styles  don’t  go  here…  }  

Visual hierarchy will not always match outline

Low portability

Page 34: Dominate The Theme Layer

Styling headings by tag h1  {  Styles  don’t  go  here…  }  h2  {  Styles  don’t  go  here…  }  h3  {  Styles  don’t  go  here…  }  

Visual hierarchy will not always match outline

Low portability

All your headings might be <h1>  

Page 35: Dominate The Theme Layer

DOMINATE YOUR MARKUP! Trust me, it wants a firm hand…

Page 36: Dominate The Theme Layer

Create architecture based on design and business logic.

Page 37: Dominate The Theme Layer

Build web systems. extensible, robust, portable.

Page 38: Dominate The Theme Layer

Style objects, not elements and pages.

Page 39: Dominate The Theme Layer

Invest time for domination.

Page 40: Dominate The Theme Layer

It pays off.

Page 41: Dominate The Theme Layer

It pays off

Lower maintenance,

Page 42: Dominate The Theme Layer

It pays off

Lower maintenance,

Cheaper introduction of new features.

Page 43: Dominate The Theme Layer

It pays off

Lower maintenance,

Cheaper introduction of new features.

Leaner css and faster front-end.

Page 44: Dominate The Theme Layer

Submissive markup in four easy steps.

Analyze design and specs.

Streamline and feedback with designer/client.

Define objects and layout.

Dominate and add styling hooks to markup.

Page 45: Dominate The Theme Layer

ANALYZE Analyze design and specification.

Page 46: Dominate The Theme Layer

Look beyond the markup and modules.

Page 47: Dominate The Theme Layer
Page 48: Dominate The Theme Layer
Page 49: Dominate The Theme Layer

Identify recurring patterns.

Page 50: Dominate The Theme Layer
Page 51: Dominate The Theme Layer
Page 52: Dominate The Theme Layer
Page 53: Dominate The Theme Layer
Page 54: Dominate The Theme Layer

Structural patterns.

Page 55: Dominate The Theme Layer
Page 56: Dominate The Theme Layer

Visual patterns.

Page 57: Dominate The Theme Layer
Page 58: Dominate The Theme Layer

Variations.

Page 59: Dominate The Theme Layer
Page 60: Dominate The Theme Layer

Bring the designer onboard. And strategist.

Page 61: Dominate The Theme Layer

STREAMLINE Time to make your mark.

Page 62: Dominate The Theme Layer

Streamline variations of common objects.

Page 63: Dominate The Theme Layer

Option 1: Unify.

Page 64: Dominate The Theme Layer

Option 2: Define rules for the variations.

Page 65: Dominate The Theme Layer

DEFINE Define objects and structure.

Page 66: Dominate The Theme Layer

Define objects from patterns.

Page 67: Dominate The Theme Layer
Page 68: Dominate The Theme Layer

SMACSS.

Page 69: Dominate The Theme Layer

A suggested system

Variations.

Style.

Typography.

Structure.

Grids.

Page 70: Dominate The Theme Layer

[Photo: Print with handwritten notes.]

Page 71: Dominate The Theme Layer
Page 72: Dominate The Theme Layer
Page 73: Dominate The Theme Layer

DOMINATE Let there be code…

Page 74: Dominate The Theme Layer

Go with classes for web systems.

Page 75: Dominate The Theme Layer

Use low specificity

Page 76: Dominate The Theme Layer

Layer your objects. <aside  class=“block-­‐sec  st-­‐alternate  grid-­‐2”>      <h1  class=“title-­‐block”>Title</h1>      <div  class=“text-­‐sec”>          Content  goes  here.      </div>      </aside>      

Page 77: Dominate The Theme Layer

So… Analyze Streamline Define Dominate!

Page 78: Dominate The Theme Layer

TOOLS OF DOMINATION Let’s sink those styling hooks in.

Page 79: Dominate The Theme Layer

It’s a matter of class.

Page 80: Dominate The Theme Layer

Back to Views.

Get it right to begin with.

Page 81: Dominate The Theme Layer

The scary render arrays.

Page 82: Dominate The Theme Layer

All-in-three tools for domination $vars['classes_array']  $vars['title_attributes_array']['class']  $vars[’content_attributes_array']['class']      

Page 83: Dominate The Theme Layer

The result. <aside  class=“$vars['classes_array']”>      <h1  $vars['title_attributes_array']>Title</h1>      <div  $vars['content_attributes_array']>          Content  goes  here.      </div>      </aside>      

Page 84: Dominate The Theme Layer

function  MYTHEME_preprocess_field  (&$vars,$hook)  {      //add  class  to  a  specific  field      switch  ($vars['element']['#field_name'])  {          case  'field_summary':              $vars['classes_array'][]  =  'text-­‐teaser';              break;            case  'field_location':          case  'field_date':          case  'field_price’:          case  'field_website’:              $vars['classes_array'][]  =  'list-­‐definition’;            case  'field_deadline':                  case  'body':              $vars['classes_array'][]  =  'text-­‐content';              break;      }  }  

Page 85: Dominate The Theme Layer

Conditions. function  MYTHEME_preprocess_panels_pane  (&$vars)  {      //  Add  styling  classes  to  fields  as  panes.      if  ($vars['pane']-­‐>type  ==  'entity_field')  {            //  Switch  by  field  name.          switch  ($vars['content']['#field_name'])  {              case  ‘field_name’:                  $vars['title_attributes_array']['class'][]  =  ’key’;                  …  

       }      }  }    

Page 86: Dominate The Theme Layer

What makes you switch? Field name Block name Defining module View mode Region Path Combinations

Page 87: Dominate The Theme Layer

Pick a function, any function. template_preprocess_page, template_preprocess_html, template_preprocess_block, template_preprocess_region, template_preprocess_field, template_preprocess_panels_pane.

Page 88: Dominate The Theme Layer

THE ODD THREES OUT. Someone’s special.

Page 89: Dominate The Theme Layer

Menus. function  theme_menu_tree__MENU_NAME  ($vars)  {      return  '<ul  class=”CUSTOM_CLASS">'  .  $vars['tree']  .  '</ul>';  }  

Page 90: Dominate The Theme Layer

Multi fields.

Page 91: Dominate The Theme Layer

Forms.

Only thing* scarier than ordinary render arrays.

Page 92: Dominate The Theme Layer

CONCLUSION. So…

Page 93: Dominate The Theme Layer

Thank you!

Slides bit.ly/dominate-theme

Tools for domination github.com/woeldiche/domination_tools

Fireworks stencils github.com/woeldiche/markup_stencils

Page 94: Dominate The Theme Layer

Tell me what you think. bit.ly/dominate-theme munich2012.drupal.org /program /sessions /dominate-theme-layer @woeldiche

Page 95: Dominate The Theme Layer

Images

Chain http://commons.wikimedia.org/wiki/File:Twisted_link_chain.jpg


Recommended