Skip to content

talentrh/css-style-guide

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 

Repository files navigation

Guia de estilo CSS / Sass

Uma abordagem mais razoável para CSS e Sass

Tabela de conteúdo

  1. Terminologia - Regras - Seletores - Propriedades
  2. CSS - Formato - Comentários - OOCSS e BEM - Seletores ID - JavaScript hooks - Border
  3. Sass - Sintaxe - Ordenação - Variáveis - Mixins - Extend - Seletores agrupados
  4. Estrutura - Normalize - Components - Blocks - Colores

Terminologia

Regras

Uma “declaração de regra” é o nome dado ao seletor (ou grupo de seletores) acompanhados de um grupo de propriedades. Segue um exemplo:

.listing {
  font-size: 18px;
  line-height: 1.2;
}

Seletores

Em uma declaraçao de regra, "seletores" são os bits que determinam quais elementos na árvore de DOM serão estilizados pelas propriedades definidas. Seletores podem coincidir com elementos HTML, assim como classes, ID ou qualquer um de seus atributos. Seguem exemplos de seletores:

.my-element-class {
  /* ... */
}

[aria-hidden] {
  /* ... */
}

Propriedades

Finalmente, propriedades são os elementos selecionados de uma regra de declaração. Propriedades são pares de chave-valor, onde uma regra de declaração pode conter uma ou mais declarações de propriedades. Declaração de propriedades são mostradas a seguir:

/* some selector */ {
  background: #f1f1f1;
  color: #333;
}

CSS

Formato

  • Prefira dashes (-) no lugar de camelCasing em nomes de classes.
    • Underscores (_) e PascalCasing podem ser utilizados caso você use BEM (veja OOCSS e BEM abaixo).
  • Quando usar múltiplos seletores em uma regra de declaração, ponha cada um em uma própria linha.
  • Coloque um espaço antes da abertura de chaves { em declaração de regras.
  • Em propriedades, coloque um espaço depois, mas não antes do caractere : (dois-pontos).
  • Coloque chave de fechamento } de uma regra de declaração em uma nova linha.
  • Coloque linhas em branco entre declarações de regra.

Ruim

.avatar{
    border-radius:50%;
    border:2px solid white; }
.no, .nope, .not_good {
    // ...
}
#lol-no {
  // ...
}

Bom

.avatar {
  border-radius: 50%;
  border: 2px solid white;
}

.one,
.selector,
.per-line {
  // ...
}

Comentários

  • Prefira comentários de linha (// em Sass) para blocos de comentários.
  • Prefira comentários em uma única linha. Evite comentários no final da linha.
  • Escreva comentários detalhados para códigos que não são auto-documentados:
    • Usos do z-index
    • Compatibilidade ou hacks específicos de navegadores

OOCSS e BEM

Nós incentivamos algumas combinações de OOCSS e BEM por três razões:

  • Ajuda a criar relações claras e estritas entre CSS e HTML.
  • Nos ajuda a criar componentes reutilizáveis e que podem ser repostos.
  • Permite menor especificidade e agrupamento.
  • Ajuda na construção de estilos escaláveis.

OOCSS, ou “Object Oriented CSS”, (CSS orientado a objetos) é uma abordagem para escrita de CSS que encoraja você a pensar sobre seus estilos como uma coleçao de "objetos": reutilizáveis, trechos repetitivos que podem ser usados de forma independente em todo o website.

BEM, ou “Block-Element-Modifier”, é uma convenção de nomes para classes em HTML e CSS. Foi originalmente desenvolvido por Yandex com largas bases de códigos e escalabilidade em mente, e pode servir como um sólido conjunto de orientações para implementação OOCSS.

Exemplo

    <article class="ListingCard ListingCard--featured">

      <h1 class="ListingCard__title">Adorable 2BR in the sunny Mission</h1>

      <div class="ListingCard__content">
        <p>Vestibulum id ligula porta felis euismod semper.</p>
      </div>

    </article>
/* ListingCard.css */
.ListingCard { }
.ListingCard--featured { }
.ListingCard__title { }
.ListingCard__content { }
  • .ListingCard é um “bloco” e representa um componente de alto nível
  • .ListingCard__title é um “elemento” e representa um decendente de .ListingCard que ajuda a compor o bloco como inteiro.
  • .ListingCard--featured é um "modificador" e representa um estado diferente ou variação no block .ListingCard.

Seletores ID

Enquanto é possível selecionar elementos por ID em CSS, isto deveria ser considerado um anti-projeto. Seletores ID introduzem um nível alto de especificidade para suas declarações de regras e eles não são reutilizáveis.

Para mais detalhes leia o seguinte artigo do CSS Wizardry sobre como ligar com especificidade.

Border

Utilizar 0 ao invés de none para especificar que um estilo não tem borda.

Ruim

.foo {
  border: none;
}

Bom

.foo {
  border: 0;
}

Sass

Sintaxe

  • Use sintaxe .scss, nunca a original .sass
  • Ordene as declarações e CSS regular em @include logicamente (veja abaixo)

Ordenação de declarações de propriedades

  1. Declaração de propriedades

    Listar todas as declarações de propriedades padrão, tudo que não seja @include ou um seletor agrupado.

    .btn-green {
      background: green;
      font-weight: bold;
      // ...
    }
  2. Declarações @include

    Agrupar @includes no final torna mais fácil a leitura do seletor inteiro.

    .btn-green {
      background: green;
      font-weight: bold;
      @include transition(background 0.5s ease);
      // ...
    }
  3. Seletores agrupados

    Seletores agrupados, se necessário, vão no final e nada vai depois dos mesmo. Adicionar espaços em branco entre suas regras de declaração e seletores agrupados, bem como entre seletores agrupados adjacentes. Aplicar as mesmas regras acima para seus seletores agrupados.

    .btn {
      background: green;
      font-weight: bold;
      @include transition(background 0.5s ease);
    
      .icon {
        margin-right: 10px;
      }
    }

Variáveis

Prefira nomes de variáveis com dash-cased (ex. $my-variable) do que camelCased ou snake_cased. É aceitável adicionar prefíxos em nomes de variáveis que se destinam a ser usadas dentro do mesmo arquivo com um "underscore" (ex. $_my-variable).

Mixins

Mixins devem ser usados para limpar seu código, adicionar clareza ou abstrair complexidade, assim como funções bem nomeadas. Mixins que aceitam nenhum argumento podem ser úteis para isto, mas note que se você não compactar seu payload (ex. gzip) isto pode contribuir para duplicação de código desnecessário nos estilos resultantes.

Seletores agrupados

Não agrupe seletores para mais de três níveis de profundidade!

.page-container {
  .content {
    .profile {
      // STOP!
    }
  }
}

Quando os seletores se tornam muito longos, você provavelmente está escrevendo CSS como:

  • Fortemente aclopado ao HTML (frágil) —OU—
  • Excessivamente específico (poderoso) —OU—
  • Não reutilizável

Estrutura

Normalize

O arquivo normalize.scss contém as configurações padrões do site ex: tipo da fonte, resetar magin/padding, etc.

Components

Novos estilos devem ser criados na pasta components, o padrão para novos arquivos são:

  • Nome iniciar com _.
  • Nome deve conter dashes (-) no lugar de camelCasing.

Ruim

meu-componente.scss
meuComponente.scss
_meuComponente.scss

Bom

_meu-componente.scss

Sempre utilizar uma class única na criação de um componente, essa class também deve ter o mesmo nome do arquivo sem _ e .scss. Sempre que possível, utilize prefixos nos nomes dos componentes, ex: _modal-, _card-, _list-, etc.

RUIM

_new-user.scss

.new-user {
  ...
}

_modal-new-user.scss

.new-user {
  ...
}

BOM

_modal-new-user.scss

.modal-new-user {
  ...
}

Todo o estilo do componente deve ficar dentro da class principal, isso garante que ele não vai prejudicar os demais componentes do site.

Exemplo:

RUIM

_modal-new-user.scss

.modal-new-user {
  ...
}

.title {
  ...
}

BOM

_modal-new-user.scss

.modal-new-user {
  ...

  .title {
    ...
  }
}

Cores

Sempre utilizar a paleta de cores do projeto. Em caso de EXTREMA necessidade, adicionar uma nova cor no arquivo _variables.scss.

About

Uma abordagem mais razoável para CSS e Sass

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published