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
divvazia com imagem de fundo tem 0px de altura. Dê a ela conteúdo, padding, umheightou umaspect-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.
| Valor | Resultado |
|---|---|
auto (padrão) | O tamanho da própria imagem |
cover | Redimensiona até a caixa ficar totalmente preenchida; o excesso é cortado |
contain | Redimensiona até a imagem inteira caber; sobram faixas cinza em dois lados |
200px | 200px de largura, altura proporcional |
50% auto | Metade 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
| Propriedade | O que faz |
|---|---|
background-attachment: fixed | A imagem fica parada enquanto a página rola (ignorado no Safari do iOS) |
background-origin | Se a posição começa na borda, no padding ou no conteúdo |
background-clip | Onde o fundo é pintado, incluindo text para preencher as letras |
background-blend-mode | Mistura 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-repeatcomcontainou com uma imagem pequena: ela se repete. - Esticar com
100% 100%quando você queriacover. - 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 sempreurl("...").
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.