Ci sono molte cose da tenere a mente quando si offrono immagini agli spettatori.
- Mantieni le proporzioni dell'immagine uguali alle dimensioni originali
Facciamo questo per evitare che l'immagine venga distorta e per evitare che le immagini risultino sfocate. Possiamo mantenere lo stesso rapporto dimensionale o tagliare parti che non si adattano.
Quando si utilizza un <img>
elemento o qualcosa di simile, questo è abbastanza semplice, richiede solo l'uso di un set width
o height
OR set max-width
o max-height
.
Tuttavia, nel caso di un'immagine con larghezza di visualizzazione completa, questo è un po 'più complesso. Esistono diversi modi CSS per farlo , il migliore dei quali è background-size:cover
come il primo esempio collegato nell'articolo e nella risposta di Talkingrock .
Inoltre, ora abbiamo la possibilità di utilizzare le funzionalità che si trovano nelle specifiche delle immagini reattive, incluso srcset
e l' <picture>
elemento, che sono abbastanza utili. Ne parlo più avanti in questa risposta.
- Dai agli spettatori solo le immagini di cui hanno bisogno
Per consentire un caricamento più rapido della pagina e impedire agli utenti di trasferire più dati, è di vitale importanza fornire all'utente finale solo l'immagine o le immagini di cui ha bisogno, quando ne ha bisogno. Ciò significa che serviamo loro un'immagine della stessa dimensione o solo leggermente più grande di quella che stanno usando il viewport e in attesa di caricare immagini che non verranno visualizzate immediatamente fino a dopo il caricamento iniziale della pagina.
Possiamo servire un'immagine di dimensioni più appropriate usando i CSS usando le @media
query quando utilizziamo le immagini di sfondo. Le immagini non nella query multimediale in uso non vengono caricate . Consiglierei di utilizzare almeno tre dimensioni di foto (il che significa almeno 3 query multimediali), ma avere un paio in più potrebbe essere saggio in termini di prestazioni. Di seguito è riportato un esempio, ma di solito dovrebbe coincidere con alcuni punti di interruzione generali per il layout del tuo sito.
@media (max-width: 320px) { /* For phones (this breakpoint is the one I'm least sure about) */
... background-image(imageURLforPhones.png); ...
}
@media (min-width:501px) and (max-width: 1024px) { /* For tablets and such */
... background-image(imageURLforTablets.png); ...
}
@media (min-width: 1025px) { /* For large screens */
... background-image(imageURLforLargeScreens.png); ...
}
Ma ammettiamolo: non siamo bravi a scegliere i punti di interruzione né siamo perfetti nella scelta delle dimensioni dell'immagine data una certa dimensione dello schermo. Non sarebbe bello se potessimo lasciare che qualcosa facesse questo "magicamente" per noi?
La grande notizia è che ora possiamo !
Con la specifica delle immagini reattive, possiamo consentire al browser di decidere tutto questo per noi, a condizione che lo aiutiamo un po '. La srcset
proprietà sempre così utile può essere utilizzata con un <img>
o un <picture>
elemento. Per cambiare la risoluzione come stiamo facendo qui, dovremmo usare un <img>
elemento.
Di seguito è riportato un esempio dell'HTML necessario per consentire srcset
di svolgere il proprio lavoro. Per di più, puoi leggere l' ottimo articolo di Yoav Weiss sull'argomento. L'esempio è tratto da esso.
<img src="cat_500px.jpg"
srcset="cat_750px.jpg 1.5x, cat_1000px.jpg 2x"
width="500" alt="lolcat">
Nota a margine: se devi servire la stessa immagine con dimensioni diverse a determinate dimensioni della finestra, puoi utilizzare l' sizes
attributo.
Non sto dicendo che usare srcset
sia necessariamente meglio che usare un'immagine di sfondo CSS, non ho fatto abbastanza lavoro da solo per dirlo con certezza, ma è potenzialmente un modo migliore.
Inoltre, per aiutare con le prestazioni possiamo "caricare lentamente" le immagini che inizialmente non saranno visibili. Ciò significa che impediamo il loro caricamento iniziale ma iniziamo a caricarli non appena il caricamento della pagina iniziale è terminato. In questo modo possiamo far sì che lo spettatore veda la pagina il prima possibile e riempia alcuni dettagli in seguito. Ecco un modo per farlo, non entrerò nei dettagli in questo momento.
- Assicurati che sia mostrato il contenuto nell'immagine che vuoi mostrare
Se abbiamo le dimensioni corrette e le prestazioni eccezionali è fantastico, ma se lo spettatore non vede ciò che vogliamo che vedano, non ha senso. Se mostriamo l'immagine completamente tutto il tempo, questo non è un problema, ma se dobbiamo ritagliare l'immagine, questo può essere un problema.
Possiamo ritagliare background-image
usando CSS usando background-size
e background-position
(e una specie di utilizzo clip
, ma di solito è usato per forme più artistiche e complesse). I dettagli esatti varieranno da un'immagine all'altra a seconda di come viene implementata.
La seconda opzione è usare l' <picture>
elemento. Lo usiamo quando vogliamo che solo una parte dell'immagine venga mostrata, come visto qui , ma ecco un semplice esempio in pratica (tratto dal fantastico articolo di Jason Grigsby su questo argomento).
<picture>
<source media="(min-width: 45em)" srcset="large.jpg">
<source media="(min-width: 32em)" srcset="med.jpg">
<img src="small.jpg" alt="The president giving an award.">
</picture>
Voglio ribadire, se hai solo bisogno di fare il cambio di risoluzione non usare l' <picture>
elemento , basta usare l' <img>
elemento con srcset
. L'unica volta in cui abbiamo bisogno <picture>
dell'elemento è per questa direzione artistica, che significa ritaglio, ecc.
C'è anche la possibilità di fare un po 'di ritaglio sul lato server, usare una maschera SVG o fare qualcosa con Canvas, ma questo è un po' al di fuori dell'ambito di questa risposta.
Alcune altre note
I punti di interruzione specifici non sono così importanti. Come per tutto il design reattivo, è importante fare il meglio che possiamo per tutte le finestre, ma non ci sono query multimediali che saranno perfette per tutti i siti.
Il tempo di caricamento della pagina è molto importante e le immagini possono rallentare di molto il tempo di caricamento iniziale. Assicurati di caricare le immagini che verranno immediatamente visualizzate prima, quindi altre. Cerca di evitare che le immagini (come i JPEG) mostrino parte dell'immagine mentre carica il resto. Ottimizza anche tutte le tue immagini in modo che abbiano la dimensione del file più piccola possibile pur mantenendo la quantità di qualità richiesta.
È importante ricordare che le immagini, nella maggior parte dei casi, dovrebbero essere un accessorio, non una necessità. Consiglio di testare sempre l'aspetto di una pagina Web senza immagini per assicurarsi che sia utilizzabile.
Nota : possiamo usare un polyfill chiamato Picturefill per servire browser meno recenti che non supportano la specifica delle immagini reattive.