Como faço para esticar uma imagem de plano de fundo para cobrir todo o elemento HTML?


88

Estou tentando obter uma imagem de plano de fundo de um elemento HTML (corpo, div, etc.) para esticar toda a sua largura e altura.

Não tendo muita sorte. É mesmo possível ou tenho que fazer de outra forma além de ser uma imagem de fundo?

Meu css atual é:

body {
    background-position: left top;
    background-image: url(_images/home.jpg);
    background-repeat: no-repeat;
}

Desde já, obrigado.

Edit: Não estou interessado em manter o CSS na sugestão de Gabriel, então estou mudando o layout da página. Mas essa parece ser a melhor resposta, então estou marcando como tal.


Claro, você poderia usar JavaScript para fazer isso dinamicamente, mas provavelmente seria pior do que os hacks CSS sugeridos pelo link de gabriel1836.
Jason Bunting,

Para preservar a proporção da imagem, você deve usar "background-size: cover;" ou "tamanho do fundo: conter;". Eu construí um polyfill que implementa esses valores no IE8: github.com/louisremi/background-size-polyfill
Louis-Rémi

Respostas:


192
<style>
    { margin: 0; padding: 0; }

    html { 
        background: url('images/yourimage.jpg') no-repeat center center fixed; 
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
    }
</style>

Isso também funciona como marcas de estilo em elementos html ou em arquivos css.
Nathan,

2
esta é a melhor solução de sempre.
AFD de

1
Qual é a diferença entre cobertura e 100% 100%?
Pacerier

4
100% 100% não mantém a proporção da imagem original. 'cobrir' dimensiona a imagem, enquanto preserva sua proporção intrínseca (se houver), para o menor tamanho, de modo que sua largura e altura possam cobrir completamente a área de posicionamento do fundo. Você também pode usar 'contêiner' para dimensionar a imagem, enquanto preserva sua proporção intrínseca (se houver), para o maior tamanho de forma que sua largura e altura possam caber dentro da área de posicionamento do fundo.
Mike737

"-webkit-background-size: cover;" não é uma propriedade CSS3 válida.
VoidKing


8

Em suma, você pode tentar isso ....

<div data-role="page" style="background:url('backgrnd.png'); background-repeat: no-repeat; background-size: 100% 100%;" >

Onde usei poucos css e js ...

<link rel="stylesheet" href="css/jquery.mobile-1.0.1.min.css" />
<script src="js/jquery-1.7.1.min.js"></script>
<script src="js/jquery.mobile-1.0.1.min.js"></script>

E está funcionando bem para mim.


Para quem NÃO quer manter a proporção!
BillyNair

6

Não tenho certeza se esticar uma imagem de fundo é possível. Se você achar que não é possível ou não é confiável em todos os seus navegadores de destino, você pode tentar usar uma tag img esticada com z-index definido para baixo e posicionar definido como absoluto para que outro conteúdo apareça em cima dela.

Nos informe do que você acabar fazendo.

Edit: O que eu sugeri é basicamente o que está no link de Gabriel. Então tente isso :)


1
Eu vi essa técnica em ação pelo menos uma década atrás. Não consigo imaginar que ainda não funcionasse agora.
ausência de pálpebras,

5

Para expandir a resposta @PhiLho, você pode centralizar uma imagem muito grande (ou de qualquer tamanho) em uma página com:

{ 
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

Ou você pode usar uma imagem menor com uma cor de fundo que corresponda ao fundo da imagem (se for uma cor sólida). Isso pode ou não atender aos seus objetivos.

{ 
background-color: green;
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

4

Se você precisar esticar sua imagem de fundo ao redimensionar a tela e não precisar de compatibilidade com versões mais antigas do navegador, isso fará o trabalho:

body {
    background-image: url('../images/image.jpg');
    background-repeat: no-repeat;
    background-size: cover;
}

3

Se você tiver uma imagem grande de paisagem, este exemplo aqui redimensiona o fundo no modo retrato, para que seja exibido na parte superior, deixando em branco na parte inferior:

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

body {
    background-image: url('myimage.jpg');
    background-position-x: center;
    background-position-y: bottom;
    background-repeat: no-repeat;
    background-attachment: scroll;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

@media screen and (orientation:portrait) {
    body {
        background-position-y: top;
        -webkit-background-size: contain;
        -moz-background-size: contain;
        -o-background-size: contain;
        background-size: contain;
    }
}

3

O código a seguir eu uso principalmente para alcançar o efeito solicitado:

body {
    background-image: url('../images/bg.jpg');
    background-repeat: no-repeat;
    background-size: 100%;
}

3
Você precisabackground-size: 100% 100%;
Sablefoste de

Não sei que navegador você usa, mas o que eu disse funciona para mim no Firefox e no Chrome.
Badar,

2
background: url(images/bg.jpg) no-repeat center center fixed; 
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;

0

Você não pode em CSS puro. Ter uma imagem cobrindo toda a página atrás de todos os outros componentes é provavelmente sua melhor aposta (parece que essa é a solução fornecida acima). De qualquer forma, é provável que pareça horrível de qualquer maneira. Eu tentaria uma imagem grande o suficiente para cobrir a maioria das resoluções de tela (digamos até 1600x1200, acima dela é mais escassa), para limitar a largura da página, ou apenas usar uma imagem nesse bloco.


0

imagem{

background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  padding: 0 3em 0 3em; 
margin: -1.5em -0.5em -0.5em -1em; 
  width: absolute;
  max-width: 100%; 

2
Bem-vindo ao SO! Para escrever uma resposta melhor, acrescente algum raciocínio sobre por que funciona e mostre o código em ação. Você também pode ler sobre como escrever uma boa resposta .
displacedtexan

0

Basta fazer um div para ser o filho direto do corpo (com o nome de classe bg, por exemplo), abrangendo todos os outros elementos no corpo, e adicionar isso ao arquivo CSS:

.bg {
    background-image: url('_images/home.jpg');//Put your appropriate image URL here
    background-size: 100% 100%; //You need to put 100% twice here to stretch width and height
}

Consulte este link: https://www.w3schools.com/css/css_rwd_images.asp Role para baixo até a parte que diz:

  1. Se a propriedade background-size for definida como "100% 100%", a imagem de fundo será esticada para cobrir toda a área de conteúdo

Lá ele mostra o 'img_flowers.jpg' estendendo-se para o tamanho da tela ou do navegador, independentemente de como você o redimensiona.


-1

Funciona para mim

.page-bg {
  background: url("res://background");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.