Resumindo
- A propriedade background do CSS pode guardar várias camadas separadas por vírgula, e a primeira camada da lista é pintada por cima.
- Uma cor de fundo só pode ser definida uma vez, na última camada, e aparece embaixo de todas as imagens e gradientes.
- No atalho background, background-size precisa vir depois de background-position com uma barra, como em center / cover.
- Colocar uma camada de gradiente acima de uma camada de imagem numa única declaração é o jeito mais simples de tingir uma foto para o texto ficar legível.
- Imagens definidas no CSS são descobertas mais tarde do que elementos img, então uma imagem de hero importante pode precisar de um preload.
Nesta página
Um fundo em CSS é uma pilha de camadas num elemento. A propriedade background aceita uma lista de imagens e gradientes separados por vírgula, pintados com o primeiro por cima, mais uma única cor lá embaixo. Isso é tudo de que você precisa para uma foto de hero tingida, uma luz suave sobre um gradiente ou uma textura sobre a cor da marca, sem elementos extras nem wrappers. O resto é saber como o atalho lê os valores.
O atalho background, valor por valor
O atalho define até oito propriedades individuais de uma vez. As que você deixa de fora voltam ao valor padrão, o que é a causa mais comum dos bugs do tipo “por que o tamanho do meu fundo sumiu”.
background-colorO que controla
Valores comuns
#0f0b1e, oklch(20% 0.05 290)background-imageO que controla
Valores comuns
url(photo.webp), linear-gradient(…)background-positionO que controla
Valores comuns
center, top right, 50% 30%background-sizeO que controla
Valores comuns
cover, contain, 200px autobackground-repeatO que controla
Valores comuns
no-repeat, repeat, repeat-xbackground-attachmentO que controla
Valores comuns
scroll, fixed, localbackground-origin e background-clipO que controla
Valores comuns
padding-box, border-box, text.hero {
/* image | position / size | repeat | colour */
background: url("harbour.webp") center 30% / cover no-repeat #0f172a;
}Como as camadas de fundo se empilham
Liste as camadas de cima para baixo, separadas por vírgula. Cada camada pode ter sua própria posição, tamanho e repetição, informados na mesma ordem em cada propriedade individual. Só a última camada pode incluir uma cor. Pense nisso como olhar de cima para baixo através de uma pilha de papel vegetal.
.section {
background:
radial-gradient(circle at 80% 20%, #f472b6 0%, transparent 45%),
radial-gradient(circle at 15% 85%, #38bdf8 0%, transparent 50%),
linear-gradient(160deg, #1e1b4b 0%, #0f0b1e 100%)
#0f0b1e;
}Use transparent nas paradas externas para que as luzes se misturem ao que estiver embaixo. Para as formas em si, veja radial gradient em CSS e mesh gradient em CSS.
Um gradiente sobre uma imagem de fundo
O fundo em camadas mais útil tinge uma foto para que as palavras por cima possam ser lidas. Coloque uma camada de gradiente primeiro e a imagem depois. Um gradiente escuro onde fica o texto e transparente no resto preserva muito mais da foto do que uma sobreposição escura chapada.
.hero {
background:
linear-gradient(90deg, rgb(10 12 24 / 0.85) 0%, rgb(10 12 24 / 0.4) 45%, transparent 70%),
url("terrace.webp") center / cover no-repeat
#0a0c18;
color: #f8fafc;
}Uma sobreposição chapada deixa o texto legível escurecendo tudo por igual.
Uma camada direcional escurece só onde estão as palavras e deixa o resto da cena claro.
Sobreposição em gradiente traz mais receitas de sobreposição, e texto sobre imagem explica quando mover as palavras em vez de escurecer a imagem.
background-size, position e repeat
coverpreenche a caixa e corta o que transborda. Certo para fotos e heros sangrados.containencaixa a imagem inteira dentro e deixa espaços. Certo para logos e ilustrações que não podem ser cortados.- Combine
covercom umbackground-positionintencional, como50% 30%, para que o corte mantenha à vista o rosto da pessoa ou o produto. - Ladrilhos de textura pedem
repeate um tamanho fixo, por exemplo200px 200px, para que a granulação fique igual em qualquer largura de tela. background-attachment: fixedcria um efeito parallax no desktop, mas muitos navegadores de celular o ignoram, então nunca dependa dele.
.card {
background:
url("grain.png") 0 0 / 200px 200px repeat,
linear-gradient(135deg, #7c2d12 0%, #ea580c 55%, #fdba74 100%);
}Mais uma propriedade individual merece seu lugar: background-clip: text corta o fundo no formato das letras, e é assim que se faz texto em gradiente no CSS. Reserve para palavras grandes de destaque, defina uma color sólida de reserva e veja texto em gradiente com CSS para o padrão completo.
Erros para evitar
Evite
- Definir
background-sizee depois o atalho, que o redefine - Uma cor em qualquer camada que não seja a última
- Nenhuma cor de reserva, deixando o texto ilegível enquanto a imagem carrega
- Uma foto enorme para uma caixa de 400 pixels de largura
- Conteúdo importante só numa imagem de fundo, invisível para leitores de tela
Faça
- Escreva o atalho primeiro e depois as propriedades que o sobrescrevem
- Uma cor, no fim da lista
- Uma cor de reserva próxima do tom médio da imagem
- Imagens no tamanho da caixa, servidas em WebP ou AVIF
- Imagens com significado como
imgcom texto alternativo; decoração como fundo
Imagens de fundo responsivas e rápidas
image-set() deixa o navegador escolher entre formatos ou resoluções, mais ou menos como o srcset num img. E como as imagens de fundo só são descobertas depois que o CSS é processado, o fundo de um hero pode chegar atrasado; um preload no head resolve isso.
<link rel="preload" as="image" href="/hero-1920.avif" type="image/avif" fetchpriority="high">
<style>
.hero {
background: image-set(
url("/hero-1920.avif") type("image/avif"),
url("/hero-1920.webp") type("image/webp"),
url("/hero-1920.jpg") type("image/jpeg")
) center / cover no-repeat #0f172a;
}
</style>Muitas vezes o fundo mais rápido é nenhuma imagem. Gradientes em camadas não custam download, e um pequeno ladrilho de granulação acrescenta textura por poucos kilobytes. Desempenho de gradientes CSS e WebP vs PNG e JPG explicam os prós e contras. Se você prefere não ajustar luz e granulação à mão, um Mark do Gradiently entrega um fundo pronto e marcante no tamanho de hero de site de 1920×1080, com o mesmo visual dos seus posts nas redes.
Perguntas frequentes
Como adiciono uma imagem de fundo no CSS?
Use background: url("image.webp") center / cover no-repeat; no elemento, com uma cor de reserva no fim caso a imagem demore a carregar.
Como coloco um gradiente sobre uma imagem de fundo?
Liste o gradiente primeiro e a imagem depois numa única declaração background, separados por vírgula. A primeira camada é pintada por cima.
Posso usar vários fundos no CSS?
Sim. Separe as camadas com vírgulas; cada uma pode ter sua própria posição, tamanho e repetição, e só a última pode incluir uma cor.
Qual a diferença entre background-size cover e contain?
cover preenche o elemento inteiro e corta o que sobra; contain mostra a imagem inteira e pode deixar espaço vazio em volta.
Por que meu background-size para de funcionar?
O atalho background redefine todas as propriedades individuais que não menciona. Defina background-size depois do atalho, ou inclua no atalho depois da posição com uma barra.
Escrito pelo Gradiently
A equipe por trás do Gradiently, uma ferramenta de design criada em torno dos Marks: gradientes vivos que fazem tudo o que você cria ter a sua cara.
Ver nosso perfil