Probabilmente sono un po 'raro in quanto mi è piaciuto piuttosto cercare di tenere il passo con le immagini reattive. È un problema interessante che ha prodotto molte soluzioni interessanti. Il tutto però sta iniziando a concludere adesso, ora che le soluzioni ufficiali sono:
e amici
Diciamo che siamo su uno schermo 1x. Poiché abbiamo detto al browser che utilizzeremo queste immagini il più grande possibile (100% della visualizzazione), i "punti di interruzione" per quando il browser capovolgerà le immagini avverranno a 1280px, 640px e 320px, le stesse dimensioni esatte che abbiamo detto per le immagini.
Se siamo su uno schermo 2x, quei "punti di interruzione" verranno dimezzati (indipendentemente da ciò che effettivamente facciamo per ridimensionare quelle immagini) e saranno a 640px, 320px e 160px.
Supponiamo ora di utilizzare le stesse immagini, ma sappiamo molto di più sul layout della nostra pagina e abbiamo usato qualcosa del genere:
Qui stiamo dicendo (con l'
sizes
attributo), se il viewport è di 500px o inferiore, intendiamo visualizzare l'immagine a 250px di larghezza. Se la visualizzazione è più ampia di quella, visualizza l'immagine con una larghezza di 500 px.Ciò corrisponderebbe a CSS in questo modo:
img ( width: 500px; ) @media (max-width: 500px) ( img ( width: 250px; ) )
Su uno schermo 1x, otterrai sempre l'immagine 320w (piccola) quando il viewport è largo 500px o più piccolo, e otterrai sempre l'immagine 640w (medio) quando il viewport è più grande. Non otterrai mai l'immagine grande, perché può dire che non avrai mai bisogno di tanti pixel.
Su uno schermo 2x, otterrai sempre l'immagine 640w (media) quando il viewport è largo 500px o più piccolo (perché pensa di aver bisogno di 500px di pixel e il piccolo non è sufficiente a 320px), e otterrai sempre il Immagine 1280w (grande) quando il riquadro di visualizzazione è più grande. Non otterrai mai l'immagine piccola, perché non sono mai abbastanza pixel per coprire ciò che hai detto a cui intendi renderizzare l'immagine.
Dimensionamento effettivo
Ricorda che il dimensionamento effettivo dell'immagine dipende da te. Penso che nella maggior parte dei casi sia tu a farlo tramite CSS. E il CSS vince sempre. Ciò che dichiari sarà la larghezza renderizzata dell'immagine, indipendentemente da ciò che accade con le cose
srcset
esizes
. Questo funziona solo quale immagine verrà mostrata.Questo è ciò che rende l'attributo delle taglie un po 'difficile. Diciamo che hai qualcosa come:
.container ( width: 80%; ) .container article ( width: 50%; ) .container article img ( width: 33.33% )
Non è affatto insolito. Quindi ora quale dimensione usi
sizes
nell'attributo? Sarebbe il 13,33% (moltiplicali tutti insieme) perché quel numero deve essere relativo alla visualizzazione, non al contenitore. E questo non tiene conto dei margini, del riempimento e del resto su quei contenitori, quindi è una specie di supposizione. Immagino che conteggi stretti in ferri di cavallo, bombe a mano e attributo taglie.Quindi supponiamo che arrivi una media query e il corpo diventi effettivamente largo il 75% oltre a tutto ciò. Devi saperlo in modo da poter regolare quello che pensi che saranno le dimensioni delle immagini renderizzate. L'attributo delle taglie potrebbe diventare:
sizes="(min-width: 500px) 8%, 13.33%"
Quindi ripeti l'operazione per ogni query multimediale di layout che hai che influisce sulle immagini dei contenuti. Può diventare un po 'complesso.
Dimensioni pratiche?
Sospetto che la maggior parte dell'utilizzo nel mondo reale utilizzerà qualcosa come:
Supponendo che le immagini del contenuto saranno circa la metà della dimensione della finestra del browser su schermi di grandi dimensioni e l'intera dimensione della finestra del browser su schermi piccoli, lascia che i punti di interruzione si verifichino dove si verificano. Avrai comunque una scelta abbastanza decente in questo modo senza schiavizzare la corrispondenza esatta di tutte le tue query multimediali.
E ricorda che queste sono immagini di contenuto. L'HTML tende a durare più a lungo di CSS o JS, specialmente quando è contenuto.
Altre cose da sapere
Puoi anche specificare se un'immagine è 2x o 1x con srcset. Quindi un caso d'uso davvero semplice può essere:
Questo da solo è piuttosto utile. Non mescolarlo con la specifica di larghezze. Come dice Eric Portis:
E di nuovo lasciatemi sottolineare che sebbene sia possibile allegare descrittori di risoluzione 1x / 2x alle fonti
srcset
invece che aiw
descrittori, 1x / 2x & w non si mescolano. Non usare entrambi nello stessosrcset
. Veramente.E ricordi quando ho detto che il picturefill originale era facile? Il nuovo
può essere così facile, ma anche gli
elementi all'interno
supportano
srcset
esizes
. Ciò significa che puoi essere molto specifico. Aggiunge un altro livello a questo:- Tu decidi quale
Collegamenti
- L'articolo di Martin Wolf che lo ha ispirato
- Picturefill è il polyfill che desideri utilizzare.
- Articolo di Smashing Magazine su Picturefill 2.0 di Tim Wright
- Eric Portis spiega perché esistono Srcset e size e cosa risolve meglio delle media query
- Eric Portis con di più sul nuovo
Guarda il testcase Pen srcset e taglie di Chris Coyier (@chriscoyier) su CodePen.
- Tu decidi quale