Quando utilizzare l'immagine di sfondo IMG vs. CSS?


777

In quali situazioni è più appropriato utilizzare un IMGtag HTML per visualizzare un'immagine, al contrario di un CSS background-image, e viceversa?

I fattori possono includere accessibilità, supporto del browser, contenuto dinamico o qualsiasi tipo di limiti tecnici o principi di usabilità.


Hai bisogno che l'immagine occupi spazio o vuoi sovrascriverla?
geowa4,

9
Come aggiornamento, dal momento che questo è abbastanza alto su Google, il ridimensionamento del browser e l'estensione delle immagini per l'immagine di sfondo sono ora possibili e abbastanza ampiamente supportati (IE8 e sotto, ovviamente, essendo l'eccezione), rendendo discutibili gli articoli 4 e 7 in casi che può consentire un fallback o ignorare un tale effetto per IE8 e versioni precedenti. caniuse.com/#search=background-image
Shauna

ottimo e utile post, aggiungerò una domanda per il confronto, il vantaggio del css è anche l'effetto hover? questo può essere replicato usando i tag img?
ericosg,

In genere aggiungo sia l'attributo alt che l'attributo title a tutte le immagini di contenuto. Non è preferibile?
Hartley,

2
Inoltre img può avere una mappa con aree cliccabili e suggerimenti
Vitim.us

Risposte:


797

Usi corretti di IMG

  1. Utilizzare IMGse si desidera che le persone stampino la tua pagina e desideri che l'immagine venga inclusa per impostazione predefinita. - JayTee
  2. Utilizzare IMG(con alttesto) quando l'immagine ha un significato semantico importante, come un'icona di avviso . Ciò garantisce che il significato dell'immagine possa essere comunicato in tutti gli user-agent, compresi gli screen reader.

Usi pragmatici di IMG

  1. Utilizzare l' IMGattributo più alt se l'immagine fa parte del contenuto, ad esempio un logo, un diagramma o una persona (persona reale, non persone di archivio fotografico). - sanchothefat
  2. Utilizzare IMGse si fa affidamento sul ridimensionamento del browser per eseguire il rendering di un'immagine in proporzione alla dimensione del testo.
  3. Utilizzare IMG per più immagini overlay in IE6 .
  4. Utilizzare IMGcon z-indexa per allungare un'immagine di sfondo per riempire l'intera finestra.
    Nota, questo non è più vero con le dimensioni dello sfondo CSS3; vedi # 6 di seguito.
  5. L'utilizzo imginvece di background-imagepuò migliorare notevolmente le prestazioni delle animazioni su uno sfondo.

Quando utilizzare l'immagine di sfondo CSS

  1. Usa immagini di sfondo CSS se l'immagine non fa parte del contenuto . - sanchothefat
  2. Usa immagini di sfondo CSS quando esegui la sostituzione di immagini del testo, ad es. paragrafi / intestazioni. - sanchothefat
  3. Utilizzare background-imagese si desidera che le persone stampino la pagina e non si desidera che l'immagine venga inclusa per impostazione predefinita. - JayTee
  4. Utilizzare background-imagese è necessario migliorare i tempi di download, come con gli sprite CSS .
  5. Utilizzare background-imagese è necessario che solo una parte dell'immagine sia visibile, come con gli sprite CSS.
  6. Utilizzare background-imagecon background-size:coverper allungare un'immagine di sfondo per riempire l'intera finestra.

3
Sono ancora incerto sulle immagini di sfondo per la parte di sostituzione del testo. Vedo persone che usano immagini di sfondo e quindi testo-indent: -9999px per il testo. Tuttavia, so che avere rientri di testo come questo in passato era dannoso per il SEO e immagino che debba ancora essere per alcuni motori di ricerca. Ma soprattutto, se si disattivano le immagini ma si lascia CSS sull'immagine scompare ma il testo è ancora fuori dallo schermo. Per quanto mi riguarda, il testo alternativo su un'immagine è utile se le immagini non vengono visualizzate, quindi i tag img sono migliori.
Scott Reed,

53
Uso pragmatico dell'immagine di sfondo : quando non vuoi perdere i capelli per problemi di centratura verticale (di immagini di varie dimensioni verticali);)
Frank Nocke

12
Sì, problemi di centraggio verticale: porta Flexbox!
Dean_Wilson,

3
@BinaryFunt - In <div class="my-css-page-styles" style="background-image:url(blah.png);"></div>questo modo puoi modellarlo nel tuo foglio di stile CSS ma se l'immagine di sfondo è più una questione di contenuto che di stile, lo stai ancora modificando dal lato HTML delle cose.
Jimbo Jonny,

2
Sembra esserci un clickbait al punto 5 degli usi pragmatici di IMG - che punta a un post sul blog giapponese sui cosmetici. il link è www.ajaxline.com/browsers-performance-in-dependence-of-html-coding [NON FARE CLIC
SU

292

È una decisione in bianco e nero per me. Se l'immagine fa parte del contenuto come un logo o un diagramma o una persona (persona reale, non persone di archivio fotografico), utilizzare il <img />tag più l'attributo alt. Per tutto il resto ci sono immagini di sfondo CSS.

L'altra volta per utilizzare le immagini di sfondo CSS è quando si esegue la sostituzione di immagini del testo, ad es. paragrafi / intestazioni.


Caso eccellente! CON - Usa l'immagine di sfondo quando fai la sostituzione dell'immagine del testo.
sistema PAUSA

2
Questo è un punto giusto, ma sicuramente la sostituzione dell'immagine del testo (ad es. Per un'intestazione) richiederebbe di aggiungere un "alt" per consentire agli screen reader di leggerlo? O nel caso in cui le immagini non vengano visualizzate, ottieni ancora l'intestazione? Sì, un'intestazione e quindi in stile sarebbe meglio, ma sicuramente vuoi il testo?
Theo Scholiadis,

4
@TheoScholiadis usando la sostituzione delle immagini non significa usare un'immagine al posto del testo, ma nascondere il testo in qualche modo usando i CSS e fornire l'immagine come sfondo usando i CSS. Il documento rimane semanticamente intatto.
Roborourke,

57
Personalmente odio quando non riesco a copiare "testo" perché in realtà è un'immagine. Chiamami pigro ma ehi ...
Shaz,

1
Quando hai bisogno di un'immagine per scopi SEO, usa il tag img con l'attributo alt. Altrimenti usa l'immagine in background usando css.
Super Model

107

Sono sorpreso che nessuno ne abbia ancora parlato: transizioni CSS .

Puoi trasferire nativamente l' divimmagine di sfondo di un:

#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);
}

Ciò consente di risparmiare ogni tipo di JavaScript o jQuery animazione a svanire un <img/>'s src.

Ulteriori informazioni sulle transizioni su MDN .


3
Questa non è una buona ragione. Si potrebbe avere un div con 2 immagini nobilitate, e il seguente CSS: #some_div { transition: opacity 0.5s; }, #some_div:hover #top_img { opacity: 0; }
warkentien2

5
Se leggi l'articolo MDN collegato (o le specifiche di w3c), scoprirai che l'immagine di sfondo NON è una delle proprietà che è animabile e che qualsiasi browser che lo fa (Chrome) non stia seguendo gli standard web. Detto questo, penso che dovrebbe essere, ed è un bell'effetto facile, quindi sono deluso dal fatto che non faccia parte dello standard.
Robert McKee,

73

Le risposte di cui sopra considerano solo l'aspetto del design. Lo sto elencando in aspetti SEO.

Quando usare <img />

  1. Quando la tua immagine deve essere indicizzata dal motore di ricerca
  2. Se ha relazione con il contenuto, non progettare.
  3. Se la tua immagine non è troppo piccola (non immagini iconiche).
  4. Immagini in cui è possibile aggiungere alte titleattribuire.
  5. Immagini da una pagina Web che si desidera stampare utilizzando i supporti di stampa css

Quando utilizzare i CSS background-image

  1. Immagini utilizzate esclusivamente per la progettazione.
  2. Nessuna relazione con il contenuto.
  3. Piccole immagini che possiamo riprodurre con CSS3.
  4. Ripetizione delle immagini (nell'icona dell'autore del blog, l'icona della data verrà ripetuta per ogni articolo, ecc.).

Come li userò sulla base di questi motivi. Queste sono buone pratiche di ottimizzazione delle immagini da parte dei motori di ricerca.


54

I browser non sono sempre impostati per stampare immagini di sfondo per impostazione predefinita; se hai intenzione di far stampare la tua pagina alle persone :)


9
Sembra: PRO - Usa IMG se vuoi che l'immagine venga stampata di default. CON: utilizzare l'immagine di sfondo se non si desidera che l'immagine venga stampata per impostazione predefinita. Ben fatto!
sistema PAUSA

7
Penso che l'idea sia quella di avere stili CSS separati per la sola stampa che nascondano le immagini o li trasformino in qualcosa di più appropriato.
Blazemonger,

52

Se hai il tuo CSS in un file esterno, è spesso conveniente visualizzare un'immagine che viene utilizzata frequentemente sul sito (come un'immagine di intestazione) come immagine di sfondo, perché in questo modo hai la flessibilità di modificare l'immagine in un secondo momento.

Ad esempio, supponiamo di avere il seguente HTML:

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

... e CSS:

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

Pochi giorni dopo, si cambia la posizione dell'immagine. Tutto quello che devi fare è aggiornare il CSS:

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

Altrimenti, dovresti aggiornare l' srcattributo del <img>tag appropriato in ogni file HTML (supponendo che non stai usando un linguaggio di scripting lato server o CMS per automatizzare il processo).

Anche le immagini di sfondo sono utili se non vuoi che l'utente sia in grado di salvare l'immagine (anche se non ho mai avuto bisogno di farlo).


14
Le immagini di sfondo possono sicuramente essere salvate con un po 'di spelunking di fonti di visualizzazione minimale, non solo con il tasto destro del mouse su un'immagine.
Michael Hackner,

2
Firefox. Pulsante destro del mouse. "Visualizza immagine di sfondo". Non così difficile.
TRiG,

1
@TRiG A meno che non ci sia una sovrapposizione trasparente o una modifica del menu contestuale specifica della pagina per impedirti di farlo. L'ho già visto prima, e secondo me è abbastanza sciocco perché non hai nemmeno bisogno di fare lo spelunking nel sorgente, se la pagina è stata caricata completamente, almeno in Firefox puoi fare clic su Strumenti> Informazioni sulla pagina / alt + t, i / fare clic con il pulsante destro del mouse e selezionare Visualizza informazioni sulla pagina, passare alla sezione Media e salvare tutti gli elementi desiderati dall'elenco. Naturalmente, ci sono modi per impedirlo, come incorporare l'immagine in un file Flash o altri strani trucchi, ma anche quelli possono essere aggirati o spiegati.
JAB,

Penso che la tecnica di fondo non sia abbastanza buona per negare a un utente di salvare l'immagine ...
ncubica,

45

Quasi uguale alla risposta di sanchothefat , ma da un aspetto diverso. Mi chiedo sempre: se rimuovessi completamente i fogli di stile dal sito Web, gli elementi rimanenti appartengono solo al contenuto? Se è così, ho fatto bene il mio lavoro.


42

Alcune risposte complicano troppo lo scenario qui. Questa è una situazione semplice morta.

Rispondi a questa domanda ogni volta che desideri posizionare un'immagine:

Questa parte del contenuto o parte del design?

Se non riesci a rispondere a questa domanda, probabilmente non sai cosa stai facendo o cosa vuoi fare!

Inoltre, NON considerare oltre alle due tecniche, solo perché vorresti essere "amico della stampante" o meno. Inoltre, NON nascondere i contenuti da un punto di vista SEO con CSS. Se ti ritrovi a gestire i tuoi contenuti nei file CSS, ti sei sparato alla gamba. Questa è solo una decisione banale di ciò che è contenuto o no. Ogni altro aspetto dovrebbe essere ignorato.


Mi piace questa risposta. È molto chiaro I restanti problemi come la facilità di stampa o SEO dovrebbero essere considerati individualmente in ogni scenario.
Juan Herrera,

28

Vorrei aggiungere altri due argomenti:

  • Un tag img è utile se è necessario ridimensionare l'immagine. Ad esempio, se l'immagine originale è 100 px per 100 px e si desidera che sia 80 px per 80 px, è possibile impostare la larghezza e l'altezza CSS del tag img. Non conosco alcun buon modo per farlo usando l'immagine di sfondo. EDIT: questo può ora essere fatto anche con un'immagine di sfondo, usando l' background-sizeattributo CSS3.

  • L'uso dell'immagine di sfondo è utile quando è necessario passare dinamicamente da uno sprite all'altro . Ad esempio, se si dispone di un'immagine del pulsante e si desidera visualizzare un'immagine separata quando il cursore si sposta sull'elemento, è possibile utilizzare un'immagine di sfondo contenente sia gli sprite normali che quelli al passaggio del mouse e modificare dinamicamente la posizione dello sfondo.


2
Questa è davvero una buona risposta, in particolare il punto di ridimensionamento. La gente sosterrà che puoi usare lo sfondo, ma se stai cercando di supportare i vecchi browser non è necessariamente il modo migliore per andare.
Dudewad,

1
Ecco come si fa in CSSbackground-size: 80px 80px;
Kareem,

2
Grazie @Kareem. Vedo che questo è stato introdotto con CSS3, che non esisteva ancora quando ho risposto inizialmente. Ho modificato la mia risposta per riflettere questo.
Anders Rabo Thorbeck,

Penso che sia importante notare che il ridimensionamento delle foto può essere complicato in termini di pixelizzazione o interpolazione. Quando possibile, non ridimensionerei più del 40% (e questo è un allungamento - il 20% è standard) senza portare l'immagine in un software di imaging fotografico per ridimensionarla correttamente senza perdere la qualità. La qualità DPI può essere importante qui se non ci sono abbastanza informazioni per allungare e riempire la quantità di pixel assegnata.
Dale Landry,

18

Un ulteriore vantaggio derivante dall'uso del tag <IMG> è legato al SEO, ovvero è possibile fornire ulteriori informazioni sull'immagine nell'attributo ALT del tag immagine, mentre non è possibile fornire tali informazioni quando si specifica l'immagine tramite CSS e in quello caso solo il nome del file immagine può essere indicizzato dai motori di ricerca. L'attributo ALT offre sicuramente il vantaggio SEO <IMG> rispetto all'approccio CSS. Ecco perché secondo me è meglio specificare le immagini che si desidera classificare bene nei risultati della ricerca di immagini (ad es. Google Ricerca immagini) utilizzando il tag <IMG>.


immagini di sfondo I valori ALT possono essere definiti nella Sitemap. google.com/schemas/sitemap-image/1.1
Kareem

17

Primo piano = img.

Sfondo = sfondo CSS.


5
Certo, ma per quanto riguarda il piccolo indicatore a freccia in giù accanto al pulsante "menu" o altri elementi simili. Come classifichi quel primo piano o lo sfondo?
Dudewad,

@dudewad Direi in primo piano, perché sono (visivamente) nel livello "superiore" della pagina, sovrapposti ad altri elementi.
jkdev

14

Utilizzare le immagini di sfondo solo quando necessario, ad esempio contenitori con immagini che tessono.

Uno dei principali PRO utilizzando IMMAGINI è che è meglio per la SEO .


3
Probabilmente perché puoi usare l'attributo alt.
David,

4
Non dipende dal fatto che VUOI SEO per quella specifica immagine? Non vedo perché dovresti cercare SEO su un'immagine che fa parte dello stile della pagina, non del contenuto (ad esempio un'icona e-mail sulla tua pagina di contatto). Quindi, in realtà, preferirei cambiare la tua affermazione. Utilizzare le IMMAGINI solo quando necessario (che è legato al contenuto, alla stampa e / o al SEO).
Volzy,

12

Utilizzando un'immagine di sfondo, è necessario specificare assolutamente le dimensioni. Questo può essere un problema significativo se non li conosci in anticipo o non riesci a determinarli.

Un grosso problema con <img /> è rappresentato dalle sovrapposizioni. Cosa succede se desidero un'ombra interna CSS sull'immagine ( box-shadow:inset 0 0 5px rgb(0,0,0,.5))? In questo caso, poiché <img />non possono avere elementi figlio, è necessario utilizzare il posizionamento e aggiungere elementi vuoti che equivalgono a markup inutili.

In conclusione, è abbastanza situazionale.


11

Un paio di altri scenari in cui background-imagedovrebbe essere utilizzato:

  • Quando si desidera che l'immagine cambi quando si passa il mouse su di essa.
  • Quando si desidera aggiungere angoli arrotondati all'immagine. Se si utilizza img, l'immagine fuoriesce dagli angoli arrotondati.

In realtà puoi fare:img { border-radius: 10px; }
Rafff

@RafcioKowalsky hai ragione. Non riesco a ricordare le condizioni esatte in cui border-radiusnon funzionava.
Behrang Saeedzadeh,

10

Usa l'immagine di sfondo CSS in un caso di più skin o versioni di design. Javascript può essere utilizzato per modificare dinamicamente una classe di un elemento, che lo costringerà a rendere un'immagine diversa. Con un tag IMG, potrebbe essere più complicato.


puoi anche modificare dinamicamente l'attributo src di un tag immagine, altrettanto semplice come cambiare una classe
roborourke,

3
@sanchothefat, vero, tuttavia, in questo caso la fonte dell'immagine dovrebbe essere mantenuta in JS anziché CSS. Il file css IMO sarebbe più appropriato per mantenere il nome del file.
MK_Dev,

7

Ecco una considerazione tecnica: l'immagine verrà generata in modo dinamico? Tende a essere molto più semplice generare il <img>tag in HTML piuttosto che provare a modificare dinamicamente una proprietà CSS.


1
E gli stili in linea? Questa domanda non deve davvero essere decisa da questa idea.
viam0Zah

forse dovrei esprimere la frase in questo modo: preferiresti lavorare con un elemento DOM o un attributo element?
Bryan M.

probabilmente vale la pena considerare bacl nel '09, ma con jQuery questo non è certo un problema. È ancora più facile e più fluido cambiare css o classi su un elemento, piuttosto che cambiare elemento.
dfherr,

7

E la dimensione dell'immagine? Se uso il tag img, il browser ridimensiona l'immagine. Se uso lo sfondo CSS, il browser taglia solo un pezzo dall'immagine più grande.


7

Per quanto riguarda l'animazione delle immagini usando CSS TranslateX / Y (Il modo corretto di animare html) - Se esegui una registrazione nella timeline di Chrome delle immagini di sfondo CSS animate rispetto ai tag IMG animati, vedrai che i tempi di pittura sono drasticamente più brevi per il CSS sfondo-immagini.


7

C'è un altro motivo! Se si dispone di un design reattivo e si desidera dividere l'utilizzo di immagini a bassa, media e alta risoluzione per dispositivi tramite query multimediali, è necessario utilizzare anche gli sfondi.


1
maarten, terscheling non è Pipeable che ho sentito da Vincent Willems. Quindi, come pensi che possa funzionare su PyMol
Mehdi Nellen,

1
Si prega di fare riferimento alla documentazione su quanto è tubabile pieterpeitshoeve.nl/rondleiding
Maarten

@Maarteen, immagino che ora si possa fare usando i tag html 5 di immagine e sorgente
Tick20

6

Inoltre, ho una sezione della galleria che ha dimensioni dell'immagine incoerenti, quindi anche se quelle immagini sono ovviamente considerate contenuto, io uso immagini di sfondo e le centro in div con una dimensione impostata. Questo è simile a quello che fa Facebook nei loro album.


6

img è un tag html per un motivo, quindi dovrebbe essere usato. Per fare riferimento o per illustrare cose, persone ad es .: negli articoli.

Anche se l'immagine ha un significato o deve essere cliccabile, un img è migliore di uno sfondo CSS . Per tutte le altre situazioni, penso, uno sfondo css può usare .

Tuttavia, è un argomento che deve essere discusso più volte.

Studente web da Parigi, Francia


5

Solo un piccolo da aggiungere, dovresti usare il tag img se vuoi che gli utenti siano in grado di "fare clic con il tasto destro" e "salva immagine" / "salva immagine", quindi se intendi fornire l'immagine come risorsa per altri.

L'uso dell'immagine di sfondo disabilita (per quanto ne so sulla maggior parte dei browser) l'opzione per salvare l'immagine direttamente.


5

Un piccolo input, ho avuto problemi con le immagini reattive che rallentavano il rendering su iPhone fino a un minuto, anche con immagini piccole:

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

Ma quando si passa all'utilizzo delle immagini di sfondo il problema è scomparso, questo è praticabile solo se si punta ai browser più recenti.


Hai qualche supporto o spiegazione per questo comportamento?
Todd,

Siamo spiacenti, non ho idea del perché rallenterebbe la pagina in una scansione ... forse il ri-flusso nel browser su iPhone ha pochissime risorse.
Winthers

4

IMGcaricare prima perché srcè nel file html stesso mentre nel caso del background-imagesorgente è menzionato nel foglio di stile, quindi l'immagine viene caricata dopo il caricamento del foglio di stile, ritardando il caricamento della pagina web.


Inoltre alcuni browser (ad esempio Firefox 35) sembrano aggiornare CSS background-imagedopo qualche tempo: se hai diverse schede aperte, quando torni alla tua scheda dopo qualche tempo lo sfondo CSS è vuoto per un po '.
Skippy le Grand Gourou

3

HTML è per contenuti e CSS per design. L'immagine è necessaria e deve essere raccolta dagli screen reader? Se la risposta è sì, inserisci l'immagine in HTML. Se è puramente per lo stile, è possibile utilizzare la proprietà immagine di sfondo nei CSS per iniettare l'immagine. Proprio come molte persone qui hanno già menzionato, puoi usare uno pseudo elemento sull'immagine se vuoi.


3

Inoltre, la maggior parte degli spider dei motori di ricerca non indicizza le immagini di sfondo CSS, pertanto le immagini di sfondo verranno ignorate e non sarai in grado di ottenere traffico dai motori di ricerca (nessun vantaggio SEO in breve).

Dove tutte le immagini definite con i tag sono indicizzate (a meno che non vengano escluse manualmente) e possono portare traffico dai motori di ricerca se i loro attributi titolo / alt e nomi dei file sono ottimizzati correttamente (scrivere qualche parola chiave).


2

È possibile utilizzare i tag IMG se si desidera che le immagini siano fluide e ridimensionate su schermi di dimensioni diverse. Per me queste immagini sono per lo più parte del contenuto. Per la maggior parte degli elementi che non fanno parte del contenuto, utilizzo gli sprite CSS per ridurre al minimo le dimensioni del download a meno che non voglia davvero animare icone, ecc.


2

Uso l'immagine anziché l'immagine di sfondo quando voglio renderli estensibili al 100%, supportati nella maggior parte dei browser.


2

Se vuoi aggiungere un'immagine solo per il contenuto speciale della pagina o per una sola pagina, dovresti usare il tag IMG e se vuoi mettere l'immagine su più di una pagina, allora dovresti usare l'immagine di sfondo CSS.


2

Un'altra immagine di sfondo PRO: Immagini di sfondo per <ul>/<ol> elenchi.

Usa le immagini di sfondo se fanno parte del disegno complessivo e sono ripetute su più pagine. Preferibilmente in forma di sprite in background per l'ottimizzazione.

Usa i tag per tutte le immagini che non fanno parte del design complessivo e che molto probabilmente vengono posizionate una volta, come immagini specifiche per articoli, persone e immagini importanti che meritano di essere aggiunte alle immagini di Google.

** L'unica immagine ripetuta che allego in un <img>tag è il logo del sito / dell'azienda. Perché le persone tendono a fare clic su di esso per andare alla home page, quindi lo avvolgi con un <a>tag.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.