O documento descreve o framework de estilos SUIT CSS, apresentando suas convenções de nomenclatura para classes. As convenções dividem classes em Utilities, para propriedades estruturais aplicáveis a qualquer elemento, e Components, para elementos específicos. Utilities usam prefixos como "u-" e siglas para breakpoint, enquanto Components usam nomes de classe em UpperCamelCase separados por hífen para indicar modificadores e descendentes.
8. Seletores de tags provavelmente foram os primeiros que usamos
1 <!-- index.html -->
2 <p>Hello World</p>
1 /* index.css */
2 p {
3 text-align: center;
4 }
https://developer.mozilla.org/pt-PT/docs/Web/CSS/Como_come%C3%A7ar/Seletores
14. Avançamos e mais
necessidades aparecem
Organização do Código
Reaproveitamento de código
Comunicação clara e sem ruídos
Coesão e coerência, principalmente numa equipe
Agilidade
15. ?
“Como eu devo chamar isso?”
“Qual a melhor forma de reaproveitar esse código?“
“Droga essa não era a melhor forma!”
“Porque Fulano fez isso?”
…
17. OOCSS
Object Oriented CSS
Objeto CSS
Propriedades de Estrutura X Propriedades de Skin
O local do objeto não manda aqui!
Sem nesting.
Variações são extensões de objetos base
21. Mas o modificador não era
pra ser “--" ?
“--" é erroneamente atribuído ao BEM
https://en.bem.info/method/naming-convention/
22. E se unirmos pontos
fortes de cada um?
Base do OOCSS + Variação do BEM + States do SMACSS
23.
24. — Nicolas Gallagher (@necolas)
“SUIT CSS is a reliable and testable styling
methodology for component-based UI
development. A collection of CSS packages and
build tools are available as modules. SUIT CSS
plays well with React, Ember, Angular, and other
component-based approaches to UI
development.”
25. O que vamos abordar aqui
são as convenções de
nomenclatura do SUIT CSS!
26.
27. SUIT CSS naming
conventions
Nomes de classes estruturadas
Hífens significativos (olha o preconceito!)
CamelCase (lowerCamelCase e UpperCamelCase)
Dividido em duas grandes categorias: Utilities e
Components
https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md
32. Namespace
É opcional e usado para evitar potenciais coflitos
1 .twt-Button { /* ... */ }
2 .twt-Tabs { /* ... */ }
[<namespace>-]<ComponentName>[--modifierName|-descendentName]
33. ComponentName
Deve ser escrito em UpperCamelCase - :’(
1 <article class="MyComponent">
2 ...
3 </article>
1 .MyComponent { /* ... */ }
[<namespace>-]<ComponentName>[--modifierName|-descendentName]
34. Modifiers
Componente modificador é uma classe que altera a
apresentação de um componente base de alguma
forma
1 <button class="Button Button--default" type="button">...</button>
1 /* Core button */
2 .Button { /* ... */ }
3 /* Default button style */
4 .Button--default { /* ... */ }
5 /* Made in BRZ :) */
6 .Button.Button--default { /* ... */ }
[<namespace>-]<ComponentName>[--modifierName|-descendentName]
35. Descendente
Classe ligada a um nó que é descendente de um componente
1 <article class="Tweet">
2 <header class="Tweet-header">
3 <img class="Tweet-avatar" src="{{src}}" alt="{{alt}}">
4 ...
5 </header>
6 <div class="Tweet-bodyText">
7 ...
8 </div>
9 </article>
1 /* Core Component */
2 .Tweet { /* ... */ }
3 /* Descendents */
4 .Tweet-header { /* ... */ }
5 .Tweet-avatar { /* ... */ }
6 .Tweet-bodyText { /* ... */ }
[<namespace>-]<ComponentName>[--modifierName|-descendentName]
36. .is-stateOfComp
Lembra do state do SMACSS?
“.is-stateName” deve ser usado em conjunto
1 <article class="Tweet is-expanded">
2 ...
3 </article>
1 .Tweet { /* ... */ }
2 .Tweet.is-expanded { /* ... */ }