É 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 ...
É 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 ...
Respostas:
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) ...
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 cover
e contain
que nos dão um novo poder de controle que não tínhamos antes.
Você também pode usar background-size: round
isso 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.
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.
background: url('resized_image.png')\9;
para o IE lt 9
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.
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 .
Há um argumento esquecido :
background-size: contain;
Isso não vai esticar o seu, background-image
como 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-size
e -moz-background-size
.
A propriedade tamanho do plano de fundo é suportada no IE9 +, Firefox 4+, Opera, Chrome e Safari 5+.
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)
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/
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>
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.
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;
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.
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
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 </a>
</div><!-- v2menu -->
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;
}
Isso é possível em CSS3 com tamanho de fundo
.backgroungImage {
background: url('../imageS/background.jpg') no-repeat;
background-size: 32px 32px;
}
Se você deseja definir background-size
na mesma background
propriedade, pode usar:
background:url(my-bg.png) no-repeat top center / 50px 50px;