CSS, planeando para el futuro

Jose Leiva
Jose LeivaFrontend Designer
Un mejor CSS
Planeando para no sufrir en el futuro.
DrupalCon Latin America - Febrero 2015
Jose Leiva
@leivajd // leivajd.com
2007 web
2010 Drupal
CSS, planeando para el futuro
CSS, planeando para el futuro
Objetivo
Que nuestro “yo” del futuro
no nos odie ;)
Objetivo
1CSS es fácil
selector
selector{
	propiedad: valor;
}
selector{
	propiedad: valor;
	propiedad: valor;
}
selector{
	 propiedad: valor;
}
selector{
	 propiedad: valor;
}
selector{
	 propiedad: valor;
}
selector{
	 propiedad: valor;
}
} .css
CSS es fácil, verdad?
Escribir CSS es sencillo.
Pero...
.headerMenu ul.menu li.active-trail a {
	 background: #D0DFEF;
}
.view-news-and-press.news-right-side-bar-
block .views-row {
	position: relative;
	min-height: 60px;
}
.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;
}
• Alta especificidad
• Alta especificidad
• Alta dependencia HTML
• Alta especificidad
• Alta dependencia HTML
• Golpea performance
• Alta especificidad
• Alta dependencia HTML
• Golpea performance
• Difícil de reutilizar
• Alta especificidad
• Alta dependencia HTML
• Golpea performance
• Difícil de reutilizar
:(
Escribir CSS es sencillo.
La arquitectura no.
Arquitectura
Herramientas, planear & escribir
CSS de manera que el código sea
de calidad
• Performance
• Performance
• Reusable
• Performance
• Reusable
• Hace lo que debería?
• Performance
• Reusable
• Hace lo que debería?
• Mantenible y escalable
• Performance
• Reusable
• Hace lo que debería?
• Mantenible y escalable
• Performance
• Reusable
• Hace lo que debería?
• Mantenible y escalable
:)
2Procesos & herramientas
Pensemos en nuestros amigos del
back-end. Organización, variables,
parciales, objetos y abstracción.
Cambio & complejidad.
OOCSS, BEM & SMACSS, no
son librerías o framework, son
metodologías.
• Entender el todo y sus partes.
• Organización y estructura.
• Vanilla CSS o prepocesadores.
CSS preprocesadores, llenan
vacíos.
CSS preprocesadores, llenan
vacíos. Son una abstracción.
.scss
.scss
Sass
->
.css.scss
Sass
-> ->
• Son excelentes, si se usan correctamente
• Dividir en pequeños pedazos
• Proveen abstracción
• No reemplazan CSS o arquitectura
• Son excelentes, si se usan correctamente
• Dividir en pequeños pedazos
• Proveen abstracción
• No reemplazan CSS o arquitectura
foo {
	...
}
foo zaa {
	...
}
foo {
	...
	
	 zaa {
		...
	}
}
.home_page_at_work {
	 .views-field-field-primary-image-attachment {
	 	 .field-content {
			img {
				...
			}
		}
	}
}
.home_page_at_work .views-field-field-prima-
ry-image-attachment .field-content img {
	...
}
:(
• No anidar == HTML
• Un ojo en el output
• Si podemos, no anidar
• Regla 3 niveles
• Son excelentes, si se usan correctamente
• Dividir en pequeños pedazos
• Proveen abstracción
• No reemplazan CSS o arquitectura
stylesheets[all][] = css/reset.css
stylesheets[all][] = css/drupal-stuff.css
stylesheets[all][] = css/base.css
stylesheets[all][] = css/layout.css
stylesheets[all][] = css/typo.css
; FOD
stylesheets[all][] = css/ds_2col.css
stylesheets[all][] = css/search.css
stylesheets[all][] = css/system.menus.css
stylesheets[all][] = css/screen.css
stylesheets[all][] = css/screen.css
Magic en lugar FOAD
https://www.drupal.org/project/magic
// 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
sass/
|-- screen.scss         # Primary Sass file
|-- partials/ # Partials
| |-- _base.scss
| |-- _variables.scss
| |-- _mixins.scss
| |-- vendors/
| | |---- _drupal.scss
|   |    |---- _jqueryandstuff.scss
| | |---- ...
| |-- patterns/
| | |---- _buttons.scss
| | |---- _links.scss
| | |---- ...
| |-- components/
| | |---- _paginator.scss
| | |---- ...
| |---- ...
// Links
// ===================
a {
color: $blue; text-decoration: none;
&:hover,
&:active {
color: $black;
}
}
_links.scss
• Son excelentes, si se usan correctamente
• Dividir en pequeños pedazos
• Proveen abstracción
• No reemplazan saber CSS
Pensar en objetos o abstracciones, y
desgranar esos componentes en piezas
pequeñas.
Objetos son reutilizables.
CSS, planeando para el futuro
.promo-box {}
.promo-box h3 {}
.promo-box {}
.promo-box h3,
.promo-box h4 {}
.promo-box {}
//mi heading puede ser cualquier elemento
.promo-box .promo-box-h {}
ul.product-list li {}
.product-list li {}
.product-list .product-item {}
.product-item {}
<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>
Cuidado con los dogmas, siempre le
hemos tenido miedo a la clasitis, pero
si nos funciona no hay porque
descartarlo.
Sentido común. Escribir patrones una
vez, reusar esos pedazos.
Mo’ Devs, Mo’ Problems
• Training
• Training
• Buenas prácticas
Sintaxis, formato consistente,
convenciones para nombres*, etc
.promo-item {
		background-color: #000;
		color: #fff;
		padding: 10px;
}
https://github.com/ahmednuaman/grunt-scss-lint
* Naming conventions
There are only two hard things in
computer science: cache invalidation and
naming things. - Phil Karlton
• SMACSS - http://bit.ly/1ILqWwb
• BEM - http://bit.ly/1CPXvpb
• OOCSS - http://bit.ly/1zGLVdH
OOCSS Principios:
• Claridad
• Semántico
• Genérico
• Breve
.is-touch {
		...
}
.is-hidden {
		...
}
.is-selected {
		...
}
.tab {
		...
		&.is-selected {
			...
		}
}
//output
.tab.is-selected {
	 ...
}
.btn {
		...
}
Objeto
.items-list {
		...
		
		.item-thumb {
			...
		}
}
Padre - Hijo
.product-list {
		...
}
.product-list-thumb {
		...
}
Padre - Hijo
Contexto. Asignar cambios de estilo
sólo a elementos que cambien por
página, no a objetos.
.cart {
	.main-content {
		...
	}
.sidebar {
		...
	}
}
.promo-box {
	 background: red;
	 color: white;
}
// atados a la estructura
.sidebar .promo-box {	
	 background: black;
}
.promo-box {
	 background: red;
	 color: white;
}
// usamos la Cascada
.promo-box-dark {	
	 background: black;
}
class=”promo-box promo-box-dark”
Subclassing
.promo-box {
	 background: red;
	 color: white;
}
.promo-box-dark {
	@extend .promo-box;
	 background: black;
}
class=”promo-box-dark”
Subclassing
.promo-box,
.promo-box-dark {
background: red;
color: white;
}
.promo-box-dark {
background: black;
}
.promo-box {
	 background: red;
	 color: white;
}
.promo-box-dark {
	 @extend .promo-box;
	 background: black;
}
...
.promo-wrap .promo-box {
	 margin: 0;
}
.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;
}
:(
Cuidar el output.
%placeholder es una buena
alternativa.
.btn,
%btn {
	...
}
.btn-positive {
@extend %btn;
...
}
.btn-negative {
@extend %btn;
...
}
.btn,
.btn-positive,
.btn-negative {
	...
}
.btn-positive {
...
}
.btn-negative {
...
}
.ui-promo-item {
		...
}
class=”ui-promo-item js-promo-item qa-
promo-item”
.ui-promo-item {
		...
}
class=”ui-promo-item js-promo-item qa-
promo-item”
Tenga una convención,
documéntelo y adhiérase a ella.
Lectura recomendada
http://24ways.org/2014/naming-things/
http://nicolasgallagher.com/about-html-semantics-
front-end-architecture/
• Training
• Buenas prácticas
• Documentar
CSS, planeando para el futuro
http://codepen.io/chriscoyier/blog/codepens-css
/* Comentarios FTW */
/**
* Contents
* =========
* 1. Reset
* 2. Base
* 3. Layout
* 4. Modules
**/
...
/*
* =Reset
*/
/**
* Titulo
* 1. Descripción del comentario,
* detalles de porque se necesita,etc
**/
.foo {
	 	 overflow: hidden; /* [1] */
}
// 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
// Tip
// --------------------
// Create a rectangle-triangle to be
// used as a tip.
@mixin tip($color: $orange) {
	...
}
_mixins.scss
CSS no es siempre el problema:
trabajamos con otros devs, falta de
conocimiento, diferentes técnicas.
3Aterrizando
Pragmatismo sobre perfección. Mejor un
“good enough” hoy, que un “perfecto”
mañana.
El código del equipo debe ser un libro que
cualquiera puede leer, no un diario personal.
Escribamos menos CSS. Cada parte es un
potencial punto de falla, reducir features y
código.
Modularidad en CSS no es realmente la meta.
vMantenibilidad es. Si CSS es modular pero
es difícil de mantener, entonces es malo.
Gracias!
@leivajd
http://www.slideshare.net/leivajd
CSS, planeando para el futuro
Evalúa la sesión.
https://latinamerica2015.drupal.org/node/4083
1 of 116

Recommended

HTML5 101 - Drupaleada jun12 by
HTML5 101 - Drupaleada jun12HTML5 101 - Drupaleada jun12
HTML5 101 - Drupaleada jun12Jose Leiva
225 views52 slides
Sass & Compass - DrupalCamp CR13 by
Sass & Compass - DrupalCamp CR13Sass & Compass - DrupalCamp CR13
Sass & Compass - DrupalCamp CR13Jose Leiva
612 views38 slides
Año Nuevo, Herramientas Nuevas by
Año Nuevo,  Herramientas NuevasAño Nuevo,  Herramientas Nuevas
Año Nuevo, Herramientas NuevasJose Leiva
478 views60 slides
Intro a Sass by
Intro a Sass Intro a Sass
Intro a Sass Jose Leiva
735 views58 slides
Hablemos sobre Drupal vs WordPress by
Hablemos sobre Drupal vs WordPressHablemos sobre Drupal vs WordPress
Hablemos sobre Drupal vs WordPressJose Leiva
450 views64 slides
Pruebas de usabilidad, guerrilla style by
Pruebas de usabilidad, guerrilla stylePruebas de usabilidad, guerrilla style
Pruebas de usabilidad, guerrilla styleJose Leiva
502 views49 slides

More Related Content

Similar to CSS, planeando para el futuro

CSS3 by
CSS3CSS3
CSS3Diego Carrera
1.4K views40 slides
Frameworks CSS by
Frameworks CSSFrameworks CSS
Frameworks CSSbetabeers
382 views66 slides
Introducción a los Frameworks CSS by
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSSLuis Miguel Martín
1.9K views66 slides
Introducción CSS by
Introducción CSSIntroducción CSS
Introducción CSSCarlos A. Iglesias
1.5K views114 slides
Semana 3 Maquetación CSS by
Semana 3   Maquetación CSSSemana 3   Maquetación CSS
Semana 3 Maquetación CSSRichard Eliseo Mendoza Gafaro
468 views27 slides
utilidades bootstrap by
utilidades bootstraputilidades bootstrap
utilidades bootstrapAna Maria Franco
50 views16 slides

Similar to CSS, planeando para el futuro(20)

Frameworks CSS by betabeers
Frameworks CSSFrameworks CSS
Frameworks CSS
betabeers382 views
Acceptance testing with Steak and Capybara by Sergio Gil
Acceptance testing with Steak and CapybaraAcceptance testing with Steak and Capybara
Acceptance testing with Steak and Capybara
Sergio Gil1.8K views
HTML5, CSS3, Responsive Design by Manuel Padilla
HTML5, CSS3, Responsive DesignHTML5, CSS3, Responsive Design
HTML5, CSS3, Responsive Design
Manuel Padilla940 views
Estándares Web con Chico UI by Guillermo Paz
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UI
Guillermo Paz1.2K views
hojas de_estilo_css by George Diaz
 hojas de_estilo_css hojas de_estilo_css
hojas de_estilo_css
George Diaz995 views
Estilo & CSS3 by ccarruitero
Estilo & CSS3Estilo & CSS3
Estilo & CSS3
ccarruitero2.6K views

Recently uploaded

475324313-muneca-pelo-largo-amigurumi-pdf.pdf by
475324313-muneca-pelo-largo-amigurumi-pdf.pdf475324313-muneca-pelo-largo-amigurumi-pdf.pdf
475324313-muneca-pelo-largo-amigurumi-pdf.pdfHildaAlejandraSosa
5 views3 slides
FOTOGRAFÍA II by
FOTOGRAFÍA IIFOTOGRAFÍA II
FOTOGRAFÍA IIOlivaresCastilloKian
6 views17 slides
Conservación de monumentos by
Conservación de monumentosConservación de monumentos
Conservación de monumentosngelaMndez3
5 views6 slides
Mini Tema ilustrado 5.docx by
Mini Tema ilustrado 5.docxMini Tema ilustrado 5.docx
Mini Tema ilustrado 5.docxantoniolfdez2006
10 views4 slides
Emosido engañado - La gran mentira del diseño de UX y el User Centered Design by
Emosido engañado - La gran mentira del diseño de UX y el User Centered DesignEmosido engañado - La gran mentira del diseño de UX y el User Centered Design
Emosido engañado - La gran mentira del diseño de UX y el User Centered DesignSergio de la Casa
249 views91 slides
Presentación1.pptx by
Presentación1.pptxPresentación1.pptx
Presentación1.pptxConsueloAndreaEscoba
5 views6 slides

CSS, planeando para el futuro