ARQUITETURA CSS 
@rafaelrinaldi
ⓞ https://magnetis.com.br
ⓞ https://magnetis.com.br 
Estamos contratando!
ⓞ https://sp.femug.com 
FEMUG
Disclaimer
Não vou utilizar o gif to Peter Griffin durante a palestra! 
peter_griffin_css.gif
Desenvolver interfaces para a web é muito mais do que um 
problema exclusivo do CSS
Conteúdo 
Apresentação (e agora também animações) 
Comportamento e interações mais complexas 
ⓞ http://alistapart.com/article/understandingprogressiveenhancement
CSS funciona. Poderia ser muito pior!
Técnicas
Técnicas ≠ Frameworks / Bibliotecas
OOCSS 
ⓞ https://github.com/stubbornella/oocss/wiki
Object Oriented CSS 
ⓞ https://github.com/stubbornella/oocss/wiki
Influenciado pelo paradigma da orientação a objetos 
Técnicas → OOCSS
CSS “object” 
Técnicas → OOCSS
Padrão visual que se repete 
e que pode ser abstraído em um contexto próprio 
Técnicas → OOCSS
Separar estrutura de marcação de variações visuais 
Técnicas → OOCSS
Separar o conteúdo seu contexto 
Técnicas → OOCSS
SMACSS 
ⓞ http://smacss.com
Scalable and Modular Architecture for CSS 
ⓞ http://smacss.com
Feito para resolver problemas específicos do Yahoo! Mail 
Técnicas → SMACSS
›❯ Base; 
›❯ Layout; 
›❯ Module; 
›❯ State; 
›❯ Theme. 
Técnicas → SMACSS
SMACSS → Base 
Técnicas → SMACSS → Base
Regras padrão de estilo 
Técnicas → SMACSS → Base
html { 
box-sizing: border-box; 
} 
*, 
*::before, 
*::after { 
box-sizing: inherit; 
} 
body { 
background: #bada55; 
} 
input[type=text] { 
border: 2px solid #444; 
} 
Técnicas → SMACSS → Base
SMACSS → Layout 
Técnicas → SMACSS → Layout
›❯ Utilizado por elementos fixos da aplicação; 
›❯ Seletor único, não reutilizável; 
›❯ Variações são representadas por classes com o prefixo l . 
Técnicas → SMACSS → Layout
#header { 
font-size: 2em; 
color: fuchsia; 
width: 100%; 
height: 15em; 
line-height: 1.5; /* dica: não precisa especificar unidade aqui */ 
} 
#sidebar { 
font-size: .75em; 
color: gray; 
float: right; 
} 
.l-inverse #sidebar { 
float: left; 
} 
Técnicas → SMACSS → Layout
SMACSS → Modules 
Técnicas → SMACSS → Modules
›❯ Trechos de código reutilizáveis; 
›❯ Partes modulares do design; 
›❯ Padrões. 
Técnicas → SMACSS → Modules
SMACSS → State 
Técnicas → SMACSS → State
›❯ Como os módulos irão se apresentar em estados específicos; 
›❯ Representado por classes com o prefixo is . 
Técnicas → SMACSS → State
.sidebar.is-expanded { 
opacity: 1; 
} 
.button.is-disabled { 
cursor: not-allowed; 
background: lightgray; 
opacity: .75; 
pointer-events: none; /* capeta */ 
} 
Técnicas → SMACSS → State
SMACSS → Theme 
Técnicas → SMACSS → Theme
Utilizado apenas em aplicações que possuem 
opções de variação visual 
Técnicas → SMACSS → Theme
/* No arquivo do componente botão */ 
.button { 
border: 1px solid; 
} 
/* No arquivo de tema do botão */ 
.button { 
border-color: fuchsia; 
background: seagreen; 
font-family: 'Ubuntu Mono', monospace; 
} 
Técnicas → SMACSS → Theme
BEM 
ⓞ http://bem.info
Block Element Modifier 
ⓞ http://bem.info
Feito para resolver problemas específicos do Yandex 
Técnicas → BEM
›❯ Facilitar a manutenção de projetos de longa duração; 
›❯ Facilidade de entendimento do código; 
›❯ Diminuir curva de aprendizado em novos membros do time; 
›❯ Reutilização de código. 
Técnicas → BEM
BEM → Block 
Técnicas → BEM → Block
Entidade independente que é capaz de conter outros blocos 
Técnicas → BEM → Block
Técnicas → BEM → Block
Técnicas → BEM → Block
BEM → Element 
Técnicas → BEM → Element
›❯ Parte de um bloco com uma função específica; 
›❯ Não possui um contexto próprio. 
Técnicas → BEM → Element
Técnicas → BEM → Element
Técnicas → BEM → Element
BEM → Modifier 
Técnicas → BEM → Modifier
Uma propriedade de um bloco ou elemento 
que altera seu comportamento 
Técnicas → BEM → Modifier
Técnicas → BEM → Modifier
Técnicas → BEM → Modifier
BEM → Nomenclatura 
Técnicas → BEM → Nomenclatura
›❯ Utiliza-se hífen para separar palavras em nomes longos; 
›❯ Underscore duplo para separar um bloco de um elemento; 
›❯ PascalCase e camelCase são aceitos. 
Técnicas → BEM → Nomenclatura
<ul class="list list_size_big list_type_links"> 
<li class=“list__item”> 
<a href="/meetup-css">Meetup CSS</a> 
</li> 
<li class="list__item list__item_state_active”> 
<a href=“/femug-sp">FEMUG-SP</a> 
</li> 
</ul> 
Técnicas → BEM → Nomenclatura
SUIT CSS 
ⓞ https://suitcss.github.io
Criado por desenvolvedores do Twitter 
numa tentativa de mudar para uma arquitetura 
baseada em componentes 
Técnicas → SUIT CSS
SUIT CSS → Nomenclatura 
Técnicas → SUIT CSS → Nomenclatura
›❯ Utiliza-se camelCase para separar palavras em nomes longos; 
›❯ Utilitários devem começar com o prefixo u . 
Técnicas → SUIT CSS → Nomenclatura
/* Definição de um componente */ 
.MyComponent {} 
/* Definição de um estado */ 
.MyComponent.is-animating {} 
/* Definição de um modificador */ 
.MyComponent--modifier {} 
/* Definição de subelementos */ 
.MyComponent-part {} 
.MyComponent-anotherPart {} 
Técnicas → SUIT CSS → Nomenclatura
<div class="u-cf"> 
<a class="u-floatLeft" href="{{url}}"> 
<img class="u-block" src="{{src}}" alt=""> 
</a> 
<p class="u-sizeFill u-textBreak"> 
</p> 
</div> 
Técnicas → SUIT CSS → Nomenclatura
/* Faz o inline de imports procurando por libs instaladas via NPM */ 
@import "normalize.css"; 
/* Atalhos para lidar com media queries */ 
@custom-media --wide-screen (min-width: 80em); 
/* Valores default */ 
:root { 
--base-font-size: 16px; 
} 
@media (--wide-screen) { 
html { 
/* Utiliza Autoprefixer para lidar c/ vendor prefixes por padrao */ 
font-size: calc(var(--base-font-size) * 2); 
} 
} 
Técnicas → SUIT CSS → Nomenclatura
ⓞ https://github.com/suitcss/components
Outras abordagens
ⓞ http://www.csstyle.io
Utiliza mixins de Sass para definir estilos 
Outras Abordagens → csstyle
<a class="button --action +rounded +glass"> 
Register Now 
<span class="button__icon --rocket"></span> 
</a> 
Outras Abordagens → csstyle
<a class="button --action +rounded +glass"> 
Register Now 
<span class="button__icon --rocket"></span> 
</a> 
Outras Abordagens → csstyle 
Component
<a class="button --action +rounded +glass"> 
Register Now 
<span class="button__icon --rocket"></span> 
</a> 
Outras Abordagens → csstyle 
Option
<a class="button --action +rounded +glass"> 
Register Now 
<span class="button__icon --rocket"></span> 
</a> 
Outras Abordagens → csstyle 
Tweaks
<a class="button --action +rounded +glass"> 
Register Now 
<span class="button__icon --rocket"></span> 
</a> 
Outras Abordagens → csstyle 
Parts
@include component(button) { 
background: #6bd9ed; 
padding: 15px; 
@include option(action){ 
color: #1f1f1f; 
background: #a7e040; 
padding-top: 0; 
} 
@include part(icon){ 
font-size: 34px; 
position: relative; 
top: 10px; 
} 
@include tweak(rounded) { 
border-radius: 10px; 
} 
} 
Outras Abordagens → csstyle
ⓞ https://amcss.github.io
Utiliza atributos HTML para definir estilos 
Outras Abordagens → AMCSS
<!-- Botão padrão --> 
<a am-Button>Inscrever-se no Meetup CSS SP</a> 
<!-- Variações do botão --> 
<a am-Button="primary large”>Informações</a> 
<a am-Button="info small”>Cancelar inscrição</a> 
Outras Abordagens → AMCSS
.btn [am-Button] {} 
.btn-primary [am-Button~="primary"] {} 
.btn-large [am-Button~="large"] {} 
Outras Abordagens → AMCSS
ⓞ http://uilang.com
Uma linguagem própria para lidar com interface 
Outras Abordagens → uilang
<!doctype html> 
<title>Exemplo uilang</title> 
<script src=uilang.js></script> 
<style> 
/* Definição de estilos e transições */ 
#notification { 
transition: .8s 
} 
#notification.hidden { 
opacity: 0 
} 
</style> 
<div id=notification> 
<p>Você tem três mensagens não lidas.</p> 
<button class=hide>Esconder</button> 
</div> 
<code> 
clicking on ".hide" adds class "hidden" on "#notification" 
</code> 
Outras Abordagens → uilang
ⓞ http://gridstylesheets.org
Utiliza o algoritmo Cassowary Constraint Solver 
para lidar com layouts 
Outras Abordagens → Grid Style Sheets
~Cassowary Constraint Solver~ 
Outras Abordagens → Grid Style Sheets
p { 
color: purple; 
line-height: >= 16; 
line-height: <= ::window[height] / 12; 
} 
#product { 
$col-width: == ::[width] / 12 !require; 
$col-left: == ::[left] + ::[$col-width]; 
.price { 
left: == ::parent[$col-left]; 
width: == ::parent[$col-width]; 
} 
.description { 
left: == ::parent[$col-left] + ::parent[$col-width]; 
} 
} 
.sprite { 
z-index: >= #bg[z-index] >= 50; 
} 
Outras Abordagens → Grid Style Sheets
Depende de um runtime (que roda em um web worker) 
e de um pré-processador 
Outras Abordagens → Grid Style Sheets
ⓞ http://getbootstrap.com/css
Framework CSS à frente de seu tempo 
Outras Abordagens → Bootstrap
Ensinou e popularizou boas práticas 
de arquitetura CSS modular 
Outras Abordagens → Bootstrap
Conceito de helper classes 
Outras Abordagens → Bootstrap
<p class="text-muted"></p> 
<p class="text-primary"></p> 
<p class="text-success"></p> 
<p class="text-info"></p> 
<p class="text-warning"></p> 
<p class="text-danger"></p> 
Outras Abordagens → Bootstrap
Conceito de modificadores incrementais 
Outras Abordagens → Bootstrap
<button type="button" class="btn btn-default">Default</button> 
<button type="button" class="btn btn-primary">Primary</button> 
<button type="button" class="btn btn-success">Success</button> 
<button type="button" class="btn btn-info">Info</button> 
Outras Abordagens → Bootstrap
Conceito de estados 
Outras Abordagens → Bootstrap
<button class="btn btn-primary btn-lg active">Primary button</button> 
<button class="btn btn-default btn-lg" disabled>Button</button> 
Outras Abordagens → Bootstrap
CSS na Magnetis
ⓞ https://github.com/magnetis/styleguide
Uma adaptação das partes que julgamos 
boas em algumas técnicas populares 
CSS na Magnetis
›❯ Conceito de categorização do SMACSS; 
›❯ Conceito de estados do SMACSS; 
›❯ Conceito de elementos do BEM; 
›❯ Conceito de modificadores do SUIT CSS. 
CSS na Magnetis
›❯ Sass com a sintaxe SCSS; 
›❯ Autoprefixer; 
›❯ Sistema de grid Susy; 
›❯ Breakpoint; 
›❯ SVG; 
›❯ Rails (partials & Sprockets = ❤); 
›❯ Bower. 
CSS na Magnetis
/* Componente sidebar */ 
.accordion {} 
/* Componente sidebar no estado expandido */ 
.accordion.is-expanded {} 
/* Modificador `big` do componente botão */ 
.button--big {} 
/* Componente `menu` */ 
.menu {} 
/* Componente `menu-item` */ 
.menu-item {} 
/* Para definir estados, utilizamos `is`, `has`, `should` e `can` */ 
.menu-item.has-icon {} 
/* Elemento `icon` dentro do componente `menu` */ 
.menu-item__icon {} 
CSS na Magnetis
Pontos positivos
Todos no time conseguem falar a mesma língua 
Pontos positivos
Facilita o uso de ferramentas 
e a criação de um guia de estilo 
Pontos positivos
Desenvolvimento de interface baseado em componentes ❤ 
Pontos positivos
Resolve problemas de “depth of applicability” 
Pontos positivos 
profundidade de aplicabilidade
Evita depender de como o markup está estruturado 
na hora de criar estilos 
Pontos positivos
<style> 
navigation ul li a { 
color: #c0ffee; /* valores hexadecimais sempre em minúsculo, pfv */ 
} 
</style> 
<navigation> 
<ul> 
<li><a href="/meetup-css">Meetup CSS</a></li> 
<li><a href="/femug-sp">FEMUG-SP</a></li> 
</ul> 
</navigation> 
Pontos positivos
<style> 
.navigation-list-link { 
color: #coffee; 
} 
</style> 
<navigation> 
<ul> 
<li> 
<a class="navigation-list-link" href="/meetup-css">Meetup CSS</a> 
</li> 
<li> 
<a class="navigation-list-link" href=“/femug-sp">FEMUG-SP</a> 
</li> 
</ul> 
</navigation> 
Pontos positivos
A ideia de componentes pequenos e com pouca responsabilidade 
evita problemas de performance na renderização da página e 
também problemas com especificidade de seletores 
Pontos positivos
Navegadores começam a renderizar a página 
antes mesmo do documento estar completamente carregado, 
fazendo uma leitura da direita pra esquerda 
Pontos positivos
Evitar excesso de detalhes nos seletores 
é uma boa prática 
Pontos positivos
ul#menu > li { 
text-align: right; 
} 
Pontos positivos
Força uma análise contextual antes de programar 
Pontos positivos
Maior flexibilidade na hora de lidar com design responsivo 
Pontos positivos
Não existe bala de prata
Have a convention, document it, and stick to it. 
“ 
Não existe bala de prata
ⓞ http://www.shopify.com
<div class="nav__bar is-moved-by-drawer headroom headroom--verytop 
headroom--top"> 
<div class="nav nav--main" id="ShopifyMainNav"> 
<nav class="page-width"> 
<button type="button" class="icon nav__hamburger"> 
<span class="visuallyhidden">Mobile Navigation</span> 
</button> 
<div class="nav__logo-wrapper"> 
<a class="icon nav__logo--full-color" href="/"> 
<span class="visuallyhidden">Home</span> 
</a> 
</div> 
</nav> 
</div> 
</div> 
Não existe bala de prata
Não existe bala de prata
Não existe bala de prata
Pense no seu time na hora de tomar decisões de arquitetura 
Não existe bala de prata
Documente seu código! 
Não existe bala de prata
/* ================================================================= 
Grid layout 
================================================================= */ 
/** 
* Column layout with horizontal scroll. 
* 
* This creates a single row of full-height, non-wrapping columns that can 
* be browsed horizontally within their parent. 
* 
* Example HTML: 
* 
* <div class="grid"> 
* <div class="cell cell-3"></div> 
* <div class="cell cell-3"></div> 
* <div class="cell cell-3"></div> 
* </div> 
*/ 
Não existe bala de prata
Coisas mudam. O tempo todo. 
Não existe bala de prata
Seu código precisa ser flexível e adaptável 
Não existe bala de prata
Foque em processos e resultados, 
não em ferramentas ou frameworks 
Não existe bala de prata
Muito obrigado 
@rafaelrinaldi

Arquitetura CSS

  • 1.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
    Não vou utilizaro gif to Peter Griffin durante a palestra! peter_griffin_css.gif
  • 8.
    Desenvolver interfaces paraa web é muito mais do que um problema exclusivo do CSS
  • 9.
    Conteúdo Apresentação (eagora também animações) Comportamento e interações mais complexas ⓞ http://alistapart.com/article/understandingprogressiveenhancement
  • 10.
    CSS funciona. Poderiaser muito pior!
  • 11.
  • 12.
  • 13.
  • 14.
    Object Oriented CSS ⓞ https://github.com/stubbornella/oocss/wiki
  • 15.
    Influenciado pelo paradigmada orientação a objetos Técnicas → OOCSS
  • 16.
  • 17.
    Padrão visual quese repete e que pode ser abstraído em um contexto próprio Técnicas → OOCSS
  • 18.
    Separar estrutura demarcação de variações visuais Técnicas → OOCSS
  • 19.
    Separar o conteúdoseu contexto Técnicas → OOCSS
  • 20.
  • 21.
    Scalable and ModularArchitecture for CSS ⓞ http://smacss.com
  • 22.
    Feito para resolverproblemas específicos do Yahoo! Mail Técnicas → SMACSS
  • 23.
    ›❯ Base; ›❯Layout; ›❯ Module; ›❯ State; ›❯ Theme. Técnicas → SMACSS
  • 24.
    SMACSS → Base Técnicas → SMACSS → Base
  • 25.
    Regras padrão deestilo Técnicas → SMACSS → Base
  • 26.
    html { box-sizing:border-box; } *, *::before, *::after { box-sizing: inherit; } body { background: #bada55; } input[type=text] { border: 2px solid #444; } Técnicas → SMACSS → Base
  • 27.
    SMACSS → Layout Técnicas → SMACSS → Layout
  • 28.
    ›❯ Utilizado porelementos fixos da aplicação; ›❯ Seletor único, não reutilizável; ›❯ Variações são representadas por classes com o prefixo l . Técnicas → SMACSS → Layout
  • 29.
    #header { font-size:2em; color: fuchsia; width: 100%; height: 15em; line-height: 1.5; /* dica: não precisa especificar unidade aqui */ } #sidebar { font-size: .75em; color: gray; float: right; } .l-inverse #sidebar { float: left; } Técnicas → SMACSS → Layout
  • 30.
    SMACSS → Modules Técnicas → SMACSS → Modules
  • 31.
    ›❯ Trechos decódigo reutilizáveis; ›❯ Partes modulares do design; ›❯ Padrões. Técnicas → SMACSS → Modules
  • 32.
    SMACSS → State Técnicas → SMACSS → State
  • 33.
    ›❯ Como osmódulos irão se apresentar em estados específicos; ›❯ Representado por classes com o prefixo is . Técnicas → SMACSS → State
  • 34.
    .sidebar.is-expanded { opacity:1; } .button.is-disabled { cursor: not-allowed; background: lightgray; opacity: .75; pointer-events: none; /* capeta */ } Técnicas → SMACSS → State
  • 35.
    SMACSS → Theme Técnicas → SMACSS → Theme
  • 36.
    Utilizado apenas emaplicações que possuem opções de variação visual Técnicas → SMACSS → Theme
  • 37.
    /* No arquivodo componente botão */ .button { border: 1px solid; } /* No arquivo de tema do botão */ .button { border-color: fuchsia; background: seagreen; font-family: 'Ubuntu Mono', monospace; } Técnicas → SMACSS → Theme
  • 38.
  • 39.
    Block Element Modifier ⓞ http://bem.info
  • 40.
    Feito para resolverproblemas específicos do Yandex Técnicas → BEM
  • 41.
    ›❯ Facilitar amanutenção de projetos de longa duração; ›❯ Facilidade de entendimento do código; ›❯ Diminuir curva de aprendizado em novos membros do time; ›❯ Reutilização de código. Técnicas → BEM
  • 42.
    BEM → Block Técnicas → BEM → Block
  • 43.
    Entidade independente queé capaz de conter outros blocos Técnicas → BEM → Block
  • 44.
  • 45.
  • 46.
    BEM → Element Técnicas → BEM → Element
  • 47.
    ›❯ Parte deum bloco com uma função específica; ›❯ Não possui um contexto próprio. Técnicas → BEM → Element
  • 48.
    Técnicas → BEM→ Element
  • 49.
    Técnicas → BEM→ Element
  • 50.
    BEM → Modifier Técnicas → BEM → Modifier
  • 51.
    Uma propriedade deum bloco ou elemento que altera seu comportamento Técnicas → BEM → Modifier
  • 52.
    Técnicas → BEM→ Modifier
  • 53.
    Técnicas → BEM→ Modifier
  • 54.
    BEM → Nomenclatura Técnicas → BEM → Nomenclatura
  • 55.
    ›❯ Utiliza-se hífenpara separar palavras em nomes longos; ›❯ Underscore duplo para separar um bloco de um elemento; ›❯ PascalCase e camelCase são aceitos. Técnicas → BEM → Nomenclatura
  • 56.
    <ul class="list list_size_biglist_type_links"> <li class=“list__item”> <a href="/meetup-css">Meetup CSS</a> </li> <li class="list__item list__item_state_active”> <a href=“/femug-sp">FEMUG-SP</a> </li> </ul> Técnicas → BEM → Nomenclatura
  • 57.
    SUIT CSS ⓞhttps://suitcss.github.io
  • 58.
    Criado por desenvolvedoresdo Twitter numa tentativa de mudar para uma arquitetura baseada em componentes Técnicas → SUIT CSS
  • 59.
    SUIT CSS →Nomenclatura Técnicas → SUIT CSS → Nomenclatura
  • 60.
    ›❯ Utiliza-se camelCasepara separar palavras em nomes longos; ›❯ Utilitários devem começar com o prefixo u . Técnicas → SUIT CSS → Nomenclatura
  • 61.
    /* Definição deum componente */ .MyComponent {} /* Definição de um estado */ .MyComponent.is-animating {} /* Definição de um modificador */ .MyComponent--modifier {} /* Definição de subelementos */ .MyComponent-part {} .MyComponent-anotherPart {} Técnicas → SUIT CSS → Nomenclatura
  • 62.
    <div class="u-cf"> <aclass="u-floatLeft" href="{{url}}"> <img class="u-block" src="{{src}}" alt=""> </a> <p class="u-sizeFill u-textBreak"> </p> </div> Técnicas → SUIT CSS → Nomenclatura
  • 63.
    /* Faz oinline de imports procurando por libs instaladas via NPM */ @import "normalize.css"; /* Atalhos para lidar com media queries */ @custom-media --wide-screen (min-width: 80em); /* Valores default */ :root { --base-font-size: 16px; } @media (--wide-screen) { html { /* Utiliza Autoprefixer para lidar c/ vendor prefixes por padrao */ font-size: calc(var(--base-font-size) * 2); } } Técnicas → SUIT CSS → Nomenclatura
  • 64.
  • 65.
  • 67.
  • 68.
    Utiliza mixins deSass para definir estilos Outras Abordagens → csstyle
  • 69.
    <a class="button --action+rounded +glass"> Register Now <span class="button__icon --rocket"></span> </a> Outras Abordagens → csstyle
  • 70.
    <a class="button --action+rounded +glass"> Register Now <span class="button__icon --rocket"></span> </a> Outras Abordagens → csstyle Component
  • 71.
    <a class="button --action+rounded +glass"> Register Now <span class="button__icon --rocket"></span> </a> Outras Abordagens → csstyle Option
  • 72.
    <a class="button --action+rounded +glass"> Register Now <span class="button__icon --rocket"></span> </a> Outras Abordagens → csstyle Tweaks
  • 73.
    <a class="button --action+rounded +glass"> Register Now <span class="button__icon --rocket"></span> </a> Outras Abordagens → csstyle Parts
  • 74.
    @include component(button) { background: #6bd9ed; padding: 15px; @include option(action){ color: #1f1f1f; background: #a7e040; padding-top: 0; } @include part(icon){ font-size: 34px; position: relative; top: 10px; } @include tweak(rounded) { border-radius: 10px; } } Outras Abordagens → csstyle
  • 75.
  • 76.
    Utiliza atributos HTMLpara definir estilos Outras Abordagens → AMCSS
  • 77.
    <!-- Botão padrão--> <a am-Button>Inscrever-se no Meetup CSS SP</a> <!-- Variações do botão --> <a am-Button="primary large”>Informações</a> <a am-Button="info small”>Cancelar inscrição</a> Outras Abordagens → AMCSS
  • 78.
    .btn [am-Button] {} .btn-primary [am-Button~="primary"] {} .btn-large [am-Button~="large"] {} Outras Abordagens → AMCSS
  • 79.
  • 80.
    Uma linguagem própriapara lidar com interface Outras Abordagens → uilang
  • 81.
    <!doctype html> <title>Exemplouilang</title> <script src=uilang.js></script> <style> /* Definição de estilos e transições */ #notification { transition: .8s } #notification.hidden { opacity: 0 } </style> <div id=notification> <p>Você tem três mensagens não lidas.</p> <button class=hide>Esconder</button> </div> <code> clicking on ".hide" adds class "hidden" on "#notification" </code> Outras Abordagens → uilang
  • 82.
  • 83.
    Utiliza o algoritmoCassowary Constraint Solver para lidar com layouts Outras Abordagens → Grid Style Sheets
  • 84.
    ~Cassowary Constraint Solver~ Outras Abordagens → Grid Style Sheets
  • 85.
    p { color:purple; line-height: >= 16; line-height: <= ::window[height] / 12; } #product { $col-width: == ::[width] / 12 !require; $col-left: == ::[left] + ::[$col-width]; .price { left: == ::parent[$col-left]; width: == ::parent[$col-width]; } .description { left: == ::parent[$col-left] + ::parent[$col-width]; } } .sprite { z-index: >= #bg[z-index] >= 50; } Outras Abordagens → Grid Style Sheets
  • 86.
    Depende de umruntime (que roda em um web worker) e de um pré-processador Outras Abordagens → Grid Style Sheets
  • 87.
  • 88.
    Framework CSS àfrente de seu tempo Outras Abordagens → Bootstrap
  • 89.
    Ensinou e popularizouboas práticas de arquitetura CSS modular Outras Abordagens → Bootstrap
  • 90.
    Conceito de helperclasses Outras Abordagens → Bootstrap
  • 91.
    <p class="text-muted"></p> <pclass="text-primary"></p> <p class="text-success"></p> <p class="text-info"></p> <p class="text-warning"></p> <p class="text-danger"></p> Outras Abordagens → Bootstrap
  • 92.
    Conceito de modificadoresincrementais Outras Abordagens → Bootstrap
  • 93.
    <button type="button" class="btnbtn-default">Default</button> <button type="button" class="btn btn-primary">Primary</button> <button type="button" class="btn btn-success">Success</button> <button type="button" class="btn btn-info">Info</button> Outras Abordagens → Bootstrap
  • 94.
    Conceito de estados Outras Abordagens → Bootstrap
  • 95.
    <button class="btn btn-primarybtn-lg active">Primary button</button> <button class="btn btn-default btn-lg" disabled>Button</button> Outras Abordagens → Bootstrap
  • 96.
  • 97.
  • 98.
    Uma adaptação daspartes que julgamos boas em algumas técnicas populares CSS na Magnetis
  • 99.
    ›❯ Conceito decategorização do SMACSS; ›❯ Conceito de estados do SMACSS; ›❯ Conceito de elementos do BEM; ›❯ Conceito de modificadores do SUIT CSS. CSS na Magnetis
  • 100.
    ›❯ Sass coma sintaxe SCSS; ›❯ Autoprefixer; ›❯ Sistema de grid Susy; ›❯ Breakpoint; ›❯ SVG; ›❯ Rails (partials & Sprockets = ❤); ›❯ Bower. CSS na Magnetis
  • 101.
    /* Componente sidebar*/ .accordion {} /* Componente sidebar no estado expandido */ .accordion.is-expanded {} /* Modificador `big` do componente botão */ .button--big {} /* Componente `menu` */ .menu {} /* Componente `menu-item` */ .menu-item {} /* Para definir estados, utilizamos `is`, `has`, `should` e `can` */ .menu-item.has-icon {} /* Elemento `icon` dentro do componente `menu` */ .menu-item__icon {} CSS na Magnetis
  • 103.
  • 104.
    Todos no timeconseguem falar a mesma língua Pontos positivos
  • 105.
    Facilita o usode ferramentas e a criação de um guia de estilo Pontos positivos
  • 106.
    Desenvolvimento de interfacebaseado em componentes ❤ Pontos positivos
  • 107.
    Resolve problemas de“depth of applicability” Pontos positivos profundidade de aplicabilidade
  • 108.
    Evita depender decomo o markup está estruturado na hora de criar estilos Pontos positivos
  • 109.
    <style> navigation ulli a { color: #c0ffee; /* valores hexadecimais sempre em minúsculo, pfv */ } </style> <navigation> <ul> <li><a href="/meetup-css">Meetup CSS</a></li> <li><a href="/femug-sp">FEMUG-SP</a></li> </ul> </navigation> Pontos positivos
  • 110.
    <style> .navigation-list-link { color: #coffee; } </style> <navigation> <ul> <li> <a class="navigation-list-link" href="/meetup-css">Meetup CSS</a> </li> <li> <a class="navigation-list-link" href=“/femug-sp">FEMUG-SP</a> </li> </ul> </navigation> Pontos positivos
  • 111.
    A ideia decomponentes pequenos e com pouca responsabilidade evita problemas de performance na renderização da página e também problemas com especificidade de seletores Pontos positivos
  • 112.
    Navegadores começam arenderizar a página antes mesmo do documento estar completamente carregado, fazendo uma leitura da direita pra esquerda Pontos positivos
  • 113.
    Evitar excesso dedetalhes nos seletores é uma boa prática Pontos positivos
  • 114.
    ul#menu > li{ text-align: right; } Pontos positivos
  • 115.
    Força uma análisecontextual antes de programar Pontos positivos
  • 116.
    Maior flexibilidade nahora de lidar com design responsivo Pontos positivos
  • 117.
  • 118.
    Have a convention,document it, and stick to it. “ Não existe bala de prata
  • 119.
  • 120.
    <div class="nav__bar is-moved-by-drawerheadroom headroom--verytop headroom--top"> <div class="nav nav--main" id="ShopifyMainNav"> <nav class="page-width"> <button type="button" class="icon nav__hamburger"> <span class="visuallyhidden">Mobile Navigation</span> </button> <div class="nav__logo-wrapper"> <a class="icon nav__logo--full-color" href="/"> <span class="visuallyhidden">Home</span> </a> </div> </nav> </div> </div> Não existe bala de prata
  • 121.
  • 122.
  • 123.
    Pense no seutime na hora de tomar decisões de arquitetura Não existe bala de prata
  • 124.
    Documente seu código! Não existe bala de prata
  • 125.
    /* ================================================================= Gridlayout ================================================================= */ /** * Column layout with horizontal scroll. * * This creates a single row of full-height, non-wrapping columns that can * be browsed horizontally within their parent. * * Example HTML: * * <div class="grid"> * <div class="cell cell-3"></div> * <div class="cell cell-3"></div> * <div class="cell cell-3"></div> * </div> */ Não existe bala de prata
  • 126.
    Coisas mudam. Otempo todo. Não existe bala de prata
  • 127.
    Seu código precisaser flexível e adaptável Não existe bala de prata
  • 128.
    Foque em processose resultados, não em ferramentas ou frameworks Não existe bala de prata
  • 129.