Al een tijdje worstel ik, ongetwijfeld net als andere frontend ontwikkelaars, met een écht goede oplossing voor responsive images. Uiteindelijk denk ik, voor nu, een goede oplossing te hebben gevonden maar er blijft iets knagen. Ik ben daarom benieuwd naar jullie mening.
De oplossing die ik nu inzet is deze: Srcset & sizes. Het gaat uit van de nieuwe spec van srcset en is op het oog erg interessant. De werking in het kort:
Wat dit doet: je geeft de browser 3 afbeeldingen in de sourceset mee, en geeft per afbeelding aan wat de breedte ervan is. In het sizes attribuut geef je middels media queries aan hoe de afbeelding zich dient gedragen. In dit geval: bij een minimale viewport breedte van 700px, toon de afbeelding als 700px. In alle andere gevallen, toon de afbeelding op 100% van de viewport breedte. De browser kiest uit de srcset vervolgens zelf het relevante bestand (ook rekening houdend met pixel density).
Prima idee. Maar waar ik mee zit, is dat ik dus opmaak in mijn DOM moet gaan stoppen. In dit geval die media query die aangeeft dat het plaatje zich in een kolom van 700px breed bevindt. Dit voelt op de één of andere manier heel vies; je wilt opmaak en content gescheiden houden.
Ik snap dat het niet anders kan: de rendering gebeurt hier op een ander niveau dan de rendering van de CSS, dus je kunt dit (tenzij je trucs gaat uithalen met background images) niet puur in CSS oplossen. Maar ondanks dat ik het snap, voelt het alsof het niet klopt. Het druist in tegen hoe ik vind dat het zou moeten werken. Als ik op een later moment besluit dat de kolom 600px breed is, dan moet ik dat zowel in de CSS als in de HTML gaan aanpassen. Dat is niet echt DRY.
Wat is jullie idee hierover? Wie gebruikt deze methode? En waarom gebruik je het? Of waarom juist niet?
De oplossing die ik nu inzet is deze: Srcset & sizes. Het gaat uit van de nieuwe spec van srcset en is op het oog erg interessant. De werking in het kort:
HTML:
1
2
3
| <img srcset="large.jpg 1400w, medium.jpg 700w, small.jpg 400w" sizes="(min-width: 700px) 700px, 100vw" alt="A woman reading"> |
Wat dit doet: je geeft de browser 3 afbeeldingen in de sourceset mee, en geeft per afbeelding aan wat de breedte ervan is. In het sizes attribuut geef je middels media queries aan hoe de afbeelding zich dient gedragen. In dit geval: bij een minimale viewport breedte van 700px, toon de afbeelding als 700px. In alle andere gevallen, toon de afbeelding op 100% van de viewport breedte. De browser kiest uit de srcset vervolgens zelf het relevante bestand (ook rekening houdend met pixel density).
Prima idee. Maar waar ik mee zit, is dat ik dus opmaak in mijn DOM moet gaan stoppen. In dit geval die media query die aangeeft dat het plaatje zich in een kolom van 700px breed bevindt. Dit voelt op de één of andere manier heel vies; je wilt opmaak en content gescheiden houden.
Ik snap dat het niet anders kan: de rendering gebeurt hier op een ander niveau dan de rendering van de CSS, dus je kunt dit (tenzij je trucs gaat uithalen met background images) niet puur in CSS oplossen. Maar ondanks dat ik het snap, voelt het alsof het niet klopt. Het druist in tegen hoe ik vind dat het zou moeten werken. Als ik op een later moment besluit dat de kolom 600px breed is, dan moet ik dat zowel in de CSS als in de HTML gaan aanpassen. Dat is niet echt DRY.
Wat is jullie idee hierover? Wie gebruikt deze methode? En waarom gebruik je het? Of waarom juist niet?