SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
@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!

Contenu connexe

Tendances

GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Kai Wähner
 

Tendances (20)

Java script
Java scriptJava script
Java script
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser Caching
 
Attribute-Based Access Control in Symfony
Attribute-Based Access Control in SymfonyAttribute-Based Access Control in Symfony
Attribute-Based Access Control in Symfony
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
AWS Elastic Load Balancing for AWS Architect & SysOps Certification
AWS Elastic Load Balancing for AWS Architect & SysOps CertificationAWS Elastic Load Balancing for AWS Architect & SysOps Certification
AWS Elastic Load Balancing for AWS Architect & SysOps Certification
 
AWS PrivateLink - Deep Dive
AWS PrivateLink - Deep DiveAWS PrivateLink - Deep Dive
AWS PrivateLink - Deep Dive
 
Introduction to Threat Detection and Remediation on AWS
Introduction to Threat Detection and Remediation on AWSIntroduction to Threat Detection and Remediation on AWS
Introduction to Threat Detection and Remediation on AWS
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
Spring Cloud Workshop
Spring Cloud WorkshopSpring Cloud Workshop
Spring Cloud Workshop
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Programming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDKProgramming Infrastructure with AWS CDK
Programming Infrastructure with AWS CDK
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
 
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
Elastic  Load Balancing Deep Dive - AWS Online Tech TalkElastic  Load Balancing Deep Dive - AWS Online Tech Talk
Elastic Load Balancing Deep Dive - AWS Online Tech Talk
 
Containerd + buildkit breakout
Containerd + buildkit breakoutContainerd + buildkit breakout
Containerd + buildkit breakout
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
 
Sightly - Part 2
Sightly - Part 2Sightly - Part 2
Sightly - Part 2
 
Hardening Kubernetes by Securing Pods
Hardening Kubernetes by Securing PodsHardening Kubernetes by Securing Pods
Hardening Kubernetes by Securing Pods
 
Osgi
OsgiOsgi
Osgi
 
당근마켓에서 IaC경험
당근마켓에서 IaC경험당근마켓에서 IaC경험
당근마켓에서 IaC경험
 

En vedette

Fósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkklFósiles (3) (1) (1) gghjkkjnmjmkkl
Fósiles (3) (1) (1) gghjkkjnmjmkkl
puuppii
 
02 institucionalidad politica ii
02 institucionalidad politica ii02 institucionalidad politica ii
02 institucionalidad politica ii
PSUHistoriacachs
 
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
 

En vedette (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!
 

Similaire à 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.
 
Curso mysql modificado
Curso mysql modificadoCurso mysql modificado
Curso mysql modificado
Yusef Yamel
 
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
LISSYCE
 

Similaire à 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
 

Dernier

secuencias de los figuras de cuadros y rectangulos
secuencias de los figuras de cuadros y rectangulossecuencias de los figuras de cuadros y rectangulos
secuencias de los figuras de cuadros y rectangulos
RosarioLloglla
 
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docxPLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
Leo Florez
 
GRUPO 1.pptx problemas oportunidades objetivos
GRUPO 1.pptx problemas oportunidades objetivosGRUPO 1.pptx problemas oportunidades objetivos
GRUPO 1.pptx problemas oportunidades objetivos
CristianGmez22034
 
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRYPLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
karendaza9506
 

Dernier (20)

Torre 222 sobre instalaciones de este mismo edificio
Torre 222 sobre instalaciones de este mismo edificioTorre 222 sobre instalaciones de este mismo edificio
Torre 222 sobre instalaciones de este mismo edificio
 
secuencias de los figuras de cuadros y rectangulos
secuencias de los figuras de cuadros y rectangulossecuencias de los figuras de cuadros y rectangulos
secuencias de los figuras de cuadros y rectangulos
 
SESION 05 MOBILIARIO Y EQUIPAMIENTO.pptx
SESION 05 MOBILIARIO Y EQUIPAMIENTO.pptxSESION 05 MOBILIARIO Y EQUIPAMIENTO.pptx
SESION 05 MOBILIARIO Y EQUIPAMIENTO.pptx
 
Introduccion-a-los-numeros-en-ingles.pptx
Introduccion-a-los-numeros-en-ingles.pptxIntroduccion-a-los-numeros-en-ingles.pptx
Introduccion-a-los-numeros-en-ingles.pptx
 
ARQUITECTURA ESCOLAR PÚBLICA COMO PATRIMONIO MODERNO EN CHILE
ARQUITECTURA ESCOLAR PÚBLICA COMO PATRIMONIO MODERNO EN CHILEARQUITECTURA ESCOLAR PÚBLICA COMO PATRIMONIO MODERNO EN CHILE
ARQUITECTURA ESCOLAR PÚBLICA COMO PATRIMONIO MODERNO EN CHILE
 
GROPUIS Y WRIGHT DIPOSITIVA ARQUITECTURA DISEÑO MODERNIDAD
GROPUIS Y WRIGHT DIPOSITIVA ARQUITECTURA DISEÑO MODERNIDADGROPUIS Y WRIGHT DIPOSITIVA ARQUITECTURA DISEÑO MODERNIDAD
GROPUIS Y WRIGHT DIPOSITIVA ARQUITECTURA DISEÑO MODERNIDAD
 
CLASE 2 PSICOTERAPIA COGNITIVO CONDUCTUAL.pdf
CLASE 2 PSICOTERAPIA COGNITIVO CONDUCTUAL.pdfCLASE 2 PSICOTERAPIA COGNITIVO CONDUCTUAL.pdf
CLASE 2 PSICOTERAPIA COGNITIVO CONDUCTUAL.pdf
 
Planificación del mes de afrovenezolanidad2024.doc
Planificación del mes de afrovenezolanidad2024.docPlanificación del mes de afrovenezolanidad2024.doc
Planificación del mes de afrovenezolanidad2024.doc
 
Espacios únicos creados por nuestros clientes
Espacios únicos creados por nuestros clientesEspacios únicos creados por nuestros clientes
Espacios únicos creados por nuestros clientes
 
INICIOS DEL MOVIMIENTO MODERNO 1900-1930.pdf
INICIOS DEL MOVIMIENTO MODERNO 1900-1930.pdfINICIOS DEL MOVIMIENTO MODERNO 1900-1930.pdf
INICIOS DEL MOVIMIENTO MODERNO 1900-1930.pdf
 
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docxPLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
 
Torre agbar analisis arquitectonico.....
Torre agbar analisis arquitectonico.....Torre agbar analisis arquitectonico.....
Torre agbar analisis arquitectonico.....
 
Portafolio Santiago Agudelo Duran 2024 -30
Portafolio Santiago Agudelo Duran 2024 -30Portafolio Santiago Agudelo Duran 2024 -30
Portafolio Santiago Agudelo Duran 2024 -30
 
Arte textil: Tejidos artesanos en la frontera hispano-lusa
Arte textil: Tejidos artesanos en la frontera hispano-lusaArte textil: Tejidos artesanos en la frontera hispano-lusa
Arte textil: Tejidos artesanos en la frontera hispano-lusa
 
DISENO_FACTORIAL_2_2_EXPOSICION_pptx.pptx
DISENO_FACTORIAL_2_2_EXPOSICION_pptx.pptxDISENO_FACTORIAL_2_2_EXPOSICION_pptx.pptx
DISENO_FACTORIAL_2_2_EXPOSICION_pptx.pptx
 
GRUPO 1.pptx problemas oportunidades objetivos
GRUPO 1.pptx problemas oportunidades objetivosGRUPO 1.pptx problemas oportunidades objetivos
GRUPO 1.pptx problemas oportunidades objetivos
 
Afiche de arquitectura manierista Paola Perez
Afiche de arquitectura manierista Paola PerezAfiche de arquitectura manierista Paola Perez
Afiche de arquitectura manierista Paola Perez
 
cabildo abierto forma de participación ciudadana
cabildo abierto forma de participación ciudadanacabildo abierto forma de participación ciudadana
cabildo abierto forma de participación ciudadana
 
Anexo Nivel 3 Ficha Lectura pptjsbdkks
Anexo  Nivel 3 Ficha  Lectura pptjsbdkksAnexo  Nivel 3 Ficha  Lectura pptjsbdkks
Anexo Nivel 3 Ficha Lectura pptjsbdkks
 
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRYPLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
PLANTILLA UNAD JJAJJJJJWRBJHGURGERRTERTRTRY
 

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