DOMINATE THE THEME LAYER August 21st.

95
DOMINATE THE THEME LAYER August 21st.

description

DOMINATE THE THEME LAYER August 21st. Jesper Wøldiche Rahkonen. Themer / architect at Bysted . Markup Marine / Journalist / Frontend United / @ woeldiche. Last chance to run. Before we get started…. Focus on the themer . It’s just OOCSS . Or smacss . - PowerPoint PPT Presentation

Transcript of DOMINATE THE THEME LAYER August 21st.

Page 1: DOMINATE THE THEME LAYER August 21st.

DOMINATE THE THEME LAYERAugust 21st.

Page 2: DOMINATE THE THEME LAYER August 21st.

Jesper Wøldiche RahkonenThemer / architect at Bysted.

Markup Marine /Journalist /Frontend United /

@woeldiche

Page 3: DOMINATE THE THEME LAYER August 21st.

BEFORE WE GET STARTED…Last chance to run.

Page 4: DOMINATE THE THEME LAYER August 21st.

Focus onthe themer.

Page 5: DOMINATE THE THEME LAYER August 21st.

It’s just OOCSS.Or smacss.

Page 6: DOMINATE THE THEME LAYER August 21st.

There will be slides with code.

Page 7: DOMINATE THE THEME LAYER August 21st.

There will be (more)slides without code.

Page 8: DOMINATE THE THEME LAYER August 21st.

Presenter will be opinionated.

Page 9: DOMINATE THE THEME LAYER August 21st.

Code available on Github.

Page 10: DOMINATE THE THEME LAYER August 21st.

IN THIS SESSION.A quick outline.

Page 11: DOMINATE THE THEME LAYER August 21st.

A beautiful beast.

But a still a beast.

Page 12: DOMINATE THE THEME LAYER August 21st.

Submissive markup is efficient markup.

Page 13: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

DANGERS OF A GENTLE TOUCH.A common approach.

Page 15: DOMINATE THE THEME LAYER August 21st.

Don’t let contrib trick you.

Page 16: DOMINATE THE THEME LAYER August 21st.

Results>Bloated css

Page 17: DOMINATE THE THEME LAYER August 21st.

Results>Bloated css>Tied to markup

Page 18: DOMINATE THE THEME LAYER August 21st.

Results>Bloated css>Tied to markup>Low extensibility

Page 19: DOMINATE THE THEME LAYER August 21st.

Results>Bloated css>Tied to markup>Low extensibility>High maintenance

Page 20: DOMINATE THE THEME LAYER August 21st.

COMMON PITFALLSStuff you don’t want to do, really.

Page 21: DOMINATE THE THEME LAYER August 21st.

Style by Drupal module

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

Page 22: DOMINATE THE THEME LAYER August 21st.

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

Low extensibility.

Page 23: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

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 August 21st.

Style by page or content typebody.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 August 21st.

Style by page or content typebody.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 August 21st.

Using tags as selectors

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

Page 28: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

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 August 21st.

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 August 21st.

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 August 21st.

Styling headings by tagh1 { 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 August 21st.

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

Visual hierarchy will not always match outlineLow portability

Page 34: DOMINATE THE THEME LAYER August 21st.

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

Visual hierarchy will not always match outlineLow portabilityAll your headings might be <h1>

Page 35: DOMINATE THE THEME LAYER August 21st.

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

Page 36: DOMINATE THE THEME LAYER August 21st.

Create architecture based on design and business logic.

Page 37: DOMINATE THE THEME LAYER August 21st.

Build web systems.

extensible, robust, portable.

Page 38: DOMINATE THE THEME LAYER August 21st.

Style objects, not elements and pages.

Page 39: DOMINATE THE THEME LAYER August 21st.

Invest time for domination.

Page 40: DOMINATE THE THEME LAYER August 21st.

It pays off.

Page 41: DOMINATE THE THEME LAYER August 21st.

It pays offLower maintenance,

Page 42: DOMINATE THE THEME LAYER August 21st.

It pays offLower maintenance, Cheaper introduction of new features.

Page 43: DOMINATE THE THEME LAYER August 21st.

It pays offLower maintenance, Cheaper introduction of new features.Leaner css and faster front-end.

Page 44: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

ANALYZEAnalyze design and specification.

Page 46: DOMINATE THE THEME LAYER August 21st.

Look beyond the markup and modules.

Page 47: DOMINATE THE THEME LAYER August 21st.
Page 48: DOMINATE THE THEME LAYER August 21st.
Page 49: DOMINATE THE THEME LAYER August 21st.

Identify recurring patterns.

Page 50: DOMINATE THE THEME LAYER August 21st.
Page 51: DOMINATE THE THEME LAYER August 21st.
Page 52: DOMINATE THE THEME LAYER August 21st.
Page 53: DOMINATE THE THEME LAYER August 21st.
Page 54: DOMINATE THE THEME LAYER August 21st.

Structural patterns.

Page 55: DOMINATE THE THEME LAYER August 21st.
Page 56: DOMINATE THE THEME LAYER August 21st.

Visual patterns.

Page 57: DOMINATE THE THEME LAYER August 21st.
Page 58: DOMINATE THE THEME LAYER August 21st.

Variations.

Page 59: DOMINATE THE THEME LAYER August 21st.
Page 60: DOMINATE THE THEME LAYER August 21st.

Bring the designer onboard. And strategist.

Page 61: DOMINATE THE THEME LAYER August 21st.

STREAMLINETime to make your mark.

Page 62: DOMINATE THE THEME LAYER August 21st.

Streamline variations of common objects.

Page 63: DOMINATE THE THEME LAYER August 21st.

Option 1:Unify.

Page 64: DOMINATE THE THEME LAYER August 21st.

Option 2:Define rules for the variations.

Page 65: DOMINATE THE THEME LAYER August 21st.

DEFINEDefine objects and structure.

Page 66: DOMINATE THE THEME LAYER August 21st.

Define objects from patterns.

Page 67: DOMINATE THE THEME LAYER August 21st.
Page 68: DOMINATE THE THEME LAYER August 21st.

SMACSS.

Page 69: DOMINATE THE THEME LAYER August 21st.

A suggested systemVariations.Style.Typography.Structure.Grids.

Page 70: DOMINATE THE THEME LAYER August 21st.

[Photo: Print with handwritten notes.]

Page 71: DOMINATE THE THEME LAYER August 21st.
Page 72: DOMINATE THE THEME LAYER August 21st.
Page 73: DOMINATE THE THEME LAYER August 21st.

DOMINATELet there be code…

Page 74: DOMINATE THE THEME LAYER August 21st.

Go with classes for web systems.

Page 75: DOMINATE THE THEME LAYER August 21st.

Use low specificity

Page 76: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

So…

AnalyzeStreamlineDefineDominate!

Page 78: DOMINATE THE THEME LAYER August 21st.

TOOLS OF DOMINATIONLet’s sink those styling hooks in.

Page 79: DOMINATE THE THEME LAYER August 21st.

It’s a matter of class.

Page 80: DOMINATE THE THEME LAYER August 21st.

Back to Views.Get it right to begin with.

Page 81: DOMINATE THE THEME LAYER August 21st.

The scary render arrays.

Page 82: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

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 August 21st.

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 August 21st.

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 August 21st.

What makes you switch?Field nameBlock nameDefining moduleView modeRegionPathCombinations

Page 87: DOMINATE THE THEME LAYER August 21st.

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 August 21st.

THE ODD THREES OUT.Someone’s special.

Page 89: DOMINATE THE THEME LAYER August 21st.

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

Page 90: DOMINATE THE THEME LAYER August 21st.

Multi fields.

Page 91: DOMINATE THE THEME LAYER August 21st.

Forms.Only thing* scarier than ordinary render arrays.

Page 92: DOMINATE THE THEME LAYER August 21st.

CONCLUSION.So…

Page 93: DOMINATE THE THEME LAYER August 21st.

Thank you!Slidesbit.ly/dominate-themeTools for domination github.com/woeldiche/domination_toolsFireworks stencilsgithub.com/woeldiche/markup_stencils

Page 94: DOMINATE THE THEME LAYER August 21st.

Tell me what you think.bit.ly/dominate-theme

munich2012.drupal.org/program/sessions/dominate-theme-layer

@woeldiche

Page 95: DOMINATE THE THEME LAYER August 21st.

ImagesChainhttp://commons.wikimedia.org/wiki/File:Twisted_link_chain.jpg