SlideShare a Scribd company logo
Component Driven Design and Development
COMPONENT DRIVEN
DESIGN AND DEVELOPMENT
Cristina Chumillas
CRISTINA CHUMILLAS
/@chumillas ckrina
Designer and frontend developer at Ymbra
WHAT ARE WE GOING TO TALK
ABOUT
Components
Design Systems
CSS Methodologies
Styles Guides
In Drupal
WEB PROJECTS
Component Driven Design and Development
invisble
vs
Responsive
Interactions
...
COMPONENTS
invisble

<div class="last-news">
<h2 class="last-news__title">
Últimas noticias
</h2>
<ul class="last-news__list">
<li class="last-news__item">(...)</li>
<li class="last-news__item">(...)</li>
</ul>
<a class="last-news__more">Ver más</a>
</div>
USE COMPONENTS
TO MAKE SYSTEMS MODULAR
For a system to be modular, it must have interchangeable
parts.
WHAT MAKES A COMPONENT
MODULAR?
Standard & shared design
Centralized code
Controlled via system, not the user
Customizable options
Component Driven Design and Development
Component Driven Design and Development
“We’re not designing pages, we’re
designing systems of components.”
--Stephen Hay
DESIGN SYSTEMS
Everything that makes up your product.
--Mark Otto, FOWA 2013
Everything.
Typography, layouts and grids, colors, icons, components, coding conventions...
Component Driven Design and Development
Component Driven Design and Development
WHY DESIGN SYSTEMS?
Reusable work - COMPONENTS
More efficient projects
Large-scale ready code
Everybody knows how everything works
Integrates multi-disciplinary workflow
ATOMIC DESIGN
BRAD FROST
Component Driven Design and Development
Component Driven Design and Development
Component Driven Design and Development
Component Driven Design and Development
Component Driven Design and Development
WHEN?
WIREFRAMES
Static wireframes vs HTML Wireframes
STATIC WIREFRAMES
They are abstractions
They are full of assumptions
They are never complete
HTML WIREFRAMES
They get into the browser quicker
They reinforce the notion that you’re creating a website
They are interactive
They allow annotations
They are the base for the final product
DESIGN
Static delirables vs HTML delirables-prototypes
DESIGNING IN THE BROWSER
PSD for early planning/research phases
The composition in the browser
Make decisions in the browser
Reusable work > Developer will know how do you want
you output
CSS METHODOLOGIES
OOCSS
(Object Oriented CSS)
Based in Object Oriented programming paradigm:
Do One Thing Well
Single Responsibility Principle
(1 responsability = 1 class)
Focuses on Separation of Concerns(SoC)
OOCSS
(Object Oriented CSS)
/* Media Object */
.media {}
.media .image {}
.media .comment {}
BEM
(Block Element Modifier)
.site-search {} /* Block */
.site-search__field {} /* Element */
.site-search--full {} /* Modifier */
BEM
<div class="block-name__wrapper">
<div class="block-name">
<h2 class="block-name__title">Block title</h2>
<p class="block-name__text">Block text</p>
</div>
</div>
SMACSS
STYLE GUIDES
Documentation of a Design System
Component Driven Design and Development
WHY?
Improve User Experience
Easy onboarding of new team members
Efficient Design and Development
Makes Testing easier
Component Driven Design and Development
Component Driven Design and Development
Component Driven Design and Development
STYLEGUIDE DRIVEN
DEVELOPMENT(SDD)
Style guides that are generated directly from the style
definition sources
KSS (KNYLE STYLE SHEETS)
Documentation specification and styleguide format.
Structured to be automatically extracted and processed.
base/
layout/
components/
pager/
_pager.scss
_pager.hbs
_pager.scss
// Pager
//
// Markup: pager.hbs
//
// Style guide: components.navigation.pager
.pager,
%pager {
margin: 0;
// All the styles here.
}
_pager.hbs
// Pager
<ul class="pager {{modifier_class}}">
<li class="pager__item">
<a title="Go to page 1" href="/admin/content">1</a>
</li>
<li class="pager__item">
<a title="Go to page 2" href="/admin/content?page=1">2</a>
</li>
<li class="pager__current-item">3</li>
<li class="pager__item">
<a title="Go to page 4" href="/admin/content?page=3">4</a>
</li>
<li class="pager__item">
<a title="Go to page 5" href="/admin/content?page=4">5</a>
</li>
</ul>
Component Driven Design and Development
STYLE GUIDES - RESOURCES
styleguides.io
Articles, Books, Podcasts, Talks, Tools, Examples, etc.
IN DRUPAL
GENERAL APPROACHES
1. Wrapping components
2. Changing default markup
OUR COMPONENTS TO DRUPAL
COMPONENTS
In code
Display Suite
Panels
IN CODE
Field formatter
Process and preprocess functions
hook_(...)_alter
hook_page_alter()
hook_form_alter()
hook_node_view_alter()
(...)
...
DISPLAY SUITE
View modes
DISPLAY SUITE
Field templates (Display Suite extras)
PANELS
Custom Panes
Templates for pane
Add class to the pane
Mini Panels
Context
PANELS
Custom Panes (CTools Content Type or Plugin)
<?php
$plugin = array(
'single' => TRUE,
'title' => t('Menu shortcuts to the themes'),
'category' => t('MSF ES: Themes'),
'render callback' => 'jumpmenu_themes_render',
'admin info' => 'jumpmenu_themes_admin_info',
);
/**
* The 'admin info' callback for panel pane.
*/
function jumpmenu_themes_admin_info($subtype, $conf, $contexts) {
(...)
}
/**
* Render callback function.
*/
function jumpmenu_themes_render($subtype, $conf, $args, $contexts) {
(...)
}
PANELS
Custom template for pane
/**
* Implements hook_preprocess_panels_pane().
*/
function mymodule_preprocess_panels_pane(&$variables) {
switch ($variables['pane']->subtype) {
case 'my-pane-name':
$variables['template_files'][] = 'panels-pane-test';
break;
}
}
PANELS
Custom class
/**
* Implements hook_preprocess_panels_pane().
*/
function mymodule_preprocess_panels_pane(&$variables) {
switch ($variables['pane']->subtype) {
case 'my-pane-name':
$classes = 'my-custum-class';
$variables['classes_array'][] = $classes;
break;
}
}
PANELS
Mini-panels
PANELS
Context
THANKS!
/@chumillas ckrina
Drupal-generated
markup is not your
friend -- use a
styleguide!
Robert Caracaus
Tuesday 22 14:15-15:15
Room 112
Prototypes and Drupal: from
designing in-browser to
implementing custom
templates
Yuriy Gerasimov and Morten Christoffersen
Wednesday 23 10:45-11:45
Room 111

More Related Content

Component Driven Design and Development