Establecer tamaño en la imagen de fondo con CSS?


Es posible establecer el tamaño de la imagen de fondo con CSS?

Quiero hacer algo como:

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

Pero parece que es totalmente incorrecto hacerlo así...

 371
Author: Ankit Agrawal, 2009-08-27

18 answers

CSS2

Si necesita hacer la imagen más grande, debe editar la imagen en un editor de imágenes.

Si usa la etiqueta img, puede cambiar el tamaño, pero eso no le daría el resultado deseado si necesita que la imagen sea de fondo para algún otro contenido (y no se repetirá como parece querer)...

CSS3 desata los poderes

Esto es posible hacer en CSS3 con background-size.

Todos los navegadores modernos soportan esto, así que a menos que necesite admitir navegadores antiguos, esta es la manera de hacerlo.
navegadores Compatibles:
Mozilla Firefox 4.0 +(Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) y 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;
}

En particular, me gustan los valores cover y contain que nos dan un nuevo poder de control que no teníamos antes.

Ronda

También puedes usar background-size: round que tengan un significado en combinación con repetir:

.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;
}

Esto ajustará el ancho de la imagen para que se ajuste un número entero de veces en el área de posicionamiento de fondo.


Nota complementaria
Si el tamaño que necesita es el tamaño de píxel estático, sigue siendo inteligente cambiar físicamente el tamaño de la imagen real. Esto es tanto para mejorar la calidad del cambio de tamaño (dado que su software de imagen hace un mejor trabajo que los navegadores), y para ahorrar ancho de banda si la imagen original es más grande que lo que se muestra.

 599
Author: awe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-16 09:20:49

Solo CSS 3 soporta eso,

background-size: 200px 50px;

Pero editaría la imagen en sí, para que el usuario necesite cargar menos, y podría verse mejor que una imagen reducida sin antialiasing.

 331
Author: Maertz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 09:17:42

Si sus usuarios solo usan Opera 9.5+, Safari 3+, Internet Explorer 9+ y Firefox 3.6+, entonces la respuesta es sí. De lo contrario, no.

La propiedad background-size es parte de CSS 3, pero no funcionará en la mayoría de los navegadores.

Para tus propósitos solo haz la imagen real más grande.

 23
Author: Christopher Tokar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-29 21:10:41

No es posible. El fondo siempre será tan grande como pueda ser, pero puede evitar que se repita con background-repeat.

background-repeat: no-repeat;

En segundo lugar, el fondo no entra en el área de margen de una caja, por lo que si desea que el fondo solo esté en el contenido real de una caja, puede usar margen en lugar de relleno.

En tercer lugar, puede controlar dónde comienza la imagen de fondo. De forma predeterminada, es la esquina superior izquierda de un cuadro, pero puede controlarlo con background-position, así:

background-position: center top;

O tal vez

background-position: 20px -14px;

El posicionamiento negativo se usa mucho con sprites CSS.

 18
Author: mikl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-27 14:27:32

No demasiado duro, si no tienes miedo de ir un poco más en profundidad:)

Hay un argumento olvidado:

background-size: contain;

Esto no estirará su background-image como lo haría con cover. Se estiraría hasta que el lado más largo alcance el ancho o la altura del contenedor exterior y, por lo tanto, preserve la imagen.

Editar: También hay -webkit-background-size y -moz-background-size.

La propiedad background-size es compatible con IE9+, Firefox 4+, Opera, Chrome y Safari 5+.

- Fuente: W3 Escuelas

 12
Author: kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-09 17:28:32

Tamaño del fondo: 200px 50px cámbialo a 100% 100% y escalará según las necesidades de la etiqueta de contenido como ul li o div... lo probé

 3
Author: mihai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-03 13:08:48

Usted puede totalmente con 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;
 }

Esto dimensionará una imagen de fondo al 100% del ancho del elemento body y luego redimensionará el fondo en consecuencia a medida que el elemento body redimensiona para resoluciones más pequeñas.

Aquí está el ejemplo: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/

 3
Author: Mike Sinkula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-11 14:05:19

Solo tienen divs anidados para ser compatibles con el navegador cruzado

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   
 2
Author: Cornelius Lamb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-14 19:56:03

En apoyo de la respuesta que @tetra dio, quiero señalar que si la imagen es un SVG, entonces no es necesario cambiar el tamaño de la imagen real.

Dado que un archivo SVG es solo XML, puede especificar el tamaño que desee que aparezca dentro del XML.

Sin embargo, si está utilizando la misma imagen SVG en diferentes lugares y necesita que tenga diferentes tamaños, entonces usar background-size es muy útil. Los archivos SVG son inherentemente más pequeños que las imágenes rasterizadas de todos modos y cambiar el tamaño sobre la marcha con CSS puede ser muy útil sin ningún costo de rendimiento que soy consciente de, y ciertamente poca o ninguna pérdida de calidad.

Aquí hay un ejemplo rápido:

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

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

(Nota: esto funciona para mí en OS X 10.7 con Firefox 8, Safari 5.1 y Chrome 16.0.912.63)

 2
Author: SunSparc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-10 20:19:09

Puedes usar dos elementos <div>:

  • Uno es un contenedor (es el que originalmente quería el imagen de fondo para aparecer en).

  • El segundo está contenido dentro. Se establece su tamaño en el tamaño de la imagen de fondo (o el tamaño que desea que aparezca).

El div contenido se establece entonces para ser posicionado absolute. De esta manera no interfiere con el flujo normal de elementos en el div que contiene.

Le permite utilice las imágenes de sprite de manera eficiente.

 2
Author: Ben Shomer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-16 15:53:03

No se puede establecer el tamaño de la imagen de fondo con la versión actual de CSS (2.1).

Solo se puede configurar: position, fix, image-url, repeat-mode, y color.

 1
Author: knittl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-29 21:11:40
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;
 1
Author: Shwetha S.H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-13 12:57:29

Has escrito

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

Pero solo verá el fondo dependiendo del tamaño del contenedor.

Si tiene un contenedor vacío con la url de fondo y cualquiera que sea el tamaño de fondo, no verá el bg.gif.

Si establece el tamaño del continer en

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

Combinado con el código que escribiste arriba, podrás ver el bg.archivo gif.

 1
Author: Carlos Calla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-22 05:07:55

Si desea establecer background-size en la misma propiedad background puede usar use:

background:url(my-bg.png) no-repeat top center / 50px 50px;
 1
Author: Orlando Leite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 23:18:43

background-size está funcionando en Chrome 4.1, pero hasta ahora no pude hacer que funcione en Firefox 3.6.

 0
Author: silversky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-29 21:13:31

Utilizo imágenes de fondo para los botones, pero solo muestra la imagen del mismo tamaño que el texto, incluso si establezco ancho y alto. En su lugar, relleno mi texto con caracteres &nbsp; (espacios que no se rompen). Abofeteo en tantos como sea necesario, básicamente, hasta que todo el fondo del botón aparece. Así que podría tener un código como este:

En la hoja de estilo:

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

En el 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 -->
 0
Author: Martin Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-02 08:22:41

Por ejemplo:
La imagen de fondo siempre se ajustará al tamaño del contenedor (ancho 100% y 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;

}

 0
Author: skyrosbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-28 20:10:09

Esto es posible hacer en CSS3 con background-size

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}
 0
Author: omkar khade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-10 07:59:01