2009-12-22 167 views
30

He aprendido que es una buena práctica especificar explícitamente las dimensiones de la imagen. El navegador ya puede diseñar la página mientras sigue descargando las imágenes, mejorando así (percibido) el tiempo de renderización de la página.Dónde especificar las dimensiones de la imagen para una representación más rápida: ¿en HTML o en CSS?

¿Es esto cierto? Y si es así, ¿existe alguna diferencia al especificar las dimensiones en HTML o CSS?

  • HTML: <img src="" width="200" height="100">
  • CSS en línea: <img src="" style="width: 200px; height: 100px">
  • CSS externa: #myImage { width: 200px; height: 200px; }

Respuesta

33

Según Google Page Speed, que en realidad no importa si especifica las dimensiones a través de CSS o HTML, siempre y cuando su CSS apunta a la etiqueta IMG sí mismo y no un elemento principal:

Cuando el navegador establece la página, necesita poder fluir alrededor de elementos reemplazables como imágenes. Puede comenzar a mostrar una página incluso antes de que se descarguen las imágenes, siempre que conozca las dimensiones para envolver los elementos no reemplazables. Si no se especifican dimensiones en el documento que lo contiene, o si las dimensiones especificadas no coinciden con las de las imágenes reales, el navegador requerirá un reflujo y volverá a pintar una vez que se descarguen las imágenes. Para evitar reflujos, especifique el ancho y el alto de todas las imágenes, ya sea en la etiqueta HTML o en CSS.

Sin embargo, tenga en cuenta que aconsejan no cambiar el tamaño de la imagen utilizando estas dimensiones, es decir, utilizar siempre las dimensiones reales:

No utilizar especificaciones de anchura y altura para reducir las imágenes sobre la marcha. Si un archivo de imagen es realmente de 60 x 60 píxeles, no configure las dimensiones a 30 x 30 en HTML o CSS. Si la imagen debe ser más pequeña, mézclela en un editor de imágenes y configure sus dimensiones para que coincidan (consulte Optimizar imágenes para obtener más información.)

+0

Este es el tipo de respuesta que estaba buscando. Pero, viniendo de Google, ¿esto solo se aplica a Chrome u otros navegadores? – Daan

+4

Google no discrimina entre navegadores. Nunca. –

+1

No puedo hablar por ellos, pero no creo que discriminen entre navegadores. Google Page Speed ​​tiene como objetivo agilizar toda la Internet, y para todos los usuarios, por lo que dar consejos específicos para su navegador (que tiene una participación de mercado muy baja) no sería muy útil ... – Wookai

1

Creo CSS le da más flexibilidad: puede establecer específicamente la anchura o altura, mientras que el establecimiento de la otra dimensión a auto. Pero al establecer ambas dimensiones, no creo que haya una diferencia.

+0

¡Realmente también puedes hacerlo con HTML, omitiendo un atributo! Sin embargo, CSS le da más flexibilidad ya que también puede usar 'min-width',' max-height' et al. – bobince

+1

En la mayoría de los navegadores, si solo establece una dimensión, la otra es automática de forma predeterminada. –

3

Tiendo a hacerlo en el CSS. Esto es ciertamente una ganancia cuando hay varias imágenes con las mismas dimensiones (por lo que puede hacer cosas como .comment img.usergroup { width: 16px; height: 16px; }), y tienen las mismas imágenes sujetas a escala en diferentes hojas de estilo, como los temas seleccionables por el usuario.

Cuando tiene imágenes completamente independientes que se usan en el sitio solo una vez, no tiene sentido abstraer su tamaño a CSS, por lo que la versión HTML probablemente sería más apropiada allí.

+0

"tienen las mismas imágenes sujetas a escala en diferentes hojas de estilo" - literalmente, los mismos archivos de imagen? ¿No encuentras que tienden a parecer un poco basura en IE? –

+0

Esto tiene sentido desde el punto de vista de codificación/mantenimiento, pero en este caso estoy especialmente interesado en el rendimiento de la representación: ¿qué método hace que la página se reproduzca más rápido? – Daan

+1

@Paul: no necesariamente; algunas imágenes, como los GIF de bloque simple, pueden diseñarse específicamente para escalar. Además en IE7 + obtienes interpolación bicúbica opcional para que el resto del material no se vea mal. @Daan: no habrá una diferencia medible. En diferentes navegadores, el HTML o el CSS pueden, en teoría, tener un camino más directo hacia el renderizador (en Firefox, es el CSS), pero la diferencia será más allá de minúscula. – bobince

1

Si coloca una imagen grande en una página HTML sin dimensiones, debe notar que el diseño de la página cambia a medida que se descarga la imagen (a través de una conexión a Internet, si no localmente).

Según otras respuestas, no hace mucha diferencia si lo hace en HTML o CSS.

+2

Muchos buscadores ganaron No renderice nada antes de que el CSS sea analizado de todos modos. Ciertamente, el CSS bajará antes que las imágenes. (Consulte "flash de contenido sin estilo" para la discusión de cuándo esto no sucede.) – bobince

+0

Sí, eso es cierto. –

1

Esto no responde su pregunta directamente, pero no confiaría en las dimensiones de su imagen para el diseño de página. En su lugar, incluya la imagen en un elemento de nivel de bloque. Esto alivia tanto el HTML como el CSS de tener que contener información que realmente no debería, ya que la imagen puede cambiar de vez en cuando.

Cuestiones relacionadas