Cuándo utilizar IMG vs CSS background-image?


¿En qué situaciones es más apropiado usar una etiqueta HTML IMG para mostrar una imagen, en lugar de una CSS background-image, y viceversa?

Los factores pueden incluir la accesibilidad, el soporte del navegador, el contenido dinámico o cualquier tipo de límites técnicos o principios de usabilidad.

Author: system PAUSE, 2009-01-29

30 answers

Usos apropiados de IMG

  1. Use IMG si tiene la intención de tener people imprima su página y desea que la imagen se incluya de forma predeterminada. - JayTee
  2. Use IMG (con alttexto) cuando la imagen tenga un significado semántico importante, como un icono de advertencia. Esto garantiza que el significado de la imagen se pueda comunicar en todos los agentes de usuario, incluidos los lectores de pantalla.

Usos pragmáticos de IMG

  1. Use IMG más alt atributo si la imagen es parte del contenido como un logotipo o diagrama o persona (persona real, no personas de fotos de archivo). - sanchothefat
  2. Utilice IMG si se basa en el escalado del navegador para representar una imagen en proporción al tamaño del texto.
  3. Use IMG para múltiples imágenes superpuestas en IE6.
  4. Use IMG con un z-index en orden para estirar una imagen de fondo para llenar toda su ventana.
    Nota, esto ya no es cierto con CSS3 background-size; ver #6 abajo.
  5. Usar img en lugar de background-image puede mejorar drásticamente el rendimiento de las animaciones sobre un fondo.

Cuándo usar CSS background-image

  1. Utilice imágenes de fondo CSS si el la imagen no forma parte del contenido. - sanchothefat
  2. Use imágenes de fondo CSS cuando haciendo imagen-reemplazo de texto por ejemplo. párrafos / encabezados. - sanchothefat
  3. Utilizar background-image si va a tener people imprima su página y no desea que la imagen se incluya de forma predeterminada. - JayTee
  4. Use background-image si necesita mejorar los tiempos de descarga, como con sprites CSS.
  5. Use background-image si necesita que solo una parte de la imagen sea visible, como con los sprites CSS.
  6. Use background-image con background-size:cover para estirar una imagen de fondo para llenar toda su ventana.
 690
Author: system PAUSE,
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
2017-09-19 15:45:43

Es una decisión en blanco y negro para mí. Si la imagen es parte del contenido, como un logotipo o diagrama o persona (persona real, no personas de fotos de archivo), use la etiqueta <img /> más el atributo alt. Para todo lo demás hay imágenes de fondo CSS.

El otro momento para usar imágenes de fondo CSS es cuando se hace el reemplazo de imágenes de texto, por ejemplo. párrafos / encabezados.

 272
Author: roborourke,
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-01-29 18:31:43

Me sorprende que nadie haya mencionado esto todavía: Transiciones CSS.

Puede hacer una transición nativa de la imagen de fondo de div:

#some_div {
    background-image:url(image_1.jpg);
    -webkit-transition:background-image 0.5s;
    /* Other vendor-prefixed transition properties */
    transition:background-image 0.5s;
}

#some_div:hover {
    background-image:url(image_2.jpg);
}

Esto guarda cualquier tipo de animación JavaScript o jQuery para desvanecer un <img/>'s src.

Más información sobre las transiciones en MDN.

 98
Author: Robbie JW,
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
2017-01-02 08:32:04

Las respuestas anteriores solo consideran el aspecto del diseño . Lo estoy listando en aspectos SEO.

Cuándo usar <img />

  1. Cuando tu imagen necesita ser indexada por el motor de búsqueda
  2. Si tiene relación con el contenido no con el diseño.
  3. Si su imagen no es demasiado pequeña (no imágenes icónicas ).
  4. Imágenes donde se puede añadir alt y title atributo.
  5. Imágenes de una página web que desea imprimir utilizando print media css

Cuándo usar CSS background-image

  1. Imágenes Utilizadas Exclusivamente para Diseñar.
  2. Ninguna Relación Con El Contenido.
  3. Pequeñas imágenes que podemos jugar con CSS3.
  4. Repitiendo imágenes (En el icono del autor del blog, el icono de fecha se repetirá para cada artículo, etc.,).

Ya que los usaré basados en estas razones. Estas son buenas prácticas de Optimización de Motores de Búsqueda de Imágenes.

 57
Author: subhash,
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
2015-06-23 06:54:09

Los navegadores no siempre están configurados para imprimir imágenes de fondo de forma predeterminada; si desea que la gente imprima su página:)

 48
Author: JayTee,
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-01-29 18:32:03

Si tiene su CSS en un archivo externo, entonces a menudo es conveniente mostrar una imagen que se usa con frecuencia en todo el sitio (como una imagen de encabezado) como imagen de fondo, porque entonces tiene la flexibilidad de cambiar la imagen más tarde.

Por ejemplo, supongamos que tiene el siguiente HTML:

<div id="headerImage"></div>

...y CSS:

#headerImage {
    width: 200px;
    height: 100px;
    background: url(Images/headerImage.png) no-repeat;
}

Unos días después, cambia la ubicación de la imagen. Todo lo que tienes que hacer es actualizar el CSS:

#headerImage {
    width: 200px;
    height: 100px;
    background: url(../resources/images/headerImage.png) no-repeat;
}

De lo contrario, tendría que actualizar el atributo src de la etiqueta <img> apropiada en cada archivo HTML (suponiendo que no esté utilizando un lenguaje de scripting del lado del servidor o CMS para automatizar el proceso).

También las imágenes de fondo son útiles si no desea que el usuario pueda guardar la imagen (aunque nunca he necesitado hacer esto).

 46
Author: Steve Harrison,
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
2015-07-30 15:07:20

Casi lo mismo que la respuesta de sanchothefat, pero desde un aspecto diferente. Siempre me pregunto: si eliminara completamente las hojas de estilo del sitio web, ¿los elementos restantes solo pertenecen al contenido? Si es así, hice bien mi trabajo.

 40
Author: Török Gábor,
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
2017-05-23 12:02:56

Algunas respuestas complican el escenario aquí. Esta es una situación muy simple.

Solo responde a esta pregunta cada vez que quieras colocar una imagen:

¿Es esto parte del contenido o parte del diseño?

Si no puedes responder a esto, ¡probablemente no sepas lo que estás haciendo o lo que quieres hacer!

Además, NO considere al lado de las dos técnicas, solo porque desea ser "imprimible" o no. También NO ocultar contenido desde un punto de vista SEO con CSS. Si te encuentras administrando tu contenido en archivos CSS, te disparas en la pierna. Esto es solo una decisión trivial de lo que es contenido o no. Todos los demás aspectos deben ser ignorados.

 37
Author: Dyin,
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-06-22 08:58:17

Añadiría otros dos argumentos:

  • Una etiqueta img es buena si necesita cambiar el tamaño la imagen. Por ejemplo, si la imagen original es 100px por 100 px, y desea que sea 80px por 80px, puede establecer el ancho CSS y la altura de la etiqueta img. No conozco ninguna buena manera de hacer esto usando background-image. EDITAR: Esto ahora también se puede hacer con una imagen de fondo, utilizando el background-size Atributo CSS3.

  • Usando background-image es buena cuando necesitas cambiar dinámicamente entre sprites. Por ejemplo, si tiene una imagen de botón y desea que se muestre una imagen separada cuando el cursor se desplace sobre el elemento, puede usar una imagen de fondo que contenga los sprites normal y hover, y cambiar dinámicamente la posición del fondo.

 26
Author: Anders Rabo Thorbeck,
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-06-11 13:11:31

Foreground = img.

Background = CSS background.

 15
Author: cjk,
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-05-22 18:03:51

Utilice imágenes de fondo solo cuando sea necesario, por ejemplo, contenedores con imágenes que se teselan.

Uno de los mayores PROS al usar IMÁGENES es que es mejor para SEO.

 13
Author: Marc Uberstein,
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
2010-09-18 14:14:18

Usando una imagen de fondo, necesita especificar absolutamente las dimensiones. Esto puede ser un problema significativo si realmente no los conoce de antemano o no puede determinarlos.

Un gran problema con <img /> son las superposiciones. ¿Qué pasa si quiero una sombra interior CSS en mi imagen (box-shadow:inset 0 0 5px rgb(0,0,0,.5))? En este caso, dado que <img /> no puede tener elementos secundarios, debe usar posicionamiento y agregar elementos vacíos que equivalen a marcado inútil.

En conclusión, es bastante situacional.

 12
Author: Mat,
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-02-16 14:21:15

Un beneficio más del uso de la etiqueta está relacionado con el SEO, es decir, puede proporcionar información adicional sobre la imagen en el atributo ALT de la etiqueta de imagen, mientras que no hay forma de proporcionar dicha información al especificar la imagen a través de CSS y en ese caso solo el nombre del archivo de imagen puede ser indexado por los motores de búsqueda. El atributo ALT definitivamente le da a la etiqueta ventaja SEO sobre el enfoque CSS. Por eso, según mi opinión, es mejor especificar las imágenes que desea clasificar bien en los resultados de búsqueda de imágenes (por ejemplo, Búsqueda de imágenes de Google) utilizando la etiqueta .

 12
Author: Pavel Vladov,
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
2018-03-28 14:01:18

Un par de otros escenarios donde background-image debe usarse:

  • Cuando quiera que la imagen cambie cuando el ratón se mueva sobre ella.
  • Cuando desee agregar esquinas redondeadas a la imagen. Si utiliza img, la imagen se filtra por las esquinas redondeadas.
 11
Author: Behrang,
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-08-09 12:25:56

Use CSS background-image en un caso de múltiples skins o versiones de diseño. Javascript se puede usar para cambiar dinámicamente una clase de un elemento, lo que lo obligará a renderizar una imagen diferente. Con una etiqueta IMG, puede ser más complicado.

 9
Author: MK_Dev,
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-02-13 18:29:07

He aquí una consideración técnica: ¿se generará la imagen dinámicamente? Suele ser mucho más fácil generar la etiqueta <img> en HTML que intentar editar dinámicamente una propiedad CSS.

 8
Author: Bryan M.,
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-02-02 22:30:31

En lo que respecta a la animación de imágenes utilizando CSS translateX/Y (La forma correcta de animar html) - Si usted hace una grabación de Chrome Línea de tiempo de CSS de fondo-las imágenes que se animan vs etiquetas IMG que se animan verá que los tiempos de pintura son drásticamente más cortos para las imágenes de fondo CSS.

 7
Author: eivers88,
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-01-11 21:21:30

Hay otra razón! Si tiene un diseño responsivo y desea dividir el uso de imágenes de baja, media y alta resolución para dispositivos a través de consultas de medios, también debe usar fondos.

 7
Author: Maarten,
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-01-28 13:44:40

¿Qué pasa con el tamaño de la imagen? Si utilizo la etiqueta img, el navegador escala la imagen. Si utilizo css background, el navegador solo corta un trozo de la imagen más grande.

 6
Author: ,
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-05-22 18:00:17

Además, tengo una sección de galería que tiene tamaños de imagen inconsistentes, por lo que aunque esas imágenes obviamente se consideran contenido, utilizo imágenes de fondo y las centro en divs con un tamaño establecido. Esto es similar a lo que hace Facebook en sus álbumes..

 6
Author: Chris,
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-05-31 17:52:52

Img es una etiqueta html por una razón, por lo que debe usarse. Para referenciar o ilustrar cosas, personas por ejemplo: en artículos.

También si la imagen tiene un significado o tiene que ser seleccionada para un img es mejor que un de fondo css. Para todas las demás situaciones, creo que se puede usar un fondo css .

Aunque, es un tema que necesita ser discutido una y otra vez.

Estudiante de Web de París, Francia

 6
Author: user589956,
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-02-15 06:52:42

Solo una pequeña para agregar, debe usar la etiqueta img si desea que los usuarios puedan 'hacer clic derecho' y 'guardar imagen'/'guardar imagen', por lo que si tiene la intención de proporcionar la imagen como un recurso para otros.

El uso de imagen de fondo (por lo que sé en la mayoría de los navegadores) deshabilitará la opción de guardar la imagen directamente.

 5
Author: dougajmcdonald,
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-11-21 12:52:56

Una pequeña entrada, He tenido problemas con las imágenes responsivas ralentizando el renderizado en iphone hasta por un minuto, incluso con imágenes pequeñas:

<!-- Was super slow -->
<div class="stuff">
    <img src=".." width="100%" />
</div>

Pero al cambiar a usar imágenes de fondo el problema desapareció, esto solo es viable si se dirige a navegadores más nuevos.

 5
Author: winthers,
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-09-06 06:56:07

IMG cargue primero porque el src está en el propio archivo html, mientras que en el caso de background-image el origen se menciona en la hoja de estilos, por lo que la imagen se carga después de cargar la hoja de estilos, retrasando la carga de la página web.

 4
Author: Sagi_Avinash_Varma,
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 13:34:43

HTML es para el contenido y CSS es para el diseño. ¿Es necesaria la imagen y necesita ser recogida por los lectores de pantalla? Si la respuesta es sí, entonces ponga la imagen en el HTML. Si es puramente para el estilo, entonces puede usar la propiedad background-image en CSS para inyectar la imagen. Al igual que muchas personas aquí ya han mencionado, puede usar un pseudo elemento en la imagen si lo desea.

 3
Author: carltonstith,
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-02-15 05:03:49

También tenga en cuenta que la mayoría de las arañas de los motores de búsqueda no indexan imágenes de fondo CSS, por lo tanto, las imágenes de fondo serán ignoradas y no podrá obtener ningún tráfico de los motores de búsqueda (sin beneficio SEO en resumen).

Donde como todas las imágenes definidas con etiquetas están indexadas (a menos que se excluyan manualmente) y pueden traer tráfico de los motores de búsqueda si sus atributos title/alt y nombres de archivo están optimizados correctamente (w.r.t alguna palabra clave).

 3
Author: Nadeem Khan,
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-16 08:39:39

Puede usar etiquetas IMG si desea que las imágenes sean fluidas y se escalen a diferentes tamaños de pantalla. Para mí estas imágenes son en su mayoría parte del contenido. Para la mayoría de los elementos que no forman parte del contenido, uso sprites CSS para mantener el tamaño de descarga mínimo a menos que realmente quiera animar iconos, etc.

 2
Author: shingokko,
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-05-05 03:23:17

Utilizo image en lugar de background-image cuando quiero que sean 100% estirables, lo que es compatible con la mayoría de los navegadores.

 2
Author: max,
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-01-14 16:49:11

Si desea agregar una imagen solo para el contenido especial de la página o para una sola página, debe usar la etiqueta IMG y si desea poner una imagen en más de una página, debe usar la Imagen de fondo CSS.

 2
Author: Vishal Gupta,
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-04-27 19:52:26

Otro fondo-image PRO: Fondo-imágenes para <ul>/<ol> listas.

Utilice imágenes de fondo si forman parte del diseño general y se repiten en varias páginas. Preferiblemente en forma de sprite de fondo para la optimización.

Use etiquetas para todas las imágenes que no forman parte del diseño general y que probablemente se coloquen una vez, como imágenes específicas para artículos, personas e imágenes importantes que merecen agregarse google images.

** La única imagen repetida que encierro en una etiqueta <img> es el logotipo del sitio/empresa. Debido a que la gente tiende a hacer clic en él para ir a la página de inicio, por lo tanto, lo envuelves con una etiqueta <a>.

 2
Author: Gillian Lo Wong,
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-03-03 22:28:32