2012-05-27 13 views
6

E 'possibile mostrare un'immagine alternativa se il file sorgente originale non viene trovato? Mi piacerebbe realizzare questo solo con css e html, senza javascript (o jQuery e simili). L'idea è di mostrare un'immagine al posto del test "alt" o del default (brutto) di IE. Se non fosse possibile senza javascript, allora controllerò piuttosto img src con php con un basic if-then-else.Visualizzazione immagine alternativa

risposta

5

È possibile farlo utilizzando la proprietà background-image CSS dell'elemento img, vale a dire

img 
{ 
background-image:url('default.png'); 
} 

Tuttavia, si deve dare una larghezza o altezza per far funzionare tutto (quando l'img-src non è trovato):

img 
{ 
background-image:url('default.png'); 
width:400px; 
} 
+0

Ha funzionato durante il test? Sul mio Firefox, lo sfondo non viene mostrato quando manca l'immagine reale. Sul mio IE, viene mostrato lo sfondo, ma lo è anche il testo alt o la "×" rossa in una scatola. –

+0

Ho già selezionato l'aswer ma ho ancora una domanda: cosa intendi con "devi dare una larghezza o altezza per far funzionare (quando l'img-src non viene trovato)"? Se il mio tag img ha già larghezza e altezza verrà utilizzato anche dall'immagine di sfondo? – rodedo

+0

Sì, penso che dovrebbe funzionare. – emrea

6
<object data="foobar.png" width=200 height=200> 
    <img src="test.png" alt="Just testing."> 
</object> 

Qui foobar.png è l'immagine primaria, test.png è l'immagine di riserva. Dalla semantica dell'elemento object, il contenuto dell'elemento (qui l'elemento img) deve essere visualizzato se e solo se non è possibile utilizzare i dati primari (specificati dall'attributo data).

Sebbene i browser abbiano riscontrato errori terribili nelle implementazioni di object nell'ultimo anno, questa semplice tecnica sembra funzionare con le versioni moderne di IE, Firefox, Chrome.

+1

Test case: http://jsfiddle.net/VkrJ4/1/ OK in * W7Pro x64 * con Fx 12.0, IE9, Saf 5.1.5 e Op 11.64. Non testato con Chrome/Chromium. Per ora non sono stati testati con lettori di schermo e altri AT (la domanda è: "NVDA, JAWS, VoiceOver, ORCA, ecc. Leggono il testo @alt ai loro utenti?") – FelipeAls

3

Molto semplice e modo migliore per raggiungere questo obiettivo con poco codice

<img class="avatar" src="img/one.jpg" alt="Not Found" onerror=this.src="img/undefined.jpg"> 

Per me la sopra funziona perfettamente!

+0

Un frammento davvero utile che risolve elegantemente il problema. Tuttavia, OP ha chiesto esplicitamente * "di ottenere questo risultato solo con css e html, senza javascript" * – domsson

+0

Inoltre, non dovrebbe essere "onerror =" this.src = 'img/undefined.jpg'; "'? Inoltre, vedi questa domanda per un possibile ciclo infinito e come prevenirlo: http://stackoverflow.com/questions/8124866/how-does-one-use-the-onerror-attribute-of-an-img-element – domsson

Problemi correlati