116
Un mejor CSS Planeando para no sufrir en el futuro. DrupalCon Latin America - Febrero 2015

CSS, planeando para el futuro

Embed Size (px)

Citation preview

Page 1: CSS, planeando para el futuro

Un mejor CSSPlaneando para no sufrir en el futuro.DrupalCon Latin America - Febrero 2015

Page 2: CSS, planeando para el futuro

Jose Leiva@leivajd // leivajd.com

Page 3: CSS, planeando para el futuro

2007 web

Page 4: CSS, planeando para el futuro

2010 Drupal

Page 5: CSS, planeando para el futuro
Page 6: CSS, planeando para el futuro
Page 7: CSS, planeando para el futuro

Objetivo

Page 8: CSS, planeando para el futuro

Que nuestro “yo” del futuro no nos odie ;)

Objetivo

Page 9: CSS, planeando para el futuro

1CSS es fácil

Page 10: CSS, planeando para el futuro

selector

Page 11: CSS, planeando para el futuro

selector{ propiedad: valor;}

Page 12: CSS, planeando para el futuro

selector{ propiedad: valor; propiedad: valor;}

Page 13: CSS, planeando para el futuro

selector{ propiedad: valor;}

selector{ propiedad: valor;}

selector{ propiedad: valor;}

selector{ propiedad: valor;}

}.css

Page 14: CSS, planeando para el futuro

CSS es fácil, verdad?

Page 15: CSS, planeando para el futuro

Escribir CSS es sencillo. Pero...

Page 16: CSS, planeando para el futuro

.headerMenu ul.menu li.active-trail a { background: #D0DFEF;}

Page 17: CSS, planeando para el futuro

.view-news-and-press.news-right-side-bar-block .views-row { position: relative; min-height: 60px;}

Page 18: CSS, planeando para el futuro

.item-title, #main-column .item-title, #second-column .item-title, .primary-lead-area .item-title, .second-lead-area .item-title { font-size: 18px; border: 0; font-family: Georgia; margin: 0; clear: none; padding-bottom: 5px;}

Page 19: CSS, planeando para el futuro

• Alta especificidad

Page 20: CSS, planeando para el futuro

• Alta especificidad• Alta dependencia HTML

Page 21: CSS, planeando para el futuro

• Alta especificidad• Alta dependencia HTML• Golpea performance

Page 22: CSS, planeando para el futuro

• Alta especificidad• Alta dependencia HTML• Golpea performance• Difícil de reutilizar

Page 23: CSS, planeando para el futuro

:(

• Alta especificidad• Alta dependencia HTML• Golpea performance• Difícil de reutilizar

:(

Page 24: CSS, planeando para el futuro

Escribir CSS es sencillo.La arquitectura no.

Page 25: CSS, planeando para el futuro

ArquitecturaHerramientas, planear & escribir CSS de manera que el código sea de calidad

Page 26: CSS, planeando para el futuro

• Performance

Page 27: CSS, planeando para el futuro

• Performance• Reusable

Page 28: CSS, planeando para el futuro

• Performance• Reusable• Hace lo que debería?

Page 29: CSS, planeando para el futuro

• Performance• Reusable• Hace lo que debería?• Mantenible y escalable

Page 30: CSS, planeando para el futuro

• Performance• Reusable• Hace lo que debería?• Mantenible y escalable

Page 31: CSS, planeando para el futuro

• Performance• Reusable• Hace lo que debería?• Mantenible y escalable

:)

Page 32: CSS, planeando para el futuro

2Procesos & herramientas

Page 33: CSS, planeando para el futuro

Pensemos en nuestros amigos del back-end. Organización, variables, parciales, objetos y abstracción.

Page 34: CSS, planeando para el futuro

Cambio & complejidad.

Page 35: CSS, planeando para el futuro

OOCSS, BEM & SMACSS, no son librerías o framework, son metodologías.

Page 36: CSS, planeando para el futuro

• Entender el todo y sus partes.• Organización y estructura.• Vanilla CSS o prepocesadores.

Page 37: CSS, planeando para el futuro

CSS preprocesadores, llenan vacíos.

Page 38: CSS, planeando para el futuro

CSS preprocesadores, llenan vacíos. Son una abstracción.

Page 39: CSS, planeando para el futuro

.scss

Page 40: CSS, planeando para el futuro

.scss

Sass

->

Page 41: CSS, planeando para el futuro

.css.scss

Sass

-> ->

Page 42: CSS, planeando para el futuro

• Son excelentes, si se usan correctamente• Dividir en pequeños pedazos• Proveen abstracción• No reemplazan CSS o arquitectura

Page 43: CSS, planeando para el futuro

• Son excelentes, si se usan correctamente• Dividir en pequeños pedazos• Proveen abstracción• No reemplazan CSS o arquitectura

Page 44: CSS, planeando para el futuro

foo { ...}

foo zaa { ...}

Page 45: CSS, planeando para el futuro

foo { ... zaa { ... }}

Page 46: CSS, planeando para el futuro

.home_page_at_work { .views-field-field-primary-image-attachment{ .field-content{ img { ... } } }}

Page 47: CSS, planeando para el futuro

.home_page_at_work.views-field-field-prima-ry-image-attachment.field-contentimg { ...}

:(

Page 48: CSS, planeando para el futuro

• No anidar == HTML• Un ojo en el output• Si podemos, no anidar• Regla 3 niveles

Page 49: CSS, planeando para el futuro

• Son excelentes, si se usan correctamente• Dividir en pequeños pedazos• Proveen abstracción• No reemplazan CSS o arquitectura

Page 50: CSS, planeando para el futuro

stylesheets[all][] = css/reset.cssstylesheets[all][]=css/drupal-stuff.cssstylesheets[all][] = css/base.cssstylesheets[all][] = css/layout.cssstylesheets[all][] = css/typo.css

; FODstylesheets[all][] = css/ds_2col.cssstylesheets[all][] = css/search.cssstylesheets[all][] = css/system.menus.css

Page 51: CSS, planeando para el futuro

stylesheets[all][] = css/screen.css

Page 52: CSS, planeando para el futuro

stylesheets[all][] = css/screen.css

Magic en lugar FOADhttps://www.drupal.org/project/magic

Page 53: CSS, planeando para el futuro

// Screen// =======================

// Variables, Mixins, functions@import “partials/base”;

// Page@import “partials/page/screen”;

// Patterns@import “partials/patterns/screen”;

// Layout@import “partials/layout/screen”;

// Modules@import “partials/modules/screen”;

screen.scss

Page 54: CSS, planeando para el futuro

sass/|--screen.scss#PrimarySassfile|-- partials/ # Partials| |-- _base.scss| |-- _variables.scss | |-- _mixins.scss | |-- vendors/ | | |---- _drupal.scss|||----_jqueryandstuff.scss| | |---- ...| |-- patterns/| | |---- _buttons.scss| | |---- _links.scss| | |---- ...| |-- components/| | |---- _paginator.scss| | |---- ...| |---- ...

Page 55: CSS, planeando para el futuro

// Links// ===================

a { color: $blue; text-decoration: none;

&:hover, &:active { color: $black; }}

_links.scss

Page 56: CSS, planeando para el futuro

• Son excelentes, si se usan correctamente• Dividir en pequeños pedazos• Proveen abstracción• No reemplazan saber CSS

Page 57: CSS, planeando para el futuro

Pensar en objetos o abstracciones, y desgranar esos componentes en piezas pequeñas.

Page 58: CSS, planeando para el futuro

Objetos son reutilizables.

Page 59: CSS, planeando para el futuro
Page 60: CSS, planeando para el futuro

.promo-box {}

.promo-box h3 {}

Page 61: CSS, planeando para el futuro

.promo-box {}

.promo-box h3,

.promo-box h4 {}

Page 62: CSS, planeando para el futuro

.promo-box {}//mi heading puede ser cualquier elemento.promo-box .promo-box-h {}

Page 63: CSS, planeando para el futuro

ul.product-list li {}

Page 64: CSS, planeando para el futuro

.product-list li {}

Page 65: CSS, planeando para el futuro

.product-list .product-item {}

.product-item {}

Page 66: CSS, planeando para el futuro

<ul> <li class=”product-item”>Product 1</li> <li class=”product-item”>Product 2</li> <li class=”product-item”>Product 3</li></ul>

<p class=”produt-item”>Product 1</p>

<div class=”product-item”> <h3 class=”produt-item-h”>Product 1</h3> <p>Detalles</p></div>

Page 67: CSS, planeando para el futuro

Cuidado con los dogmas, siempre le hemos tenido miedo a la clasitis, pero si nos funciona no hay porque descartarlo.

Page 68: CSS, planeando para el futuro

Sentido común. Escribir patrones una vez, reusar esos pedazos.

Page 69: CSS, planeando para el futuro

Mo’ Devs, Mo’ Problems

Page 70: CSS, planeando para el futuro

• Training

Page 71: CSS, planeando para el futuro

• Training• Buenas prácticas

Page 72: CSS, planeando para el futuro

Sintaxis, formato consistente, convenciones para nombres*, etc

Page 73: CSS, planeando para el futuro

v

.promo-item { background-color: #000; color: #fff; padding: 10px;}

Page 74: CSS, planeando para el futuro

https://github.com/ahmednuaman/grunt-scss-lint

Page 75: CSS, planeando para el futuro

* Naming conventions

Page 76: CSS, planeando para el futuro

There are only two hard things in computer science: cache invalidation and naming things. - Phil Karlton

Page 77: CSS, planeando para el futuro

• SMACSS - http://bit.ly/1ILqWwb• BEM - http://bit.ly/1CPXvpb• OOCSS - http://bit.ly/1zGLVdH

Page 78: CSS, planeando para el futuro

OOCSS Principios:

• Claridad• Semántico• Genérico• Breve

Page 79: CSS, planeando para el futuro

v

.is-touch { ...}

.is-hidden { ...}

.is-selected { ...}

Page 80: CSS, planeando para el futuro

v

.tab { ...

&.is-selected { ... }}

//output.tab.is-selected { ...}

Page 81: CSS, planeando para el futuro

v

.btn { ...}

Objeto

Page 82: CSS, planeando para el futuro

v

.items-list { ... .item-thumb { ... }}

Padre - Hijo

Page 83: CSS, planeando para el futuro

v

.product-list { ...}

.product-list-thumb { ...}

Padre - Hijo

Page 84: CSS, planeando para el futuro

Contexto. Asignar cambios de estilo sólo a elementos que cambien por página, no a objetos.

Page 85: CSS, planeando para el futuro

v

.cart { .main-content { ... } .sidebar { ... }}

Page 86: CSS, planeando para el futuro

v

.promo-box { background: red; color: white;}// atados a la estructura.sidebar .promo-box { background: black;}

Page 87: CSS, planeando para el futuro

v

.promo-box { background: red; color: white;}// usamos la Cascada.promo-box-dark { background: black;}

class=”promo-box promo-box-dark”

Subclassing

Page 88: CSS, planeando para el futuro

v

.promo-box { background: red; color: white;}.promo-box-dark { @extend .promo-box; background: black;}

class=”promo-box-dark”

Subclassing

Page 89: CSS, planeando para el futuro

v

.promo-box,

.promo-box-dark { background: red; color: white;}

.promo-box-dark { background: black;}

Page 90: CSS, planeando para el futuro

v

.promo-box { background: red; color: white;}

.promo-box-dark { @extend .promo-box; background: black;}

...

.promo-wrap .promo-box { margin: 0;}

Page 91: CSS, planeando para el futuro

v

.promo-box, .promo-box-dark { background: red; color: white;}

.promo-box-dark { background: black;}

.promo-wrap .promo-box,

.promo-wrap .promo-box-dark { margin: 0;}

:(

Page 92: CSS, planeando para el futuro

Cuidar el output.

%placeholder es una buena alternativa.

Page 93: CSS, planeando para el futuro

v

.btn,%btn { ...}

.btn-positive { @extend %btn; ...}

.btn-negative { @extend %btn; ...}

Page 94: CSS, planeando para el futuro

v

.btn,

.btn-positive,

.btn-negative { ...}

.btn-positive { ...}

.btn-negative { ...}

Page 95: CSS, planeando para el futuro

v

.ui-promo-item { ...}

class=”ui-promo-item js-promo-item qa-promo-item”

Page 96: CSS, planeando para el futuro

v

.ui-promo-item { ...}

class=”ui-promo-item js-promo-item qa-promo-item”

Page 97: CSS, planeando para el futuro

Tenga una convención, documéntelo y adhiérase a ella.

Page 98: CSS, planeando para el futuro

Lectura recomendadahttp://24ways.org/2014/naming-things/

http://nicolasgallagher.com/about-html-semantics-front-end-architecture/

Page 99: CSS, planeando para el futuro

• Training• Buenas prácticas• Documentar

Page 100: CSS, planeando para el futuro
Page 101: CSS, planeando para el futuro

http://codepen.io/chriscoyier/blog/codepens-css

Page 102: CSS, planeando para el futuro

/* Comentarios FTW */

Page 103: CSS, planeando para el futuro

/** * Contents * ========= * 1. Reset * 2. Base * 3. Layout * 4. Modules**/...

/* * =Reset*/

Page 104: CSS, planeando para el futuro

/** * Titulo * 1. Descripción del comentario, * detalles de porque se necesita,etc**/.foo { overflow:hidden;/*[1]*/}

Page 105: CSS, planeando para el futuro

// En cada bloque de reglas, los // @include o @extend se incluyen // de primero, para evitar sobre // escribir declaraciones.// .foo {// @include mixin-name;// propiedad: valor;// }

_mixins.scss

Page 106: CSS, planeando para el futuro

// Tip// --------------------// Create a rectangle-triangle to be // used as a tip.@mixin tip($color: $orange) { ...}

_mixins.scss

Page 107: CSS, planeando para el futuro

CSS no es siempre el problema: trabajamos con otros devs, falta de conocimiento, diferentes técnicas.

Page 108: CSS, planeando para el futuro

3Aterrizando

Page 109: CSS, planeando para el futuro

Pragmatismo sobre perfección. Mejor un “good enough” hoy, que un “perfecto” mañana.

Page 110: CSS, planeando para el futuro

El código del equipo debe ser un libro que cualquiera puede leer, no un diario personal.

Page 111: CSS, planeando para el futuro

Escribamos menos CSS. Cada parte es un potencial punto de falla, reducir features y código.

Page 112: CSS, planeando para el futuro

Modularidad en CSS no es realmente la meta. vMantenibilidad es. Si CSS es modular pero es difícil de mantener, entonces es malo.

Page 113: CSS, planeando para el futuro

Gracias!@leivajd

Page 114: CSS, planeando para el futuro

http://www.slideshare.net/leivajd

Page 115: CSS, planeando para el futuro
Page 116: CSS, planeando para el futuro

Evalúa la sesión.https://latinamerica2015.drupal.org/node/4083