2012-05-02 11 views
11

Ispirato a this question, in cui il poster indica casualmente che è necessario utilizzare <object> anziché <img> per incorporare immagini nei documenti HTML.È valido includere immagini con <object> anziché <img>?

Attualmente sto sviluppando un'applicazione web e, essendo un perfezionista, cerco di rendere tutto lucido e conforme a tutti gli standard. Per quanto ne so, il tag <img> deve essere sconsigliato nei prossimi standard per XHTML, e come al giorno d'oggi anche IE è in grado di gestire <object> correttamente, ho voluto utilizzare il tag <object> per tutte le immagini sul mio sito

È diventato chiaro che gli "imminenti standard" di cui parlava il poster erano le specifiche abbandonate XHTML2, che non hanno nemmeno formalmente prosciolto lo <img>. (Anche se apparentemente c'erano rumors.)

In base alle mie conoscenze, non ho visto nessuno nella comunità di sviluppo web che promuovesse l'uso del tag general purpose <object> oltre che discutibilmente più semantico e tag decisamente più compatibile con <img>.

C'è una buona ragione per utilizzare <object> anziché <img>? Dovrebbe essere utilizzato lo <object> al posto di <img> – cosa potrebbe causare questa interruzione?

risposta

6

L'unica volta in cui ho visto un oggetto utilizzato per mostrare un'immagine è creare un "fallback" quando l'oggetto previsto non può essere caricato per qualsiasi motivo. Prendete questo 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> 

Solo mai il tentativo di caricare un'immagine tramite un oggetto è fondamentalmente la rimozione del significato semantico fuori dell'immagine, che vorrei prendere in considerazione molto cattiva pratica.

+0

ho visto la stessa cosa quando uso l'oggetto per incorporare il pdf con il fallback di img – albert

4

non è valido motivo per utilizzare object anziché img. object è sempre stato supportato in modo incoerente e disordinato. Utilizzare img per immagini, embed per contenuto flash e video o audio per contenuto multimediale. Fondamentalmente l'unico utilizzo di left object è per invocare plugin specifici.

Detto questo, la posizione filosofica per l'esistenza di object è ancora molto buona. Doveva essere un elemento generico per qualsiasi tipo di contenuto che può contenere contenuti di fallback annidati. W3C/XHTML2 aveva una roadmap molto idealistica per html che enfatizzava la purezza sintattica e semantica e voleva fare cose come consentire href su qualsiasi elemento (eliminando a) ed eliminare img in favore di object. Tuttavia, i browser non sembrano mai ricevere object direttamente in un modo completamente generico. Inoltre, era difficile definire le API js per un elemento generico object. Questa è una grande ragione per cui video e audio sono separati-- object che serve un video non espone le API video js.

Tuttavia, XHTML2 perduto e HTML5 ha vinto e HTML5 favorisce img, in modo da utilizzare img.

+0

Suppongo che intendessi XHTML2 perso? Inoltre, la filosofia di XHTML2 di favorire un generico '' elemento in diretta opposizione di purezza semantica? '' significa nulla; '' significa che è un'immagine. – josh3736

+0

Typo - xhtml2 perso. I tipi 'object' dovevano essere distinti dall'attributo' type'. Semanticamente stavano cercando di unificare i vari metodi inconsistenti di incorporare il contenuto. Quindi 'object' sussume' iframe', 'embed',' applet', 'img', ecc. Non hanno visto il tipo mime come semanticamente significativo. Ciò è coerente con la distinzione della rappresentazione delle risorse in html, in cui lo stesso URL potrebbe potenzialmente rispondere con un'immagine o un video (in qualsiasi numero di formati diversi) a seconda della negoziazione del tipo di contenuto. Penso che questo modo di pensare sia diventato troppo puro per essere pratico. –

+0

XHTML2 non ha eliminato 'img' a favore di' object'. L'elemento 'img' era in XHTML2 fino alla fine. Ma XHTML2 ha permesso l'attributo 'src' su qualsiasi elemento, il che farebbe agire come un elemento' img', quindi l'elemento 'img' non era in gran parte necessario in XHTML2. – Alohci

11

Per rispondere alla domanda nell'intestazione: sì, è valido, naturalmente. La validità di un elemento object non dipende nemmeno dal tipo di dati da incorporare. Se volevi chiedere se è corretto, allora la risposta è sì, non c'è nulla nelle specifiche che lo vieterebbe o lo raccomanderebbe contro.

Tra i possibili motivi dell'utilizzo di object per incorporare un'immagine, il più pratico è che consente al contenuto di fallback di contenere il codice HTML, ad esempio intestazioni, elenchi, tabelle e marcatura di frasi. L'elemento img consente di specificare solo il testo normale come contenuto di fallback, anche le interruzioni di paragrafo non possono essere specificate.

Per motivi di accessibilità, qualsiasi immagine deve avere il contenuto di riserva da rendere, ad es. quando il documento viene utilizzato nella navigazione non visuale (screen reader, braille, ecc.) o l'immagine non viene visualizzata per un motivo o per un altro. Per qualsiasi immagine ricca di contenuti (ad esempio un organigramma o un disegno che descrive un processo complesso), il contenuto di fallback deve essere lungo e deve avere una struttura.

Tuttavia, è raro utilizzare object per incorporare un'immagine. L'importanza del contenuto di fallback non è ampiamente compresa, e considerazioni pratiche economiche e tecniche spesso causano l'ignoranza dei problemi di fallback. Inoltre, object ha una lunga storia di implementazione lenta, buggy e qualitativamente scarsa nei browser. Solo recentemente è diventato possibile utilizzare object in modo abbastanza sicuro per l'inclusione di immagini.

La domanda su quale elemento è più semantico è per lo più futile e le risposte riflettono in genere vari modi per fraintendere il concetto "semantico". Sia img e object significano inclusione (incorporamento) di contenuto esterno. L'elemento img è in linea di principio per l'inclusione di immagini, qualunque cosa significhi, anche se è stato anche usato per includere video. Per l'elemento object, l'attributo type può essere utilizzato per specificare il tipo di contenuto incorporato, in base a un tipo di immagine specifico, ad es. type=image/gif oppure potrebbe essere lasciato aperto.

Ciò implica che l'elemento object è più flessibile: è possibile lasciare il tipo non specificato, lasciandolo specificare nelle intestazioni HTTP. In questo modo, il tipo di dati incorporati potrebbe essere modificato senza modificare l'elemento object o il documento di incorporamento in generale; ad esempio, potresti iniziare con una versione semplice in cui il contenuto incorporato è un'immagine, successivamente sostituita da un documento HTML (contenente un'immagine e un testo, ad esempio).

Problemi correlati