Le immagini di sfondo sono il male

Scopri perché evitare le immagini di sfondo sul tuo sito web, come trovarle rapidamente e come risolvere questo problema

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2024-11-27

Le immagini di sfondo sono il male

Quelli di voi che mi conoscono o mi hanno sentito parlare potrebbero avermi sentito parlare delle immagini di sfondo. Quelli di voi che non lo sanno: davvero davvero non mi piacciono le immagini di sfondo. In questo articolo spiegherò rapidamente perché non mi piacciono le immagini di sfondo, come trovare rapidamente le pagine con immagini di sfondo e come risolverle!

Perché le immagini di sfondo sono dannose per i Core Web Vitals

Quando si carica una pagina web, ogni elemento ha il suo tempo e il suo posto. Con alcune tecniche moderne come il deferring, il preloading, il caricamento asincrono, lo scheduling, la definizione della fetchpriority ecc ecc possiamo tenere praticamente sotto controllo tutte le risorse critiche. Tranne le immagini di sfondo! 

Consideriamo questo esempio reale:

Quotidianamente, soprattutto nei siti WordPress, vedo questo schema. Tutte le immagini normali sono caricate in lazy loading e alcune immagini (in questo caso le icone social nel footer) sono immagini di sfondo. Riesci a indovinare cosa succede?

<html>
<head>
    <style>
        footer {
            /* a margin of 100 vh wil make the footer off-screen !*/
            >.social {
                >.facebook {background-image: url('img/facebook.jpg');}
                >.instagram {background-image: url('img/instagram.jpg');}
                >.linkedin {background-image: url('img/linkedin.jpg');}
                >.email {background-image: url('img/email.jpg');}
            }
        }
    </style>
</head>
<body>
    <!-- yes this image is lazy loaded, because tiny mistakes happen! -->
    <img loading="lazy" src="img/hero.jpg"></img>
    <footer>
        <div class="social">
            <span class="facebook"></span>            <span class="instagram"></span>            <span class="linkedin"></span>            <span class="email"></divspan        </div>
    </footer>
</body>
</html>

Potresti averlo indovinato: le immagini di sfondo fuori schermo vengono messe in coda per il download prima della ben più importante immagine 'hero.jpg' che di solito diventerà l'elemento Largest Contentful Paint della pagina.

lazy lcp with bg img

Ma non è tutto!

Come ho detto, le immagini di sfondo sono il male! Questo perché, oltre alla strana priorità che a volte ricevono, le immagini di sfondo mancano delle fantastiche funzionalità che le immagini normali hanno!

  • Nessun lazy loading: non esiste un attributo loading per le immagini di sfondo
  • Nessuna decodifica asincrona: non esiste un attributo decoding per le immagini di sfondo
  • Nessuna fetchpriority: non esiste un attributo fetchpriority per le immagini di sfondo
  • Sorgenti immagine responsive: L'attributo image-set() per le immagini di sfondo non ha la stessa potenza di funzionalità che si ottiene con un buon design responsive.
  • Nessun attributo width e height. Non poter impostare i semplici attributi width e height ti costringerà a usare soluzioni alternative che richiedono codice (più codice è sempre più lento di meno codice con la stessa complessità!)
  • Nessun testo alt: anche se questo non

Trovare rapidamente tutte le immagini di sfondo su una pagina

Come facciamo a scoprire se una pagina web ha immagini di sfondo? Beh, potresti controllare l'inspector di rete, filtrare per immagini, fare clic destro sulla barra del menu, abilitare la colonna initiator e controllare l'initiator, ma è molto più facile incollare questo codice nella console di sviluppo.

Apri semplicemente la console di sviluppo con Ctrl-Shift-I, vai alla scheda console e incolla questo codice. Ti mostrerà tutte le immagini di sfondo sulla pagina
let bgimg = performance.getEntriesByType('resource')
  .filter(rs => rs.initiatorType == 'css')
  .map(rs => {
  return {
    name: rs.name,
    initiator: rs.initiatorType
  }
}) || [];

(bgimg.length > 0)?
    console.table(bgimg):
    console.log('No background images on this page!');

Questo ti mostrerà una tabella formattata in modo pulito con tutti i nomi delle immagini di sfondo e i rispettivi initiator

background img console table

Come evitare le immagini di sfondo

Le immagini di sfondo sono facilmente evitabili. Come farlo dipende dall'immagine stessa. Ci sono sostanzialmente 2 metodi.

Nel caso di 'immagini normali'

Non ci crederesti se te lo dicessi, ma nella maggior parte dei casi in cui trovo immagini di sfondo, la parte background dell'immagine non ha nemmeno uno scopo. Le immagini devono semplicemente 'essere da qualche parte nella pagina' e il background-image:url() viene usato impropriamente per questo scopo.
Se questo è il caso, aggiungi semplicemente un normale tag immagine e rimuovi l'immagine di sfondo dal foglio di stile.

Nel caso di immagini cover:

Le immagini cover sono immagini che coprono completamente un contenitore padre. Usare le immagini di sfondo come immagini cover ha un certo senso perché molto tempo fa questo era l'unico modo per ottenere immagini cover e immagino che le persone si attengano a ciò che conoscono. Fortunatamente ci sono opzioni migliori a nostra disposizione. Quindi risolviamolo!
Nel caso di immagini cover, rimuovi semplicemente lo stile   background-image: url(hero.jpg);background-size: cover; e posiziona un'immagine normale nello stesso contenitore e modifica il CSS in questo modo:

<style>
.img-container {
    position: relative;
    > img {
       width: 100%;
       height: 100%;
       object-fit: cover;
       position: absolute;
       z-index: 1;
   }
}
<style>

<div class="img-container">
  <img 
       height="500" 
       width="300" 
       decoding="async" 
       loading="lazy" 
       src="hero.jpg"
       srcset="hero-320w.jpg, hero-480w.jpg 1.5x"
       alt="alt text"
       fetchpriority="low"
  >
</div>


Performance is a Feature.

Treating speed as an afterthought fails. Build a performance culture with a dedicated 2-sprint optimization overhaul.

Initialize Project >>

  • 2-Sprint Overhaul
  • Culture Building
  • Sustainable Speed
Le immagini di sfondo sono il maleCore Web Vitals Le immagini di sfondo sono il male