Menu

Imagem de fundo no CSS: background-image, size e cover

background-image coloca uma imagem ou um degradê atrás do conteúdo de um elemento. Veja url() e degradês, background-size (cover e contain), background-position, background-repeat, várias camadas de fundo e o shorthand background.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Como colocar uma imagem de fundo

background-image pinta uma imagem atrás do conteúdo, do padding e da borda do elemento. Por padrão, ela começa no canto superior esquerdo da caixa do padding, mantém o tamanho natural e se repete para preencher a caixa:

Em um projeto real, o url() aponta para um arquivo: url("images/hero.jpg"). O caminho é relativo à folha de estilo que o contém (ou à página, no caso de um elemento <style>). Os exemplos desta página usam pequenas imagens SVG escritas inline como URLs data:, para funcionarem em qualquer lugar.

Duas coisas para saber desde o começo:

  • Um fundo não dá tamanho a um elemento. Uma div vazia com imagem de fundo tem 0px de altura. Dê a ela conteúdo, padding, um height ou um aspect-ratio.
  • Uma imagem de fundo é decoração. Leitores de tela a ignoram e ela não tem texto alternativo. Uma imagem que carrega significado vai em um elemento <img>.

background-size: cover, contain e comprimentos

background-size redimensiona a imagem. As duas palavras-chave mantêm as proporções:

A imagem tem o dobro da largura em relação à altura, e cada caixa é quadrada.

ValorResultado
auto (padrão)O tamanho da própria imagem
coverRedimensiona até a caixa ficar totalmente preenchida; o excesso é cortado
containRedimensiona até a imagem inteira caber; sobram faixas cinza em dois lados
200px200px de largura, altura proporcional
50% autoMetade da largura da caixa, altura proporcional
100% 100%Exatamente o tamanho da caixa; distorce a imagem se as proporções forem diferentes

cover é a escolha comum para banners de destaque e cards. contain é para logos e ilustrações que nunca podem ser cortadas.

background-position e background-repeat

background-position posiciona a imagem dentro da caixa, com palavras-chave (top, center, bottom, left, right), porcentagens ou comprimentos. background-repeat controla a repetição. Teste alguns valores:

Experimente as posições top right, bottom 10px right 20px e 25% 75%, e os valores de repetição repeat-x, repeat-y, space (repete com espaços para nenhuma ser cortada) e round (redimensiona as repetições para caber um número inteiro delas).

Camadas: vários fundos e texto por cima

background-image recebe uma lista separada por vírgulas. A primeira camada é desenhada por cima. O uso comum é um degradê semitransparente sobre uma foto, para que um texto branco continue legível:

aspect-ratio dá altura à caixa vazia, e background-size: cover vale para as duas camadas. Para mais receitas de degradê, veja degradês CSS.

O shorthand background

background define todas as propriedades de fundo em uma linha. O tamanho precisa vir logo depois da posição, separado por uma barra, e a cor vai na última camada:

.hero {
  background: url("hero.jpg") center / cover no-repeat, #1f2937;
}
/* the same as */
.hero {
  background-image: url("hero.jpg");
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  background-color: #1f2937;
}

A cor de reserva aparece enquanto a imagem carrega, e também se ela falhar. Qualquer propriedade que você deixar de fora do shorthand volta ao padrão, então coloque o shorthand primeiro e as propriedades individuais depois.

Outras propriedades de fundo

PropriedadeO que faz
background-attachment: fixedA imagem fica parada enquanto a página rola (ignorado no Safari do iOS)
background-originSe a posição começa na borda, no padding ou no conteúdo
background-clipOnde o fundo é pintado, incluindo text para preencher as letras
background-blend-modeMistura as camadas, como multiply

Erros comuns

  • Um caminho errado. O url() em uma folha de estilo é relativo ao arquivo CSS, não à página HTML.
  • Um elemento vazio. Ele não tem altura, então a imagem não tem onde aparecer.
  • Esquecer o no-repeat com contain ou com uma imagem pequena: ela se repete.
  • Esticar com 100% 100% quando você queria cover.
  • Imagens importantes como fundo. Use <img> com texto alternativo para conteúdo; fundos são invisíveis para leitores de tela.
  • Faltar aspas em uma URL data: que contém espaços ou aspas. Escreva sempre url("...").

Perguntas frequentes

Como colocar uma imagem de fundo no CSS?

Use background-image: url("photo.jpg"); no elemento. O caminho é relativo ao arquivo CSS (ou à página, no caso de um atributo style ou de um elemento <style>). Dê um tamanho ao elemento, porque um fundo nunca faz um elemento vazio crescer.

Como fazer a imagem de fundo cobrir o elemento inteiro?

Use background-size: cover; com background-position: center;. A imagem é redimensionada até preencher a caixa por completo, mantendo as proporções, e o que sobra é cortado.

Qual a diferença entre cover e contain?

cover preenche a caixa inteira e corta o que não cabe. contain mostra a imagem inteira e deixa espaço vazio em dois lados quando as proporções são diferentes.

Como impedir que a imagem de fundo se repita?

Acrescente background-repeat: no-repeat;. Por padrão, uma imagem de fundo se repete nas duas direções para preencher o elemento.

Por que minha imagem de fundo não aparece?

As causas comuns são um caminho errado em url() (ele é relativo ao arquivo CSS), um elemento sem altura porque não tem conteúdo ou um shorthand background posterior que zerou a imagem.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR