Convenções de nomenclatura

O first.css oferece cinco tipos de seletores:

  • Bloco
  • Elemento
  • Modificador
  • Estado
  • Utilidade

Todos são apresentados no código abaixo:

<div class="christmas-tree">
    <div class="christmas-tree--star is-active">
        <img src="shine.png" />
    </div>
    <ul class="christmas-tree--lights">
        <li class="christmas-tree--light mod-red"><svg /></li>
        <li class="christmas-tree--light mod-green"><svg /></li>
        <li class="christmas-tree--light mod-blue"><svg /></li>
    </ul>
</div>

Bloco

Independente, este seletor tem o nível mais alto. Deve representar um contâiner.

Exemplo

.christmas-tree

Elemento

Um seletor dependente de um Bloco. Prefixado por -- antes do nome do Bloco.

Exemplo

.christmas-tree--lights

Modificador

Prefixado por .mod-. Procure criar modificadores genéricos, no nível um, que sejam aplicáveis a qualquer elemento. Mas se você precisar de algo super específico, eu tenho boas notícias: Este seletor (e o de Estado) são os único seletores que podem estar abaixo de outro seletor. Uma boa ideia é juntar todos os seus modificadores em uma única folha de estilo. Assim, antes de criar um novo, você pode se perguntar:

Eu já não fiz um modificador pra isso?

Cheque a lista e, caso a resposta seja negativa, crie um novo.

Exemplos
.mod-green
.mod-bordered
.mod-no-icon

Estado

Prefixado por .is-. O seletor de estado controla o estado de um elemento e a interação do usuário. Este tipo de seletor casa muito bem com Javascript. O Estado (assim como um Modificador) pode estar abaixo de outro seletor. E é o ÚNICO seletor onde é permitido o uso de !importante. Só use nele, ok?

Exemplos
.is-hidden
.is-active
.is-current
.is-collapsed
.is-disabled

Utilidade

Prefixado por .u-. Para classes genéricas reutilizáveis.

Exemplos
.u-clearfix
.u-responsive