Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Construindo um framework CSS

Diego Eis
September 02, 2013

Construindo um framework CSS

Construir um framework é basicamente escrever o CSS do jeito certo, ou seja, escrever código sem dependências, modular, leve e altamente documentado.

Palestra feita pela primeira vez na QCon 2013.

Diego Eis

September 02, 2013
Tweet

More Decks by Diego Eis

Other Decks in Programming

Transcript

  1. CONTROLE Um erro pode ser resolvido para todos os sistemas.

    Uma atualização afeta todos os projetos.
  2. CURVA DE APRENDIZADO Quando há alguém novo na equipe, a

    curva de aprendizado não pode ser longa.
  3. POR QUE EXISTEM OUTROS NO MERCADO Não reinvente a roda

    se você não tem um problema específico para resolver.
  4. colors.css print.css etc... layout reset.css fonts.css base.css etc... base grids.css

    etc... structure buttons.css collapse.css sliders.css header.css etc... modules
  5. // // Manifest // @import “config” @import “structure/grid” @import “base/functional-classes”

    @import “base/reset” @import “base/mixins” @import “base/extends” @import “base/base” @import “base/fonts” @import “base/icons” @import “base/typography” @import “modules/header” @import “modules/footer” @import “modules/sidebar” @import “modules/collapse” @import “modules/tabs” @import “modules/buttons” @import “layout/colors/colors”
  6. .btn .btn .btn-large .btn .btn-large .btn-primary .btn .btn-large .btn-primary .ico-star

    cuidado para não misturar informação com formatação.
  7. { ! margin-right: 0; ! padding-right: 0; ! box-shadow: none;

    } a #main_container.menu_style.menu_orientation_horizontal #site_menu .wrapper ul li:last-child
  8. SEPARE O CONTEÚDO DO CONTAINER O estilo do conteúdo não

    pode ser dependente do seu container. Para isso, trate o container como um módulo.
  9. Um título legal Lorem ipsum dolor sit amet, consectetur adipiscing

    elit. Sed mauris erat, egestas sit amet vestibulum quis, pulvinar in sem. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. Fusce suscipit mattis odio, vel scelerisque libero. Donec et ligula eget augue porta blandit sit amet vel dui. um botão Um título legal Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mauris erat, egestas sit amet vestibulum quis, pulvinar in sem. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. Fusce suscipit mattis odio, vel scelerisque libero. Donec et ligula eget augue porta blandit sit amet vel dui. um botão .box-dark .box-uiui
  10. SEPARE A ESTRUTURA DO LAYOUT Você pode ter a liberdade

    de estilizar a estrutura. O container pode ser estruturado de várias formas, com diferentes layouts.
  11. Um título legal Lorem ipsum dolor sit amet, consectetur adipiscing

    elit. Sed mauris erat, egestas sit amet vestibulum quis, pulvinar in sem. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. um botão .grid-4 .box-dark Rosinha, chuchu! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mauris erat, egestas sit amet vestibulum quis, pulvinar in sem. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. um botão .grid-4 .box-uiui Um título legal Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mauris erat, egestas sit amet vestibulum quis, pulvinar in sem. Sed elit leo, tincidunt at tempus quis, gravida sit amet arcu. um botão
  12. [class*="ico-"]:before { display: inline-block; font-family: font-icon; speak: none; } .ico-keyboard:before

    {content: "\22";} .ico-split:before {content: "\23";} .ico-up-dir:before {content: "\24";} .ico-right-dir:before {content: "\25";}
  13. MIXINS PARA CÓDIGOS ESPECIAIS Os mixins te ajudam na repetição

    e na inserção de código especiais. Como fazer setas, código de clearfix e etc.
  14. // ARROWS // Cria setas. // $arrow-color define a cor

    da seta. $arrow-size define o tamanho da seta. @mixin arrow-structure content: "" display: inline-block width: 0 height: 0 @mixin arrow-up($arrow-color, $arrow-size) @include arrow-structure border-left: $arrow-size solid transparent border-right: $arrow-size solid transparent border-bottom: $arrow-size solid $arrow-color @mixin arrow-down($arrow-color, $arrow-size) @include arrow-structure border-left: $arrow-size solid transparent border-right: $arrow-size solid transparent border-top: $arrow-size solid $arrow-color @mixin arrow-right($arrow-color, $arrow-size) @include arrow-structure border-top: $arrow-size solid transparent border-bottom: $arrow-size solid transparent border-left: $arrow-size solid $arrow-color
  15. .title-dropdown " font: .81em verdana font-weight: bolder " color: #2a2a2a

    " &:after " @include arrow-down(#000, 5px) " " margin: 0 0 0 5px
  16. // GRID // Adequando a largura máxima para o GRID

    // Todo o resto é controlado pelo Bootstrap $small-screens: "only screen and (max-width: 980px)" $medium-screens: "only screen and (min-width: 980px)" $big-screens: "only screen and (min-width: 1200px)" // Smartphones e telas pequenas @media #{$small-screens} " // Seu código aqui se houver // Tablets e telas médias @media #{$medium-screens} " // Seu código aqui se houver // Desktops @media #{$big-screens} " // Seu código aqui se houver
  17. // Para mobile (mobile first) .header " border-bottom: 4px solid

    $gray1 " background-color: $gray2 // Desktops @media #{$big-screens} " .header " " border-top: 4px solid #bbb " " background-color: #FFF " " margin-bottom: 10px
  18. // // Cor verde // $theme-color: ".color-green" $color1: #8ecf00 $color2:

    #00a272 $color3: #519700 $color4: #f8fcf0 $color5: #163400
  19. #{$theme-color} " a " " color: $color2 " .header "

    " background-color: $color1 " " border-bottom-color: $color3 " " .menu " " " a " " " border-left-color: $color1
  20. NÃO TRAVE AS DIMENSÕES O grid controla a largura. O

    conteúdo controla a altura. Não trave essas dimensões a não ser que seja extremamente necessário.
  21. LEVE E RÁPIDO Compilar e minificar seu CSS pode não

    ser o bastante. Não tente abraçar todos os browsers. Gracefull Degradation e Progressive Enhancement devem estar no seu sangue.
  22. SIMPLES Simples de aprender. Simples de implementar em um projeto.

    Simples de atualizar. Simples de fazer manutenção.
  23. TENHA POUCAS DEPENDÊNCIAS Não saia colocando plugins e outras depêndencias

    a não ser que sejam úteis para a maioria dos projetos que usarão o framework.
  24. REGRA DA SIMILARIDADE Se dois elementos são muito parecidos para

    estarem em uma página, provavelmente eles são muito parecidos para serem incluídos no framework. Então, escolha um.
  25. MANTENHA UMA DOCUMENTAÇÃO ATUALIZADA A documentação não é importante apenas

    pra você, mas para outras equipes como UX e Back-end. Se o framework for público, outros devs usarão também.
  26. USE PRÉ PROCESSADORES COM CUIDADO Pré processadores podem te ajudar

    em diversas tarefas, mas a sopa de Mixins, Extends e variáveis pode te fazer perder o controle.
  27. RESUMINDO: TUDO SE TRATA DE OOCSS CSS Orientado a Objeto

    não é nada mais do que CSS escrito do jeito certo.