Definir tamanho na imagem de fundo com CSS?

386

É possível definir o tamanho da imagem de plano de fundo com CSS?

Eu quero fazer algo como:

background: url('bg.gif') top repeat-y;
background-size: 490px;

Mas parece que é totalmente errado fazer assim ...

Johan
fonte
Talvez seja possível. Consulte Como: Imagem de fundo redimensionável .
Ricardo de la Vega

Respostas:

621

CSS2

Se você precisar aumentar a imagem, edite a própria imagem em um editor de imagens.

Se você usar a tag img, poderá alterar o tamanho, mas isso não fornecerá o resultado desejado se você precisar que a imagem seja fundo para outro conteúdo (e ela não se repetirá como você deseja) ...

CSS3 libera os poderes

Isso é possível no CSS3 com background-size.

Todos os navegadores modernos oferecem suporte a isso; portanto, a menos que você precise oferecer suporte a navegadores antigos, essa é a maneira de fazê-lo.
Navegadores suportados:
Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) e Chrome 3.0+.

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

Gosto particularmente dos valores covere containque nos dão um novo poder de controle que não tínhamos antes.

Volta

Você também pode usar background-size: roundisso com um significado em combinação com a repetição:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

Isso ajustará a largura da imagem para que ela caiba várias vezes na área de posicionamento do plano de fundo.


Nota adicional
Se o tamanho que você precisa é um tamanho estático de pixel, ainda é inteligente redimensionar fisicamente a imagem real. Isso serve tanto para melhorar a qualidade do redimensionamento (considerando que o software de imagem faz um trabalho melhor que os navegadores) quanto para economizar largura de banda se a imagem original for maior do que o que exibir.

temor
fonte
7
Observe que também há a questão da exibição de retina no iPad e iPhone e provavelmente em outros dispositivos de alta resolução. Isso significa que pode valer a pena redimensionar imagens maiores usando CSS e usar vários arquivos CSS e outros truques para exibir imagens específicas. Introdução agradável aqui: webmonkey.com/2012/03/…
Leo
Essa é a pior solução no momento, pois nem todas as lojas de comércio eletrônico redimensionam a imagem conforme sugerido. Em 2009, provavelmente estava próximo da melhor opção, agora basta usar os atributos de tamanho como abaixo.
ShaunOReilly
332

Somente o CSS 3 suporta isso,

background-size: 200px 50px;

Mas eu editaria a própria imagem, para que o usuário precise carregar menos e ela possa parecer melhor do que uma imagem reduzida sem antialiasing.

Maertz
fonte
32
Infelizmente, as pessoas ainda usam o IE8
Dean_Wilson
16
Shame on Microsoft para isso é horrível navegador
Mahmoodvcs
2013 final, ainda precisa adicionar background: url('resized_image.png')\9;para o IE lt 9
skobaljic
Este é o caminho a percorrer, mesmo em 2017!
Francisco Ochoa
Eu também vim de 2017 e é assim que fazemos.
Ska
23

Se seus usuários usam apenas Opera 9.5+, Safari 3+, Internet Explorer 9+ e Firefox 3.6+, a resposta é sim. Caso contrário, não.

A propriedade tamanho do plano de fundo faz parte do CSS 3, mas não funciona na maioria dos navegadores.

Para seus propósitos, apenas aumente a imagem real.

Christopher Tokar
fonte
11
tamanho do plano de fundo: 100%; posição de fundo: centro; - isso funciona no IE6 em execução na minha máquina virtual no XP Home.
InnateDev 19/07
7
O IE 6,7,8 não é 'a maioria dos navegadores'.
Mahmoodvcs
11
Mesmo em 2013 - enquanto o comentário "IE6,7,8 não é 'a maioria dos navegadores'", pode ser parcialmente verdadeiro em relação ao IE6; Infelizmente, o IE7 e o IE8 ainda têm uma participação de mercado imponente. A melhor maneira que encontrei para fazer isso é usar o Javascript em combinação com o modernizr (ou outro meio de marcar 'OLDIE').
precisa saber é o seguinte
19

Não é possível . O fundo sempre será o maior possível, mas você pode impedir que ele se repita background-repeat.

background-repeat: no-repeat;

Em segundo lugar, o plano de fundo não entra na área da margem de uma caixa; portanto, se você deseja que o plano de fundo esteja apenas no conteúdo real de uma caixa, use margem em vez de preenchimento.

Em terceiro lugar, você pode controlar onde a imagem de fundo começa. Por padrão, é o canto superior esquerdo de uma caixa, mas você pode controlar isso com background-position:

background-position: center top;

ou talvez

background-position: 20px -14px;

O posicionamento negativo é muito usado com sprites CSS .

mikl
fonte
Não, não é tão grande quanto eu posso ser. É sempre do mesmo tamanho, mas preciso aumentá-lo.
288 de Johan
Bem, isso não é possível. Pode haver opções para fazer isso em versões futuras do CSS, mas isso ainda está longe.
mikl
Esta resposta está errada. O CSS3 possui a propriedade tamanho do plano de fundo, suportada no IE9 +.
precisa
3
Dê uma olhada no carimbo de hora. Em 2009, o tamanho do plano de fundo era apenas um brilho nos olhos do WebKit. Fique à vontade para atualizá-lo, se quiser, mas já existem muitas outras respostas descrevendo o tamanho do plano de fundo.
mikl
12

Não é muito difícil, se você não tem medo de se aprofundar um pouco mais :)

Há um argumento esquecido :

background-size: contain;

Isso não vai esticar o seu, background-imagecomo faria com cover. Estiraria até o lado mais longo atingir a largura ou altura do contêiner externo e, portanto, preservar a imagem.

Edit: Há também -webkit-background-sizee -moz-background-size.

A propriedade tamanho do plano de fundo é suportada no IE9 +, Firefox 4+, Opera, Chrome e Safari 5+.

- Fonte: Escolas W3

kaiser
fonte
3

background-size: 200px 50px altere para 100% 100% e será dimensionado conforme as necessidades da tag de conteúdo, como ul li ou div ... tentei

mihai
fonte
3

Para apoiar a resposta que o @tetra deu, quero ressaltar que, se a imagem for um SVG, o redimensionamento da imagem real não será necessário.

Como um arquivo SVG é apenas XML, você pode especificar o tamanho que deseja que apareça no XML.

No entanto, se você estiver usando a mesma imagem SVG em lugares diferentes e precisar de tamanhos diferentes, usar background-sizeé muito útil. Os arquivos SVG são inerentemente menores do que as imagens rasterizadas e o redimensionamento instantâneo com CSS pode ser muito útil, sem qualquer custo de desempenho que eu saiba, e certamente com pouca ou nenhuma perda de qualidade.

Aqui está um exemplo rápido:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(Nota: isso funciona para mim no OS X 10.7 com Firefox 8, Safari 5.1 e Chrome 16.0.912.63)

SunSparc
fonte
3

Você pode totalmente com CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

Isso dimensionará uma imagem de plano de fundo para 100% da largura do elemento do corpo e redimensionará o plano de fundo adequadamente conforme o elemento do corpo é redimensionado para resoluções menores.

Aqui está o exemplo: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/

Mike Sinkula
fonte
2

Apenas divs aninhados para ser compatível com vários navegadores

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   
Cornelius Lamb
fonte
2

Você pode usar dois <div>elementos:

  • Um é um contêiner (é aquele em que você originalmente queria que a imagem de fundo aparecesse).

  • O segundo está contido. Você define seu tamanho para o tamanho da imagem de fundo (ou o tamanho que você deseja que apareça).

A div contida é então definida para ser posicionada absolute. Dessa forma, não interfere no fluxo normal de itens na div que o contém.

Permite usar imagens de sprite eficientemente.

Ben Shomer
fonte
1

Você não pode definir o tamanho da sua imagem de plano de fundo com a versão atual do CSS (2.1).

Você só pode definir: position, fix, image-url, repeat-mode, e color.

knittl
fonte
1
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;
Shwetha SH
fonte
1

Você escreveu

background: url('bg.gif') top repeat-y;    
background-size: 490px;

mas você verá apenas o plano de fundo, dependendo do tamanho do contêiner.

se você tiver um contêiner vazio com o URL do plano de fundo e seja qual for o tamanho do plano de fundo, você não verá o bg.gif.

Se você definir o tamanho do continente como

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

combinado ao código que você escreveu acima, você poderá ver o arquivo bg.gif.

Carlos Calla
fonte
0

background-size está funcionando no Chrome 4.1, mas até agora não consegui fazê-lo funcionar no Firefox 3.6.

prateado
fonte
0

Uso imagens de plano de fundo para botões, mas ele mostra apenas a imagem do mesmo tamanho que o texto, mesmo se eu definir largura e altura. Em vez disso, preencho meu texto com &nbsp;caracteres (espaços sem quebra). Eu bato no número necessário, basicamente, até todo o fundo do botão aparecer. Então, eu posso ter um código como este:

Na folha de estilos:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

No documento HTML:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->
Martin Thompson
fonte
2
Outra maneira é definir o tamanho do link para o tamanho da imagem de fundo. Na folha de estilos, (em # v2menu-home no exemplo acima), use display: block e defina a altura e a largura lá. Isso realmente funciona. Não há necessidade de caracteres de espaço sem interrupção.
Martin Thompson
0

Por exemplo: a
imagem de plano de fundo sempre se ajustará ao tamanho do contêiner (largura 100% e altura 100px).
CSS entre navegadores:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}

skyrosbit
fonte
0

Isso é possível em CSS3 com tamanho de fundo

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}
omkar khade
fonte
0

Se você deseja definir background-sizena mesma backgroundpropriedade, pode usar:

background:url(my-bg.png) no-repeat top center / 50px 50px;
Ratata Tata
fonte
Não posso testar, mas provavelmente.
Ratata Tata
Pensei ipads didnt reconhecer fundo taquigrafia @ orlando-leite
DGRFDSGN