edubun
Nederlands

Responsief ontwerp met mediaqueries

Zonder één metatag delen veel telefoons een pagina in alsof het scherm veel breder is (MDN noemt 980 pixels als voorbeeld) en verkleinen die daarna, zodat een mediaquery voor telefoons nooit wordt uitgevoerd.

Eén pagina, elk scherm

Responsief ontwerp betekent één pagina bouwen die zich aanpast aan elk scherm waarop die terechtkomt, van een smalle telefoon tot een brede monitor, in plaats van een aparte mobiele site te maken. Het berust op drie ideeën: een indeling met flexibele in plaats van vaste breedten, media die binnen hun containers meeschalen en mediaqueries die de indeling aanpassen waar die niet meer werkt. Flexbox en grid doen al veel werk, zoals je in de laatste twee hoofdstukken zag met omlopende kaarten en auto-fill-kolommen.

De viewport-metatag

Veel telefoons geven pagina's weer in een virtueel weergavevenster dat breder is dan het scherm, volgens MDN bijvoorbeeld 980 pixels, en verkleinen daarna het resultaat, omdat oudere sites voor desktops zijn gebouwd. Voor een pagina die zich moet aanpassen, zit dat in de weg: een mediaquery die onder 600 pixels moet inschakelen, wordt nooit uitgevoerd, omdat de browser denkt dat het scherm 980 pixels breed is. <meta name="viewport" content="width=device-width"> in de head vertelt de browser de werkelijke apparaatbreedte te gebruiken, gemeten in CSS-pixels. Voeg nooit user-scalable=no of een lage maximum-scale toe; MDN waarschuwt dat zoom blokkeren slechtzienden uitsluit en WCAG 1.4.4 verwacht dat tekst tot 200 procent vergroot kan worden.

Vloeiende breedten en afbeeldingen

Vaste breedten zijn de meest voorkomende oorzaak van zijwaarts scrollen op telefoons. Geef de voorkeur aan max-width boven width: max-width: 70rem op een paginaomhulsel laat het een klein scherm vullen en stoppen met groeien op een groot scherm. Afbeeldingen behouden standaard hun natuurlijke pixelgrootte, dus een foto van 1200 pixels loopt buiten een scherm van 390 pixels. Met img { max-width: 100%; height: auto; } kunnen afbeeldingen krimpen om in hun container te passen en hun verhoudingen behouden. WCAG 1.4.10, Reflow, vraagt dat inhoud op een breedte van 320 CSS-pixels werkt zonder in twee richtingen te scrollen. Je pagina in een venster van 320 pixels breed controleren is een goede gewoonte.

Mediaqueries

Een mediaquery omhult regels die alleen gelden als een voorwaarde waar is. @media (min-width: 600px) { ... } past de regels toe wanneer het weergavevenster minstens 600 pixels breed is. De gebruikelijke aanpak is mobile first: schrijf de basisstijlen voor een smal scherm, vaak de eenvoudigste (één kolom, alles onder elkaar), en voeg daarna min-width-queries toe die de indeling veranderen zodra de ruimte groeit. Kies breekpunten waar je inhoud er verkeerd begint uit te zien, niet door populaire apparaatformaten te gokken, want elk jaar verschijnen nieuwe schermformaten. Als je breekpunten in em schrijft, zoals 40em, reageren ze ook wanneer een lezer de tekst vergroot.

/* Base: one column for narrow screens */
.cols { display: grid; gap: 16px; }

/* From 600px: two columns */
@media (min-width: 600px) {
  .cols { grid-template-columns: 1fr 1fr; }
}

/* From 960px: a sidebar layout */
@media (min-width: 960px) {
  .cols { grid-template-columns: 240px 1fr 1fr; }
}
Mobile first: basisstijlen en daarna min-width-queries die kolommen toevoegen.
Dezelfde HTML op 390 en 1280 pixels: onder elkaar op de telefoon, een zijbalk en twee kolommen op het brede scherm.

Andere dingen die een query kan vragen

Mediaqueries kunnen meer dan breedte testen. De lezersvoorkeuren komen uit Media Queries Level 5: (prefers-color-scheme: dark) geldt wanneer de lezer in het besturingssysteem een donker thema heeft gekozen, zodat je automatisch donkere kleuren kunt aanbieden. (prefers-reduced-motion: reduce) geldt wanneer de lezer om minder beweging heeft gevraagd, vaak omdat animatie duizelig maakt; schakel daarin grote bewegingen en parallaxeffecten uit. (hover: hover), uit Level 4, vertelt of de primaire aanwijzer boven iets kan zweven, wat een aanraakscherm niet kan. print geeft een pagina opmaak voor papier, bijvoorbeeld door het menu te verbergen. Ten slotte maakt clamp() afmetingen vloeiend zonder query: font-size: clamp(1.5rem, 4vw, 2.5rem) groeit met het scherm maar wordt nooit kleiner dan 1.5rem of groter dan 2.5rem.

De voorbeeldvakken op deze pagina zijn maar ongeveer 340 tot 530 pixels breed. Daarom gebruikt de oefening hieronder een klein breekpunt van 300px dat je kunt zien werken. Kies op een echte site breekpunten op basis van je eigen inhoud, zoals 600px of 40em.
responsief ontwerpEén pagina die zich aan elk scherm aanpast
weergavevensterHet zichtbare gebied van de pagina in de browser
width=device-widthGebruik de werkelijke apparaatbreedte, niet een virtuele 980px
mediaquery@media (voorwaarde) { regels }
mobile firstBasisstijlen voor smalle schermen, daarna min-width-queries
breekpuntEen breedte waarop de indeling verandert
prefers-reduced-motionDe lezer heeft om minder animatie gevraagd
clamp()Een waarde tussen een minimum en een maximum
  1. Waarom werken telefoonmediaqueries niet zonder de viewport-metatag?
    • De telefoon deelt de pagina in op een brede virtuele breedte
    • Telefoons negeren CSS
    • Mediaqueries hebben JavaScript nodig
  2. Wanneer geldt @media (min-width: 600px)?
    • Als het weergavevenster 600px breed of breder is
    • Onder 600px
    • Alleen bij precies 600px
  3. Wat betekent mobile first?
    • Schrijf basisstijlen voor smalle schermen en voeg daarna min-width-queries toe
    • Bouw eerst de telefoonsite en later de desktopsite
    • Verberg inhoud op telefoons
  4. Welke regel voorkomt dat grote afbeeldingen buiten smalle schermen lopen?
    • img { max-width: 100%; height: auto; }
    • img { width: 1200px; }
    • img { display: none; }
  5. Bij welke breedte vraagt WCAG 1.4.10 Reflow dat inhoud werkt zonder tweerichtingsscrollen?
  6. Waarom stel je nooit user-scalable=no in?
    • Het blokkeert zoomen en sluit slechtzienden uit
    • Het verstoort mediaqueries
    • Het is geen geldige HTML
  7. Hoe kies je breekpunten?
    • Waar je inhoud er verkeerd begint uit te zien
    • Uit een lijst populaire telefoons
    • Altijd 768px
  8. Welke query geldt voor lezers die om minder animatie hebben gevraagd?
    • (prefers-reduced-motion: reduce)
    • (hover: none)
    • (orientation: portrait)
  9. font-size: clamp(1.5rem, 4vw, 2.5rem) op een scherm van 1600px breed met rem van 16px. Wat is de grootte?
  10. Waarom schrijf je breekpunten in em?
    • Ze reageren wanneer de lezer de tekst vergroot
    • em is verplicht in mediaqueries
    • Ze laden sneller
Belangrijkste punten
  • Voeg de viewport-metatag toe; blokkeer nooit zoomen.
  • Vloeiende breedten, max-width in plaats van width, img { max-width: 100%; height: auto; }.
  • Mobile first met min-width-queries op breekpunten van de inhoud; ook prefers-color-scheme, prefers-reduced-motion, print en clamp().
Bronnen van deze cursus (5)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17).

Geraadpleegd: 2026-10-17