CSS e web

Padrões CSS com gradientes repetidos

As paragens de cor duras transformam gradientes em formas, e o background-size transforma formas em mosaicos. Com estas duas ideias desenhas a maioria dos padrões clássicos em poucas linhas, sem ficheiros de imagem.

GradientlyConta Gradiently verificada··5 min de leitura
Capa: Burnt Expedition · GR·5E64·EH

A versão curta

  • Os padrões CSS desenham-se com gradientes que usam paragens de cor duras, por isso as cores mudam de imediato em vez de se misturarem.
  • As funções repeating-linear-gradient, repeating-radial-gradient e repeating-conic-gradient repetem as suas paragens até preencher o elemento, o que desenha riscas, anéis e raios.
  • O background-size transforma um único gradiente num mosaico, e é assim que se constroem grelhas de pontos, grelhas de linhas, xadrez e vichy.
  • As posições das paragens escritas em píxeis mantêm as riscas nítidas e uniformes, enquanto as percentagens podem dar arestas irregulares e desfocadas.
  • Os padrões por trás de texto devem ter pouco contraste, para que as palavras continuem fáceis de ler.
Nesta página

Os padrões CSS são fundos repetidos, como riscas, grelhas, pontos e xadrez, desenhados só com funções de gradiente. Duas ideias fazem-nos funcionar. As paragens de cor duras, em que duas paragens partilham a mesma posição, transformam um gradiente numa aresta nítida. A repetição, com as funções de gradiente repeating-* ou com o mosaico do background-size, transforma uma aresta num padrão. O resultado pesa poucos bytes, escala na perfeição e vai buscar as cores às tuas variáveis CSS.

Seis padrões, cada um com um único gradiente repetido. Copia qualquer um diretamente para o background.

Como as paragens duras criam formas

Um gradiente mistura as cores entre paragens vizinhas. Se a paragem seguinte começa exatamente onde a anterior acabou, não há distância para misturar, e a cor muda numa linha dura. O atalho para isto é uma cor com duas posições, como #1e293b 0 10px, que mantém essa cor sólida dos 0 aos 10 píxeis. O guia de gradiente linear em CSS trata em pormenor as paragens, as dicas e as paragens duras.

css
/* a soft blend */
background: linear-gradient(90deg, #1e293b, #334155);

/* a hard edge at 50% */
background: linear-gradient(90deg, #1e293b 50%, #334155 50%);

/* the same stripe pair, repeated every 20px */
background: repeating-linear-gradient(90deg, #1e293b 0 10px, #334155 10px 20px);
Da mistura à aresta e ao padrão, em três passos.

Riscas com repeating-linear-gradient

O repeating-linear-gradient() repete a sua lista de paragens ao longo da linha do gradiente até o elemento ficar cheio. O comprimento de uma repetição é a posição da última paragem, por isso 0 10px, 10px 20px repete-se a cada 20 píxeis. Muda o ângulo para obter diagonais e muda a proporção entre as duas faixas para riscas finas ou riscas largas de toldo.

PadrãoParagensEfeito
Riscas iguaisA 0 10px, B 10px 20pxFaixas iguais, repetição de 20px
Risca finaA 0 23px, B 23px 24pxUma linha de 1px a cada 24px
ToldoA 0 40px, B 40px 80px a 90degFaixas verticais largas
Linha duplaA 0 20px, B 20px 22px, A 22px 26px, B 26px 28pxDuas linhas finas juntas
Receitas de riscas. A e B são as tuas duas cores; a última paragem define o comprimento da repetição.

Grelhas, pontos e mosaicos com background-size

Alguns padrões não se desenham com um só gradiente repetido: uma grelha de pontos precisa de repetição em duas direções. A solução é desenhar um mosaico, como um ponto ou um canto de grelha, e depois definir o background-size com o tamanho desse mosaico. Os fundos repetem-se por defeito, por isso o mosaico preenche o elemento.

css
.grid-lines {
  background-color: #0f172a;
  background-image:
    linear-gradient(rgb(255 255 255 / 0.08) 1px, transparent 1px),
    linear-gradient(90deg, rgb(255 255 255 / 0.08) 1px, transparent 1px);
  background-size: 32px 32px;
}

.dots {
  background-color: #fefce8;
  background-image: radial-gradient(#ca8a04 1.5px, transparent 2px);
  background-size: 20px 20px;
}

.checkerboard {
  background: repeating-conic-gradient(#e2e8f0 0 25%, #ffffff 0 50%) 0 0 / 24px 24px;
}
Uma grelha de planta, uma grelha de pontos e um tabuleiro de xadrez. Cada um é um mosaico, repetido pelo background-size.

A grelha são dois gradientes: um desenha uma linha horizontal de 1px no topo de cada mosaico, o outro uma linha vertical na margem esquerda. Os pontos são um pequeno gradiente radial que fica transparente após 2 píxeis. O tabuleiro usa um gradiente cónico dividido em quartos, e por isso precisa de uma só camada.

Vichy, tartan e ziguezagues

Sobrepor riscas semitransparentes cria padrões tecidos: onde uma faixa horizontal e uma vertical se cruzam, as cores somam-se e o quadrado fica mais escuro. Isso é o vichy. Junta um segundo conjunto de riscas mais finas noutra cor e passa a ser tartan. Os ziguezagues nascem de quatro cantos triangulares, cada um desenhado com uma paragem dura a 25% num ângulo diferente.

css
.gingham {
  background-color: #ffffff;
  background-image:
    linear-gradient(90deg, rgb(220 38 38 / 0.45) 50%, transparent 0),
    linear-gradient(rgb(220 38 38 / 0.45) 50%, transparent 0);
  background-size: 24px 24px;
}

.zigzag {
  background-color: #e0f2fe;
  background-image:
    linear-gradient(135deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(225deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(315deg, #0ea5e9 25%, transparent 25%),
    linear-gradient(45deg, #0ea5e9 25%, transparent 25%);
  background-position: -16px 0, -16px 0, 0 0, 0 0;
  background-size: 32px 32px;
}
Vichy vermelho e um ziguezague azul-céu. No ziguezague, as duas primeiras camadas estão deslocadas meio mosaico para os triângulos encaixarem.

Riscas em movimento para barras de progresso

As riscas diagonais animadas são a forma clássica de mostrar que algo ainda está a trabalhar. Desenha as riscas como um mosaico com background-size e depois move o background-position exatamente a largura de um mosaico. Como o fotograma final coincide com o inicial, o ciclo não tem salto visível. Usa-o em elementos pequenos e desativa-o para quem prefere movimento reduzido.

css
.progress {
  background-color: #4f46e5;
  background-image: linear-gradient(45deg, rgb(255 255 255 / 0.18) 25%, transparent 25% 50%, rgb(255 255 255 / 0.18) 50% 75%, transparent 75%);
  background-size: 28px 28px;
  animation: crawl 1s linear infinite;
}

@keyframes crawl {
  to { background-position: 28px 0; }
}

@media (prefers-reduced-motion: reduce) {
  .progress { animation: none; }
}
Riscas que avançam numa barra de progresso. A distância da animação é igual à largura do mosaico, por isso o ciclo é contínuo.

Tamanho, temas e escala dos padrões

Escreve as posições das paragens e os tamanhos dos mosaicos em píxeis ou em, não em percentagens. As percentagens dependem do tamanho do elemento, por isso as riscas esticam de forma desigual quando ele muda de tamanho e as arestas podem cair entre píxeis e ficar desfocadas. Com em, o padrão escala com o texto à volta, o que serve para emblemas e etiquetas com padrão.

As propriedades personalizadas tornam os padrões reutilizáveis. Define as cores e o tamanho uma vez e depois varia-os por componente ou por tema, por exemplo um padrão mais claro no modo claro e um mais discreto no modo escuro.

css
.stripes {
  --a: #1e293b;
  --b: #334155;
  --w: 10px;
  background: repeating-linear-gradient(45deg, var(--a) 0 var(--w), var(--b) var(--w) calc(var(--w) * 2));
}

.stripes--warm {
  --a: #fff7ed;
  --b: #fed7aa;
  --w: 14px;
}
Um padrão, com tema mudado através de três variáveis.

Padrões por trás do texto

Evita

  • Riscas de alto contraste mesmo por trás do texto corrido
  • Padrões finos que cintilam quando a página se desloca
  • Padrões com a mesma cor do texto
  • Vários padrões diferentes num só ecrã

Faz

  • Padrões de baixo contraste, dois tons próximos da mesma cor
  • Mosaicos maiores e mais calmos em superfícies grandes
  • Um painel sólido sob o texto que assenta num padrão carregado
  • Um só padrão como acento reconhecível

Os padrões são um tipo de textura, e valem as mesmas regras: subtis ao ponto de se sentirem em vez de se lerem. O guia sobre texturas de fundo trata do grão, do papel e do tecido; o de texto sobre fundos carregados trata de manter as palavras legíveis por cima.

Perguntas frequentes

Como faço riscas em CSS?

Usa repeating-linear-gradient() com paragens duras, como repeating-linear-gradient(45deg, #1e293b 0 10px, #334155 10px 20px). Muda o ângulo para a direção e os comprimentos para a largura.

Como faço um padrão de pontos em CSS?

Desenha um ponto com radial-gradient(#ca8a04 1.5px, transparent 2px) e repete-o com background-size: 20px 20px.

Como faço um tabuleiro de xadrez em CSS?

Usa repeating-conic-gradient(#e2e8f0 0 25%, #ffffff 0 50%) com um background-size como 24px 24px. Cada mosaico tem quatro quadrados.

Porque é que as minhas riscas CSS ficam desfocadas ou irregulares?

As posições em percentagem podem cair entre píxeis. Usa comprimentos em píxeis ou em em para as paragens e os tamanhos dos mosaicos, e deixa meio píxel entre paragens nas arestas diagonais.

Os padrões de gradiente CSS são melhores do que os padrões em imagem?

Para padrões geométricos, normalmente sim: não precisam de transferência, mantêm-se nítidos em qualquer tamanho e podem ser recoloridos com variáveis CSS. As texturas orgânicas ou fotográficas continuam a precisar de imagens.

Partilhar este guia

Escrito pela GradientlyConta Gradiently verificada

A equipa por trás da Gradiently, uma ferramenta de design construída em torno dos Marks: gradientes vivos que fazem tudo o que crias parecer teu.

Ver o nosso perfil