SlideShare una empresa de Scribd logo
@rlucha
Arquitectura front-end CSS
para proyectos a gran escala
¿Qué es un proyecto a gran escala?
Media o larga duración / Requisitos indefinidos / Recursos indefinidos
Cambiar el enfoque
Facilidad de mantenimiento
Absorber nuevos requisitos minimizando el impacto
Incorporar nuevos recursos al equipo lo más rápidamente posible
Modularización
Separar un gran proyecto en pequeñas partes discretas
Independencia de las partes / encapsulamiento
Reutilización de código / DRY
... similar a la programación OO
OOCSS
Un objeto CSS es una estructura repetitiva independiente del contexto
Principio de responsabilidad única
Principio open/closed (fácil de extender, difícil de modificar)
SMACSS
Módulo
Componente
Submódulo
Guía de prácticas
Jerarquía por capas
Es una metodología
Elimina la especificidad
BEM
Bloque
Elemento
Modificador
Colisión de especificidad
La cascada tiene muchísima potencia pero es difícil de controlar
Una colisión afecta a partes dispares del proyecto
Ejemplo
<div class=”contentHolder”>
<ul class=”movieList”>
<li> Item 1</li>
<li> Item 2</li>
<li class=”fav”> Item 3</li>
<li> Item 4</li>
</ul>
</div>
...
<span class=”fav”>
Añadir a favoritos
</span>
· item 1
· item 2
· item 3
· item 4
Añadir a favoritos
.contentHolder .movieList li {
font-size: 10pt;
}
.movieList .fav {
font-weight: 600;
color: #F00;
font-size: 12pt;
}
.fav {
font-size: 14pt;
color: #0F0;
text-decoration: underline;
}
Consecuencias inesperadas
BEM
Bloque
movieList
- --Elemento
item
Modificador
fav
<div class=”contentholder”>
<ul class=”movieList”>
<li class=”movieList-item”> Item 1</li>
<li class=”movieList-item”> Item 2</li>
<li class=”movieList-item movieList-item--fav”> Item 3</li>
<li class=”movieList-item”> Item 4</li>
</ul>
</div>
...
<span class=”fav”>
Añadir a favoritos
</span>
.movieList-item {
font-size: 10pt;
}
.movieList-item--fav {
font-weight: 600;
color: #F00;
font-size: 12pt;
}
.fav {
font-size: 14pt;
color: #0F0;
text-decoration: underline;
}
BEM es modular y pseudoespecífico
Creando namespaces locales por módulo/bloque solucionamos los dos
principales problemas de un proyecto a gran escala.
Identificación de las partes y control de la especificidad.
BEM + SASS
Podemos utilizar la sintaxis BEM con la
anidación de SASS utilizando el operador “&”
en conjunción con la directiva @at-root
· & es una referencia al contexto superior
· #{&} interpola el nombre del contexto
· @at-root crea la regla en el root del
documento compilado sin tener en cuenta el
nesting
.movieList {
@at-root #{&}-item {
font-size: 10pt;
@at-root #{&}--fav {
font-weight: 600;
color: #F00;
font-size: 12pt;
}
}
}
BEM + SASS
&
referencia al
contexto superior
#{&}
interpolación
a string
@at-root
añade la regla al
root sin nesting
Mixins
El uso de mixins abstrae la necesidad de
conocer la nomenclatura exacta en SASS
Permite a gente que no conoce SASS extender
el proyecto sin curva de aprendizaje
Reduce los errores de sintaxis
No usamos selectores CSS
@include block(movieList) {
@include element(item) {
font-size: 10pt;
@include modifier(fav) {
font-weight: 600;
color: #F00;
font-size: 12pt;
}
}
}
Herencia (aka Submódulos)
Al controlar con SASS cómo se interpolan
los nombres de clase podemos controlar
el contexto en el que se crean las
propiedades.
El mixin extendBlock crea la clase
.movieList--horizontal .movieList-item
y le aplica inline-block manteniendo el
resto de propiedades intactas. Con esta
sobrecarga tenemos un control total de la
especificidad.
@include block(movieList) {
@include element(item) {
font-size: 10pt;
@include modifier(fav) {
...
}
}
}
@include extendBlock(movieList,horizontal) {
@include element(item) {
display: inline-block;
}
}
.movieList--horizontal .movieList-item
BEM.scss
$extend: false;
$blockExtended: "";
@mixin block($name) {
@at-root .#{$name} {
@content;
}
}
@mixin modifier($name) {
@at-root #{&}--#{$name} {
@content;
}
}
@mixin element($name) {
@if $extend == true {
@at-root #{&} .#{$blockExtended}-#{$name} {
@content;
}
}
@else {
@at-root #{&}-#{$name} {
@content;
}
}
}
@mixin extendBlock($blockExtended,$name) {
$extend: true !global;
$blockExtended: $blockExtended !global;
@at-root .#{$blockExtended}--#{$name} {
@content;
}
$extend: false !global;
}
BEM dentro del proyecto
Un archivo scss por bloque
Un archivo template por bloque
Los bloques son específicos del proyecto
/public
/css
/scss/
/vendor
/framework
_base.scss
_variables.scss
_app.scss
/blocks
_movieList.scss
_topNavigation.scss
...
/partials/
movieList.hbs
Combinando FMWs
Hacer la transición de frameworks de
soluciones a frameworks de componentes.
Ofrecen componentes abstraídos de
presentación con los que podemos dotar a
nuestros bloques de funcionalidades comunes.
· inuit.css
· suit.css
/public
/css
/scss/
/vendor
/framework
_base.scss
_variables.scss
_app.scss
/blocks
_movieList.scss
_topNavigation.scss
...
/partials/
movieList.hbs
inuit.css
GRID responsive
Headers
Sprites
Buttons
Lists
Media Object
Pagination
...
Usando la directiva @extend podemos extender la funcionalidad de nuestros
bloques con las abstracciones del framework de componentes
Reutilizamos abstracciones comunes a todos los proyectos
Extendiendo el proyecto
@extend %placeholders
@include block(movieList) {
@extend %framework-blockList;
@include element(item) {
@extend %framework-blockList-item;
font-size: 10pt;
@include modifier(fav) {
font-weight: 600;
color: #F00;
font-size: 12pt;
}
}
}
%framework-blockList {
margin: 0;
padding: 0;
list-style: none;
}
%framework-blockList-item {
padding: $fmw-block-list-padding;
}
open/close por capas
Scaffolding ( normalize.css, animate.css, ... )
Theme ( pink.scss, ocean.scss, ... )
Blocks ( movieLIst.scss, mainMenu.scss, ... )
@extend
override
@import
Framework ( inuit.scss, suit.scss, ... )
Resumen
separar en módulos / identificarlos / encapsularlos / reutilizarlos
scaffolding / extender FMW / integrar módulos / customizar temas
Y después...
Testing
.movieList-item {
@extend %error;
}
.movieList .movieList-item {
@extend %success;
}
Partir de un estado de error que sólo se
resuelve si se usa en el contexto apropiado
Inyectar CSS desde el navegador con
extensiones
Generadores estáticos
Assemble / Jekyll / DocPad
En el futuro...
Preprocesadores customizables
Interpolaciones arbitrarias de selectores
Nuevas reglas y relaciones
ReWork
Shadow DOM
Directivas
@rlucha
¡Muchas gracias!

Más contenido relacionado

Destacado

CSS - Arquitectura Escalable y Modular
CSS - Arquitectura Escalable y ModularCSS - Arquitectura Escalable y Modular
CSS - Arquitectura Escalable y Modular
rodboc
 
Smacss. Organizando css
Smacss. Organizando cssSmacss. Organizando css
Smacss. Organizando css
Medio y forma
 
Arquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEMArquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEM
Danielle Cristina Soldera
 
Cómo dejar de preocuparse y amar Angular
Cómo dejar de preocuparse y amar AngularCómo dejar de preocuparse y amar Angular
Cómo dejar de preocuparse y amar Angular
Roberto Lucha Sedeño
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
DAVID GRILLI
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for Developers
Nadal Soler
 
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZUBOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
JUAN CONTRERAS CACERES
 
Descripción general de uningeniero
Descripción general de uningenieroDescripción general de uningeniero
Descripción general de uningeniero
luferova
 
Fósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkklFósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkklpuuppii
 
02 institucionalidad politica ii
02 institucionalidad politica ii02 institucionalidad politica ii
02 institucionalidad politica iiPSUHistoriacachs
 
Prueba pisa
Prueba pisaPrueba pisa
Prueba pisa
anama2000
 
Presentacion eres workaholic y no lo sabes
Presentacion eres workaholic y no lo sabesPresentacion eres workaholic y no lo sabes
Presentacion eres workaholic y no lo sabes
AntonRoMX
 
Proyectos de legislación consejo de legislación de 2016- de rotary internati...
Proyectos de legislación  consejo de legislación de 2016- de rotary internati...Proyectos de legislación  consejo de legislación de 2016- de rotary internati...
Proyectos de legislación consejo de legislación de 2016- de rotary internati...
JUAN CONTRERAS CACERES
 
Paola Dutra T2
Paola Dutra T2 Paola Dutra T2
Paola Dutra T2
Paola Dutra
 
portafolio de tecnologia y trabajo
portafolio de tecnologia y trabajoportafolio de tecnologia y trabajo
portafolio de tecnologia y trabajo
luferova
 
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZUBOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
JUAN CONTRERAS CACERES
 
Transformadores
TransformadoresTransformadores
Transformadores
Jesus Palomino
 
Suicidio
Suicidio Suicidio
Suicidio
Jesbaan
 
Que es colombia en la actualidad!
Que es colombia en la actualidad!Que es colombia en la actualidad!
Que es colombia en la actualidad!Alejandroyanquen
 

Destacado (20)

CSS - Arquitectura Escalable y Modular
CSS - Arquitectura Escalable y ModularCSS - Arquitectura Escalable y Modular
CSS - Arquitectura Escalable y Modular
 
Smacss. Organizando css
Smacss. Organizando cssSmacss. Organizando css
Smacss. Organizando css
 
Arquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEMArquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEM
 
Cómo dejar de preocuparse y amar Angular
Cómo dejar de preocuparse y amar AngularCómo dejar de preocuparse y amar Angular
Cómo dejar de preocuparse y amar Angular
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for Developers
 
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZUBOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
 
Descripción general de uningeniero
Descripción general de uningenieroDescripción general de uningeniero
Descripción general de uningeniero
 
Fósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkklFósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkkl
 
02 institucionalidad politica ii
02 institucionalidad politica ii02 institucionalidad politica ii
02 institucionalidad politica ii
 
Prueba pisa
Prueba pisaPrueba pisa
Prueba pisa
 
globalizacion
globalizacion globalizacion
globalizacion
 
Presentacion eres workaholic y no lo sabes
Presentacion eres workaholic y no lo sabesPresentacion eres workaholic y no lo sabes
Presentacion eres workaholic y no lo sabes
 
Proyectos de legislación consejo de legislación de 2016- de rotary internati...
Proyectos de legislación  consejo de legislación de 2016- de rotary internati...Proyectos de legislación  consejo de legislación de 2016- de rotary internati...
Proyectos de legislación consejo de legislación de 2016- de rotary internati...
 
Paola Dutra T2
Paola Dutra T2 Paola Dutra T2
Paola Dutra T2
 
portafolio de tecnologia y trabajo
portafolio de tecnologia y trabajoportafolio de tecnologia y trabajo
portafolio de tecnologia y trabajo
 
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZUBOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
BOLETIN N* 02 SOBRE INSTITUTO DE FOZ IGUAZU
 
Transformadores
TransformadoresTransformadores
Transformadores
 
Suicidio
Suicidio Suicidio
Suicidio
 
Que es colombia en la actualidad!
Que es colombia en la actualidad!Que es colombia en la actualidad!
Que es colombia en la actualidad!
 

Similar a Arquitectura frontend con BEM y SASS

4505.07 estilos usando master pages y css
4505.07   estilos usando master pages y css4505.07   estilos usando master pages y css
4505.07 estilos usando master pages y css
Carlos Muñoz C.
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
MarionaCruz
 
Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
Adolfo Sanz De Diego
 
Presentacióin tema 6
Presentacióin tema 6Presentacióin tema 6
Presentacióin tema 6
Diana Mabel
 
Front end basics - Sass
Front end basics - SassFront end basics - Sass
Front end basics - Sass
Nadal Soler
 
Hojas de estilo css
Hojas de estilo cssHojas de estilo css
Hojas de estilo css
ricardo herrera
 
curso_mysql.pdf
curso_mysql.pdfcurso_mysql.pdf
curso_mysql.pdf
BenedictoRamirezSant
 
Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificadoYusef Yamel
 
OOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarciaOOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarcia
Jano Garcia
 
Hojas de Estilo en Cascada - CSS
Hojas de Estilo en Cascada - CSSHojas de Estilo en Cascada - CSS
Hojas de Estilo en Cascada - CSS
Facultad de Ciencias y Sistemas
 
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
gdgsantacruz
 
DEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspotDEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspotLISSYCE
 
Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas web
Geraldyn De Sousa
 
Presentación-HTML5-okkk.pdf
Presentación-HTML5-okkk.pdfPresentación-HTML5-okkk.pdf
Presentación-HTML5-okkk.pdf
DrakoSK
 
Css: bases y buenas prácticas
Css: bases y buenas prácticasCss: bases y buenas prácticas
Css: bases y buenas prácticas
ferwalker
 
Estilos CSS en React.pdf
Estilos CSS en React.pdfEstilos CSS en React.pdf
Estilos CSS en React.pdf
MarianaTapia43
 
Diapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.netDiapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.net
TAPIA SILVA EVELINA
 

Similar a Arquitectura frontend con BEM y SASS (20)

4505.07 estilos usando master pages y css
4505.07   estilos usando master pages y css4505.07   estilos usando master pages y css
4505.07 estilos usando master pages y css
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
 
Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
 
Presentacióin tema 6
Presentacióin tema 6Presentacióin tema 6
Presentacióin tema 6
 
Front end basics - Sass
Front end basics - SassFront end basics - Sass
Front end basics - Sass
 
Hojas de estilo css
Hojas de estilo cssHojas de estilo css
Hojas de estilo css
 
Presentación1
Presentación1Presentación1
Presentación1
 
curso_mysql.pdf
curso_mysql.pdfcurso_mysql.pdf
curso_mysql.pdf
 
Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificado
 
OOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarciaOOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarcia
 
Hojas de Estilo en Cascada - CSS
Hojas de Estilo en Cascada - CSSHojas de Estilo en Cascada - CSS
Hojas de Estilo en Cascada - CSS
 
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
Keep calm and write CSS with Flexbox - Luz Maria Maida Claure (WTM - GDG - CBBA)
 
CSS
CSSCSS
CSS
 
DEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspotDEBER HOJA DE ESTILO (CSS) blog blogger blogspot
DEBER HOJA DE ESTILO (CSS) blog blogger blogspot
 
Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas web
 
Presentación-HTML5-okkk.pdf
Presentación-HTML5-okkk.pdfPresentación-HTML5-okkk.pdf
Presentación-HTML5-okkk.pdf
 
Css: bases y buenas prácticas
Css: bases y buenas prácticasCss: bases y buenas prácticas
Css: bases y buenas prácticas
 
CSS
CSSCSS
CSS
 
Estilos CSS en React.pdf
Estilos CSS en React.pdfEstilos CSS en React.pdf
Estilos CSS en React.pdf
 
Diapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.netDiapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.net
 

Último

Porfolio de diseños de Comedores de Carlotta Design
Porfolio  de diseños de Comedores de Carlotta DesignPorfolio  de diseños de Comedores de Carlotta Design
Porfolio de diseños de Comedores de Carlotta Design
paulacoux1
 
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptxIntroduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
albujarluisl
 
Movimiento Moderno en Venezuela Arquitectura
Movimiento Moderno en Venezuela ArquitecturaMovimiento Moderno en Venezuela Arquitectura
Movimiento Moderno en Venezuela Arquitectura
LeonardoDantasRivas
 
capitulo-18-sistema--706807-downloadable-2573126.pdf
capitulo-18-sistema--706807-downloadable-2573126.pdfcapitulo-18-sistema--706807-downloadable-2573126.pdf
capitulo-18-sistema--706807-downloadable-2573126.pdf
ProfesorCiencias2
 
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
62946377
 
Patrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en CancunPatrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en Cancun
DianaArtemizaCP
 
Portfolio_itsmevalen/ Valentina Balmaceda
Portfolio_itsmevalen/ Valentina BalmacedaPortfolio_itsmevalen/ Valentina Balmaceda
Portfolio_itsmevalen/ Valentina Balmaceda
ValentinaBalmaceda2
 
Lectura. Reseña ilustrada, novela Albert Camus
Lectura.  Reseña ilustrada, novela Albert CamusLectura.  Reseña ilustrada, novela Albert Camus
Lectura. Reseña ilustrada, novela Albert Camus
RenataGrecia
 
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdfProyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
RicardoArayaLobo
 
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdfMuseo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
MarianaVillenaAyala
 
Porfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta DesignPorfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta Design
paulacoux1
 
Desarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdfDesarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdf
marianamadronero578
 
Propuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseñoPropuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseño
Mariano Salgado
 
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptxVERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
ingridavila20
 
informecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docxinformecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docx
IsabellaCortes7
 
Arquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en LatinoaméricaArquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en Latinoamérica
imariagsg
 
DIAGRAMA DE FLUJO.pptx : Ventas en linea
DIAGRAMA DE FLUJO.pptx : Ventas en lineaDIAGRAMA DE FLUJO.pptx : Ventas en linea
DIAGRAMA DE FLUJO.pptx : Ventas en linea
EduarRamos7
 
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
Sarai747172
 
mapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdfmapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdf
andreakathe12
 
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdfEstilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
JosueJuanez1
 

Último (20)

Porfolio de diseños de Comedores de Carlotta Design
Porfolio  de diseños de Comedores de Carlotta DesignPorfolio  de diseños de Comedores de Carlotta Design
Porfolio de diseños de Comedores de Carlotta Design
 
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptxIntroduccion-a-la-vida-de-Johannes-Kepler.pptx
Introduccion-a-la-vida-de-Johannes-Kepler.pptx
 
Movimiento Moderno en Venezuela Arquitectura
Movimiento Moderno en Venezuela ArquitecturaMovimiento Moderno en Venezuela Arquitectura
Movimiento Moderno en Venezuela Arquitectura
 
capitulo-18-sistema--706807-downloadable-2573126.pdf
capitulo-18-sistema--706807-downloadable-2573126.pdfcapitulo-18-sistema--706807-downloadable-2573126.pdf
capitulo-18-sistema--706807-downloadable-2573126.pdf
 
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
DIA DE LA BANDERA PERUANA EL 7 DE JUNIO DE 1820
 
Patrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en CancunPatrimundi Recuperadora Bancaria en Cancun
Patrimundi Recuperadora Bancaria en Cancun
 
Portfolio_itsmevalen/ Valentina Balmaceda
Portfolio_itsmevalen/ Valentina BalmacedaPortfolio_itsmevalen/ Valentina Balmaceda
Portfolio_itsmevalen/ Valentina Balmaceda
 
Lectura. Reseña ilustrada, novela Albert Camus
Lectura.  Reseña ilustrada, novela Albert CamusLectura.  Reseña ilustrada, novela Albert Camus
Lectura. Reseña ilustrada, novela Albert Camus
 
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdfProyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
Proyecto_individulal_entre_pares_Ricardo_Aray_Lobo.pdf
 
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdfMuseo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
Museo de Arte Contemporáneo del Siglo XXI - HISTORIA DE LA ARQUITECTURA .pdf
 
Porfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta DesignPorfolio livings creados por Carlotta Design
Porfolio livings creados por Carlotta Design
 
Desarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdfDesarrollo de habilidades de pensamiento (1).pdf
Desarrollo de habilidades de pensamiento (1).pdf
 
Propuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseñoPropuesta de diseño de marca para Fred, muebles de diseño
Propuesta de diseño de marca para Fred, muebles de diseño
 
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptxVERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
VERTEDEROS CRESTA ANCHA- PRESENTACION FINAL CON PREGUNTAS.pptx
 
informecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docxinformecbdlp-240603151721-44655eeh2.docx
informecbdlp-240603151721-44655eeh2.docx
 
Arquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en LatinoaméricaArquitectura Ecléctica e Historicista en Latinoamérica
Arquitectura Ecléctica e Historicista en Latinoamérica
 
DIAGRAMA DE FLUJO.pptx : Ventas en linea
DIAGRAMA DE FLUJO.pptx : Ventas en lineaDIAGRAMA DE FLUJO.pptx : Ventas en linea
DIAGRAMA DE FLUJO.pptx : Ventas en linea
 
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
1x10.documento bueno para comunidades jefas y jefes de comunidades q les soli...
 
mapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdfmapa mental gestion del capital humano.pdf
mapa mental gestion del capital humano.pdf
 
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdfEstilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
Estilos de cajas Flexibles CSS-Flexbox-y-Grid.pdf
 

Arquitectura frontend con BEM y SASS

  • 1. @rlucha Arquitectura front-end CSS para proyectos a gran escala
  • 2. ¿Qué es un proyecto a gran escala? Media o larga duración / Requisitos indefinidos / Recursos indefinidos
  • 3. Cambiar el enfoque Facilidad de mantenimiento Absorber nuevos requisitos minimizando el impacto Incorporar nuevos recursos al equipo lo más rápidamente posible
  • 4. Modularización Separar un gran proyecto en pequeñas partes discretas Independencia de las partes / encapsulamiento Reutilización de código / DRY ... similar a la programación OO
  • 5. OOCSS Un objeto CSS es una estructura repetitiva independiente del contexto Principio de responsabilidad única Principio open/closed (fácil de extender, difícil de modificar)
  • 6. SMACSS Módulo Componente Submódulo Guía de prácticas Jerarquía por capas Es una metodología Elimina la especificidad BEM Bloque Elemento Modificador
  • 7. Colisión de especificidad La cascada tiene muchísima potencia pero es difícil de controlar Una colisión afecta a partes dispares del proyecto
  • 8. Ejemplo <div class=”contentHolder”> <ul class=”movieList”> <li> Item 1</li> <li> Item 2</li> <li class=”fav”> Item 3</li> <li> Item 4</li> </ul> </div> ... <span class=”fav”> Añadir a favoritos </span> · item 1 · item 2 · item 3 · item 4 Añadir a favoritos .contentHolder .movieList li { font-size: 10pt; } .movieList .fav { font-weight: 600; color: #F00; font-size: 12pt; } .fav { font-size: 14pt; color: #0F0; text-decoration: underline; } Consecuencias inesperadas
  • 9. BEM Bloque movieList - --Elemento item Modificador fav <div class=”contentholder”> <ul class=”movieList”> <li class=”movieList-item”> Item 1</li> <li class=”movieList-item”> Item 2</li> <li class=”movieList-item movieList-item--fav”> Item 3</li> <li class=”movieList-item”> Item 4</li> </ul> </div> ... <span class=”fav”> Añadir a favoritos </span> .movieList-item { font-size: 10pt; } .movieList-item--fav { font-weight: 600; color: #F00; font-size: 12pt; } .fav { font-size: 14pt; color: #0F0; text-decoration: underline; }
  • 10. BEM es modular y pseudoespecífico Creando namespaces locales por módulo/bloque solucionamos los dos principales problemas de un proyecto a gran escala. Identificación de las partes y control de la especificidad.
  • 11. BEM + SASS Podemos utilizar la sintaxis BEM con la anidación de SASS utilizando el operador “&” en conjunción con la directiva @at-root · & es una referencia al contexto superior · #{&} interpola el nombre del contexto · @at-root crea la regla en el root del documento compilado sin tener en cuenta el nesting .movieList { @at-root #{&}-item { font-size: 10pt; @at-root #{&}--fav { font-weight: 600; color: #F00; font-size: 12pt; } } }
  • 12. BEM + SASS & referencia al contexto superior #{&} interpolación a string @at-root añade la regla al root sin nesting
  • 13. Mixins El uso de mixins abstrae la necesidad de conocer la nomenclatura exacta en SASS Permite a gente que no conoce SASS extender el proyecto sin curva de aprendizaje Reduce los errores de sintaxis No usamos selectores CSS @include block(movieList) { @include element(item) { font-size: 10pt; @include modifier(fav) { font-weight: 600; color: #F00; font-size: 12pt; } } }
  • 14. Herencia (aka Submódulos) Al controlar con SASS cómo se interpolan los nombres de clase podemos controlar el contexto en el que se crean las propiedades. El mixin extendBlock crea la clase .movieList--horizontal .movieList-item y le aplica inline-block manteniendo el resto de propiedades intactas. Con esta sobrecarga tenemos un control total de la especificidad. @include block(movieList) { @include element(item) { font-size: 10pt; @include modifier(fav) { ... } } } @include extendBlock(movieList,horizontal) { @include element(item) { display: inline-block; } } .movieList--horizontal .movieList-item
  • 15. BEM.scss $extend: false; $blockExtended: ""; @mixin block($name) { @at-root .#{$name} { @content; } } @mixin modifier($name) { @at-root #{&}--#{$name} { @content; } } @mixin element($name) { @if $extend == true { @at-root #{&} .#{$blockExtended}-#{$name} { @content; } } @else { @at-root #{&}-#{$name} { @content; } } } @mixin extendBlock($blockExtended,$name) { $extend: true !global; $blockExtended: $blockExtended !global; @at-root .#{$blockExtended}--#{$name} { @content; } $extend: false !global; }
  • 16. BEM dentro del proyecto Un archivo scss por bloque Un archivo template por bloque Los bloques son específicos del proyecto /public /css /scss/ /vendor /framework _base.scss _variables.scss _app.scss /blocks _movieList.scss _topNavigation.scss ... /partials/ movieList.hbs
  • 17. Combinando FMWs Hacer la transición de frameworks de soluciones a frameworks de componentes. Ofrecen componentes abstraídos de presentación con los que podemos dotar a nuestros bloques de funcionalidades comunes. · inuit.css · suit.css /public /css /scss/ /vendor /framework _base.scss _variables.scss _app.scss /blocks _movieList.scss _topNavigation.scss ... /partials/ movieList.hbs
  • 19. Usando la directiva @extend podemos extender la funcionalidad de nuestros bloques con las abstracciones del framework de componentes Reutilizamos abstracciones comunes a todos los proyectos Extendiendo el proyecto
  • 20. @extend %placeholders @include block(movieList) { @extend %framework-blockList; @include element(item) { @extend %framework-blockList-item; font-size: 10pt; @include modifier(fav) { font-weight: 600; color: #F00; font-size: 12pt; } } } %framework-blockList { margin: 0; padding: 0; list-style: none; } %framework-blockList-item { padding: $fmw-block-list-padding; }
  • 21. open/close por capas Scaffolding ( normalize.css, animate.css, ... ) Theme ( pink.scss, ocean.scss, ... ) Blocks ( movieLIst.scss, mainMenu.scss, ... ) @extend override @import Framework ( inuit.scss, suit.scss, ... )
  • 22. Resumen separar en módulos / identificarlos / encapsularlos / reutilizarlos scaffolding / extender FMW / integrar módulos / customizar temas Y después...
  • 23. Testing .movieList-item { @extend %error; } .movieList .movieList-item { @extend %success; } Partir de un estado de error que sólo se resuelve si se usa en el contexto apropiado Inyectar CSS desde el navegador con extensiones
  • 25. En el futuro... Preprocesadores customizables Interpolaciones arbitrarias de selectores Nuevas reglas y relaciones ReWork Shadow DOM Directivas