2012-05-02 20 views
11

Inspirado por this question, donde el cartel indica por casualidad que <object> se debe utilizar en lugar de <img> para incrustar imágenes en documentos HTML.¿Es válido incluir imágenes con <object> en lugar de <img>?

Estoy desarrollando una aplicación web en este momento, y, siendo un perfeccionista, trato de hacerlo todo brillante y compatible con todos los estándares. Por lo que yo sé, la etiqueta <img> debe ser obsoleto en los próximos estándares para xHTML, y como en la actualidad, incluso IE es capaz de manejar <object> adecuadamente, quería utilizar la etiqueta <object> para todas las imágenes en mi sitio

Se hizo evidente que los "próximos estándares" de los que hablaba el póster eran las especificaciones abandonadas de XHTML2, que ni siquiera desaprobaban formalmente <img> de todos modos. (Aunque aparentemente hubo rumors en ese sentido.)

Según mi leal saber y entender, no he visto a nadie en la comunidad de desarrollo web abogar por el uso de la etiqueta <object> de uso general sobre la semántica y definitivamente más compatible <img> etiqueta.

¿Hay una buena razón para usar <object> en lugar de <img>? ¿Debe usarse <object> incluso en lugar de <img> –? ¿Qué podría romper esto?

Respuesta

6

La única vez que he visto un objeto utilizado para mostrar una imagen es crear un "repliegue" cuando el objeto deseado no se puede cargar por alguna razón. Tome este example from the W3 specs:

<OBJECT title="The Earth as seen from space" classid="http://www.observer.mars/TheEarth.py"> 
    <!-- Else, try the MPEG video --> 
    <OBJECT data="TheEarth.mpeg" type="application/mpeg"> 
     <!-- Else, try the GIF image --> 
     <OBJECT data="TheEarth.gif" type="image/gif"> 
      <!-- Else render the text --> 
      The <STRONG>Earth</STRONG> as seen from space. 
     </OBJECT> 
    </OBJECT> 
</OBJECT> 

Sólo alguna vez de intentar cargar una imagen a través de un objeto es la eliminación básicamente el significado semántico fuera de la imagen, lo que yo consideraría muy mala práctica.

+0

he visto lo mismo cuando uso el objeto para incrustar el pdf con la img fallback – albert

4

No hay ninguna razón válida práctica para usar object en lugar de img. object siempre ha sido compatible de forma inconsistente y desordenada. Use img para imágenes, embed para contenido flash y video o audio para contenido multimedia. Básicamente, el único uso de object que queda es para invocar complementos específicos.

Dicho esto, la posición filosófica para la existencia de object sigue siendo muy buena. Se suponía que era un elemento genérico para cualquier tipo de contenido que pueda contener contenido anidado de reserva. W3C/XHTML2 tenía una hoja de ruta muy idealista para html que enfatizaba la pureza sintáctica y semántica y quería hacer cosas como permitir href en cualquier elemento (eliminando a) y eliminar img a favor de object. Sin embargo, los navegadores nunca parecen obtener object justo de una manera completamente genérica. Además, fue difícil definir las API js para un elemento genérico object. Esa es una gran razón por la cual video y audio están separados-- object al publicar un video no expondrá las API de video js.

Sin embargo, XHTML2 perdió y HTML5 ganó y HTML5 favorece img, así que use img.

+0

Supongo que quería decir XHTML2 perdido? Además, ¿no es la filosofía de XHTML2 de favorecer un elemento genérico '' en oposición directa a la pureza semántica? '' no significa nada; '' significa que es una imagen. – josh3736

+0

Error de Typo - xhtml2. Se suponía que los tipos 'object' se discernían mediante el atributo' type'. Semánticamente estaban tratando de unificar los diversos métodos inconsistentes de incrustación de contenido. Así que 'object' subsume' iframe', 'embed',' applet', 'img', etc. No vieron el tipo de mime como semánticamente significativo. Esto es coherente con la distinción html de representación de recursos, donde la misma url podría responder con una imagen o un video (en cualquier cantidad de formatos diferentes) dependiendo de la negociación del tipo de contenido. Creo que esta manera de pensar terminó siendo demasiado pura para ser práctica. –

+0

XHTML2 no eliminó 'img' a favor de' object'. El elemento 'img' estaba en XHTML2 justo hasta el final. Pero XHTML2 permitía el atributo 'src' en cualquier elemento, lo que lo haría actuar como un elemento' img', por lo que el elemento 'img' era innecesario en XHTML2. – Alohci

11

Para responder la pregunta en el encabezado: sí, es válido, por supuesto. La validez de un elemento object ni siquiera depende del tipo de datos que se incrustan. Si desea preguntar si es correcto, la respuesta es sí, no hay nada en las especificaciones que lo prohíban o recomienden en su contra.

Entre las posibles razones para usar object para incrustar una imagen, lo más práctico es que permite que el contenido alternativo contenga marcas HTML, como encabezados, listas, tablas y marcas de frase. El elemento img le permite especificar solo texto sin formato como contenido alternativo; incluso los saltos de párrafo no se pueden especificar.

Por razones de accesibilidad, cualquier imagen debe tener contenido alternativo para representar, p. cuando el documento se utiliza en navegación no visual (lector de pantalla, Braille, etc.) o la imagen no se muestra por una razón u otra. Para cualquier imagen rica en contenido (por ejemplo, un organigrama o un dibujo que describa un proceso complejo), el contenido alternativo debe ser largo y debe tener cierta estructura.

Sin embargo, es raro utilizar object para incrustar una imagen. La importancia del contenido alternativo no se entiende ampliamente, y las consideraciones prácticas económicas y técnicas a menudo hacen que los problemas de retroceso sean ignorados. Además, object tiene una larga historia de implementación lenta, con errores y cualitativamente deficiente en navegadores. Solo recientemente se ha vuelto viable usar object con bastante seguridad para la inclusión de imágenes.

La pregunta qué elemento es más semántica es sobre todo inútil, y las respuestas suelen reflejar simplemente diferentes maneras de malinterpretar el concepto “semántica”. Tanto img y object significa la inclusión (incrustación) de contenido externo. El elemento img es, en principio, para la inclusión de imágenes, lo que sea que eso signifique, aunque también se ha utilizado para incluir videos. Para el elemento object, el atributo type se puede usar para especificar el tipo de contenido incrustado, hasta el tipo de imagen específico, p. Ej. type=image/gif, o puede dejarse abierto.

Esto implica que el elemento object es más flexible: puede dejar el tipo no especificado, permitiendo que se especifique en encabezados HTTP. De esta forma, el tipo de datos incrustados podría cambiarse sin cambiar el elemento object o el documento incrustado en general; Por ejemplo, puede comenzar con una versión simple donde el contenido incrustado es una imagen, luego lo reemplaza por un documento HTML (que contiene una imagen y texto, por ejemplo).

Cuestiones relacionadas