Como definir uma cor de fundo
background-color preenche a caixa de um elemento com uma cor, incluindo o padding e a área embaixo da borda. Ela aceita qualquer cor CSS.
A cor da página é definida no body, o card e o aviso nas respectivas divs, e o destaque em um elemento inline. Elementos inline recebem fundo só atrás do texto, linha por linha.
Cor de fundo da página inteira
Coloque background-color no body. Se o elemento <html> não tem fundo próprio, o navegador pinta o fundo do body na janela inteira, mesmo onde o conteúdo do body termina:
body {
background-color: #111827;
color: #f9fafb; /* change the text color too, for contrast */
}
O jeito antigo do HTML era <body bgcolor="black">. O atributo bgcolor está obsoleto em todos os elementos, então use CSS. Os navegadores ainda o respeitam em páginas antigas, e é por isso que ele pode parecer funcionar.
Fundos transparentes
Todo elemento começa com background-color: transparent, então você vê o pai atrás dele. Para tingir uma caixa e ainda enxergar através dela, use uma cor com canal alfa:
opacity: 0.5 também deixaria as listras aparecerem, mas esmaece o texto junto. Para um fundo transparente com texto sólido, use uma cor com alfa. A página de cores lista todas as formas de escrever uma.
Onde a cor é pintada
Por padrão, o fundo vai até a borda externa da borda (por isso ele aparece através de uma borda tracejada ou semitransparente). background-clip muda isso:
Na primeira caixa, o âmbar aparece entre os traços. Na segunda, ele para na borda interna da borda, e na terceira só a área de conteúdo é colorida. A margin nunca é pintada: ela é sempre transparente.
Linhas de tabela listradas
Um fundo em linhas alternadas deixa tabelas largas mais fáceis de percorrer com os olhos:
background-color vs o shorthand background
background define todas as propriedades de fundo de uma vez. Qualquer parte que você deixar de fora volta ao padrão, e isso pega muita gente de surpresa:
.hero {
background-image: linear-gradient(#2563eb, #1e40af);
background: #111827; /* also resets background-image to none */
}
.hero {
background-image: linear-gradient(#2563eb, #1e40af);
background-color: #111827; /* only the color; the gradient stays */
}
Use background-color quando você quer só a cor. Use background quando estiver definindo o fundo inteiro em um lugar só, muitas vezes uma cor mais uma imagem; veja background-image.
Acessibilidade: combine com a cor do texto
Uma cor de fundo só é legível junto com a cor do texto. Sempre que definir uma, confira a outra: a WCAG pede uma razão de contraste de pelo menos 4.5:1 para o texto do corpo. Fundos escuros precisam de texto claro definido explicitamente, porque o texto mantém a cor escura que herda.
Erros comuns
- Usar
bgcolor. Está obsoleto. Usebackground-color. - Usar
opacitypara um fundo transparente. Ela esmaece o conteúdo também. Use uma cor com alfa. - Um shorthand
backgrounddepois de umbackground-image. Ele zera a imagem. Escrevabackground-color. - Esperar que a margin mostre a cor. A margin fica fora do fundo. Use padding para um espaço colorido.
- Um fundo escuro com o texto padrão. Defina também um
colorclaro.
Perguntas frequentes
Como mudar a cor de fundo no HTML?
Use a propriedade CSS background-color. Para a página toda: body { background-color: #f3f4f6; }. Para um elemento: <div style="background-color: #fef3c7;">.
O bgcolor ainda é válido no HTML?
Não. O atributo bgcolor em <body>, <table> e <td> está obsoleto no HTML5. Os navegadores ainda o desenham para páginas antigas, mas o jeito certo é background-color no CSS.
Como deixar uma cor de fundo transparente?
Use uma cor com canal alfa, como background-color: rgb(37 99 235 / 20%);. Ao contrário de opacity, isso mantém o texto de dentro totalmente visível.
Qual a diferença entre background e background-color?
background-color define só a cor. background é um shorthand de todas as propriedades de fundo (cor, imagem, posição, tamanho, repetição, attachment, origin e clip), então background: red; também zera qualquer imagem de fundo para none.
Por que a cor de fundo do body preenche a janela inteira?
Quando o elemento <html> não tem fundo próprio, o navegador pinta o fundo do body na tela inteira, mesmo além da caixa do body. Dê um fundo ao html se você precisar que os dois sejam diferentes.