SW Core
SW Core / CSS / Grid

Grid CSS

A grade da página: <div class="l l-3"> põe 3 itens por linha no computador e empilha no celular sozinha. Colunas iguais, proporção (2/3 + 1/3) ou quanto cada item ocupa de 12.

O que é

É o que organiza a página em colunas: 3 cards de serviço lado a lado, conteúdo + barra lateral, galeria de fotos 4 por linha. Você coloca class="l" no bloco de fora (a grade) e escolhe as colunas de três jeitos: colunas iguais (l-3 = 3 por linha), proporção (l-2-1 = uma coluna o dobro da outra) ou cada item diz quanto ocupa de uma régua de 12 partes (co8 + co4). No celular tudo fica um embaixo do outro, sem você fazer nada.

É só CSS (CSS Grid). A grade l tem 12 colunas invisíveis e um espaço médio (16 px) entre os itens. No celular (abaixo de 768 px) cada item ocupa a linha inteira. A partir de 768 px (tablet) as colunas aparecem. Para escolher outra largura de tela, use os sufixos da página Breakpoints (l-3-g, co6-m…). As linhas não precisam ser declaradas: quando a linha enche, o próximo item desce para a de baixo sozinho. Para alinhar poucos itens numa linha (ícone + texto, botões), use Flex, não grade.

Quando usar

  • Cards de serviço, produtos, planos: l l-3.
  • Galeria de fotos: l l-2-m l-4-g (2 no tablet, 4 no computador).
  • Conteúdo + barra lateral: l l-3-1 (3/4 + 1/4).
  • Formulário em 2 colunas com um campo largo: l com co6 nos campos lado a lado e co12 no campo largo.
  • Números do painel (vendas, clientes, pedidos): l l-2-m l-4-g.

Comece aqui

  1. 1

    Coloque o SW Core no <head>. A grade está no arquivo principal.

    <link rel="stylesheet" href="swcore/swcore.min.css">
  2. 2

    l no bloco de fora + quantas colunas. Os filhos viram as colunas.

    Corte
    Barba
    Sobrancelha
    <div class="l l-3">
      <div>Corte</div>
      <div>Barba</div>
      <div>Sobrancelha</div>
    </div>
  3. 3

    Estreite a janela abaixo de 768 px: os três empilham sozinhos.

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Colunas iguais (l-2 a l-6)

Viram colunas a partir de 768 px; no celular, um por linha. l-1 é sempre uma coluna.

1
2
l-1 — sempre 1 por linha
<div class="l l-1">
  <div>1</div>
  <div>2</div>
</div>
1
2
l-2
<div class="l l-2">
  <div>1</div>
  <div>2</div>
</div>
1
2
3
l-3
<div class="l l-3">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
1
2
3
4
l-4
<div class="l l-4">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>
1
2
3
4
5
l-5
<div class="l l-5">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
</div>
1
2
3
4
5
6
l-6
<div class="l l-6">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
</div>

2. Proporção entre duas colunas

Uma coluna maior que a outra: o número diz quantas "partes" cada uma tem. A partir de 768 px.

2 partes
1 parte
l-2-1 — 2/3 + 1/3 (conteúdo + lateral)
<div class="l l-2-1">
  <div>2 partes</div>
  <div>1 parte</div>
</div>
1 parte
2 partes
l-1-2 — 1/3 + 2/3
<div class="l l-1-2">
  <div>1 parte</div>
  <div>2 partes</div>
</div>
3 partes
1 parte
l-3-1 — 3/4 + 1/4
<div class="l l-3-1">
  <div>3 partes</div>
  <div>1 parte</div>
</div>
1 parte
3 partes
l-1-3 — 1/4 + 3/4
<div class="l l-1-3">
  <div>1 parte</div>
  <div>3 partes</div>
</div>

3. Cada item diz quanto ocupa (co1 a co12)

A grade tem 12 partes. Cada filho escolhe quantas ocupa; somando 12, fecha a linha. Vale a partir de 768 px (no celular, linha inteira).

co12
co12 — a linha toda
<div class="l">
  <div class="co12">…</div>
</div>
co6
co6
co6 + co6
<div class="l">
  <div class="co6">…</div>
  <div class="co6">…</div>
</div>
co8
co4
co8 + co4
<div class="l">
  <div class="co8">…</div>
  <div class="co4">…</div>
</div>
co9
co3
co9 + co3
<div class="l">
  <div class="co9">…</div>
  <div class="co3">…</div>
</div>
co4
co8
co4 + co8
<div class="l">
  <div class="co4">…</div>
  <div class="co8">…</div>
</div>
co3
co9
co3 + co9
<div class="l">
  <div class="co3">…</div>
  <div class="co9">…</div>
</div>
co7
co5
co7 + co5
<div class="l">
  <div class="co7">…</div>
  <div class="co5">…</div>
</div>
co10
co2
co10 + co2
<div class="l">
  <div class="co10">…</div>
  <div class="co2">…</div>
</div>
co11
co1
co11 + co1
<div class="l">
  <div class="co11">…</div>
  <div class="co1">…</div>
</div>
co4
co4
co4
co4 + co4 + co4
<div class="l">
  <div class="co4">…</div>
  <div class="co4">…</div>
  <div class="co4">…</div>
</div>
co6
co3
co3
co6 + co3 + co3
<div class="l">
  <div class="co6">…</div>
  <div class="co3">…</div>
  <div class="co3">…</div>
</div>

4. Espaço entre os itens

A grade já vem com 16 px de espaço. Troque com gap-* (régua da página Espaçamento) ou zere com l0.

1
2
3
4
l (padrão) — 16 px <div class="l l-4">…</div>
1
2
3
4
l0 — colado <div class="l l-4 l0">…</div>
1
2
3
4
gap-p — 8 px <div class="l l-4 gap-p">…</div>
1
2
3
4
gap-gg — 48 px <div class="l l-4 gap-gg">…</div>

5. Linhas automáticas

Não precisa declarar linha: numa l-3, a cada 3 itens começa outra. Com co, quando a soma passa de 12 o item desce.

1
2
3
4
5
6
7
l-3 com 7 itens: o 7º desce sozinho para a 3ª linha
<div class="l l-3">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
</div>
co8
co4
co6
co6
l com co: 8 + 4, depois 6 + 6 (a linha fecha ao somar 12)
<div class="l">
  <div class="co8">…</div>
  <div class="co4">…</div>
  <div class="co6">…</div>
  <div class="co6">…</div>
</div>

Tabela de opções

PalavraO que fazExemplo
A grade
lGrade de 12 partes com 16 px de espaço. No celular, um item por linha.class="l"
l0Tira o espaço entre os itens.class="l l-3 l0"
gap-{tam}Outro espaço (pp · p · m · g · gg · xg · xxg).class="l l-3 gap-g"
grdSó "ligar a grade" (display grid), sem as 12 partes — para montar a sua no seu CSS.class="grd"
Colunas iguais (a partir de 768 px)
l-11 coluna, sempre.class="l l-1"
l-2 · l-3 · l-4 · l-5 · l-62 a 6 colunas iguais.class="l l-4"
Proporção (a partir de 768 px)
l-2-12/3 + 1/3.class="l l-2-1"
l-1-21/3 + 2/3.class="l l-1-2"
l-3-13/4 + 1/4.class="l l-3-1"
l-1-31/4 + 3/4.class="l l-1-3"
Colunas em outra largura de tela
l-2-p · l-1-2-p · l-2-1-pA partir de 576 px.class="l l-2-p"
l-2-m · l-3-m · l-1-2-m · l-2-1-mA partir de 768 px.class="l l-3-m"
l-3-g · l-4-gA partir de 992 px.class="l l-2-m l-4-g"
l-4-gg · l-6-ggA partir de 1200 px.class="l l-3-m l-6-gg"
Quanto cada item ocupa (no filho)
co1 … co12Quantas das 12 partes o item ocupa, a partir de 768 px.class="co8"
co1 · co2 · co3 · co4 · co6 · co12 + -pp/-p/-m/-g/-gg/-xgO mesmo, a partir da largura do sufixo (380 · 576 · 768 · 992 · 1200 · 1400).class="co12 co6-p co4-g"

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Painel: números do dia Ao vivo
Vendas hoje

R$ 1.840

Pedidos

37

Clientes novos

9

Ticket médio

R$ 49,70

<div class="l l-2-m l-4-g gap-m">
  <div class="bg-sur bd r-m p-m"><span class="t-pp t-upp ls-w">Vendas hoje</span><p class="t-xg t-txt fw6 mb-0">R$ 1.840</p></div>
  <div class="bg-sur bd r-m p-m"><span class="t-pp t-upp ls-w">Pedidos</span><p class="t-xg t-txt fw6 mb-0">37</p></div>
  <div class="bg-sur bd r-m p-m"><span class="t-pp t-upp ls-w">Clientes novos</span><p class="t-xg t-txt fw6 mb-0">9</p></div>
  <div class="bg-sur bd r-m p-m"><span class="t-pp t-upp ls-w">Ticket médio</span><p class="t-xg t-txt fw6 mb-0">R$ 49,70</p></div>
</div>
Formulário em duas colunas com campo largo Ao vivo
<form class="l gap-m">
  <div sw-fld class="co6"><label for="nome">Nome</label><input sw-inp id="nome"></div>
  <div sw-fld class="co6"><label for="tel">WhatsApp</label><input sw-inp id="tel"></div>
  <div sw-fld class="co12"><label for="msg">Mensagem</label><textarea sw-inp id="msg" rows="3"></textarea></div>
  <div class="co12"><button sw-btn="pri">Enviar</button></div>
</form>
Artigo + barra lateral Ao vivo
Como cuidar da barba

Texto do artigo…

<div class="l l-3-1 gap-g">
  <article class="bg-sur bd r-m p-g">…</article>
  <aside class="bg-sur bd r-m p-g">…</aside>
</div>
Layout com áreas nomeadas (topo, lateral, conteúdo, rodapé) — com o seu CSS Ao vivo
Topo
Conteúdo
Rodapé
<div class="grd gap-p app">
  <header class="app-topo bg-sur bd r-p p-p t-ct">Topo</header>
  <aside class="app-lateral bg-sur bd r-p p-p t-ct">Lateral</aside>
  <main class="app-conteudo bg-sur bd r-p p-g t-ct">Conteúdo</main>
  <footer class="app-rodape bg-sur bd r-p p-p t-ct">Rodapé</footer>
</div>

<style>
  .app { grid-template-areas: "topo topo" "lateral conteudo" "rodape rodape";
         grid-template-columns: 1fr 3fr; }
  .app-topo { grid-area: topo; }       .app-lateral { grid-area: lateral; }
  .app-conteudo { grid-area: conteudo; } .app-rodape { grid-area: rodape; }
  @media (max-width: 767px) {             /* celular: tudo empilhado */
    .app { grid-template-areas: "topo" "conteudo" "lateral" "rodape";
           grid-template-columns: 1fr; }
  }
</style>

Precisa de quê

  • swcore.min.css — todas as classes desta página.

Cuidados — erros comuns

  • l-3 sozinho não faz nada: a grade é l. Escreva sempre os dois: class="l l-3".
  • O co… vai no filho direto da grade, não na grade. E só funciona se o pai for l.
  • co… é para l puro (régua de 12). Dentro de l-2…l-6 ou de uma proporção, quando as colunas da grade estão ligadas, o co é ignorado e cada item ocupa uma célula — escolha um dos dois jeitos: colunas iguais (l l-3) ou co nos filhos de um l.
  • Dois tamanhos juntos (l-2-m l-4-g): o de largura maior vale quando a tela chega nele; antes disso, o menor. Abaixo do menor, um por linha.
  • Com sufixo, o co só existe em 1, 2, 3, 4, 6 e 12 (co8-g não existe). Sem sufixo, de co1 a co12.
  • Para alinhar ícone e texto ou uma fileira de botões, use flx (Flex), não a grade.

O que ele não faz

  • Não tem classe para área nomeada (topo/lateral/conteúdo) nem para um item ocupar 2 linhas: isso fica no seu CSS, sobre grd ou l (receita acima).
  • Não tem classe para mudar a ordem dos itens por tela.