css - toda - Cómo estirar la imagen de fondo para completar un div
imagen de fondo html (9)
Quiero establecer una imagen de fondo para diferentes divs, pero mis problemas son:
- El tamaño de la imagen es fijo (60px).
- Variando el tamaño de div
¿Cómo puedo estirar la imagen de fondo para llenar todo el fondo del div?
#div2{
background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
height:180px;
width:200px;
border: 1px solid red;
}
CSS3 moderno (recomendado para el futuro y la mejor solución)
.selector{
background-size: cover;
/* streches background WITHOUT deformation so it would fill the background space,
it may crop the image if the image''s dimensions are in different ratio,
than the element dimensions. */
}
Max. estirar sin recorte ni deformación (puede no rellenar el background-size: contain;
) : background-size: contain;
Fuerza el estiramiento absoluto (puede causar deformación, pero no cosecha) : background-size: 100% 100%;
"Viejo" CSS "siempre funciona"
Imagen de posicionamiento absoluto como primer hijo del padre (en posición relativa) y estirándolo al tamaño principal.
HTML
<div class="selector">
<img src="path.extension" alt="alt text">
<!-- some other content -->
</div>
Equivalente de background-size: cover;
de CSS3 background-size: cover;
:
Para lograr esto dinámicamente, debería usar la alternativa al método contrario de contener (ver a continuación) y si necesita centrar la imagen recortada, necesitaría un JavaScript para hacerlo de forma dinámica, por ejemplo, usando jQuery:
$(''.selector img'').each(function(){
$(this).css({
"left": "50%",
"margin-left": "-"+( $(this).width()/2 )+"px",
"top": "50%",
"margin-top": "-"+( $(this).height()/2 )+"px"
});
});
Ejemplo práctico:
Equivalente de background-size: contain;
de CSS3 background-size: contain;
:
Éste puede ser un poco complicado: la dimensión de su fondo que desborda al padre tendrá CSS configurado en 100% y el otro en automático. Ejemplo práctico:
.selector img{
position: absolute; top:0; left: 0;
width: 100%;
height: auto;
/* -- OR -- */
/* width: auto;
height: 100%; */
}
Equivalente de background-size: 100% 100%;
de CSS3 background-size: 100% 100%;
:
.selector img{
position: absolute; top:0; left: 0;
width: 100%;
height: 100%;
}
PD: Para hacer los equivalentes de cubrir / contener de la manera "antigua" completamente de forma dinámica (para que no tenga que preocuparse por los desbordamientos / proporciones) tendría que usar javascript para detectar las proporciones y establecer las dimensiones como se describen. ..
Añadir
background-size:100%;
a su CSS debajo de la imagen de fondo.
También puede especificar dimensiones exactas, es decir:
background-size: 30px 40px;
Aquí: JSFiddle
Para esto puede usar la propiedad de background-size
CSS3. Escribe así:
#div2{
background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
-moz-background-size:100% 100%;
-webkit-background-size:100% 100%;
background-size:100% 100%;
height:180px;
width:200px;
border: 1px solid red;
}
Mira esto: http://jsfiddle.net/qdzaw/1/
Para mantener la relación de aspecto, use background-size: 100% auto;
div {
background-image: url(''image.jpg'');
background-size: 100% auto;
width: 150px;
height: 300px;
}
Pruebe algo como esto:
div {
background-image: url(../img/picture1.jpg);
height: 30em;
background-repeat: no-repeat;
width: 100%;
background-position: center;
}
Puedes añadir:
#div2{
background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
background-size: 100% 100%;
height:180px;
width:200px;
border: 1px solid red;
}
Puedes leer más sobre esto aquí: css3 background-size
Puedes usar:
background-size: cover;
O simplemente usa una gran imagen de fondo con:
background: url(''../images/teaser.jpg'') no-repeat center #eee;
mediante el uso de la propiedad CSS:
background-size: cover;
body{
margin:0;
background:url(''image.png'') no-repeat 50% 50% fixed;
background-size: cover;
}