W3docs

Propriedade CSS box-shadow

O box-shadow é uma propriedade CSS que permite adicionar uma ou mais sombras a elementos. Veja e experimente exemplos aqui.

A propriedade box-shadow permite adicionar uma ou mais sombras ao redor de um elemento, especificando valores para deslocamento horizontal, deslocamento vertical, raio de desfoque, raio de espalhamento, cor e a palavra-chave inset. Esta página explica cada um desses valores e mostra como combiná-los para criar múltiplas sombras, sombras internas (inset), sombras em uma única borda e padrões comuns de interface como cartões elevados.

A propriedade box-shadow é uma das propriedades CSS3.

Você pode adicionar efeitos separados por vírgulas. Se você especificar um border-radius no elemento com sombra, a sombra assumirá os mesmos cantos arredondados.

Esses são dois valores que definem o deslocamento da sombra. H-offset especifica a distância horizontal. Valores positivos posicionam a sombra à direita do elemento. Valores negativos a posicionam à esquerda. V-offset especifica a distância vertical. Um valor positivo posiciona a sombra abaixo do elemento, enquanto um valor negativo a posiciona acima. Se ambos os valores forem 0, a sombra aparece diretamente atrás do elemento.

O terceiro valor é o raio de desfoque. É opcional. Quanto maior o número, maior e mais suave o desfoque. Valores negativos são inválidos. Se omitido ou definido como 0, a borda da sombra é nítida.

O quarto valor é o raio de espalhamento. É opcional. Valores positivos fazem a sombra se expandir, e valores negativos fazem ela encolher. Se omitido ou definido como 0, a sombra tem o mesmo tamanho que o elemento.

O quinto valor é a cor. É opcional. Se omitido, a sombra assume como padrão a cor de texto computada do elemento.

O sexto valor é a palavra-chave inset. É opcional e pode ser colocada em qualquer posição na definição da sombra. Quando presente, cria uma sombra interna em vez de uma sombra projetada.

Um detalhe sutil, mas importante: a cor da sombra quase sempre é definida com um valor semitransparente como rgba(0, 0, 0, 0.2) em vez de uma cor sólida. Um preto semitransparente se mistura com o que quer que esteja atrás do elemento, tornando a sombra natural em qualquer fundo. Cores sólidas como black ou gray tendem a parecer rígidas.

Valor Inicialnone
Aplica-se aTodos os elementos. Também se aplica a ::first-letter.
HerdadoNão.
AnimávelSim. A sombra da caixa é animável.
VersãoCSS3
Sintaxe DOMobject.style.boxShadow = "15px 25px 35px gray";

Sintaxe

Sintaxe da Propriedade CSS box-shadow

box-shadow: none | h-offset v-offset blur-radius spread-radius color inset;

Vamos tentar adicionar sombras a um elemento.

Exemplo da propriedade box-shadow:

Exemplo da Propriedade CSS box-shadow

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        width: 150px;
        height: 50px;
        background-color: #eee;
        box-shadow: 5px 4px 10px #1c87c9;
      }
    </style>
  </head>
  <body>
    <h2>Box-shadow example</h2>
    <div></div>
  </body>
</html>

Resultado

Propriedade CSS box-shadow

Múltiplas sombras

Você tem a possibilidade de separar o box-shadow por vírgulas várias vezes. Por exemplo, o código abaixo exibirá 3 sombras com múltiplas cores e posições no mesmo elemento.

Exemplo de uso da propriedade box-shadow para adicionar múltiplas sombras ao elemento:

Exemplo da Propriedade CSS box-shadow com múltiplos valores

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        width: 50%;
        height: 100px;
        border: 1px solid;
        padding: 10px;
        box-shadow: 5px 5px #1c87c9, 10px 10px #ccc, 15px 15px #8ebf42;
      }
    </style>
  </head>
  <body>
    <h2>Multiple shadows with box-shadow.</h2>
    <div></div>
  </body>
</html>

Resultado

Múltiplas sombras com a propriedade box-shadow

Agora vamos dar ao elemento um valor inset. Ele adiciona sombra dentro da caixa.

Exemplo da propriedade box-shadow com o valor "inset":

Exemplo da Propriedade CSS box-shadow com valor inset

<!DOCTYPE html>
<html>
  <head>
    <style>
      div {
        width: 150px;
        height: 50px;
        background-color: #eee;
        box-shadow: inset 8px 8px 10px grey, 8px 8px 10px black;
      }
    </style>
  </head>
  <body>
    <h2>Box-shadow with inset value</h2>
    <div></div>
  </body>
</html>

Resultado

Propriedade box-shadow com valor inset

Sombra em uma única borda

Para criar uma sombra que apareça apenas em um lado da caixa, use um valor negativo de raio de espalhamento.

Propriedade CSS box-shadow

.shadow {
  box-shadow: 0 10px 8px -4px yellow;
}

Exemplo da propriedade box-shadow com valor negativo de raio de espalhamento:

Exemplo da propriedade box-shadow

<!DOCTYPE html>
<html>
  <head>
    <style>
      .shadow {
        width: 100px;
        height: 100px;
        box-shadow: 0 10px 8px -4px yellow;
        background-color: #cccccc;
      }
    </style>
  </head>
  <body>
    <div class="shadow"></div>
  </body>
</html>

Casos de uso comuns

O uso mais frequente do box-shadow é elevar um elemento da página para que ele seja lido como uma superfície separada — cartões, menus suspensos, modais e botões todos dependem disso. Uma sombra suave e semitransparente com um pequeno deslocamento vertical transmite uma elevação sutil:

<!DOCTYPE html>
<html>
  <head>
    <style>
      .card {
        width: 220px;
        padding: 20px;
        border-radius: 8px;
        background-color: #fff;
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
        transition: box-shadow 0.2s ease;
      }
      .card:hover {
        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
      }
    </style>
  </head>
  <body>
    <div class="card">Hover me to raise the card.</div>
  </body>
</html>

Como o box-shadow é animável, combiná-lo com uma transition faz o elemento parecer se elevar ao passar o mouse, como mostrado acima. Empilhar várias sombras em camadas em um único valor separado por vírgulas produz uma profundidade mais suave e realista do que uma única sombra pesada:

.card {
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.07),
    0 2px 4px rgba(0, 0, 0, 0.07),
    0 4px 8px rgba(0, 0, 0, 0.07);
}

Alguns pontos importantes a ter em mente:

  • Sombras não afetam o layout. Um box-shadow é pintado fora do modelo de caixa, portanto nunca empurra elementos vizinhos nem adiciona à largura e altura do elemento. Use margin se precisar reservar espaço para ele.
  • Cantos arredondados são respeitados. Quando o elemento tem um border-radius, a sombra segue a mesma curva automaticamente.
  • Desempenho. Raios de desfoque muito grandes e muitas sombras empilhadas são caros para repintar, especialmente durante animações. Mantenha os valores de desfoque modestos e evite animar sombras pesadas em elementos grandes.

Valores

ValorDescriçãoExperimente
noneNenhuma sombra é aplicada.Experimente »
h-offsetObrigatório. O deslocamento horizontal da sombra. Um valor positivo posiciona a sombra à direita da caixa, um valor negativo posiciona a sombra à esquerda da caixa.Experimente »
v-offsetObrigatório. O deslocamento vertical da sombra. Um valor positivo posiciona a sombra abaixo da caixa, um valor negativo posiciona a sombra acima da caixa.Experimente »
blur-radiusOpcional. A sombra é desfocada. Quanto maior o número, mais desfocada ficará a sombra. Valores negativos são inválidos.Experimente »
spread-radiusOpcional. A sombra é espalhada. Um valor positivo aumenta o tamanho da sombra, um valor negativo diminui o tamanho da sombra.Experimente »
colorOpcional. A cor da sombra. Se omitida, assume como padrão a cor de texto do elemento.Experimente »
insetOpcional. Uma palavra-chave opcional que pode ser colocada em qualquer posição na definição da sombra. Transforma uma sombra externa em uma sombra interna.Experimente »
initialDefine a propriedade para seu valor padrão.Experimente »
inheritHerda a propriedade de seu elemento pai.

Prática

Prática
Quais propriedades podem ser ajustadas ao definir um box-shadow em CSS?
Quais propriedades podem ser ajustadas ao definir um box-shadow em CSS?
Was this page helpful?