Escreva CSS sem se preocupar se estilos pré-existentes causarão problemas.
Talita Pagani
@talitapagani
Designer e Front-end na Nexaas
Faz-tudo na Utilizza - Design de Interação
Trabalho com Web há 12 anos
Autora no Tableless e UX.BLOG
Entusiasta de Acessibilidade Web e membro do grupo de especialistas do W3C Brasil
Podem ser mais complexas para aprender (curva de aprendizado)
Sintaxe específica para escrever CSS
Regras nem sempre aplicáveis
Criado por Adam Silver
Não é uma metodologia, mas um guia de boas práticas
Não impede que seja usado em conjunto com alguma outra abordagem
20 minutos de leitura
Tradução autorizada do MaintainableCSS
Sustentável: pode sofrer mudanças sem grande impacto na estrutura geral do estilo.
Escalável: mesmo aumentando de tamanho, o CSS continua sendo de fácil manutenção.
Modular: combinações atômicas para formar uma estrutura complexa.
Classes de fácil leitura
<div class="vermelho pull-left pb3">
<div class="grid row">
<div class="col-xs-4">
<div class="pb3 pb4-ns pt4 pt5-ns
mt4 preto-70 fl-l w-50-1">
<h1 class="f4 fw6 f1-ns
lh-titulo medida mt0">Título</h1>
<p class="f5 f4-ns fw4 b
medida dib-m lh-copy">Parágrafo</p>
</div>
Classes de fácil leitura
<div class="carrinho"></div>
<div class="produto"></div>
<div class="resultadosBusca"></div>
<div class="artigo">
<h1 class="artigo-titulo">Título</h1>
<p class="artigo-paragrafo">Parágrafo</p>
</div>
Classes de fácil leitura
<div class="ui two column stackable center
aligned grid segment">
<div class="column">
<div class="ui button">A</div>
</div>
<div class="ui vertical divider">or</div>
<div class="column">
<div class="teal ui button">B</div>
</div>
</div>
</div>
Semantic UI
Classes de fácil leitura
Cuidado com o DRY e tente reutilizar módulos tangíveis
.classeAuxiliar {
font-weight: 900;
line-height: 1.6em;
background: #CC0000;
}
<p class="carrinho classeAuxiliar">...</p>
<section class="listaProdutos classeAuxiliar">...</section>
Cuidado com o DRY e tente reutilizar módulos tangíveis
.carrinho-selecionado,
.listaProdutos-selecionado {
font-weight: 900;
line-height: 1.6em;
background: #CC0000;
}
.carrinho-selecionado {
border-radius: 50%;
}
<p class="carrinho carrinho-selecionado">...</p>
<section class="listaProdutos listaProdutos-selecionado">...</section>
Facilitando a legibilidade do código
.<módulo>[-<componente>][-<estado>] {}
/* Container do Módulo */
.resultadosBusca {}
/* Componente */
.resultadosBusca-cabecalho {}
/* Estado */
.resultadosBusca-carregando {}
Resultados da Busca
Resultados da Busca
Por que prefixar módulos? Por que não fazer assim?
<div class="carrinho">
<div class="titulo">
/* módulo */
.carrinho {}
/* componente de título para o módulo de carrinho */
.carrinho .titulo {}
Dois problemas:
Partes reutilizáveis de código que evitam seletores encadeados
Seu Carrinho de Compras
Título do Produto
Remover
Título do Produto
Remover
Partes reutilizáveis de código que evitam seletores encadeados
Seu Carrinho de Compras
Título do Produto
Remover
Título do Produto
Remover
Módulo
Partes reutilizáveis de código que evitam seletores encadeados
Seu Carrinho de Compras
Título do Produto
Remover
Título do Produto
Remover
Componentes
Partes reutilizáveis de código que evitam seletores encadeados
<div class="carrinho">
<h1 class="carrinho-titulo">Seu carrinho</h1>
<div class="carrinho-item">
<h3 class="carrinho-tituloProduto">
Título do produto
</h3>
<form>
<input type="submit"
class="carrinho-botaoRemover"
value="Remover">
</form>
</div>
</div>
Partes reutilizáveis de código que evitam seletores encadeados
.carrinho {}
.carrinho-titulo {}
.carrinho-item {}
.carrinho-tituloProduto {}
.carrinho-botaoRemover {}
E se tiver módulos parecidos com algumas diferenças de estrutura, posicionamento, etc?
Então não é o mesmo módulo. São módulos diferentes e deve-se criar outro módulo com outra nomenclatura no CSS.
E botões? São componentes ou módulos?
@mixin button {
background-color: green;
padding: 10px;
color: #fff;
}
.carrinho-botaoRemover,
.outro-botaoLogin,
.outro-botaoExcluir {
@include button;
}
.carrinho-botaoRemover {
float: right;
}
.outro-botaoExcluir {
margin-bottom: 10px;
}
Classes extras para tratar mudanças de estado
Classes auxiliares prefixadas pelo módulo, porque o vazio de um módulo pode ter um estilo diferente do vazio de outro módulo.
<div class="carrinho carrinho-vazio">
.carrinho-vazio {
background-color: #eee;
}
E os atributos ARIA?
Nem todos os estados visuais podem ser representados por um atributo ARIA. Por exemplo, não há atributo para representar temProdutos.
Também, usar um seletor de atributo possui menos suporte. Devemos evitar técnicas que possam excluir usuários.
Use atributos ARIA para tecnologias assistivas, não para estilizar.
Tratando pequenas diferenças em componentes
<div class=”cabecalhoCategoria cabecalhoCategoria--moveis”>
<div class=”cabecalhoCategoria cabecalhoCategoria--tecnologia”>
Tratando pequenas diferenças em componentes
.cabecalhoCategoria {
padding-top: 50px;
padding-bottom: 50px;
/* etc */
}
.cabecalhoCategoria--moveis {
background-image: url(/caminho/para/moveis.jpg);
}
.cabecalhoCategoria--tecnologia {
background-image: url(/caminho/para/tecnologia.jpg);
}
Se você já penou muito com CSS e/ou se trabalha em um time, esse guia pode te ajudar muito
Obrigada!
@talitapagani | contato@talitapagani.com
csssustentavel.com.br
slides.com/talitapagani/csssustentavel