SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
SMACSS e CSS
faz BEM!
By Wellington Dutra
Developer
CSS é uma bagunça!
Não importa o quanto você acha que o seu CSS
é limpo, organizado e comentado; se você usa
pré-processadores (SASS, LESS) ou se você
acredita em Deus. O resultado final sempre é
uma bagunça. Admita!
Qual a solução?
Organizar seu Trabalho Frontend.
Como organizar?
Existem algumas técnicas:
OOCSS
DRY CSS
BEM
SMACSS
BEM e SMACSS
Mas antes, para o seu
BEM, conheça a
Abstração
Abstrair o layout em componentes/módulos
● Não levar em conta a página como um todo;
● Encontrar padrões de design e disposição de
elementos;
● Aplicar estilos orientados a componentes.
Who the f*ck is BEM?
BEM - O que significa? De onde vem?
Block Element Modifier é um padrão
de nomenclatura para seletores CSS,
criado pelos caras da Yandex, uma
empresa de internet famosa na
Europa.
BEM - Benefícios
● Facilita a compreensão da função de um determinado
seletor CSS, simplesmente analisando o nome desse
seletor;
● Ótimo para quem trabalha em times;
● Manutenção facilitada, mesmo depois de muito tempo
sem contato com o código;
● Pequenas mudanças não alteram o que já está
implementando, diminuindo a chance de BUGs;
BEM - Estrutura .block__element--modifier
● .block é o nível de abstração mais alto de um componente.
O que podemos entender como o container, wrapper. É a
classe pai de um componente. Ex.: .artigo, .slider;
● __element é o elemento filho de um componente. Podemos
ter mais de um elemento, e ainda elementos dentro de
elementos. Ex.: .artigo__titulo, .artigo__imagem__creditos;
● --modifier é uma característica que um elemento ou bloco
pode ter que o diferencia do padrão. Ex.: .artigo--destacado,
.artigo__imagem--thumb
BEM - Estrutura .block__element--modifier
● __ Dois underscores são usados para separar a classe pai
de seus elementos filho;
● -- Dois hífens são usados para separar a classe pai ou um
elemento filho de um modificador;
BEM - Exemplo
.human {}
.human__head {}
.human__head__eyes {}
.human__head__eyes__eye {}
.human__head__eyes__eye--left {}
.human__head__eyes__eye--right {}
BEM, sem limites!
Não há limites para o nome de uma classe, e o equilíbrio
depende do nível de abstração que você aplicar ao seu
componente.
BEM - Como usar, na prática
Após a abstração dos componentes de um layout, o próximo passo é
criar a marcação e as classes:
● Quanto mais abstração, melhor;
● Quanto mais independente for o componente do contexto em
que está, melhor;
Essas regras são essenciais, pois o componente pode ser reutilizado
em qualquer contexto com pouca ou nenhuma modificação de
estrutura.
BEM - Como usar, na prática | Blocos e Elementos
.articles {}
.articles__article {}
.articles__article__title {}
.articles__article__subtitle
{}
.articles__article__image {}
.articles__article__summary
{}
.articles__article__more {}
BEM - Como usar, na prática | Modificadores
.articles {}
.articles__article--short {}
.articles__article__image--thumb {}
.articles__article__summary--short {}
BEM - Como usar, na prática | HTML
BEM - Como usar, na prática
Como usar o BEM com SASS?
BEM - Como usar, na prática | SASS
.article {
&__article {
&--short {}
&__title {}
&__subtitle {}
&__image }
&--thumb {}
}
&__summary {
&--short {}
}
&__more {}
}
}
BEM - Como usar, na prática
É possível facilitar ainda mais!
Como?
Usando @mixins!
xD
BEM - Como usar, na prática | @mixin
@mixin element($element) {
&__#{$element} {
@content;
}
}
@mixin modifier($modifier) {
&--#{$modifier} {
@content;
}
}
BEM - Como usar, na prática | @mixin
.article {
@include element(article) {
@include modifier(short) {}
@include element(title) {}
@include element(subtitle) {}
@include element(image) {
@include modifier(thumb) {}
}
@include element(summary) {
@include modifier(short) {}
}
@include element(more) {}
}
}
BEM - Contradição?
Mas e quanto a esses seletores profundamente aninhados
no padrão BEM?
Esse sujeito não respeita a regra de especificidade
máxima de 3 níveis para um seletor CSS?
BEM - Contradição?
RESPEITA! MAIS DO QUE VOCÊ!
#fkdk
BEM - CSS compilado.
BEM - Conclusão
BEM é a melhor forma de estruturar componentes e
estilos. É flexível, de fácil entendimento e sua
implementação não é complexa.
A lot of SMACSS!
SMACSS - Smacks?! <3
Scalable and Modular Architecture for CSS não é um
framework, nem uma biblioteca, mas sim um guia para
estruturar seus estilos de maneira inteligente e
escalonável. Não importa o tamanho do projeto, esse
padrão de organização combinado com o BEM pode
facilitar e agilizar ainda mais o desenvolvimento e
manutenção do seu código.
SMACSS - Estrutura
Estrutura de diretórios usando SMACSS:
SMACSS - Estrutura | Diretório base
base: Neste diretório, são colocados os arquivos com os
estilos para elementos base, por exemplo: body, p, a, ul,
span. Arquivos de CSS reset também devem ser colocados
nete.
SMACSS - Estrutura | Diretório base
SMACSS - Estrutura | Diretório layout
layout: Estilos relacionados a estrutura de templates, por
exemplo, um sistema de grid, estilos de estrutura de
regiões genéricas de uma página, como .header, .footer, .
articles, .secondary-articles, .wrapper, .sidebar.
SMACSS - Estrutura | Diretório layout
SMACSS - Estrutura | Diretório modules/components
modules/components: Subdiretórios podem ser definidos
para separar cada componente, por exemplo: dentro do
diretório article, podemos abstrair ainda mais os
elementos e criar uma _partial para cada um deles. Isso
depende do nível de abstração que você aplicar. Quanto
mais complexo o componente, mais sentido faz usar
subdiretórios.
SMACSS - Estrutura | Diretório modules/components
SMACSS - Estrutura | Diretório states
states: Diretório opcional. Estilos referentes aos estados
de cada um de seus componentes. :hover, :active,
disabled, focus…
SMACSS - Estrutura | Diretório states
SMACSS - Estrutura | Diretório theme
theme: Diretório opcional. Estilos de fontes e cores. Você
pode dividir os temas por pasta. font-family, color,
background-color...
SMACSS - Estrutura | Diretório utilities
utilities: Diretório opcional. @mixins e @functions
SMACSS - Estrutura | Diretório utilities
SMACSS - Estrutura | Diretório shame
shame: Diretório opcional. Hacks para o IE, !important e
coisas vergonhosas que temos que fazer de vez
enquando. xD
SMACSS - Como compilar tudo num CSS boladão?
Usando uma ruby gem chamada sass-globbing
● Na raiz do seu diretório sass, crie um arquivo .scss que importará os
arquivos de todas as pastas criadas seguindo o modelo do SMACSS;
● A desvantagem é o tempo que a compilação pode levar, dependendo da
quantidade de arquivos. São segundos, mas se você usa livereload, vai
sentir a diferença.
SMACSS - Como compilar tudo num CSS boladão?
Usando arquivos de índice:
● Dentro de cada um dos diretórios definidos seguindo o SMACSS, crie uma
_partial chamada _index.scss, e nesse arquivo, importe todos as outras
_partials onde se encontra;
● Na raiz do diretório sass, crie um arquivo styles.scss e importe todos as
parciais _index.scss de cada um dos diretórios.
SMACSS - Como compilar tudo num CSS boladão?
Conclusão
Organizar para agilizar!
Organização é a chave para evitar problemas graves em projetos de
Frontend. A maioria dos BUGs gerados são por culpa da falta de organização
e padronização dos projetos.
Isso é tudo, pessoal!
Amém?!
Follow us
www.justdigital.com.br
blog.justdigital.com.br
instagram.com/justdigitalbr
facebook.com/eusigoajust
slideshare.com/justdigital
@justdigital
youtube.com/justdigitalbr
follow.justdigital.com.br
flickr.com/.justdigital
Smacss e-css-faz-bem

Contenu connexe

Tendances

Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...
Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...
Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...AWSKRUG - AWS한국사용자모임
 
F1502 p iman3-pt_v3.8_l
F1502 p iman3-pt_v3.8_lF1502 p iman3-pt_v3.8_l
F1502 p iman3-pt_v3.8_lconfidencial
 
AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013Andrew Khoury
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話dcubeio
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An IntroductionBehzad Altaf
 
Version Control with Git for Beginners
Version Control with Git for BeginnersVersion Control with Git for Beginners
Version Control with Git for Beginnersbryanbibat
 
Server Virtualization Seminar Presentation
Server Virtualization Seminar PresentationServer Virtualization Seminar Presentation
Server Virtualization Seminar Presentationshabi_hassan
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱Suhyeon Jo
 
いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門Jun-ichi Sakamoto
 
Lambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるLambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるshotaueda3
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
10分間でわかるWordPressのファイル構成
10分間でわかるWordPressのファイル構成10分間でわかるWordPressのファイル構成
10分間でわかるWordPressのファイル構成Michiro Sakamoto
 
AWS Black Belt Online Seminar 2016 Amazon EMR
AWS Black Belt Online Seminar 2016 Amazon EMRAWS Black Belt Online Seminar 2016 Amazon EMR
AWS Black Belt Online Seminar 2016 Amazon EMRAmazon Web Services Japan
 

Tendances (20)

Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...
Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...
Firecracker, 서버리스 컴퓨팅을 위한 오픈소스 microVM 기술 :: 류한진 - AWS ...
 
F1502 p iman3-pt_v3.8_l
F1502 p iman3-pt_v3.8_lF1502 p iman3-pt_v3.8_l
F1502 p iman3-pt_v3.8_l
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Hadoop
HadoopHadoop
Hadoop
 
AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Version Control with Git for Beginners
Version Control with Git for BeginnersVersion Control with Git for Beginners
Version Control with Git for Beginners
 
Zimki 2006
Zimki 2006Zimki 2006
Zimki 2006
 
Server Virtualization Seminar Presentation
Server Virtualization Seminar PresentationServer Virtualization Seminar Presentation
Server Virtualization Seminar Presentation
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱
 
いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門いまさらながらの Windows Workflow 入門
いまさらながらの Windows Workflow 入門
 
Lambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるLambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べる
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
Lean code
Lean codeLean code
Lean code
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 
10分間でわかるWordPressのファイル構成
10分間でわかるWordPressのファイル構成10分間でわかるWordPressのファイル構成
10分間でわかるWordPressのファイル構成
 
Restructuring dc f-wbynsx_202106
Restructuring dc f-wbynsx_202106Restructuring dc f-wbynsx_202106
Restructuring dc f-wbynsx_202106
 
Gerrit tutorial
Gerrit tutorialGerrit tutorial
Gerrit tutorial
 
AWS Black Belt Online Seminar 2016 Amazon EMR
AWS Black Belt Online Seminar 2016 Amazon EMRAWS Black Belt Online Seminar 2016 Amazon EMR
AWS Black Belt Online Seminar 2016 Amazon EMR
 

En vedette

Writing Scalable and Maintainable CSS
Writing Scalable and Maintainable CSSWriting Scalable and Maintainable CSS
Writing Scalable and Maintainable CSSDmitry Sheiko
 
Software Programming Principles
Software Programming PrinciplesSoftware Programming Principles
Software Programming PrinciplesSven Peters
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSergey Karpushin
 
A Software Architect's View On Diagramming
A Software Architect's View On DiagrammingA Software Architect's View On Diagramming
A Software Architect's View On Diagrammingmeghantaylor
 

En vedette (9)

Refactoring
RefactoringRefactoring
Refactoring
 
Smacss and bem
Smacss and bemSmacss and bem
Smacss and bem
 
Writing Scalable and Maintainable CSS
Writing Scalable and Maintainable CSSWriting Scalable and Maintainable CSS
Writing Scalable and Maintainable CSS
 
Perfect Code
Perfect CodePerfect Code
Perfect Code
 
eXtreme Programming
eXtreme ProgrammingeXtreme Programming
eXtreme Programming
 
Software Programming Principles
Software Programming PrinciplesSoftware Programming Principles
Software Programming Principles
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
 
A Software Architect's View On Diagramming
A Software Architect's View On DiagrammingA Software Architect's View On Diagramming
A Software Architect's View On Diagramming
 
Atomic design
Atomic designAtomic design
Atomic design
 

Similaire à Smacss e-css-faz-bem

CSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoCSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoAnyssa Ferreira
 
Facilitando sua vida com SASS
Facilitando sua vida com SASSFacilitando sua vida com SASS
Facilitando sua vida com SASSLarissa Carvalho
 
Apostila completa de css
Apostila completa de cssApostila completa de css
Apostila completa de cssHeitor Victorio
 
Aula 1 programação web i
Aula 1   programação web iAula 1   programação web i
Aula 1 programação web iEliene Resende
 
Aula 1 programação web i
Aula 1   programação web iAula 1   programação web i
Aula 1 programação web iEliene Resende
 
Layout na web: um guia de css grid
Layout na web: um guia de css gridLayout na web: um guia de css grid
Layout na web: um guia de css gridCarol Soares
 
Arquitetura CSS - Uma rápida introdução
Arquitetura CSS - Uma rápida introduçãoArquitetura CSS - Uma rápida introdução
Arquitetura CSS - Uma rápida introduçãoMatheus Lucca do Carmo
 
2. Introdução ao CSSpptx.pdf
2. Introdução ao CSSpptx.pdf2. Introdução ao CSSpptx.pdf
2. Introdução ao CSSpptx.pdfRubenManhia
 
Css cascading style sheet
Css cascading style sheetCss cascading style sheet
Css cascading style sheetMorvana Bonin
 
SMACSS - Como estruturar CSS para projetos em larga escala
SMACSS - Como estruturar CSS para projetos em larga escalaSMACSS - Como estruturar CSS para projetos em larga escala
SMACSS - Como estruturar CSS para projetos em larga escalaRafael Lyra
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-endertdc-globalcode
 
Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao cssLéo Dias
 
Desenvolvimento Front End minicurso UNIDERP 2012
Desenvolvimento Front End minicurso UNIDERP 2012Desenvolvimento Front End minicurso UNIDERP 2012
Desenvolvimento Front End minicurso UNIDERP 2012Anderson de Castro
 

Similaire à Smacss e-css-faz-bem (20)

Arquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEMArquitetura CSS - SMACSS + OOCS + BEM
Arquitetura CSS - SMACSS + OOCS + BEM
 
CSS - Cansei de Ser Subestimado
CSS - Cansei de Ser SubestimadoCSS - Cansei de Ser Subestimado
CSS - Cansei de Ser Subestimado
 
Arquitetura CSS
Arquitetura CSSArquitetura CSS
Arquitetura CSS
 
CSS Mastigado
CSS MastigadoCSS Mastigado
CSS Mastigado
 
Sass - Syntactically Awesome Style Sheets
Sass - Syntactically Awesome Style SheetsSass - Syntactically Awesome Style Sheets
Sass - Syntactically Awesome Style Sheets
 
Aula 07 Css - Parte 1
Aula 07   Css - Parte 1Aula 07   Css - Parte 1
Aula 07 Css - Parte 1
 
Css tutorial
Css tutorialCss tutorial
Css tutorial
 
Facilitando sua vida com SASS
Facilitando sua vida com SASSFacilitando sua vida com SASS
Facilitando sua vida com SASS
 
Apostila completa de css
Apostila completa de cssApostila completa de css
Apostila completa de css
 
Aula 1 programação web i
Aula 1   programação web iAula 1   programação web i
Aula 1 programação web i
 
Aula 1 programação web i
Aula 1   programação web iAula 1   programação web i
Aula 1 programação web i
 
Layout na web: um guia de css grid
Layout na web: um guia de css gridLayout na web: um guia de css grid
Layout na web: um guia de css grid
 
Arquitetura CSS - Uma rápida introdução
Arquitetura CSS - Uma rápida introduçãoArquitetura CSS - Uma rápida introdução
Arquitetura CSS - Uma rápida introdução
 
2. Introdução ao CSSpptx.pdf
2. Introdução ao CSSpptx.pdf2. Introdução ao CSSpptx.pdf
2. Introdução ao CSSpptx.pdf
 
Css cascading style sheet
Css cascading style sheetCss cascading style sheet
Css cascading style sheet
 
SMACSS - Como estruturar CSS para projetos em larga escala
SMACSS - Como estruturar CSS para projetos em larga escalaSMACSS - Como estruturar CSS para projetos em larga escala
SMACSS - Como estruturar CSS para projetos em larga escala
 
Curso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSSCurso de Desenvolvimento Web - Módulo 02 - CSS
Curso de Desenvolvimento Web - Módulo 02 - CSS
 
don't repeat yourself front-ender
don't repeat yourself front-enderdon't repeat yourself front-ender
don't repeat yourself front-ender
 
Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao css
 
Desenvolvimento Front End minicurso UNIDERP 2012
Desenvolvimento Front End minicurso UNIDERP 2012Desenvolvimento Front End minicurso UNIDERP 2012
Desenvolvimento Front End minicurso UNIDERP 2012
 

Plus de Just Digital

ICAgile - Agile Professional Certification
ICAgile - Agile Professional CertificationICAgile - Agile Professional Certification
ICAgile - Agile Professional CertificationJust Digital
 
O futuro do conteúdo e do CMS
O futuro do conteúdo e do CMSO futuro do conteúdo e do CMS
O futuro do conteúdo e do CMSJust Digital
 
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...Just Digital
 
Palestra agile-brazil-2015-o-agile-e-o-executivo
Palestra agile-brazil-2015-o-agile-e-o-executivoPalestra agile-brazil-2015-o-agile-e-o-executivo
Palestra agile-brazil-2015-o-agile-e-o-executivoJust Digital
 
Mapeando User Stories - User story mapping
Mapeando User Stories - User story mappingMapeando User Stories - User story mapping
Mapeando User Stories - User story mappingJust Digital
 
Como manter uma empresa 100% ágil?
Como manter uma empresa 100% ágil?Como manter uma empresa 100% ágil?
Como manter uma empresa 100% ágil?Just Digital
 
Liberte-se do seu cargo
Liberte-se do seu cargoLiberte-se do seu cargo
Liberte-se do seu cargoJust Digital
 
Comunidades de Prática
Comunidades de PráticaComunidades de Prática
Comunidades de PráticaJust Digital
 
Organização de times ágeis
Organização de times ágeisOrganização de times ágeis
Organização de times ágeisJust Digital
 
Os fantasmas do texto passado: Como perder o medo de escrever
Os fantasmas do texto passado: Como perder o medo de escreverOs fantasmas do texto passado: Como perder o medo de escrever
Os fantasmas do texto passado: Como perder o medo de escreverJust Digital
 
Liderança: É preciso ter um (único) chefe?
Liderança: É preciso ter um (único) chefe?Liderança: É preciso ter um (único) chefe?
Liderança: É preciso ter um (único) chefe?Just Digital
 
Agile Testing no Drupal
Agile Testing no DrupalAgile Testing no Drupal
Agile Testing no DrupalJust Digital
 
Palestra Drupal - Campus Party 2014
Palestra Drupal - Campus Party 2014Palestra Drupal - Campus Party 2014
Palestra Drupal - Campus Party 2014Just Digital
 
Palestra Drupal Picchu 2014
Palestra Drupal Picchu 2014Palestra Drupal Picchu 2014
Palestra Drupal Picchu 2014Just Digital
 
Responsive ou Adaptive Design - Just Digital
Responsive ou Adaptive Design - Just DigitalResponsive ou Adaptive Design - Just Digital
Responsive ou Adaptive Design - Just DigitalJust Digital
 
Apresentacao Google Search Appliance - Just Digital - Nov2013
Apresentacao Google Search Appliance - Just Digital - Nov2013Apresentacao Google Search Appliance - Just Digital - Nov2013
Apresentacao Google Search Appliance - Just Digital - Nov2013Just Digital
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
AngularJS - Just Digital
AngularJS - Just DigitalAngularJS - Just Digital
AngularJS - Just DigitalJust Digital
 
Palestra sobre Agile e Liderança - Just Digital
Palestra sobre Agile e Liderança - Just DigitalPalestra sobre Agile e Liderança - Just Digital
Palestra sobre Agile e Liderança - Just DigitalJust Digital
 

Plus de Just Digital (20)

ICAgile - Agile Professional Certification
ICAgile - Agile Professional CertificationICAgile - Agile Professional Certification
ICAgile - Agile Professional Certification
 
O futuro do conteúdo e do CMS
O futuro do conteúdo e do CMSO futuro do conteúdo e do CMS
O futuro do conteúdo e do CMS
 
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...
A importância de contribuir para comunidades OpenSource - Drupal - Natura Dru...
 
Palestra agile-brazil-2015-o-agile-e-o-executivo
Palestra agile-brazil-2015-o-agile-e-o-executivoPalestra agile-brazil-2015-o-agile-e-o-executivo
Palestra agile-brazil-2015-o-agile-e-o-executivo
 
Mapeando User Stories - User story mapping
Mapeando User Stories - User story mappingMapeando User Stories - User story mapping
Mapeando User Stories - User story mapping
 
Como manter uma empresa 100% ágil?
Como manter uma empresa 100% ágil?Como manter uma empresa 100% ágil?
Como manter uma empresa 100% ágil?
 
Liberte-se do seu cargo
Liberte-se do seu cargoLiberte-se do seu cargo
Liberte-se do seu cargo
 
Teoria dos jogos
Teoria dos jogosTeoria dos jogos
Teoria dos jogos
 
Comunidades de Prática
Comunidades de PráticaComunidades de Prática
Comunidades de Prática
 
Organização de times ágeis
Organização de times ágeisOrganização de times ágeis
Organização de times ágeis
 
Os fantasmas do texto passado: Como perder o medo de escrever
Os fantasmas do texto passado: Como perder o medo de escreverOs fantasmas do texto passado: Como perder o medo de escrever
Os fantasmas do texto passado: Como perder o medo de escrever
 
Liderança: É preciso ter um (único) chefe?
Liderança: É preciso ter um (único) chefe?Liderança: É preciso ter um (único) chefe?
Liderança: É preciso ter um (único) chefe?
 
Agile Testing no Drupal
Agile Testing no DrupalAgile Testing no Drupal
Agile Testing no Drupal
 
Palestra Drupal - Campus Party 2014
Palestra Drupal - Campus Party 2014Palestra Drupal - Campus Party 2014
Palestra Drupal - Campus Party 2014
 
Palestra Drupal Picchu 2014
Palestra Drupal Picchu 2014Palestra Drupal Picchu 2014
Palestra Drupal Picchu 2014
 
Responsive ou Adaptive Design - Just Digital
Responsive ou Adaptive Design - Just DigitalResponsive ou Adaptive Design - Just Digital
Responsive ou Adaptive Design - Just Digital
 
Apresentacao Google Search Appliance - Just Digital - Nov2013
Apresentacao Google Search Appliance - Just Digital - Nov2013Apresentacao Google Search Appliance - Just Digital - Nov2013
Apresentacao Google Search Appliance - Just Digital - Nov2013
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
AngularJS - Just Digital
AngularJS - Just DigitalAngularJS - Just Digital
AngularJS - Just Digital
 
Palestra sobre Agile e Liderança - Just Digital
Palestra sobre Agile e Liderança - Just DigitalPalestra sobre Agile e Liderança - Just Digital
Palestra sobre Agile e Liderança - Just Digital
 

Smacss e-css-faz-bem

  • 1. SMACSS e CSS faz BEM! By Wellington Dutra Developer
  • 2. CSS é uma bagunça! Não importa o quanto você acha que o seu CSS é limpo, organizado e comentado; se você usa pré-processadores (SASS, LESS) ou se você acredita em Deus. O resultado final sempre é uma bagunça. Admita!
  • 5. Como organizar? Existem algumas técnicas: OOCSS DRY CSS BEM SMACSS BEM e SMACSS
  • 6. Mas antes, para o seu BEM, conheça a Abstração
  • 7. Abstrair o layout em componentes/módulos ● Não levar em conta a página como um todo; ● Encontrar padrões de design e disposição de elementos; ● Aplicar estilos orientados a componentes.
  • 8.
  • 9. Who the f*ck is BEM?
  • 10. BEM - O que significa? De onde vem? Block Element Modifier é um padrão de nomenclatura para seletores CSS, criado pelos caras da Yandex, uma empresa de internet famosa na Europa.
  • 11. BEM - Benefícios ● Facilita a compreensão da função de um determinado seletor CSS, simplesmente analisando o nome desse seletor; ● Ótimo para quem trabalha em times; ● Manutenção facilitada, mesmo depois de muito tempo sem contato com o código; ● Pequenas mudanças não alteram o que já está implementando, diminuindo a chance de BUGs;
  • 12. BEM - Estrutura .block__element--modifier ● .block é o nível de abstração mais alto de um componente. O que podemos entender como o container, wrapper. É a classe pai de um componente. Ex.: .artigo, .slider; ● __element é o elemento filho de um componente. Podemos ter mais de um elemento, e ainda elementos dentro de elementos. Ex.: .artigo__titulo, .artigo__imagem__creditos; ● --modifier é uma característica que um elemento ou bloco pode ter que o diferencia do padrão. Ex.: .artigo--destacado, .artigo__imagem--thumb
  • 13. BEM - Estrutura .block__element--modifier ● __ Dois underscores são usados para separar a classe pai de seus elementos filho; ● -- Dois hífens são usados para separar a classe pai ou um elemento filho de um modificador;
  • 14. BEM - Exemplo .human {} .human__head {} .human__head__eyes {} .human__head__eyes__eye {} .human__head__eyes__eye--left {} .human__head__eyes__eye--right {}
  • 15. BEM, sem limites! Não há limites para o nome de uma classe, e o equilíbrio depende do nível de abstração que você aplicar ao seu componente.
  • 16. BEM - Como usar, na prática Após a abstração dos componentes de um layout, o próximo passo é criar a marcação e as classes: ● Quanto mais abstração, melhor; ● Quanto mais independente for o componente do contexto em que está, melhor; Essas regras são essenciais, pois o componente pode ser reutilizado em qualquer contexto com pouca ou nenhuma modificação de estrutura.
  • 17. BEM - Como usar, na prática | Blocos e Elementos .articles {} .articles__article {} .articles__article__title {} .articles__article__subtitle {} .articles__article__image {} .articles__article__summary {} .articles__article__more {}
  • 18. BEM - Como usar, na prática | Modificadores .articles {} .articles__article--short {} .articles__article__image--thumb {} .articles__article__summary--short {}
  • 19. BEM - Como usar, na prática | HTML
  • 20. BEM - Como usar, na prática Como usar o BEM com SASS?
  • 21. BEM - Como usar, na prática | SASS .article { &__article { &--short {} &__title {} &__subtitle {} &__image } &--thumb {} } &__summary { &--short {} } &__more {} } }
  • 22. BEM - Como usar, na prática É possível facilitar ainda mais! Como? Usando @mixins! xD
  • 23. BEM - Como usar, na prática | @mixin @mixin element($element) { &__#{$element} { @content; } } @mixin modifier($modifier) { &--#{$modifier} { @content; } }
  • 24. BEM - Como usar, na prática | @mixin .article { @include element(article) { @include modifier(short) {} @include element(title) {} @include element(subtitle) {} @include element(image) { @include modifier(thumb) {} } @include element(summary) { @include modifier(short) {} } @include element(more) {} } }
  • 25. BEM - Contradição? Mas e quanto a esses seletores profundamente aninhados no padrão BEM? Esse sujeito não respeita a regra de especificidade máxima de 3 níveis para um seletor CSS?
  • 26. BEM - Contradição? RESPEITA! MAIS DO QUE VOCÊ! #fkdk
  • 27. BEM - CSS compilado.
  • 28. BEM - Conclusão BEM é a melhor forma de estruturar componentes e estilos. É flexível, de fácil entendimento e sua implementação não é complexa.
  • 29. A lot of SMACSS!
  • 30. SMACSS - Smacks?! <3 Scalable and Modular Architecture for CSS não é um framework, nem uma biblioteca, mas sim um guia para estruturar seus estilos de maneira inteligente e escalonável. Não importa o tamanho do projeto, esse padrão de organização combinado com o BEM pode facilitar e agilizar ainda mais o desenvolvimento e manutenção do seu código.
  • 31. SMACSS - Estrutura Estrutura de diretórios usando SMACSS:
  • 32. SMACSS - Estrutura | Diretório base base: Neste diretório, são colocados os arquivos com os estilos para elementos base, por exemplo: body, p, a, ul, span. Arquivos de CSS reset também devem ser colocados nete.
  • 33. SMACSS - Estrutura | Diretório base
  • 34. SMACSS - Estrutura | Diretório layout layout: Estilos relacionados a estrutura de templates, por exemplo, um sistema de grid, estilos de estrutura de regiões genéricas de uma página, como .header, .footer, . articles, .secondary-articles, .wrapper, .sidebar.
  • 35. SMACSS - Estrutura | Diretório layout
  • 36. SMACSS - Estrutura | Diretório modules/components modules/components: Subdiretórios podem ser definidos para separar cada componente, por exemplo: dentro do diretório article, podemos abstrair ainda mais os elementos e criar uma _partial para cada um deles. Isso depende do nível de abstração que você aplicar. Quanto mais complexo o componente, mais sentido faz usar subdiretórios.
  • 37. SMACSS - Estrutura | Diretório modules/components
  • 38. SMACSS - Estrutura | Diretório states states: Diretório opcional. Estilos referentes aos estados de cada um de seus componentes. :hover, :active, disabled, focus…
  • 39. SMACSS - Estrutura | Diretório states
  • 40. SMACSS - Estrutura | Diretório theme theme: Diretório opcional. Estilos de fontes e cores. Você pode dividir os temas por pasta. font-family, color, background-color...
  • 41. SMACSS - Estrutura | Diretório utilities utilities: Diretório opcional. @mixins e @functions
  • 42. SMACSS - Estrutura | Diretório utilities
  • 43. SMACSS - Estrutura | Diretório shame shame: Diretório opcional. Hacks para o IE, !important e coisas vergonhosas que temos que fazer de vez enquando. xD
  • 44. SMACSS - Como compilar tudo num CSS boladão? Usando uma ruby gem chamada sass-globbing ● Na raiz do seu diretório sass, crie um arquivo .scss que importará os arquivos de todas as pastas criadas seguindo o modelo do SMACSS; ● A desvantagem é o tempo que a compilação pode levar, dependendo da quantidade de arquivos. São segundos, mas se você usa livereload, vai sentir a diferença.
  • 45. SMACSS - Como compilar tudo num CSS boladão? Usando arquivos de índice: ● Dentro de cada um dos diretórios definidos seguindo o SMACSS, crie uma _partial chamada _index.scss, e nesse arquivo, importe todos as outras _partials onde se encontra; ● Na raiz do diretório sass, crie um arquivo styles.scss e importe todos as parciais _index.scss de cada um dos diretórios.
  • 46. SMACSS - Como compilar tudo num CSS boladão?
  • 48. Organizar para agilizar! Organização é a chave para evitar problemas graves em projetos de Frontend. A maioria dos BUGs gerados são por culpa da falta de organização e padronização dos projetos.
  • 49. Isso é tudo, pessoal! Amém?!