Novo Livro!
Categorias
Ferramentas
Projetos
Formas

Gerador de bordas onduladas

Escolha a forma, a borda e o tamanho: o gerador recorta onda, zigue-zague, festonado, côncavo, serrilhado ou ameias num lado, em cima e embaixo ou em volta toda do elemento, com mask, sem SVG nem imagem.

Funciona em todos os navegadores atuais Ver no Baseline

Ajuste

Forma
Borda

A onda recorta um lado por vez; as outras formas também vão em cima e embaixo ou em volta toda.

20px
40%

0% junta semicírculos; quanto mais, mais rasa e suave a onda.

Veja

Ingresso O recorte acompanha a cor e o tamanho do elemento.

Copie o código

CSS
.element {
  /* Onda embaixo. */
  mask:
    radial-gradient(21.54px at 50% calc(100% - 28px), #000 99%, #0000 101%) calc(50% - 40px) 0 / 80px 100%,
    radial-gradient(21.54px at 50% calc(100% + 8px), #0000 99%, #000 101%) 50% -20px / 80px 100% repeat-x;
  /* O recorte não empurra o conteúdo: o padding o tira da faixa recortada. */
  padding-block-end: calc(1rem + 34px);
}

O problema

Borda ondulada costumava vir de um SVG ou de uma imagem posta por cima do elemento. Ela não acompanha a cor do fundo sem editar o arquivo, não muda de tamanho com uma variável e ainda precisa ficar alinhada à mão.

Fazer o mesmo só com CSS é possível, mas as contas dos gradientes que desenham a onda (raios, centros e deslocamentos) desanimam qualquer um.

Como funciona

A mask mostra o elemento onde a camada é opaca e esconde onde ela é transparente. Gradientes repetidos ao longo da borda desenham o recorte:

mask: radial-gradient(…) 50% / 80px 100% repeat-x

A onda junta duas fileiras de círculos de mesmo raio: uma mostra o elemento e a outra esconde, com os centros deslocados meia onda. Os arcos se encontram a meio caminho e a curva sai contínua. O zigue-zague é um conic-gradient() de 90° repetido; o festonado, círculos sobre uma faixa reta, e o côncavo, o contrário, círculos tirados da caixa. Serrilhado e ameias são linear-gradient() que deixam opaca metade de cada ladrilho: na diagonal ou ao meio.

A técnica é a de Temani Afif: os números saem da conta, e o gerador os escreve em px para você não precisar fazê-la. A suavidade afasta os centros dos círculos da borda, o que aumenta o raio e achata a onda.

Em mais de um lado, as formas que tiram pedaço da caixa (zigue-zague, côncavo) põem uma camada por lado e as cruzam com mask-composite: intersect: só fica o que todas mostram. As que põem pedaço para fora (festonado, serrilhado, ameias) encolhem a caixa em todos os lados recortados e somam a ela os dentes de cada um. A onda fica num lado só, porque mistura camadas que mostram e que escondem.

Nos vários lados, mask-repeat: round ajusta o dente para caber um número inteiro em cada lado, e os cantos fecham. Em troca, o tamanho real varia um pouco em volta do escolhido.

O recorte não empurra o conteúdo: o que cai na faixa recortada some junto. Por isso o código traz o padding de cada lado recortado: a profundidade do recorte mais 1rem de respiro.

Quando usar

  • Cards, banners e etiquetas com uma borda decorativa que muda de cor com o resto do tema.
  • Ingressos, cupons e recibos serrilhados em cima e embaixo, e selos com o picote côncavo em volta toda.
  • Faixas e rodapés com onda, sem SVG para manter.
  • Recortes em elementos com imagem ou gradiente de fundo: a mask recorta tudo junto.

Leia no blog

Outras ferramentas