Samille Nunes

Início / CSS / Múltiplos Background

Múltiplos Background

Adicionando mais de uma imagem como background de um único elemento.

No CSS3 a propriedade background ganhou várias funções, dentre elas a de definir mais de uma imagem como background em uma única tag.

É bastante simples, veja nos exemplos:

Exemplo 1:

body {
    width: 100%;
    height: 100%;
    margin: 0;
    background:
        url('quadro-vermelho.png') no-repeat center 40%,
        url('quadro-cinza.png') no-repeat center center,
        url('quadro-azul.png') no-repeat center 60%,
        rgba(230,230,230,1)
    ;
}

Nesse exemplo usei três imagens e uma cor de fundo na propriedade background, a primeira imagem adicionada (quadro-vermelho.png) ficará em cima da segunda imagem (quadro-cinza.png) e assim por diante. Como podemos perceber os valores estão separados por vírgula e o ponto e vírgula (;) é adicionado só no fim, fechando assim a propriedade background.

O resultado final fica assim:


Exemplo 2:

body {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    width: 100%;
    height: 100%;
    margin: 0;
    background:
        url('sol.png') no-repeat center center,
        -webkit-radial-gradient(bottom, rgba(255,255,40,1) 0%,rgba(255,255,40,1) 40%, rgba(255,0,0,1) 80%),
        radial-gradient(ellipse at bottom, rgba(255,255,40,1) 0%,rgba(255,255,40,1) 40%, rgba(255,0,0,1) 80%)
    ;
    background-size: 200px, auto, auto;
}

Nesse outro exemplo usei apenas uma imagem e uma cor de fundo com gradiente na propriedade background.

Os valores das sub-propriedades (background-size, background-repeat, background-position) são correspondentes aos valores da propriedade background, sendo assim, o primeiro valor da sub-propriedade background-size (200px) se aplica ao primeiro valor da propriedade background ("url('sol.png')..."), e assim por diante.

O resultado final fica assim:


Exemplo 3:

body {
    overflow: hidden;
    position: relative;
    width: 100%;
    height: 100%;
    margin: 0;
    background:
        url('nuvens.png') right top,
        url('montanha.png') center bottom,
        rgba(154,200,238,1)
    ;
    background-repeat: no-repeat;
    background-size: 80%, cover;
    animation: nuvem 20s infinite linear;
    animation-direction: alternate;
}

body::after {
    overflow: hidden;
    content: "";
    display: block;
    position: absolute;
    left: -200px;
    right: -200px;
    bottom: 10px;
    padding: 0 200px;
    width: 100%;
    height: 18%;
    background: url('carro.png') no-repeat;
    background-size: contain;
    background-position: right center;
    animation: carro 4s infinite linear;
    animation-direction: normal;
}

@keyframes nuvem {
    0% {
        background-position: 0 0, center bottom;
    }
}

@keyframes carro {
    0% {
        background-position: 0 0;
    }
}

Aqui usei duas imagens (montanha.png e nuvens.png), uma cor de fundo na tag body e animei a nuvem para criar um efeito de movimento, assim como na pseudo-classe :after (também na tag body) onde criei uma animação para o carro seguir pela estrada, que pode ser visto mais embaixo.

Na propriedade background não há novidades, é igual nos exemplos anteriores, duas imagens cada uma com seus respectivos positions e a cor de fundo em rgba. O que muda é a forma como atribui o repeat das imagens, poderia ter usado: "no-repeat, no-repeat", mas como as duas imagens terão o mesmo valor simplifiquei usando um único no-repeat, que serve para todos os valores inseridos na propriedade background.

O background-size é atribuido da mesma forma que o "Exemplo 2", como as imagens terão tamanhos diferentes inseri os dois valores separados por vírgula.

Veja o resultado final (com animação) clicando aqui.


Resumindo: é um processo muito simples, adicionar uma vírgula após cada valor da propriedade background e fazer o mesmo nas sub-propriedades (background-repeat, background-position, background-size, etc.).