Responsief webontwerp

Maak webpagina's die goed werken op telefoons, tablets en desktops. Stel de viewport in zodat mobiele browsers de werkelijke schermbreedte gebruiken, bepaal de grootte van tekst en boxen met relatieve eenheden en viewporteenheden en verander lay-outs met mobile-first geschreven mediaquery's. Gebruik containerquery's om componenten zich te laten aanpassen aan de ruimte die ze krijgen, bied met srcset, sizes en <picture> afbeeldingen die op elk scherm passen en test pagina's bij verschillende breedtes en zoomniveaus en met aanraakbediening en lezersvoorkeuren.

BeginnerLes 6 van 8 in Cursus HTML en CSS: responsieve, toegankelijke websites bouwen

Wat je leert

  1. Leg uit wat responsief webontwerp is, zorg dat mobiele browsers een pagina indelen op de werkelijke breedte van het apparaat en bepaal de grootte van tekst en boxen met schaalbare eenheden.
    • Leg responsief webontwerp uit en stel de viewport in
      Beschrijf wat responsief webontwerp doet, hoe CSS-pixels zich verhouden tot apparaatpixels en waarom elke responsieve pagina de viewportmetatag nodig heeft.
    • Bepaal de grootte van tekst en boxen met relatieve eenheden
      Gebruik percentages, em, rem en ch zodat boxen hun container volgen en tekst de ingestelde lettergrootte van de lezer volgt.
    • Gebruik viewporteenheden en vloeiend schaalbare afmetingen
      Bepaal afmetingen ten opzichte van de viewport met vw, vh en de nieuwere eenheden voor de kleine, grote en dynamische viewport en stel grenzen in met min(), max() en clamp().
  2. Schrijf mediaquery's, bouw stijlen mobile-first met breekpunten die de inhoud bepaalt en maak flexbox- en gridlay-outs die zich aanpassen aan het scherm.
    • Schrijf mediaquery's
      Gebruik mediatypen, breedtevoorwaarden, logische operatoren en andere mediakenmerken en plaats mediaquery's op de juiste plek in de cascade.
    • Werk mobile-first met inhoudsafhankelijke breekpunten
      Schrijf basisstijlen voor kleine schermen, voeg min-width-query's toe naarmate er meer ruimte is en plaats breekpunten waar de inhoud die nodig heeft.
    • Maak flexbox- en gridlay-outs responsief
      Verander lay-outs bij breekpunten en gebruik intrinsieke grid- en flexboxpatronen die zich zonder mediaquery aanpassen.
  3. Definieer querycontainers, geef componenten vorm met containerquery's en containereenheden en kies tussen mediaquery's, containerquery's en intrinsieke lay-outs.
    • Stel containers in en schrijf containerquery's
      Definieer een querycontainer met container-type, schrijf @container-regels, geef containers een naam en voorkom veelgemaakte instelfouten.
    • Bepaal afmetingen met containereenheden en kies het juiste hulpmiddel
      Gebruik containerquery-eenheden voor afmetingen die een container volgen en bepaal wanneer je een mediaquery, een containerquery of een intrinsieke lay-out gebruikt.
  4. Houd afbeeldingen en ingesloten media binnen hun containers, laat de browser met srcset en sizes een geschikt bestand kiezen en verander de uitsnede of het bestandsformaat met het picture-element.
    • Maak afbeeldingen en ingesloten media flexibel
      Voorkom dat afbeeldingen en video's buiten hun container lopen, behoud hun verhoudingen, reserveer ruimte voordat ze laden en bepaal de uitsnede met object-fit.
    • Laat de browser met srcset en sizes de afbeeldingsgrootte kiezen
      Bied dezelfde afbeelding in meerdere bestanden aan, beschrijf hoe breed die wordt weergegeven en voorspel welk bestand de browser laadt.
    • Verander de uitsnede of het bestandsformaat met het picture-element
      Gebruik picture en source om bij verschillende breedtes een andere uitsnede te tonen of om moderne afbeeldingsformaten met een terugval aan te bieden.
  5. Controleer pagina's bij verschillende breedtes en zoomniveaus en op echte apparaten, spoor overlopende inhoud op en verhelp die en pas pagina's aan aanraakbediening en de instellingen van de lezer aan.
    • Test bij verschillende breedtes en verhelp overlopende inhoud
      Gebruik de hulpmiddelen voor responsief webontwerp van de browser en echte apparaten, controleer de herschikking bij 320 CSS-pixels en spoor de oorzaken van horizontaal scrollen op.
    • Houd in je ontwerp rekening met aanraakbediening, zoomen en gebruikersvoorkeuren
      Maak bedieningselementen groot genoeg voor vingers, vermijd interacties die alleen werken bij aanwijzen zonder activering, ondersteun zoomen en oriëntatie en reageer op voorkeuren voor minder beweging, kleurenschema en afdrukken.

Responsief webontwerp: uitleg

5 hoofdstukken

1

Maak een pagina geschikt voor elk scherm

Goed responsief gedrag begint bij de ruimte waarvan de browser uitgaat en de referentie die elke afmeting volgt. Stel de mobiele viewport in, maak onderscheid tussen CSS-pixels en schermpunten en kies vervolgens eenheden voor tekst, boxen en schermhoge secties. Een container die kan krimpen en tekst die rekening houdt met de instellingen van de lezer vormen een betrouwbare basis voor latere lay-outwijzigingen.

1.1 Eén pagina, veel schermbreedtes

Met responsief webontwerp kan één HTML-pagina zich aanpassen als de beschikbare ruimte verandert. Een rechtop gehouden telefoon, een gedraaide tablet en een desktopvenster waarvan de grootte is veranderd, moeten allemaal leesbare tekst, bruikbare bedieningselementen en passende afbeeldingen tonen. Je ontwerpt voor een doorlopend bereik van breedtes, ook tussen de bekende apparaatformaten.

Ethan Marcotte introduceerde de term in 2010 rond drie technieken: vloeiende lay-outs, flexibele afbeeldingen en mediaquery's. Flexbox, grid, containerquery's en opmaakcode voor responsieve afbeeldingen breiden die gereedschapskist nu uit. Elk lost een ander deel van de taak op; een pagina heeft meer nodig dan één instelling.

Tel de juiste pixels

Een CSS-pixel is een lay-outeenheid, niet per se één punt op het scherm. CSS definieert 96px als gelijk aan 1in; op een scherm garandeert die verhouding geen gemeten fysieke inch. Een scherm met een hoge pixeldichtheid gebruikt meerdere apparaatpixels voor elke CSS-pixel. De apparaatpixelverhouding beschrijft die verhouding.

Een telefoon van 390 CSS-pixels breed met een verhouding van 3 is 1.170 apparaatpixels breed. Een breedtequery ziet nog steeds 390px. De extra punten helpen om scherpe tekst en afbeeldingen te tekenen; ze geven een lay-out niet driemaal zoveel ruimte. Dit onderscheid is belangrijk als je later afbeeldingsbestanden kiest.

De viewport is het browsergebied waarin de pagina wordt weergegeven, zonder de werkbalken van de browser zelf. Als je een venster van grootte verandert of een apparaat draait, verandert de beschikbare ruimte. Op telefoons kan ook de zichtbare hoogte veranderen wanneer werkbalken verschijnen of verdwijnen.

Geef mobiele browsers de bedoelde breedte door

Mobiele browsers kunnen een niet-ingestelde pagina indelen in een brede virtuele viewport, meestal ongeveer 980 CSS-pixels, en die daarna verkleinen tot de schermgrootte. Op een telefoon van 390px is de schaal ongeveer 0,4. Tekst die is ingesteld op 16px ziet er dan ongeveer 6,4px hoog uit en een query voor een smalle breedte komt mogelijk nooit overeen omdat de lay-outviewport nog steeds breed is.

Zet dit in de <head> van het document:

<meta name="viewport" content="width=device-width, initial-scale=1">

width=device-width vraagt om de apparaatbreedte in CSS-pixels. initial-scale=1 begint op normaal zoomniveau. Laad de pagina na het toevoegen opnieuw in een browserweergave ter grootte van een telefoonscherm en controleer zowel de tekst als de actieve breedtequery's.

Laat zoomen beschikbaar. Voeg geen user-scalable=no of maximum-scale=1 toe. Lezers met een verminderd gezichtsvermogen moeten inhoud kunnen vergroten; tekst moet tot 200% kunnen worden vergroot zonder verlies van inhoud of functionaliteit. Sommige mobiele browsers negeren zoombeperkingen, maar de pagina moet zoomen zelf ondersteunen.

Controleer ook de lay-out

De viewportmetatag verandert een box met een vaste breedte niet. Een .page met width: 960px steekt nog steeds buiten een viewport van 390px uit. Verander starre breedtes in vloeiend schaalbare breedtes met grenzen, maak media flexibel en pas de lay-out aan waar de inhoud dat nodig heeft.

Om een zeer kleine mobiele pagina te onderzoeken, controleer je eerst de <head> op de viewportmetatag. Om een pagina te onderzoeken die normaal van grootte is maar horizontaal scrolt, inspecteer je de boxen die buiten de beschikbare breedte vallen. Deze symptomen wijzen op verschillende oorzaken.

Belangrijkste punten

  • Responsieve pagina's passen zich aan binnen een doorlopend bereik van breedtes.
  • Lay-out gebruikt CSS-pixels; de apparaatpixelverhouding beschrijft de schermdichtheid.
  • Zet de viewportmetatag in het head-element van het document.
  • Laat zoomen ingeschakeld en maak inhoud met een vaste breedte flexibel.

1.2 Afmetingen die tekst en containers volgen

Kies een eenheid door je af te vragen wat de afmeting moet volgen. Een kolom volgt meestal het omsluitende blok. De binnenruimte van een knop kan de tekst van de knop volgen. De regellengte van een alinea volgt het lettertype. Met de juiste referentie werken veranderingen samen.

EenheidWat die volgtNuttige toepassing
%Een procentuele breedte volgt de breedte van het omsluitende blokVloeiend schaalbare boxen en kolommen
emLettergrootte van het bovenliggende element voor font-size; eigen lettergrootte voor andere eigenschappenBinnenruimte van knoppen en pictogrammen
remLettergrootte van het hoofdelementTekst en gedeelde tussenruimte
chBreedte van het teken “0” in het lettertypeEen grens voor leesbare regellengte
pxCSS-referentiepixelsEen dunne rand
Percentages en het boxmodel

Een box met width: 50% is 300px breed in een omsluitend blok van 600px en 180px breed in een blok van 360px. Ook procentuele binnenruimte en marges, inclusief de waarden boven en onder, gebruiken bij gewone horizontale tekst de breedte van het omsluitende blok. Zo is padding-top: 10% in een bovenliggend element van 600px breed 60px.

Hoogte werkt anders. Een procentuele hoogte heeft een bepaalde referentiehoogte nodig. Als de hoogte van een gewoon bovenliggend element uit de inhoud volgt, gedraagt height: 50% zich meestal als auto. Laat tekstboxen meegroeien met hun inhoud in plaats van ze met procentuele hoogtes te regelen.

Gebruik een vloeiend schaalbare container met een maximum:

.page {
  box-sizing: border-box;
  width: 100%;
  max-width: 70rem;
  margin-inline: auto;
  padding-inline: 1rem;
}

Op een smal scherm vult de box de beschikbare breedte, met binnenruimte aan de binnenkant. Op een breed scherm stopt die bij 70rem en centreren de automatische marges in de inlinerichting de box. Bij een grootte van 16px voor het hoofdelement is de maximale buitenbreedte 1.120px. border-box neemt binnenruimte en randen op in de opgegeven breedte; bij content-box zouden 100% breedte plus binnenruimte overlopen. Een vaste width: 70rem zou krimpen ook verhinderen.

Een omhullend element van 340px breed met border-box en 16px binnenruimte aan elke kant houdt bijvoorbeeld 308px over voor de inhoud als er geen rand is. De opgegeven breedte beschrijft de buitenkant van deze box. Als je dezelfde declaratie omzet naar content-box, is alleen de inhoud al 340px en wordt de buitenbreedte 372px. Door deze afzonderlijke breedtes in de ontwikkelaarstools te inspecteren, zie je gemakkelijker of binnenruimte de oorzaak is van overlopende inhoud.

Laat tekstinstellingen doorwerken

Laat de lettergrootte van het hoofdelement op de standaardwaarde van de lezer staan of gebruik een percentage zoals 100%. Bij een grootte van 16px voor het hoofdelement is 1.5rem 24px; bij 20px is die 30px. Een vaste html { font-size: 16px; } verhindert dat de voorkeur voor de standaardlettergrootte doorwerkt in afmetingen die relatief zijn aan het hoofdelement.

Voor font-size gebruikt em de lettergrootte van het bovenliggende element. Geneste lijsten die elk op 1.2em zijn ingesteld, vermenigvuldigen die grootte daarom: 16px wordt 19,2px en daarna 23,04px. Gebruik rem als alle nestniveaus dezelfde grootte moeten behouden.

In andere eigenschappen gebruikt em de eigen lettergrootte van het element. Een knop met padding: 0.5em 1em krijgt meer binnenruimte als de tekst groeit. Zo blijft de tussenruimte in verhouding zonder apart breekpunt.

Voor alinea's biedt max-width: 65ch een nuttige grens voor de leesbaarheid. De eenheid meet de breedte van “0” en telt in een proportioneel lettertype dus niet precies het aantal tekens. Ongeveer 45–75 tekens per regel is een gangbare richtlijn voor de leesbaarheid; controleer het werkelijke lettertype en de tekst in de browser.

Belangrijkste punten

  • Percentages laten breedtes het omsluitende blok volgen.
  • Gebruik border-box om binnenruimte binnen een opgegeven breedte te houden.
  • rem volgt de lettergrootte van het hoofdelement zonder vermenigvuldiging door nesten.
  • em kan de tussenruimte van een component in verhouding houden tot de eigen tekst.
  • ch biedt een grens voor de regellengte op basis van het lettertype.

1.3 Vloeiend schaalbare afmetingen met bruikbare grenzen

Viewporteenheden volgen de viewport van de browser, ook als een element in een kleinere box staat. 1vw is 1% van de viewportbreedte; 1vh is 1% van de hoogte. vmin gebruikt de kleinste afmeting en vmax de grootste. In een viewport van 800px breed is 50vw 400px. In een viewport van 300px hoog is 70vh 210px.

Deze referentie is belangrijk. Een zijbalk kan in een venster van 1.400px slechts 260px breed zijn. Een kindelement met width: 50vw vraagt om 700px en past dus niet in die zijbalk. Gebruik een percentage als het kindelement het bovenliggende element moet volgen. Geef voor een gewoon blok over de volle breedte de voorkeur aan width: 100%: 100vw kan de breedte van een desktopschuifbalk omvatten en horizontaal scrollen veroorzaken.

Kies welke mobiele hoogte je bedoelt

Werkbalken van mobiele browsers kunnen het zichtbare paginagebied verkleinen. De eenheden voor viewporthoogte onderscheiden drie toestanden:

EenheidHoogte die de eenheid volgtBelangrijkste afweging
svhKleine viewport, met zichtbare werkbalkenStabiele grootte die in die toestand past
lvhGrote viewport, met verborgen werkbalkenKan achter zichtbare werkbalken uitsteken
dvhHuidige dynamische viewportKan tijdens het scrollen van grootte veranderen

Gewoon vh komt overeen met de grote viewport. Er bestaan ook breedtevarianten zoals svw, lvw en dvw. Voor een hoge openingssectie stelt min-height: 100svh een stabiel minimum in, terwijl langere inhoud kan groeien. Bij een vaste height loopt inhoud buiten de sectie als die hoger wordt. Dynamische eenheden kunnen veranderingen van de werkbalken volgen, maar updates kunnen in stappen plaatsvinden en de lay-out laten bewegen.

Kies de hoogtereferentie op basis van het gedrag dat je nodig hebt. Een stabiele openingssectie kan de kleine viewport gebruiken, ook nadat de werkbalken verdwijnen; die hoeft niet opnieuw uit te rekken alleen omdat er meer ruimte zichtbaar wordt. Een paneel dat die veranderende ruimte moet volgen, kan dynamische eenheden gebruiken, waarbij je de mogelijke beweging accepteert. In beide gevallen laat een minimumhoogte extra inhoud de sectie in de normale documentstroom verlengen.

Begrens een vloeiend schaalbare waarde

min() kiest de kleinste waarde en kan een breedte begrenzen: width: min(100%, 40rem) vult het bovenliggende element totdat de breedte 40rem bereikt. max() kiest de grootste waarde en geeft een ondergrens. clamp() geeft achtereenvolgens een ondergrens, een voorkeurswaarde en een bovengrens.

.title {
  font-size: clamp(1rem, 0.5rem + 2vw, 2rem);
}

Bij een grootte van 16px voor het hoofdelement is de ondergrens 16px, de voorkeursgrootte 8px plus 2% van de viewportbreedte en de bovengrens 32px. Loop de grenzen na:

  1. Bij 375px is de voorkeursgrootte 15,5px, dus geldt het minimum van 16px.
  2. Bij 1.000px is de voorkeursgrootte 28px, binnen de grenzen.
  3. Bij 1.400px is de voorkeursgrootte 36px, dus geldt het maximum van 32px.

Dezelfde functies accepteren berekeningen zoals min(100% - 2rem, 70rem). Gebruik verenigbare lengtewaarden en spaties rond het minteken.

Tekst waarvan de grootte alleen in vw is ingesteld, kan op smalle schermen heel klein en op brede schermen enorm worden. Bij zoomen op een desktop wordt de viewport ook smaller in CSS-pixels, wat de vergroting van die tekst teniet kan doen. Neem een deel op dat relatief is aan de lettergrootte en stel bruikbare grenzen in. Test daarna de tekstvergroting: een gemengde rem/vw-expressie garandeert op zichzelf geen volledige vergroting tot 200%.

Belangrijkste punten

  • Viewporteenheden volgen het venster, ook binnen een smal bovenliggend element.
  • Gebruik svh voor de kleine viewport en dvh voor de veranderende zichtbare hoogte.
  • min() begrenst een waarde van boven; max() geeft een ondergrens.
  • clamp() stelt een minimum, voorkeurswaarde en maximum in.
  • Test vloeiend schaalbare tekst met zoom en bij veranderende vensterbreedtes.
2

Pas lay-outs aan met mediaquery's

Een lay-out moet werken terwijl het venster verandert, ook tussen de belangrijkste indelingen. Schrijf voorwaarden die CSS op het juiste moment toepassen, begin met een bruikbare smalle pagina en voeg kolommen toe als de inhoud ruimte heeft. Flexbox en grid kunnen veel veranderingen automatisch afhandelen; expliciete breekpunten zorgen voor de momenten waarop de indeling zelf moet veranderen.

2.1 Voorwaarden die CSS-regels laten wisselen

Een mediaquery past CSS toe als aan een voorwaarde over de uitvoer, viewport of voorkeuren van de lezer is voldaan. De browser controleert opnieuw als relevante omstandigheden veranderen, zodat stijlen kunnen wisselen wanneer je een venster van grootte verandert, zonder de pagina opnieuw te laden.

.heading { font-size: 1.25rem; }

@media (min-width: 40em) {
  .heading { font-size: 2rem; }
}

Bij de gebruikelijke browserstandaard van 16px is 40em gelijk aan 640px. Vanaf die breedte geldt de grotere kop. In mediaquery's gebruiken em en rem de oorspronkelijke lettergrootte van de browser, niet een door de maker op <html> ingestelde grootte. Bij een lezer met een standaardgrootte van 20px vindt dezelfde omschakeling plaats bij 800px.

Lees voorwaarden nauwkeurig

min-width omvat de grenswaarde: 600px komt overeen met min-width: 600px. Ook max-width omvat de grenswaarde. Bereiksyntaxis maakt de vergelijking expliciet:

@media (width >= 600px) { /* wider layout */ }
@media (600px <= width < 900px) { /* middle band */ }

Als je max-width: 600px combineert met min-width: 600px, komen beide overeen bij 600px. Met 599px en 600px ontstaat juist een gat bij fractionele breedtes zoals 599,5px. Query's met oplopende minimumbreedtes voorkomen dat gat; aanvullende bereiken zoals < 600px en >= 600px zijn een andere mogelijkheid.

Mediatypen geven de uitvoer aan: screen, print of de standaardwaarde all. @media print kan navigatie verwijderen en donkere tekst op wit papier gebruiken. Je kunt voorwaarden op nuttige manieren combineren:

VormBetekenis
screen and (min-width: 40em)Zowel het uitvoertype als de breedte moet overeenkomen
(max-width: 30em), printSmalle uitvoer of afdrukken komt overeen
not printDe uitvoer is geen afdruk

only heeft in huidige browsers geen nuttig effect. Breedte en hoogte beschrijven de viewport; orientation: portrait betekent dat de hoogte minstens gelijk is aan de breedte. Andere kenmerken testen invoernauwkeurigheid, aanwijzen zonder activering, resolutie, minder beweging en kleurenschema. Een liggende viewport vertelt je niet of de lezer een muis heeft.

Een praktische voorwaarde is @media (hover: hover) and (pointer: fine): die vereist een primair invoerapparaat dat zonder activering kan aanwijzen en nauwkeurig kan richten. Een smal venster dat met een muis wordt bediend, kan overeenkomen, terwijl een breed apparaat dat vooral aanraakbediening gebruikt dat mogelijk niet doet. Gebruik de query voor optionele aanwijzereffecten; houd de onderliggende handeling beschikbaar via de normale bedieningselementen van de pagina.

Houd de cascade in het oog

Een mediaquery verhoogt de specificiteit van een selector niet. In een gewoon stijlblad met even specifieke regels krijgt de latere overeenkomende declaratie voorrang. Als de basisregel voor .heading na de regel voor bredere schermen hierboven staat, krijgt die ook bij brede schermen voorrang. Zet basisregels eerst en de query's die ze veranderen daarna.

Je kunt ook in HTML een voorwaarde toevoegen. <link rel="stylesheet" href="print.css" media="print"> past de regels toe bij het afdrukken, maar een browser kan het bestand nog steeds met lagere prioriteit downloaden. Het media-attribuut van een <source>-element gebruikt voorwaarden om een afbeeldingsbron te kiezen.

Belangrijkste punten

  • Mediaquery's reageren op uitvoer, viewportkenmerken en gebruikersvoorkeuren.
  • min-width en max-width omvatten hun grenswaarden.
  • and vereist dat aan alle voorwaarden is voldaan; een komma biedt alternatieven.
  • Regels in query's volgen nog steeds de normale cascade en specificiteit.
  • Relatieve eenheden in query's gebruiken de oorspronkelijke lettergrootte van de browser.
  • Aanvullende bereiken voorkomen gaten bij fractionele breedtes.

2.2 Voeg lay-out toe naarmate er ruimte beschikbaar komt

Mobile-first-CSS begint met de smalle lay-out als gewone regels buiten alle query's. Query's voor minimumbreedtes voegen vervolgens veranderingen toe wanneer de ruimte dat toelaat. Dit past bij de normale documentstroom: blokken stapelen al verticaal, zodat de basispagina vaak weinig lay-outcode nodig heeft.

Desktop-first-CSS begint met regels voor brede schermen en gebruikt query's voor maximumbreedtes om die terug te draaien. Beide benaderingen kunnen werken, maar mobile-first maakt de basis en elke latere verandering meestal gemakkelijker te volgen.

Bouw vanuit één kolom
.cards {
  display: grid;
  gap: 1rem;
}

@media (min-width: 40em) {
  .cards { grid-template-columns: 1fr 1fr; }
}

@media (min-width: 64em) {
  .cards { grid-template-columns: repeat(3, 1fr); }
}

Bij een standaardgrootte van 16px vinden de veranderingen plaats bij 640px en 1.024px. Een viewport van 500px toont één kolom. Bij 800px komt de eerste query overeen en ontstaan twee kolommen. Bij 1.200px komen beide query's overeen; de latere regel geeft drie kolommen.

De query voor grotere breedtes schakelt de eerdere query niet uit. Als je de volgorde omdraait, staat de regel voor 40em als laatste en brengt die de brede lay-out terug tot twee kolommen. Zet query's met oplopende minimumbreedtes in oplopende volgorde als ze dezelfde eigenschap met dezelfde specificiteit veranderen.

Zoek het breekpunt in de inhoud

Een breekpunt is een punt waarop een query de lay-out verandert. Begin met de werkelijke inhoud in een smal venster en maak dat langzaam breder. Let op navigatie die onhandig naar een volgende regel loopt, alinea's die te lang worden of kaarten die verder uitrekken dan een bruikbare leesbreedte. Voeg een verandering toe waar die de inhoud verbetert.

Kies een breekpunt niet alleen omdat een bekend apparaat die breedte heeft. Schermen verschillen, desktopvensters kunnen elke grootte hebben en door een groter lettertype kan dezelfde navigatie meer ruimte nodig hebben. Breekpunten in relatieve eenheden kunnen de lay-out helpen reageren op de standaardtekstgrootte van de lezer.

Test na elke verandering beide kanten van het breekpunt en verschillende breedtes tussen de veranderingen. Een lay-out die er alleen bij 375px, 768px en 1.280px goed uitziet, kan op veel andere punten nog steeds misgaan. Vloeiend schaalbare breedtes, regelomloop en automatische gridkolommen vangen veel van die tussenliggende ruimte op.

Test de navigatie en de kaartenlijst samen nadat je een zijbalk aan de pagina hebt toegevoegd. Het venster is breder geworden, maar de hoofdkolom kan smaller zijn geworden doordat die de ruimte nu deelt. Een kaartenlay-out die net onder het breekpunt van de pagina werkte, kan er net boven misgaan. Hier is het nuttig om kaarten te laten doorlopen naar een volgende regel of in automatische kolommen te laten passen, terwijl de pagina zelf een expliciete query gebruikt.

Houd de inhoud en downloads bruikbaar

Telefoongebruikers hebben de inhoud van de pagina ook nodig. Als een secundaire uitleg te veel ruimte inneemt, zet die dan lager in de stapel of plaats die in een ingebouwde <details>-uitklapbediening die lezers kunnen openen. Verwijder noodzakelijke informatie niet alleen om een schermafbeelding op smalle breedte netjes te laten lijken.

Door smal te beginnen kun je ook een lichte standaardpagina kiezen. Een grote afbeelding met CSS verbergen voorkomt de download niet betrouwbaar; gebruik opmaakcode voor responsieve afbeeldingen om geschikte bestanden aan te bieden. Een leesbare pagina met één kolom en een kleinere afbeelding is een goed uitgangspunt; bredere lay-outs voegen daarna ruimte toe en delen de pagina anders in.

Belangrijkste punten

  • Schrijf basisregels voor smalle schermen buiten query's.
  • Voeg overeenkomende min-width-wijzigingen in oplopende volgorde toe.
  • Plaats breekpunten waar de inhoud een lay-outwijziging nodig heeft.
  • Test breedtes tussen breekpunten, ook met grotere tekst.
  • Deel bruikbare inhoud anders in voor telefoons en stuur geschikte afbeeldingsbestanden.

2.3 Responsieve rijen en kolommen

Een lay-out kan zich aanpassen via een expliciete query of via eigen regels voor afmetingen. Gebruik een query als de indeling op een gekozen punt moet veranderen. Gebruik een intrinsieke lay-out als items alleen in de beschikbare ruimte hoeven te passen.

Laat grid de kolommen tellen
.tiles {
  display: grid;
  grid-template-columns:
    repeat(auto-fit, minmax(min(15rem, 100%), 1fr));
  gap: 1rem;
}

Bij een grootte van 16px voor het hoofdelement probeert elke kolom minstens 240px breed te zijn. Grid past zoveel mogelijk kolommen in, trekt de tussenruimtes af en verdeelt daarna de resterende breedte met 1fr. In een container van 1.000px zouden vier kolommen van 240px plus drie tussenruimtes van 16px 1.008px nodig hebben, dus passen er maar drie. Elk krijgt ongeveer 322,7px. In een container van 700px komen twee kolommen van 342px; in een container van 360px één.

De binnenste min(15rem, 100%) is belangrijk als de container smaller is dan 240px. Daardoor kan het minimum gelijk worden aan de beschikbare breedte. Zonder die functie zou het minimum van 240px overlopende inhoud veroorzaken. auto-fit laat lege sporen samenvallen, zodat enkele items kunnen uitrekken; auto-fill behoudt lege sporen en kan die items smaller laten.

Laat flexitems naar een volgende regel gaan
.links {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}
.links > * { flex: 1 1 15rem; }

Elk item begint met een basis van 15rem, kan krimpen of groeien en gaat naar een volgende regel als er geen items meer in de rij passen. Elke regel verdeelt de eigen resterende ruimte. Twee items op de laatste regel kunnen daardoor breder worden dan de items erboven. Grid past beter als kolombreedtes over meerdere rijen moeten uitlijnen. Ook navigatie kan naar een volgende regel lopen of een query kan de flex-direction veranderen in column.

Verander zo nodig de hele pagina

Begin de pagina in de normale documentstroom. Voeg daarna een indeling met een zijbalk toe:

@media (min-width: 48em) {
  .page {
    display: grid;
    grid-template-columns: 16rem minmax(0, 1fr);
    gap: 1rem;
  }
}

Bij de gebruikelijke standaardgrootte van 16px begint dit bij 768px. De eerste kolom is de zijbalk; de tweede neemt de resterende ruimte in. Door het minimum van nul kan het hoofdspoor krimpen; de inhoud moet nog steeds op een geschikte manier afbreken of kunnen scrollen. Benoemde gridgebieden kunnen een complexere indeling uitdrukken.

Houd de HTML in een logische leesvolgorde. Flex-order en gridplaatsing veranderen waar elementen verschijnen, maar toetsenbordfocus en schermlezers volgen nog steeds de bronvolgorde. Test dit door na het herschikken met de tabtoets langs de links te gaan.

Een brede gegevenstabel kan de tweedimensionale structuur nodig hebben. Geef die een eigen scrollbaar omhullend element met overflow-x: auto, tabindex="0", role="region" en een toegankelijke naam zoals aria-label="Event schedule". Alleen het tabelgebied mag horizontaal scrollen; de omringende pagina moet zich nog steeds herschikken.

Belangrijkste punten

  • Intrinsieke lay-outs herschikken zonder breekpunt.
  • auto-fit en minmax() passen kolommen in en verdelen de resterende ruimte.
  • Begrens het kolomminimum op 100% om overlopende inhoud in smalle containers te voorkomen.
  • Flexregels verdelen ruimte afzonderlijk; grid lijnt kolommen over rijen heen uit.
  • Visueel herschikken verandert de HTML-leesvolgorde of tabvolgorde niet.
  • Houd brede tabellen in een bereikbaar scrollgebied met een naam.
3

Laat componenten zich aan hun container aanpassen

Een component kan op dezelfde pagina in een brede hoofdkolom of een smalle zijbalk verschijnen. De eigen beschikbare breedte kan belangrijker zijn dan de breedte van het venster. Definieer een container om te meten, verander de elementen daarbinnen en gebruik containerrelatieve afmetingen als die bij de component passen. Met de juiste referentie blijft een herbruikbare kaart bruikbaar, waar die ook wordt geplaatst.

3.1 Een kaart die de eigen ruimte volgt

Een query voor de viewportbreedte geeft hetzelfde antwoord voor elke component op een pagina. Dat kan verkeerd uitpakken voor een herbruikbare kaart: het venster kan 1.400px breed zijn terwijl de zijbalk de kaart maar 300px geeft. Een containerquery voor afmetingen meet de beschikbare ruimte van een voorouder, zodat de kaart zich kan aanpassen aan de werkelijke plek.

Definieer een omhullend element en geef de inhoud vorm
<div class="card-wrap">
  <article class="card">...</article>
</div>
.card-wrap { container-type: inline-size; }
.card { display: grid; gap: 1rem; }

@container (min-width: 25rem) {
  .card { grid-template-columns: 8rem minmax(0, 1fr); }
}

Bij horizontale tekst is inline-size de breedte. Hiermee geef je aan dat het omhullende element query's over de inlineafmeting kan beantwoorden. Bij een lettergrootte van 16px voor het hoofdelement is 25rem gelijk aan 400px. Een kaart in een omhullend element van 300px blijft gestapeld; een andere in een omhullend element van 500px zet de afbeelding naast de tekst. Beide kunnen tegelijk op dezelfde pagina staan.

Een query meet een voorouder van het element dat wordt vormgegeven. Als je container-type alleen op .card zet en vervolgens diezelfde kaart probeert te veranderen, zoekt de query nog steeds boven de kaart. Gebruik een omhullend element als meetbox en de kaart daarbinnen als de box die je vormgeeft.

Selecteer de bedoelde voorouder

Een naamloze query voor afmetingen gebruikt de dichtstbijzijnde geschikte voorouder die een container voor afmetingen is. In een geneste lay-out kan dat een binnenste omhullend element zijn. Met een naam kun je een bepaalde voorouder kiezen:

.panel { container: sidebar / inline-size; }

@container sidebar (width >= 30rem) {
  .panel-title { font-size: 1.5rem; }
}

De verkorte notatie stelt zowel de naam als het type in. Als er geen geschikte voorouder is, komt de query niet overeen; de basisstijlen blijven gelden. Voorwaarden kunnen bereiken en logische operatoren zoals and, or en not gebruiken.

Zorg dat de container afmetingen krijgt

Isolatie voorkomt dat de afmeting waarover de query gaat, afhangt van juist de inhoud die de query anders kan vormgeven. Zet container-type op een box waarvan de breedte uit de bovenliggende lay-out volgt, zoals een blok, gridgebied of groeiend flexitem. Een box die krimpt om bij de inhoud te passen, kan samenvallen als de inhoud niet meer bijdraagt aan de inlineafmeting.

container-type: size ondersteunt query's voor zowel breedte als hoogte, maar isoleert ook de blokafmeting. De hoogte heeft een onafhankelijke regeling nodig; anders kan de container samenvallen. Voor gewone kaarten laat inline-size de hoogte de inhoud blijven volgen. De standaardwaarde normal maakt geen container voor query's over afmetingen.

Kenmerken voor afmetingen omvatten breedte, hoogte, inlineafmeting, blokafmeting, beeldverhouding en oriëntatie, mits het gekozen containertype de betreffende afmetingen ondersteunt. Huidige gangbare browsers ondersteunen query's voor afmetingen. Behoud een bruikbare gestapelde basislay-out zodat de kaart blijft werken als een browser de uitbreiding negeert.

Belangrijkste punten

  • Zet container-type op een omhullend voorouderelement.
  • Query's met inline-size passen bij kaarten waarvan de hoogte de inhoud moet volgen.
  • Een containerquery geeft afstammelingen vorm, niet de eigen meetbox.
  • Geef een container een naam als geneste voorouders de bedoelde referentie kunnen veranderen.
  • Geef een querycontainer afmetingen via de omringende lay-out.

3.2 Kies de referentie voor afmetingen die bij de taak past

Een responsieve pagina kan drie benaderingen combineren: automatische herschikking, viewportvoorwaarden en componentvoorwaarden. Bepaal welke informatie de lay-out nodig heeft voordat je een query kiest.

BehoefteNuttig hulpmiddelReden
Herhaalde kaarten in een rij laten passenIntrinsiek grid of flexbox met regelomloopItems kunnen herschikken zonder regel met een grenswaarde
De zijbalkindeling van de hele pagina veranderenMediaqueryDe beschikbare vensterruimte bepaalt de pagina
Een kaart op verschillende plekken in de pagina veranderenContainerqueryDe kaart heeft de afmetingen van het omhullende element nodig
Rekening houden met minder beweging of afdrukkenMediaqueryDit zijn gebruikers- of uitvoervoorwaarden
Bepaal afmetingen binnen een container

Containerquery-eenheden beschrijven percentages van een geschikte vooroudercontainer. cqw en cqh gebruiken breedte en hoogte. cqi en cqb gebruiken inline- en blokafmeting. cqmin en cqmax gebruiken de kleinste en grootste van de twee afmetingen. Bij horizontale tekst is de inlineafmeting de breedte.

In een geschikte container van 400px breed is 5cqi gelijk aan 20px. In een container van 600px breed is die 30px. Zo kan een kop de eigen component volgen, ook als de hele pagina even breed blijft.

Stel grenzen aan tekst:

.card-wrap { container-type: inline-size; }
.card h2 {
  font-size: clamp(1rem, 4cqi, 1.5rem);
}

Bij een grootte van 16px voor het hoofdelement geeft een omhullend element van 300px een voorkeurswaarde van 12px, dus geldt het minimum van 16px. Bij 600px is 4cqi gelijk aan 24px, gelijk aan de bovengrens. Bredere omhullende elementen kunnen de kop niet groter maken dan 24px. Test zowel de vergroting als het veranderen van de grootte van het omhullende element; vloeiend schaalbare tekst moet ook bruikbaar blijven als lezers zoomen.

Containereenheden kiezen de dichtstbijzijnde geschikte voorouder voor de gemeten richting. Als die er niet is, vallen ze terug op eenheden voor de kleine viewport. Een vergeten container-type kan er daardoor voor zorgen dat tekst met het venster verandert terwijl alles lijkt te werken. Inspecteer de voorouders als een afmeting de verkeerde ruimte lijkt te volgen. Een containernaam op een query zorgt er op zichzelf niet voor dat elke containereenheid naar die genoemde voorouder verwijst.

Combineer de hulpmiddelen

Een pagina kan met een mediaquery bij 48em overschakelen op kolommen voor een zijbalk en hoofdinhoud. Binnen het hoofdgebied kan een automatisch grid zoveel kaarten inpassen als de ruimte toelaat. Een eigen containerquery van een kaart kan de afbeelding pas naast de tekst zetten als die specifieke plek breed genoeg is.

Vervang een query voor minder beweging of aanwijzen zonder activering niet door een containerquery. De afmetingen van een box geven geen inzicht in de voorkeuren of het invoerapparaat van een lezer. Evenzo koppel je een herbruikbare kaart aan elke omringende lay-out als je de regels van de kaart voor elke plek op de pagina naar aparte viewportquery's kopieert. Laat de lokale ruimte bepalen wanneer de indeling verandert.

Belangrijkste punten

  • Kies intrinsieke herschikking als er geen omschakeling van de indeling nodig is.
  • Mediaquery's regelen voorwaarden voor de hele pagina en gebruikersvoorkeuren.
  • Containerquery's regelen de beschikbare ruimte van een component.
  • Containereenheden gebruiken voor elke gemeten richting een geschikte voorouder.
  • Zonder geschikte container vallen containereenheden terug op eenheden voor de kleine viewport.
4

Bied afbeeldingen en media die op elk scherm passen

Afbeeldingen hebben zowel een flexibele weergavebox als een verstandig gekozen downloadbestand nodig. Behoud hun vorm, reserveer ruimte tijdens het laden en bepaal wanneer bijsnijden aanvaardbaar is. Beschrijf daarna alternatieve resoluties, uitsneden en formaten waaruit de browser kan kiezen. Door de opmaakcode voor afbeeldingen op de CSS-lay-out af te stemmen, blijft een pagina scherp op schermen met een hoge pixeldichtheid zonder onnodige downloads.

4.1 Flexibele media zonder vervorming

Een afbeelding kan breder zijn dan de ruimte die de lay-out ervoor biedt. Begin met een regel die de afbeelding laat krimpen met behoud van de vorm:

img, video {
  max-width: 100%;
  height: auto;
}

max-width beperkt de weergegeven breedte tot die van de container zonder een kleine afbeelding te dwingen de container te vullen. width: 100% zou een klein logo tot de volle breedte uitrekken. Automatische hoogte behoudt de beeldverhouding als de breedte verandert.

Reserveer de ruimte vóór de download

Behoud afmetingsattributen in de HTML:

<img src="coast.jpg" width="1200" height="800"
     alt="A rocky coast with a walking path">

Die afmetingen geven een beeldverhouding van 3:2, zodat de browser ruimte kan reserveren voordat het bestand binnenkomt. Als CSS de afbeelding 360px breed weergeeft, is de bijbehorende hoogte 240px. Als je de attributen verwijdert omdat de afbeelding responsief is, gaat die vroege informatie over de afmetingen verloren. CSS kan de weergegeven afbeelding nog steeds kleiner maken dan de afmetingen in de attributen.

Geef de box van een ingesloten videospeler een eigen verhouding:

iframe {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
}

Hierdoor behoudt de speler een verhouding van 16:9 terwijl de breedte verandert. Laat hoogtes voor tekst door de inhoud bepalen; een vaste beeldverhouding is nuttig voor mediaboxen met een bekende vorm.

Kies of bijsnijden is toegestaan

Een kaartminiatuur moet vaak een uniforme box vullen. Geef die een breedte en een beeldverhouding en kies daarna hoe de bron past:

.thumbnail {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: top;
}

cover vult de box en snijdt delen af die erbuiten vallen. contain toont de hele afbeelding en kan lege stroken overlaten. De standaardwaarde fill rekt de afbeelding uit tot de box, wat die kan vervormen. object-position kiest de uitlijning bij het inpassen; in dit voorbeeld houdt uitlijning aan de bovenkant het bovenste deel zichtbaar.

DoelInstelling
Een volledig diagram tonenobject-fit: contain
Een miniatuurbox vullen en een uitsnede accepterenobject-fit: cover
De natuurlijke vorm behouden tijdens het krimpenheight: auto met een breedtegrens

Voor een concrete vergelijking plaats je een foto van 400 × 200 in een miniatuur van 320 × 240. Cover schaalt de foto naar 480 × 240 en snijdt daarna in totaal 160px van de geschaalde breedte af. Contain schaalt de foto naar 320 × 160, waardoor in totaal 80px aan hoogte ongebruikt blijft. Beide behouden de verhoudingen van de bron; de keuze is of de box gevuld moet zijn of de hele afbeelding zichtbaar moet blijven.

Afbeeldingen die inhoud overbrengen, horen in <img> met bruikbare alternatieve tekst. CSS-achtergronden zijn geschikt voor decoratie; background-size: cover kan ze bijsnijden om hun box te vullen en mediaquery's kunnen het achtergrondbestand wisselen.

Voor afbeeldingen onder het eerste scherm kan loading="lazy" het ophalen uitstellen totdat de lezer in de buurt komt. Laat de hoofdafbeelding bovenaan direct laden, zodat die snel kan verschijnen. Als je een foto van 4.000 pixels met CSS verkleint, wordt nog steeds die hele foto gedownload; om een kleiner bestand te kiezen is opmaakcode voor responsieve afbeeldingen nodig.

Belangrijkste punten

  • Beperk de breedte van media en behoud de beeldverhouding.
  • Behoud de attributen width en height om ruimte voor het laden te reserveren.
  • cover snijdt bij; contain houdt de hele afbeelding zichtbaar.
  • Gebruik img voor inhoud en CSS-achtergronden voor decoratie.
  • Laad afbeeldingen lager op de pagina uitgesteld, maar niet de hoofdafbeelding bovenaan.
  • De CSS-weergavegrootte verkleint het gedownloade bestand niet.

4.2 Bied de juiste afbeeldingsresolutie aan

Eén foto kan bestaan uit meerdere bestanden met dezelfde inhoud en verhoudingen, maar met verschillende pixelafmetingen. Met resolutiewisseling kan de browser een bestand kiezen op basis van de weergavegrootte, de schermdichtheid en zijn beslissingen over het laden. Zo voorkom je onnodig dataverbruik en behoud je voldoende detail.

Vaste weergavegrootte: pixeldichtheidsaanduidingen
<img src="logo-200.png"
     srcset="logo-200.png 1x, logo-400.png 2x"
     width="200" height="80" alt="Northwind Books">

Het logo wordt 200 CSS-pixels breed weergegeven. Het bestand van 200 pixels past bij een scherm met verhouding 1; het bestand van 400 pixels levert twee bronpixels per weergegeven CSS-pixel bij verhouding 2. Deze vorm gebruikt x-aanduidingen en heeft geen sizes-attribuut nodig.

Veranderende weergavegrootte: breedteaanduidingen
<img src="park-800.jpg"
     srcset="park-480.jpg 480w,
             park-800.jpg 800w,
             park-1600.jpg 1600w"
     sizes="(min-width: 64em) 50vw, 100vw"
     width="1600" height="1000"
     alt="Trees around a park pond">

Elke w-waarde moet de werkelijke pixelbreedte van het bestand aangeven. Die stelt geen CSS-breedte in. CSS bepaalt nog steeds de box en sizes beschrijft die beoogde weergavebreedte voor de browser.

De eerste overeenkomende voorwaarde in sizes krijgt voorrang. Bij een browserstandaard van 16px is de ruimte vanaf 1.024px breed 50vw; daaronder is die 100vw. De laatste lengte zonder voorwaarde is de terugval. Lengtes kunnen viewporteenheden, pixel- of lettertype-eenheden en berekeningen zoals calc(100vw - 2rem) gebruiken, maar geen percentages. Als sizes bij breedteaanduidingen ontbreekt, gaat de browser normaal gesproken uit van 100vw.

Bepaal hoeveel detail nodig is

Vermenigvuldig de beschreven weergavebreedte met de apparaatpixelverhouding. Vergelijk die streefwaarde met de aangeboden bestandsbreedtes om het kleinste toereikende bestand te bepalen:

  1. Een viewport van 1.200px met verhouding 1 gebruikt de ruimte van 50vw: 600 CSS-pixels. Het bestand van 800w is het eerste dat groot genoeg is.
  2. Een viewport van 390px met verhouding 3 gebruikt 390 CSS-pixels. Daarvoor zijn 1.170 bronpixels nodig, dus 1600w voldoet aan de streefwaarde.
  3. Dezelfde smalle viewport met verhouding 2 heeft 780 bronpixels nodig; 800w voldoet daaraan.

Browsers kunnen een groter bestand uit de cache hergebruiken of onder beperkte laadomstandigheden de voorkeur geven aan een kleiner bestand. De opmaakcode levert kandidaten en informatie over afmetingen, geen onvoorwaardelijke opdracht om één bepaald bestand op te halen.

Browsers beginnen afbeeldingen op te halen voordat de volledige CSS-lay-out beschikbaar is. Daarom hoort de aanwijzing over de afmetingen in de HTML. Als CSS een afbeelding de helft van de viewport geeft maar sizes 100vw aangeeft, haalt de browser mogelijk een te groot bestand op. Werk sizes bij als de lay-out verandert. Behoud src als terugval en gebruik één alt-tekst. Voor verschillende uitsneden is <picture> nodig, omdat gewone resolutiekandidaten onderling uitwisselbare weergaven van dezelfde afbeelding moeten zijn.

Belangrijkste punten

  • Gebruik x-aanduidingen voor een vaste weergavegrootte en verschillende pixeldichtheden.
  • Gebruik w-aanduidingen voor bestandsbreedtes en sizes voor de beoogde ruimte.
  • De eerste overeenkomende sizes-voorwaarde krijgt voorrang; percentages zijn geen lengtes voor de afbeeldingsruimte.
  • Schat de bronbreedte op basis van de weergavebreedte en apparaatpixelverhouding.
  • Houd sizes in overeenstemming met CSS; de browser behoudt keuzevrijheid.

4.3 Kies een uitsnede of afbeeldingsformaat

Als je de pixelafmetingen van een foto verkleint, blijft de compositie gelijk. Soms heeft een telefoon een andere compositie nodig: bij een brede podiumfoto kan de spreker te klein worden om te herkennen. Artdirection verandert de uitsnede of afbeelding zodat het belangrijke onderwerp duidelijk blijft.

Het <picture>-element biedt een geordende reeks bronkeuzes, gevolgd door een verplicht <img>-element:

<picture>
  <source media="(min-width: 50em)"
          srcset="stage-wide.jpg" width="1600" height="900">
  <img src="stage-close.jpg" width="800" height="1000"
       alt="A speaker presenting on stage">
</picture>

Bij een standaardgrootte van 16px wordt vanaf 800px de brede uitsnede gekozen; daaronder gebruikt de afbeelding de krappere uitsnede. De <img> blijft het weergegeven element. Die biedt de terugval en de alternatieve tekst en is het element dat je met CSS voor afbeeldingen vormgeeft. Een <picture> zonder <img> toont geen afbeelding.

Zet de strengste voorwaarden eerst

De browser kiest de eerste ondersteunde bron waarvan de voorwaarden overeenkomen. Stel dat je uitsneden aanbiedt bij 30em en 60em. Zet het minimum van 60em eerst, daarna 30em en dan de terugval. Als 30em eerst staat, komt die ook overeen met een heel breed scherm en bereikt de browser 60em niet. Bereiken die niet overlappen, kunnen de bedoelde keuze ook duidelijk maken.

De media-voorwaarde van een bron is een selectie-instructie. Gewone srcset-kandidaten en sizes geven de browser daarentegen informatie om een passende resolutie te kiezen. Gebruik artdirection als de compositie moet veranderen; gebruik resolutiewisseling als de afbeeldingsinhoud gelijk blijft.

Bied formaten aan in volgorde van voorkeur
<picture>
  <source type="image/avif" srcset="hall.avif">
  <source type="image/webp" srcset="hall.webp">
  <img src="hall.jpg" width="1200" height="800"
       alt="Rows of seats in a lecture hall">
</picture>

Een browser die het eerste formaat ondersteunt, kan dat gebruiken; anders probeert die de volgende ondersteunde keuze en uiteindelijk de JPEG-terugval. AVIF en WebP leveren vaak kleinere bestanden bij een vergelijkbare beeldkwaliteit. Met het type-attribuut kan de browser niet-ondersteunde formaten overslaan zonder ze te downloaden om dat vast te stellen.

Elke bron kan ook meerdere kandidaten met breedteaanduidingen aanbieden, met een eigen srcset en sizes. Zo combineer je een gekozen uitsnede of formaat met resolutiewisseling. Als uitsneden voor artdirection verschillende verhoudingen hebben, laten afmetingsattributen op de bronnen de browser voor elke uitsnede de juiste ruimte reserveren.

Schrijf de alternatieve tekst één keer, op <img>, en zorg dat die elke uitsnede beschrijft. Als een krappe uitsnede een tweede persoon weglaat, past een alternatieve beschrijving die twee mensen noemt niet meer. Gebruik voor een puur decoratieve afbeelding alt="", zodat die geen onnodige uitgesproken inhoud toevoegt.

Belangrijkste punten

  • picture heeft een img nodig voor weergave, terugval en alternatieve tekst.
  • Gebruik artdirection als de compositie verandert.
  • De eerste ondersteunde, overeenkomende bron krijgt voorrang, dus de bronvolgorde is belangrijk.
  • Een brontype kan een voorkeursformaat met een terugval aanbieden.
  • Elke uitsnede moet passen bij de ene alternatieve beschrijving.
5

Test en verbeter responsieve pagina's

Een pagina kan er op één schermafbeelding goed uitzien en toch misgaan bij een langere titel, grotere tekst of een ander invoerapparaat. Test verschillende breedtes en zoomniveaus, spoor overlopende boxen op en inspecteer de afbeeldingen die de pagina downloadt. Aanraakdoelen, bewegingsvoorkeuren, kleurenthema's en afdrukuitvoer maken de controles compleet die dezelfde inhoud onder verschillende omstandigheden bruikbaar maken.

5.1 Zoek de breedte waarbij de pagina misgaat

Een responsieve pagina moet je over een bereik testen, niet alleen op enkele genoemde apparaten. Open de responsieve weergave van de browser, stel een smalle viewport van ongeveer 320px in en sleep naar een breed venster. Let tijdens het slepen op koppen, navigatie, kaarten en afbeeldingsranden. Test vlak onder, op en boven elk breekpunt.

Ontwikkelaarstools kunnen viewportafmetingen, apparaatpixelverhouding en aanraakbediening emuleren. Chrome en Edge bieden een apparaatwerkbalk; Firefox en Safari bieden responsieve ontwerpmodi. Emulatie is nuttig, maar echte apparaten kunnen verschillen in het gedrag van werkbalken, aanraakbediening, lettertypen en prestaties. Controleer een echte telefoon en tablet in beide standen en ook een desktopvenster waarvan je de grootte verandert.

Controleer herschikking en vergrote tekst

Het WCAG-criterium voor herschikking op niveau AA vereist dat gewone inhoud bij een breedte van 320 CSS-pixels werkt zonder dat je in twee richtingen hoeft te scrollen. Een viewport van 1.280px breed waarop tot 400% is ingezoomd, biedt die breedte. Stel een responsieve viewport van 320px in voor een directe controle op smalle breedte en test ook daadwerkelijk zoomen op een desktop om te zien hoe de pagina wordt vergroot.

Inhoud die een tweedimensionale lay-out nodig heeft, zoals een gegevenstabel, kaart of diagram, mag die indeling behouden. Houd noodzakelijk horizontaal scrollen binnen een eigen gebied. Omliggende koppen, instructies en alinea's moeten nog steeds binnen de paginabreedte passen.

Gebruik realistische inhoud: een lange titel, een ononderbroken URL, veel links en langere vertaalde tekst. Verhoog ook de standaardlettergrootte van de browser. Een box die met een kort voorbeeld ruim leek, kan overlopen als tekst groeit.

Spoor horizontaal overlopende inhoud op

Een horizontale schuifbalk of een lege strook rechts betekent vaak dat één box buiten de viewport valt. Inspecteer verdachte elementen en vergelijk hun boxranden met de paginagrens. Geef ze tijdelijk een omtreklijn:

* { outline: 1px solid red; }

Een omtreklijn toont de boxen zonder hun gemeten breedte te vergroten. Zoek naar vaste breedtes, blokken van 100vw, afbeeldingen zonder breedtegrens, brede minimumwaarden voor gridsporen, negatieve marges, lange tekst en codeblokken.

Stem de oplossing af op de oorzaak:

OorzaakBruikbare oplossing
Starre inhoudsbreedteGebruik een flexibele breedte met max-width of min()
Te grote afbeeldingBeperk de breedte en gebruik automatische hoogte
Lange ononderbroken URLGebruik overflow-wrap: anywhere
Een codeblok of noodzakelijke brede tabelVoeg lokaal overflow-x: auto toe
Een gridspoor met een te groot minimumSta een kleiner spoorminimum toe

Verberg niet als snelle oplossing de horizontaal overlopende inhoud van de hele pagina. body { overflow-x: hidden; } kan de schuifbalk laten verdwijnen terwijl inhoud buiten het bereik van de lezer blijft.

Test bij een tabel die lokaal kan scrollen zowel de interactie als de breedte. Bereik het omhullende element met een naam via het toetsenbord en controleer of horizontaal scrollen elke kolom zichtbaar maakt. Ga daarna met de tabtoets verder naar het volgende bedieningselement. De tabel kan horizontale beweging vereisen zonder dat de alinea erboven of de rest van de pagina in hetzelfde brede scrollgebied terechtkomt.

Inspecteer ten slotte afbeeldingsverzoeken in het netwerkpaneel. Stel zowel een viewport ter grootte van een telefoonscherm als een realistische hoge apparaatpixelverhouding in, laad opnieuw onder de bedoelde testomstandigheden en controleer de gekozen kandidaat en bestandsgrootte. Een visueel kleine afbeelding kan nog steeds een grote download zijn als de sizes-aanwijzing onjuist is.

Belangrijkste punten

  • Doorloop verschillende breedtes en test de grenzen van breekpunten.
  • Controleer herschikking bij 320 CSS-pixels en het werkelijke zoomgedrag.
  • Gebruik echte apparaten om gedrag te controleren dat emulatie benadert.
  • Inspecteer overlopende boxen en verhelp de specifieke oorzaak.
  • Controleer realistische inhoud en de afbeeldingsbestanden die daadwerkelijk worden gedownload.

5.2 Houd pagina's bruikbaar met aanraakbediening en lezersinstellingen

Breedte is slechts één onderdeel van responsief gedrag. Een brede tablet kan aanraakbediening gebruiken; een smal desktopvenster kan een muis gebruiken. Pagina's moeten ook werken met zoom, grotere tekst, verschillende oriëntaties en de voorkeursinstellingen van de lezer voor beweging en kleur.

Maak bedieningselementen gemakkelijk bereikbaar

De WCAG 2.2-richtlijn op niveau AA voor doelgrootte vraagt om minstens 24 × 24 CSS-pixels of voldoende tussenruimte volgens de regel voor tussenruimte, met uitzonderingen zoals links binnen zinnen. Het groottecriterium op niveau AAA gebruikt 44 × 44 CSS-pixels, eveneens met uitzonderingen. Grotere navigatielinks met binnenruimte zijn vaak prettiger dan een dichte rij kleine labels.

Bij een grootte van 16px voor het hoofdelement heeft een link met tekst van 16px, line-height: 1.5 en padding: 0.75rem 1rem een regelbox van 24px plus 12px boven en onder: 48px hoog. Maak van de link zelf de klikbare box met binnenruimte.

Essentiële informatie mag niet afhankelijk zijn van aanwijzen zonder activering. Houd handelingen zichtbaar of bereikbaar door te tikken en via toetsenbordfocus. Voeg optionele aanwijseffecten alleen toe als het primaire invoerapparaat die ondersteunt:

@media (hover: hover) and (pointer: fine) {
  .card:hover { outline: 2px solid currentColor; }
}

pointer: coarse beschrijft een onnauwkeurig primair invoerapparaat zoals een vinger. any-pointer en any-hover controleren of een aangesloten invoerapparaat een mogelijkheid heeft; ze stellen niet vast dat elke lezer die gebruikt.

Laat vergrote tekst en draaien werken

Laat zoomen ingeschakeld en controleer of tekst tot 200% kan worden vergroot zonder verlies van inhoud of functionaliteit. Gebruik afmetingen die relatief zijn aan de lettergrootte en tekstboxen die meegroeien. Met min-height kan een box groeien als de inhoud groeit; bij een vaste hoogte kan vergrote tekst in de volgende sectie overlopen.

Ondersteun staande en liggende stand tenzij één oriëntatie essentieel is voor de activiteit. Telefoons in liggende stand kunnen heel weinig verticale ruimte hebben. Een hoogtequery zoals @media (max-height: 30em) kan een klevende kop laten wegscrollen, zodat die de inhoud niet bedekt.

Houd rekening met voorkeuren en uitvoer

Gebruik prefers-reduced-motion om grote bewegingen te vermijden voor lezers die om minder beweging vragen. Eén aanpak is om optionele animaties binnen @media (prefers-reduced-motion: no-preference) te zetten. Je kunt een bestaande animatie ook verwijderen binnen een reduce-query.

Combineer voor een donker thema goed leesbare tekst- en achtergrondkleuren binnen @media (prefers-color-scheme: dark). Controleer het contrast in beide thema's. color-scheme: light dark laat door de browser getekende bedieningselementen en schuifbalken een passend thema volgen; het kiest niet al je paginakleuren voor je.

Een regel voor minder beweging kan alleen op de bewegende component worden gericht:

@media (prefers-reduced-motion: reduce) {
  .banner { animation: none; }
}

Houd de boodschap zelf beschikbaar wanneer beweging wordt verwijderd. Verander bij een donker thema de voorgrond en achtergrond samen; als je er maar één verandert, kan tekst wegvallen tegen de achtergrond. Bekijk ook een voorbeeld van formulieronderdelen, omdat door de browser getekende bedieningselementen kunnen verschillen van de vlakken die je zelf vormgeeft.

Gebruik @media print om navigatie en knoppen te verbergen en donkere tekst op wit weer te geven. Afgedrukte links kunnen hun bestemmingen tonen met a[href]::after { content: " (" attr(href) ")"; }. Controleer in een afdrukvoorbeeld of inhoud, achtergronden en pagina-einden goed leesbaar blijven.

Belangrijkste punten

  • Bepaal de grootte van het klikbare doel, inclusief de binnenruimte.
  • Gebruik invoerkenmerken om aanwijzen zonder activering en aanwijzernauwkeurigheid te controleren.
  • Houd essentiële inhoud beschikbaar voor gebruikers van aanraakbediening en toetsenbord.
  • Ondersteun zoomen, groeiende tekstboxen en beide oriëntaties.
  • Houd rekening met minder beweging en test beide kleurenthema's.
  • Bied leesbare afdrukstijlen en bruikbare linkbestemmingen.

Responsief webontwerp: voorbeelden

5 Walkthroughs

1

Maak een flexibele evenementenpagina

13 stappen
Stel de viewport in en kies afmetingen voor een evenementenpagina die in smalle vensters en bij vergrote tekst moet passen.
  1. 1
    IntroductieMaak een flexibele evenementenpagina

    Een evenementenpagina heeft heel kleine tekst op een telefoon en een inhoudsbox die buiten het scherm steekt. Maak eerst onderscheid tussen de lay-outbreedte van de browser, ingesteld door de viewport, en de grootte van de boxen daarbinnen. Laat daarna het omhullende element de beschikbare ruimte volgen en kies tekst- en hoogte-eenheden met bruikbare grenzen, zoals clamp, zodat niets stukgaat in smalle vensters of bij vergrote tekst. Je controleert elke verandering op basis van een specifieke oorzaak in plaats van meerdere niet-samenhangende afmetingen tegelijk te veranderen.

  2. 2
    UitlegLees de viewport in CSS-pixels

    Een scherm met hoge pixeldichtheid biedt geen extra CSS-lay-outbreedte. Als een telefoon 1.080 apparaatpixels breed is bij een apparaatpixelverhouding van 3, is de overeenkomstige breedte 360 CSS-pixels. Een mediaquery en een eenheid voor viewportbreedte gebruiken die CSS-breedte. De fysieke punten bieden fijnere details om tekst en afbeeldingen te tekenen; ze veranderen een smalle pagina niet in een desktoplay-out.

  3. 3
    VoorbeeldVerhelp de brede virtuele lay-out

    De evenementenpagina heeft geen viewportinstructie, dus kan de mobiele browser die in een brede virtuele viewport indelen en het resultaat verkleinen. Zet dit in het head-element van het document:

    <meta name="viewport" content="width=device-width, initial-scale=1">
    

    Laad de smalle voorbeeldweergave opnieuw. De pagina gebruikt nu de apparaatbreedte in CSS-pixels en begint op normale schaal. Laat zoomen ingeschakeld voor lezers die grotere tekst nodig hebben.

  4. 4
    UitdagingVerklaar het resterende horizontale scrollen

    Na de viewportwijziging ziet de tekst er normaal uit, maar het omhullende element van het evenement heeft nog steeds width: 900px in een viewport van 360px. Waarom scrolt de pagina nog steeds horizontaal?

    ---reveal---

    De tag veranderde de beginbreedte van de lay-outviewport van de browser, niet de CSS-breedte van het omhullende element. Een box van 900px is nog steeds breder dan 360px. Maak het omhullende element vloeiend schaalbaar met een bovengrens, zodat het kan krimpen tot de ruimte die de pagina werkelijk heeft.

  5. 5
    VoorbeeldGeef het omhullende element ruimte om te krimpen

    Vervang de vaste breedte van het omhullende element door een box over de volle breedte met een bovengrens:

    .event {
      box-sizing: border-box;
      width: 100%;
      max-width: 68rem;
      padding-inline: 1rem;
      margin-inline: auto;
    }
    

    Het omhullende element volgt een smal bovenliggend element maar stopt met groeien op een breed scherm. Border-box neemt de binnenruimte op in de opgegeven breedte, terwijl automatische marges in de inlinerichting de begrensde box centreren.

  6. 6
    UitlegKies een referentie voor tekst en tussenruimte

    Laat de lettergrootte van het hoofdelement op de standaardwaarde van de lezer staan. Een label van 1.25rem wordt 20px bij een grootte van 16px voor het hoofdelement en 25px bij 20px. Voor de binnenruimte van een knop kan em nuttiger zijn: padding: 0.5em 1em volgt de eigen tekstgrootte van de knop. In de eigenschap font-size zelf volgt em echter het bovenliggende element. Dat verschil verklaart waarom geneste regels voor lettergrootte in em op elkaar kunnen worden vermenigvuldigd.

  7. 7
    TipBegrens de alineabreedte met het lettertype

    De beschrijving van het evenement mag op een breed scherm niet uitrekken tot één heel lange regel. Voeg max-width: 62ch toe aan het leesgebied. Een ch meet de breedte van het cijfer “0” in het lettertype, dus het resultaat is een nuttige grens op basis van het lettertype, geen belofte van precies 62 tekens per regel. Controleer het werkelijke lettertype en de tekst; in smalle vensters loopt de alinea nog steeds naar een volgende regel voordat die de grens bereikt.

  8. 8
    UitdagingBehoud de verhoudingen van een knop

    De eigen lettergrootte van een knop neemt toe van 16px naar 24px. De horizontale binnenruimte is 0.75em. Wat gebeurt er met de binnenruimte aan elke kant en waarom?

    ---reveal---

    Die neemt toe van 12px naar 18px omdat em bij binnenruimte de eigen lettergrootte van de knop volgt. Zo kan de ruimte eromheen meegroeien met het label. Een waarde voor binnenruimte in rem zou daarentegen het lettertype van het hoofdelement volgen en niet noodzakelijk veranderen door deze lokale vergroting van de lettergrootte.

  9. 9
    UitlegLaat een hoge openingssectie passen

    De openingssectie van het evenement moet een telefoonscherm vullen zonder langere tekst op te sluiten in een box met vaste hoogte. Gebruik min-height: 100svh. De kleine viewport staat voor de toestand waarin browserwerkbalken zichtbaar zijn; met min-height kan de sectie groter worden dan die begingrootte. Gewoon vh volgt de grote viewport, terwijl dvh veranderingen van de werkbalken volgt en de sectie tijdens het scrollen van grootte kan laten veranderen.

  10. 10
    VoorbeeldBegin met een begrensde kopgrootte

    Probeer voor de titel van het evenement:

    .event h1 {
      font-size: clamp(1.5rem, 1rem + 2vw, 2.5rem);
    }
    

    Bij een grootte van 16px voor het hoofdelement zijn de grenzen 24px en 40px. In een viewport van 600px is de voorkeurswaarde 16px plus 12px, dus 28px. Omdat 28px binnen de grenzen ligt, gebruikt de browser die waarde. Dit geeft een vloeiende verandering zonder een aparte query voor elke grootte.

  11. 11
    VoorbeeldPas de grenzen aan beide uiteinden toe

    Behoud dezelfde expressie voor de kop en een grootte van 16px voor het hoofdelement. Bij 300px breed is de voorkeurswaarde 16px plus 6px, oftewel 22px, dus geldt de ondergrens van 24px. Bij 1.600px breed zou die 48px zijn, dus geldt de bovengrens van 40px. De middelste expressie stelt een grootte voor; clamp bepaalt of dat voorstel binnen het toegestane bereik valt. De functie schaalt niet alle drie de argumenten samen.

  12. 12
    UitdagingKies eenheden en controleer vergroting

    Het omhullende element van de evenementenpagina past, maar de titel gebruikt alleen 6vw en wordt bij zoomen op een desktop nauwelijks groter. Wat moet je veranderen en daarna testen?

    ---reveal---

    Gebruik een deel dat relatief is aan de lettergrootte en verstandige grenzen in plaats van alleen een afmeting op basis van de viewport, en test daarna de werkelijke tekstvergroting. Zoomen maakt de viewport smaller in CSS-pixels, waardoor een lettergrootte met alleen vw kleiner wordt. Zelfs een gemengde rem/vw-expressie moet je met zoom controleren om vast te stellen of lezers de tekst voldoende kunnen vergroten.

  13. 13
    SamenvattingControleer de flexibele basis

    Controleer drie referenties voordat je lay-outwijzigingen toevoegt: de mobiele viewport gebruikt de apparaatbreedte, het omhullende element volgt het bovenliggende element en tekstgroottes houden rekening met een lettertypereferentie. Begrens vloeiend schaalbare waarden waar nodig en laat tekstboxen groeien. Probeer een smal venster, een breed venster en vergrote tekst voordat je verdergaat met extra kolommen.

2

Maak van een kaartenlijst een aanpasbare lay-out

14 stappen
Bouw vanuit een smalle stapel, voeg bruikbare breekpunten toe en vergelijk expliciete en automatische kolommen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak van een kaartenlijst een aanpasbare lay-out
  2. 2
    UitlegMaak een breedtevoorwaarde leesbaar
  3. 3
    VoorbeeldCombineer voorwaarden met de juiste betekenis
  4. 4
    UitdagingZoek een gat tussen grenzen
  5. 5
    VoorbeeldSchrijf eerst de smalle lay-out
  6. 6
    VoorbeeldVoeg twee kolommen toe wanneer ze passen
  7. 7
    UitdagingGeef de wijziging voor grotere breedtes voorrang
  8. 8
    UitlegLaat grid kolommen automatisch inpassen
  9. 9
    VoorbeeldTel sporen en tussenruimtes samen
  10. 10
    KernpuntKies hoe lege ruimte zich gedraagt
  11. 11
    UitdagingHoud het smalle grid bruikbaar
  12. 12
    TipBehoud de leesvolgorde
  13. 13
    UitdagingCombineer het gedrag van pagina en component
  14. 14
    SamenvattingControleer elke overgang
3

Hergebruik één kaart op verschillende plekken op de pagina

10 stappen
Stel een lokaal omhullend element voor query's in en combineer containereenheden met voorwaarden op paginaniveau.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHergebruik één kaart op verschillende plekken op de pagina
  2. 2
    VoorbeeldMaak de metende voorouder
  3. 3
    VoorbeeldVerander de kaart binnen het omhullende element
  4. 4
    UitdagingHerstel een query op het element zelf
  5. 5
    TipGeef de bedoelde meetbox een naam
  6. 6
    UitlegMaak een lokale kop vloeiend schaalbaar
  7. 7
    UitdagingZoek de verrassende referentie
  8. 8
    VerbandHoud keuzes voor pagina en voorkeuren gescheiden
  9. 9
    UitdagingKies voorwaarden voor een herbruikbare kaart
  10. 10
    SamenvattingInspecteer de referentiebox
4

Bied een duidelijke afbeelding zonder grote download

15 stappen
Maak een afbeelding flexibel, voorspel een resolutiekandidaat en voeg waar nodig een keuze voor een uitsnede of formaat toe.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBied een duidelijke afbeelding zonder grote download
  2. 2
    VoorbeeldHoud de foto binnen de kolom
  3. 3
    UitlegKies wat mag worden bijgesneden
  4. 4
    UitdagingMaak onderscheid tussen weergavegrootte en bestandsgrootte
  5. 5
    VoorbeeldBied werkelijke bestandsbreedtes aan
  6. 6
    VoorbeeldLees de afbeeldingsruimte voordat je een bestand kiest
  7. 7
    TipHoud sizes en CSS op elkaar afgestemd
  8. 8
    UitdagingKies de benodigde resolutie
  9. 9
    VerbandGebruik pixeldichtheidsaanduidingen voor het vaste logo
  10. 10
    UitlegBepaal of de uitsnede moet veranderen
  11. 11
    VoorbeeldPlaats de brede uitsnede vóór de terugval
  12. 12
    UitdagingHerstel de volgorde van uitsneden
  13. 13
    UitlegBied formaten aan zonder het onderwerp te veranderen
  14. 14
    UitdagingMaak het afbeeldingsplan voor de workshop af
  15. 15
    SamenvattingControleer de box en het verzoek
5

Test een pagina verder dan de nette voorbeeldweergave

12 stappen
Spoor overlopende inhoud op en test herschikking, invoermogelijkheden, tekstgrootte en lezersvoorkeuren.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieTest een pagina verder dan de nette voorbeeldweergave
  2. 2
    VoorbeeldDoorloop de lay-outbreedtes
  3. 3
    UitlegControleer een leesbreedte bij zoom
  4. 4
    VoorbeeldZoek de box die over de rand gaat
  5. 5
    UitdagingHoud een noodzakelijk breed gebied bereikbaar
  6. 6
    VoorbeeldMaak de link zelf groot genoeg
  7. 7
    KernpuntLeid het invoertype niet af uit de breedte
  8. 8
    UitdagingPas een paneel aan voor vergrote tekst
  9. 9
    UitlegTest beweging, thema's en afdrukken
  10. 10
    TipInspecteer downloads onder de bedoelde omstandigheden
  11. 11
    UitdagingPlan een laatste bruikbaarheidscontrole
  12. 12
    SamenvattingHerhaal de omstandigheid die de fout blootlegde

Responsief webontwerp: oefenvragen

40 Oefenvragen in 4 sets

Set 1: Basis van viewport, afmetingen en lay-out10 Oefenvragen

Vraag 1 van 10

Een scherm is 824 apparaatpixels breed en heeft een apparaatpixelverhouding van 2. Welke breedte gebruikt CSS voor de lay-outviewport als de viewportmetatag om de apparaatbreedte vraagt?
  1. 824 CSS-pixels
  2. 1.648 CSS-pixels
  3. 412 CSS-pixels
  4. 206 CSS-pixels
Toon antwoordVerberg antwoord
Antwoord: C
Deel de breedte in apparaatpixels door de verhouding: 824 gedeeld door 2 is 412 CSS-pixels. Als je rechtstreeks 824 gebruikt, verwar je fysieke schermpunten met de referentie-eenheden die lay-out en breedtequery's meten.

Vraag 2 van 10

Een mobiele pagina verschijnt als een heel kleine desktoplay-out. Het head-element heeft geen viewportmetatag en de hoofdbox heeft width: 880px. Welk paar wijzigingen pakt beide oorzaken aan?
  1. Voeg de viewportmetatag met apparaatbreedte toe; geef de hoofdbox een vloeiend schaalbare breedte.
  2. Voeg de viewportmetatag met apparaatbreedte toe; houd de hoofdbox op 880px.
  3. Behoud de huidige viewport; geef de hoofdbox een vloeiend schaalbare breedte.
  4. Stel maximum-scale in op 1; geef de hoofdbox een vloeiend schaalbare breedte.
Toon antwoordVerberg antwoord
Antwoord: A
De viewportmetatag voorkomt dat de brede virtuele lay-out wordt verkleind om op de telefoon te passen. Een vloeiend schaalbare hoofdbox past daarna in de werkelijk beschikbare breedte. De tag alleen laat de box van 880px te groot en zoomen beperken verhelpt geen van beide oorzaken.

Vraag 3 van 10

Een paneel heeft width: 60% in een omsluitend blok van 450px breed. Het paneel heeft geen binnenruimte of rand. Wat is de breedte?
  1. 180px
  2. 450px
  3. 750px
  4. 270px
Toon antwoordVerberg antwoord
Antwoord: D
Een procentuele breedte neemt dat deel van het omsluitende blok: 60% van 450px is 270px. De resterende 180px is het ongebruikte deel, niet de paneelbreedte. Zonder binnenruimte of rand hoeft er geen extra boxmodelbreedte bij.

Vraag 4 van 10

De lettergrootte van het hoofdelement is 18px. Een knop erft een lettergrootte van 20px van het bovenliggende element, stelt font-size: 1.25em in en heeft padding-inline: 0.8em. Wat is de horizontale binnenruimte aan elke kant?
  1. 16px
  2. 20px
  3. 18px
  4. 14,4px
Toon antwoordVerberg antwoord
Antwoord: B
Eerst wordt de lettergrootte van de knop 25px, omdat em bij font-size het bovenliggende element gebruikt: 20 keer 1,25. Em voor de binnenruimte gebruikt daarna de eigen lettergrootte van de knop: 25 keer 0,8 = 20px per kant. Als je rechtstreeks 20px als referentie voor de binnenruimte gebruikt, mis je de verandering van de lettergrootte van de knop.

Vraag 5 van 10

Een prominente openingssectie moet minstens zo hoog zijn als de kleine mobiele viewport en groeien als de tekst meer hoogte nodig heeft. Welke declaratie past?
  1. height: 100svh
  2. min-height: 100svh
  3. min-height: 100lvh
  4. height: 100dvh
Toon antwoordVerberg antwoord
Antwoord: B
De eenheid voor de kleine viewport staat voor de toestand met zichtbare mobiele werkbalken en min-height laat extra inhoudshoogte toe. Een vaste hoogte van 100svh gebruikt de juiste viewportreferentie, maar kan de box niet laten groeien om langere tekst te bevatten.

Vraag 6 van 10

De lettergrootte van het hoofdelement is 18px en de viewport is 900px breed. Welke lettergrootte levert clamp(1rem, 1rem + 1vw, 1.4rem) op?
  1. 25,2px
  2. 27px
  3. 18px
  4. 32,4px
Toon antwoordVerberg antwoord
Antwoord: A
De voorkeurswaarde is 18px plus 9px, oftewel 27px. Het maximum is 1,4 keer 18px, dus 25,2px. Daarom geldt het maximum. Bij een antwoord van 27px is de middelste expressie berekend, maar de bovengrens niet toegepast.

Vraag 7 van 10

Komt (min-width: 760px) overeen bij een viewportbreedte van precies 760px?
  1. Nee, want de breedte moet groter zijn dan 760px.
  2. Alleen als ook een max-width-voorwaarde aanwezig is.
  3. Alleen als het stijlblad de grootte van het hoofdelement in pixels instelt.
  4. Ja, want de ondergrens is inbegrepen.
Toon antwoordVerberg antwoord
Antwoord: D
Een min-width-voorwaarde omvat de opgegeven grenswaarde en komt dus overeen bij 760px en daarboven. Als je de grens als strikt groter opvat, verwar je min-width met een vergelijking met groter dan, zoals width > 760px.

Vraag 8 van 10

Een browser heeft een oorspronkelijke lettergrootte van 20px. Het stijlblad stelt html { font-size: 12px; } in. Vanaf welke viewportbreedte komt (min-width: 36em) overeen?
  1. 432px
  2. 576px
  3. 720px
  4. 864px
Toon antwoordVerberg antwoord
Antwoord: C
Em-eenheden in mediaquery's gebruiken de oorspronkelijke lettergrootte van de browser, dus de grens is 36 keer 20px = 720px. Vermenigvuldigen met de door de maker ingestelde 12px voor het hoofdelement geeft 432px, maar een font-size-declaratie voor HTML bepaalt de eenheidsreferentie van deze query niet.

Vraag 9 van 10

Een basisgrid heeft één kolom. Een query voor 62em stelt drie kolommen in, later gevolgd door een query voor 42em die er twee instelt. Beide gebruiken .items met gelijke specificiteit in dezelfde laag. Wat verschijnt er bij 70em?
  1. Drie kolommen, omdat de grotere grens een hogere specificiteit heeft.
  2. Eén kolom, omdat overlappende minimumbreedtequery's elkaar opheffen.
  3. Drie kolommen, omdat een browser query's op grenswaarde sorteert.
  4. Twee kolommen, omdat beide query's overeenkomen en de latere regel voorrang krijgt.
Toon antwoordVerberg antwoord
Antwoord: D
Bij 70em is aan beide minimumbreedtevoorwaarden voldaan. De selectors hebben gelijke specificiteit, dus krijgt de latere declaratie voor twee kolommen voorrang. Een grens bij een grotere breedte maakt de selector niet specifieker; zet wijzigingen met oplopende minimumbreedtes in oplopende volgorde als ze met elkaar concurreren.

Vraag 10 van 10

Vier flexibele kaarten lopen om naar een volle rij van drie en een laatste rij met één kaart. Elke kaart heeft flex: 1 1 14rem. Waarom kan de laatste kaart breder zijn?
  1. De laatste kaart erft een grotere lettergrootte van het hoofdelement.
  2. Flexregelomloop behoudt lege kolommen op de laatste regel.
  3. Elke flexregel verdeelt de eigen resterende breedte.
  4. De laatste kaart negeert de opgegeven breedte van de container.
Toon antwoordVerberg antwoord
Antwoord: C
Flexbox verdeelt de resterende breedte afzonderlijk op elke regel. Eén groeiende kaart kan de beschikbare ruimte van de laatste regel innemen, terwijl drie kaarten de vorige regel delen. Flexregelomloop behoudt geen lege gridsporen; gebruik grid als kolommen over rijen heen moeten uitlijnen.
Set 2: Breekpunten, containers en bruikbare bedieningselementen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een viewport kan tijdens het zoomen 679,5px breed zijn. Welke indeling van grenzen wijst elke breedte aan precies één van twee breedteafhankelijke lay-outs toe?
  1. Gebruik (max-width: 679px) en (min-width: 680px).
  2. Gebruik (width < 680px) en (width >= 680px).
  3. Gebruik (max-width: 680px) en (min-width: 680px).
  4. Gebruik (width <= 680px) en (width > 681px).
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een navigatierij loopt bij sommige breedtes onhandig naar een volgende regel. Wat moet bepalen waar de lay-out verandert?
  1. De meest voorkomende telefoonbreedte in een lijst met apparaatvoorinstellingen.
  2. De breedte waarbij alle afbeeldingen van de pagina zijn gedownload.
  3. Het aantal fysieke pixels in de specificaties van het scherm.
  4. De breedte waarbij de werkelijke links een andere indeling nodig hebben.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een grid gebruikt repeat(auto-fit, minmax(14rem, 1fr)) met een tussenruimte van 1rem. De lettergrootte van het hoofdelement is 16px, er zijn veel items en de inhoudsbreedte is 920px. Hoeveel kolommen passen er?
  1. Twee kolommen
  2. Drie kolommen
  3. Vier kolommen
  4. Vijf kolommen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een kaartengrid kan in een zijbalk van 190px of een hoofdgebied van 1.000px staan. Het gebruikt repeat(auto-fit, minmax(16rem, 1fr)). Bij een lettergrootte van 16px voor het hoofdelement loopt het grid buiten de zijbalk en moeten twee kaarten in het hoofdgebied over hun rij uitrekken. Welke spoorregel voldoet aan beide eisen?
  1. repeat(auto-fit, minmax(min(16rem, 100%), 1fr))
  2. repeat(auto-fill, minmax(16rem, 1fr))
  3. repeat(auto-fit, minmax(16rem, 16rem))
  4. repeat(auto-fill, minmax(min(16rem, 100%), 1fr))
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke declaratie op een omhullend element maakt containerquery's voor breedte mogelijk en laat bij horizontale tekst de hoogte de inhoud volgen?
  1. container-type: normal
  2. container-type: size
  3. container-type: inline-size
  4. container-name: inline-size
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een kaart heeft container-type: inline-size. Binnen @container (width >= 24rem) verandert .card naar twee kolommen, maar de kaart verandert nooit. Er is geen geschikte vooroudercontainer en de kaart staat in een krimpende flexruimte. Welke oplossing laat de query betrouwbaar werken?
  1. Behoud het type op de kaart en voeg een containernaam toe aan de query.
  2. Zet het type op de kaart en verander de query naar max-width.
  3. Zet het type op een groeiend omhullend element en bevraag de kaart daarbinnen.
  4. Zet het type op een inline omhullend element waarvan de breedte alleen uit de inhoud volgt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een kop gebruikt 5cqi binnen een geschikte container van 460px breed bij horizontale tekst. De viewport is 1.380px breed. Wat is de berekende lettergrootte vóór eventuele andere begrenzingen?
  1. 23px
  2. 69px
  3. 46px
  4. 13,8px
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een afbeelding van 1.500 × 1.000 heeft bijpassende HTML-afmetingsattributen en de CSS max-width: 100%; height: auto. De container is 450px breed. Welke weergegeven afmetingen behouden de verhoudingen?
  1. 450 × 1.000 CSS-pixels
  2. 450 × 300 CSS-pixels
  3. 1.500 × 1.000 CSS-pixels
  4. 450 × 450 CSS-pixels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Bij 320px bevat een pagina een leesbare alinea met een lange URL en een werkelijk tweedimensionale resultatentabel. De URL en tabel maken beide de hele pagina breder. Welke oplossing behoudt de toegang tot beide?
  1. Verberg horizontaal overlopende inhoud op de hele pagina en behoud beide huidige boxbreedtes.
  2. Geef de alinea en tabel beide een vaste breedte van 320px en verberg overlopende inhoud.
  3. Zet de hele pagina in één horizontaal scrollgebied en behoud de brede lay-out.
  4. Laat de URL afbreken en zet de tabel in een benoemd, met het toetsenbord bereikbaar scrollbaar omhullend element.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een grote tablet gebruikt vooral aanraakbediening en geeft hover: none en pointer: coarse door. Hoe moeten essentiële details van een kaart worden aangeboden?
  1. Toon ze alleen bij aanwijzen zonder activering, omdat de tabletviewport breed is.
  2. Toon ze alleen wanneer de tablet in liggende stand komt.
  3. Houd ze zichtbaar of bereikbaar door te tikken en via toetsenbordfocus.
  4. Houd ze verborgen totdat een query met any-pointer: fine overeenkomt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Afbeeldingsbestanden, uitsneden en weergaveboxen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een diagram moet in een vaste rechthoekige miniatuur passen zonder dat een deel van de inhoud verloren gaat. Welke object-fit-waarde past daarbij?
  1. contain
  2. cover
  3. fill
  4. none
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

De afbeeldingen van een pagina lijken klein op telefoons, maar downloaden nog steeds enorme bestanden. Ze hebben al max-width: 100%; height: auto. Welke extra wijziging pakt de downloadgrootte aan?
  1. Verlaag de CSS-max-width van 100% naar 80%.
  2. Verwijder de HTML-attributen width en height.
  3. Bied kleinere bestanden aan via opmaakcode voor responsieve afbeeldingen.
  4. Stel object-fit bij elke afbeelding in op contain.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een afbeelding wordt 340 CSS-pixels breed weergegeven op een scherm met verhouding 2. De kandidaten zijn 400w, 700w en 1400w. Ga ervan uit dat de browser de kleinste kandidaat kiest die aan de streefwaarde voor pixeldichtheid voldoet, zonder aanpassing vanwege cache of netwerk. Welke bestandsbreedte wordt gekozen?
  1. 400 pixels
  2. 680 pixels
  3. 1.400 pixels
  4. 700 pixels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De browserstandaard is 16px. Een afbeelding heeft sizes="(min-width: 54em) 40vw, 100vw" en kandidaten van 600w, 1000w en 1800w. Ga bij een viewport van 1.000px en verhouding 2 uit van de kleinste kandidaat die aan de streefwaarde voor pixeldichtheid voldoet. Welke bestandsbreedte levert dat op?
  1. 600 pixels
  2. 1.000 pixels
  3. 1.800 pixels
  4. 800 pixels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

CSS geeft een foto een ruimte van 48vw, maar de opmaakcode met breedteaanduidingen vermeldt sizes="100vw". Welk laadprobleem is waarschijnlijk?
  1. De browser moet de foto ondanks CSS op 100vw weergeven.
  2. De browser moet elke kandidaat met een breedteaanduiding afwijzen.
  3. De browser kan een onnodig grote kandidaat kiezen.
  4. De browser kan de foto tot de helft van de compositie bijsnijden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

De standaardgrootte is 16px. Een afbeelding gebruikt sizes="(min-width: 38em) 100vw, (min-width: 66em) 45vw, 100vw". Bij 1.152px en verhouding 2 zijn de kandidaten 640w, 1280w en 2560w. Wat gebeurt er volgens de regel voor de kleinste toereikende kandidaat?
  1. De eerste voorwaarde krijgt voorrang en kiest de kandidaat van 2560w.
  2. De grotere overeenkomende grens krijgt voorrang en kiest de kandidaat van 1280w.
  3. De eerste voorwaarde krijgt voorrang en kiest de kandidaat van 1280w.
  4. De laatste terugval krijgt voorrang en kiest de kandidaat van 2560w.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Waar moet je binnen een picture-element de alternatieve tekst schrijven?
  1. Op elk source-element.
  2. Op het picture-element zelf.
  3. Alleen op de eerste overeenkomende source.
  4. Op het verplichte img-element.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

De browserstandaard is 16px. Een picture biedt eerst een bron met een minimumbreedte van 34em, kandidaten van 600w/1200w en sizes="50vw", daarna een bron voor 68em met kandidaten van 1600w/2400w en sizes="100vw", en daarna img. Beide formaten worden ondersteund. Welke bron en welk bestand volgen bij 1.152px en verhouding 2 volgens de keuze van de kleinste toereikende kandidaat?
  1. De tweede bron en het bestand van 2400w.
  2. De eerste bron en het bestand van 1200w.
  3. De eerste bron en het bestand van 600w.
  4. De tweede bron en het bestand van 1600w.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een picture biedt AVIF aan, daarna WebP en vervolgens een JPEG-img. Er zijn geen mediavoorwaarden. Een browser ondersteunt WebP en JPEG, maar geen AVIF. Wat kiest de browser?
  1. De src van de JPEG-img.
  2. De WebP-bron.
  3. De AVIF-bron.
  4. Zowel WebP als JPEG.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Na het verbreden van een testvenster staat een grote responsieve afbeelding in de cache. Als je het venster smaller maakt, blijkt dat bestand nog steeds in gebruik. Wat is een juiste conclusie?
  1. De browser moet elke sizes-voorwaarde hebben genegeerd.
  2. Een afbeelding met breedteaanduidingen kan zich niet aanpassen na het veranderen van de venstergrootte.
  3. De CSS-breedte van de afbeelding moet nog gelijk zijn aan de bredere viewport.
  4. Een grotere kandidaat uit de cache kan worden hergebruikt; test opnieuw met gecontroleerde cache.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Onderzoek responsieve pagina's onder verschillende omstandigheden10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een omhullend element met content-box heeft width: 100% binnen een bovenliggend element van 370px en heeft links en rechts 20px binnenruimte, zonder rand. Welke wijziging laat het omhullende element in het bovenliggende element passen met behoud van die binnenruimte?
  1. Behoud content-box, omdat de totale breedte al 370px is.
  2. Gebruik border-box, zodat de totale breedte van het omhullende element 410px wordt.
  3. Behoud content-box en voeg automatische marges in de inlinerichting toe om overlopende inhoud te verhelpen.
  4. Gebruik border-box, zodat de totale breedte van het omhullende element 370px is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een zijbalk is 240px breed binnen een viewport van 1.440px. Het tekstpaneel gebruikt width: 30vw; height: 8rem. Als tekst wordt vergroot, overlapt die het volgende paneel. Welke oplossing pakt beide zichtbare fouten aan?
  1. Behoud de viewportrelatieve breedte en vervang height door min-height.
  2. Gebruik een breedte relatief aan het bovenliggende element en behoud de vaste hoogte van 8rem.
  3. Gebruik een breedte relatief aan het bovenliggende element en laat de paneelhoogte meegroeien met de inhoud.
  4. Gebruik een kleinere viewportrelatieve breedte en verberg alle overlopende paneelinhoud.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Deze regels staan in één laag en hebben gelijke specificiteit. Welke lettergrootte geldt bij een viewport van 900px?

@media (min-width: 700px) { .title { font-size: 2rem; } }
.title { font-size: 1.2rem; }
  1. 1,2rem
  2. 2rem
  3. 3,2rem
  4. De oorspronkelijke lettergrootte van de browser.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De browserstandaard en de lettergrootte van het hoofdelement zijn 16px. Bij een viewport van 928px is een omhullend pagina-element 540px breed. Een query voor 52em geeft het element een zijbalk van 18rem, een tussenruimte van 1rem en een hoofdkolom van minmax(0, 1fr). Het hoofdgrid gebruikt repeat(auto-fit, minmax(16rem, 1fr)) en een URL op een kaart meet zonder afbreking 620px, met overflow-wrap: normal. Welke twee aanpassingen laten de hoofdinhoud passen zonder de zijbalk te veranderen?
  1. Verplaats het breekpunt voor de zijbalk naar een grotere breedte en behoud de starre regels voor het spoor en de URL.
  2. Sta een krimpbaar spoorminimum en afbreking binnen de URL-tekst toe.
  3. Verberg overlopende inhoud op de body en behoud de starre regels voor het spoor en de URL.
  4. Sta een krimpbaar spoorminimum toe, maar houd de URL-tekst onafbreekbaar.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

De lettergrootte van het hoofdelement is 16px. Een omhullend element van 520px met de naam panel bevat een inline-size-container van 280px, die een kaart bevat. Beide voorouders zijn geschikt. Een naamloze query voor 26rem geeft de kaart vorm. Wat gebeurt er en hoe kan de query bewust de buitenste breedte gebruiken?
  1. De query komt al overeen; naamloze query's gebruiken altijd de breedste voorouder.
  2. De query blijft onwaar; noem de binnenste container panel en behoud de breedte van 280px.
  3. De query komt al overeen; 26rem wordt berekend op basis van de kaartbreedte van 280px.
  4. De query blijft onwaar; noem de query panel zodat die de voorouder van 520px meet.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een herbruikbare producttegel verschijnt in beide paginakolommen. De plaatsing van de afbeelding moet veranderen op basis van de eigen ruimte, terwijl grote animaties rekening moeten houden met minder beweging. Welk ontwerp koppelt elke keuze aan de juiste voorwaarde?
  1. Gebruik een viewportbreedtequery voor de plaatsing en een containerquery voor beweging.
  2. Gebruik één viewportbreedtequery voor zowel plaatsing als minder beweging.
  3. Gebruik een containerquery voor afmetingen voor de plaatsing en een bewegingsmediaquery voor de animatie.
  4. Gebruik één containerbreedtequery voor zowel plaatsing als minder beweging.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een foto vult een omhullend element waarvan het omsluitende blok een viewport van 1.440px breed beslaat. Het omhullende element heeft width: 100%; max-width: 48rem, zonder binnenruimte, en de lettergrootte van het hoofdelement is 16px. De afbeeldingsaanwijzing is sizes="50vw"; de verhouding is 2 en de kandidaten zijn 800w, 1500w en 2000w. Welke correctie en bestandskeuze passen bij de werkelijke afbeeldingsruimte volgens de keuze van de kleinste toereikende kandidaat?
  1. Behoud de aanwijzing van 720px; de werkelijke ruimte heeft alleen het bestand van 1500w nodig.
  2. Gebruik bij deze breedte een aanwijzing van 768px; de streefwaarde vereist het bestand van 2000w.
  3. Gebruik bij deze breedte een aanwijzing van 768px; de streefwaarde vereist het bestand van 1500w.
  4. Gebruik bij deze breedte een aanwijzing van 1.440px; de streefwaarde vereist het bestand van 2000w.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een brede uitsnede toont twee fietsers, maar de uitsnede voor telefoons toont er maar één. De img heeft de alternatieve tekst “Twee fietsers steken een brug over.” Wat moet er veranderen?
  1. Zorg dat de uitsneden en de gedeelde alternatieve beschrijving overeenkomen over het zichtbare onderwerp.
  2. Geef de bron voor telefoons een eigen alt en laat de img-beschrijving ongewijzigd.
  3. Verplaats de bestaande alt-tekst van img naar het picture-element.
  4. Verwijder de verplichte img en laat elke source een eigen alt-tekst weergeven.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Op een lay-outviewport van 1.440px wordt ingezoomd tot 300%. Wat is de resulterende breedte ongeveer in CSS-pixels?
  1. 4.320 CSS-pixels
  2. 1.140 CSS-pixels
  3. 480 CSS-pixels
  4. 720 CSS-pixels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Op een laag aanraakscherm in liggende stand bedekt een klevende kop een groot deel van de pagina en verschijnen essentiële menudetails alleen bij aanwijzen zonder activering. Een lezer heeft ook om minder beweging gevraagd. Welk plan pakt alle drie de omstandigheden aan?
  1. Gebruik één voorwaarde voor smalle breedte om de kop te verkleinen, aanwijzen toe te voegen en beweging te stoppen.
  2. Gebruik voorwaarden voor hoogte, invoer en beweging voor de bijbehorende aanpassingen.
  3. Gebruik een containerquery om de kop te verkleinen en leid mogelijkheden voor aanwijzen en bewegingsvoorkeuren daaruit af.
  4. Gebruik voorwaarden voor hoogte en aanwijzen en schakel animatie in wanneer de viewport breed is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

74 Kernbegrippen, elk met een definitie

A

aanraakdoel
Een aanraakdoel is het klikbare of aanraakbare gebied van een bedieningselement, inclusief de actieve binnenruimte, dat groot genoeg moet zijn of voldoende afstand tot andere doelen moet hebben.
Binnenruimte op de link zelf maakt een groter doel dan niet-klikbare ruimte rond de tekst.
aanwijzernauwkeurigheid
Aanwijzernauwkeurigheid beschrijft hoe nauwkeurig het primaire aanwijsapparaat een gebied kan aanwijzen en wordt in mediaquery's weergegeven als fine, coarse of none.
Een tablet die vooral aanraakbediening gebruikt, kan pointer: coarse doorgeven, ook als de viewport breed is.
afdrukstijlblad
Een afdrukstijlblad past CSS toe voor afdrukuitvoer en houdt bruikbare inhoud leesbaar terwijl navigatie, kleuren en de weergave van links worden aangepast.
Een afdrukregel verbergt menuknoppen en kan de bestemming van elke link na het label toevoegen.
afmetingen inclusief binnenruimte en rand
Bij afmetingen inclusief binnenruimte en rand vallen binnenruimte en randen binnen de opgegeven breedte en hoogte van een element, waardoor minder ruimte voor de inhoud overblijft.
Een omhullend pagina-element over de volle breedte gebruikt box-sizing: border-box, zodat de binnenruimte aan de zijkanten geen overlopende inhoud veroorzaakt.
afmetingsisolatie
Afmetingsisolatie voorkomt dat inhoud de grootte van een container in de geïsoleerde richtingen bepaalt en voorkomt zo circulaire afhankelijkheden bij het bepalen van afmetingen.
Een box met container-type: size heeft een onafhankelijke hoogte-instelling nodig omdat de tekst die hoogte niet meer bepaalt.
alternatieve tekst
Alternatieve tekst is het tekstequivalent op een img-element dat het doel of de inhoud van de afbeelding overbrengt wanneer die niet kan worden waargenomen.
Eén alt-beschrijving moet juist blijven voor elke uitsnede die de omringende picture kan kiezen.
apparaatpixelverhouding
De apparaatpixelverhouding is het aantal apparaatpixels per CSS-pixel en verbindt de schermdichtheid met de referentie-eenheid voor de lay-out van de pagina.
Een foto die 250 CSS-pixels breed wordt getoond, kan op een scherm met verhouding 2 ongeveer 500 bronpixels gebruiken.
artdirection
Artdirection kiest een andere afbeeldingscompositie of uitsnede voor een weergavevoorwaarde, zodat het belangrijke onderwerp bij de gekozen grootte duidelijk blijft.
Een telefoon ontvangt een krappe uitsnede van een artiest, terwijl een breed venster de artiest en het podium toont.
auto-fill
Het gridherhaalsleutelwoord auto-fill behoudt de sporen die passen, ook als sommige leeg zijn, en bewaart zo ongebruikte kolomposities in de rij.
Twee kaarten kunnen smaller blijven omdat auto-fill ruimte gereserveerd laat voor extra lege sporen.
auto-fit
Het gridherhaalsleutelwoord auto-fit maakt zoveel sporen als passen en laat ongebruikte sporen samenvallen, zodat bezette sporen de ruimte kunnen verdelen.
Twee kaarten kunnen over een brede rij uitrekken wanneer auto-fit de lege sporen van de rij laat samenvallen.

B

beeldverhouding
Een beeldverhouding geeft de verhouding tussen breedte en hoogte weer, zodat een mediabox dezelfde proporties kan behouden als de afmetingen veranderen.
Een foto met een verhouding van 3:2 die 300px breed wordt weergegeven, heeft een hoogte van 200px nodig om de oorspronkelijke vorm te behouden.
bereiksyntaxis
Bereiksyntaxis drukt voorwaarden voor media- of containerafmetingen uit met vergelijkingsoperatoren en maakt zo duidelijk welke grenzen wel en niet zijn inbegrepen.
De voorwaarde (600px <= width < 900px) omvat 600px maar sluit 900px uit.
breedteaanduiding
Een breedteaanduiding geeft de werkelijke breedte van een afbeeldingskandidaat in bronpixels aan met het achtervoegsel w; die stelt de weergegeven breedte in CSS niet in.
De aanduiding 900w is alleen juist als het aangeboden kandidaatbestand werkelijk 900 pixels breed is.
breekpunt
Een breekpunt is een grens waar een voorwaardelijke regel een lay-out of stijl verandert omdat de inhoud een andere indeling nodig heeft.
Een navigatierij krijgt een breekpunt waar de volledige labels niet meer goed op één regel passen.
bronvolgorde
De bronvolgorde is de volgorde van elementen in HTML, die de leesvolgorde en volgorde van toetsenbordfocus bepaalt, ook als CSS de visuele plaatsing verandert.
Een link die visueel naar boven is verplaatst, kan met Tab nog steeds als laatste worden bereikt als die in de HTML als laatste blijft staan.

C

cascade
De cascade is het proces dat bepaalt welke van concurrerende CSS-declaraties voorrang krijgt; voorwaardelijke regels doen nog steeds mee als aan hun voorwaarden is voldaan.
Bij even specifieke overeenkomende regels in dezelfde laag krijgt de latere font-size-declaratie voorrang.
ch
Een ch is een lengte gelijk aan de opschuifbreedte van het cijfer “0” in het huidige lettertype, vaak gebruikt om de regellengte van een alinea te begrenzen.
Een artikel begrensd op 65ch blijft leesbaar in een breed venster zonder een exact aantal tekens te beloven.
clamp()
De functie clamp() begrenst een voorkeursgrootte tussen een minimum en een maximum, zodat de grootte binnen die grenzen vloeiend kan veranderen.
Een kop combineert rem en vw in clamp(), zodat die binnen bruikbare grenzen met het venster kan groeien.
contain
De waarde contain van object-fit houdt de hele afbeelding zichtbaar binnen een box met ingestelde afmetingen, behoudt de verhoudingen en laat zo nodig lege ruimte over.
Een diagram gebruikt contain, zodat alle labels zichtbaar blijven, ook als de vorm afwijkt van de miniatuur.
containernaam
Een containernaam duidt een vooroudercontainer aan, zodat een query die kan selecteren in plaats van de dichtstbijzijnde geschikte naamloze referentie.
@container sidebar (width >= 30rem) zoekt een geschikte voorouder met de naam sidebar.
containerquery voor afmetingen
Een containerquery voor afmetingen past stijlen toe op afstammelingen wanneer een geschikte vooroudercontainer voldoet aan een voorwaarde over de afmetingen.
Twee kaarten op dezelfde pagina kunnen verschillende indelingen gebruiken omdat hun omhullende elementen verschillende breedtes hebben.
containerquery-eenheid
Een containerquery-eenheid is een lengte gebaseerd op één procent van de afmeting van een geschikte vooroudercontainer in een bepaalde richting.
Een kop met 5cqi groeit als het omhullende element van de eigen kaart breder wordt, ook als de viewport gelijk blijft.
cover
De waarde cover van object-fit vult een afbeeldingsbox met ingestelde afmetingen met behoud van de bronverhoudingen en snijdt de delen af die buiten de box vallen.
Een cursusfoto vult met cover een miniatuur van 4:3, zodat enige inhoud aan de randen kan verdwijnen.
cqb
Een cqb is één procent van de blokafmeting van een geschikte vooroudercontainer, bij horizontale tekst gelijk aan de hoogte.
Een eenheid voor de blokafmeting heeft een container nodig die voor die richting geschikt is, niet alleen een inline-size-container.
cqi
Een cqi is één procent van de inlineafmeting van de dichtstbijzijnde geschikte vooroudercontainer, bij horizontale tekst gelijk aan de breedte.
Binnen een geschikte container van 500px breed geeft 4cqi een voorkeurslettergrootte van 20px.
cqmin en cqmax
De eenheden cqmin en cqmax gebruiken voor proportionele afmetingen respectievelijk één procent van de kleinste en de grootste geschikte containerafmeting.
Een lengte in cqmin volgt de kleinste referentieafmeting als de twee afmetingen verschillen.
CSS-pixel
Een CSS-pixel is een referentielengte voor lay-out; op een scherm met hoge pixeldichtheid kan die overeenkomen met meerdere fysieke apparaatpixels.
Een telefoon met verhouding 3 en een CSS-viewport van 390px heeft een scherm van 1.170 apparaatpixels breed.

D

desktop-first-CSS
Desktop-first-CSS begint met basisstijlen voor brede schermen en gebruikt maximumbreedtequery's om die te veranderen of terug te draaien als de viewport smaller wordt.
Een desktop-first-rij schakelt binnen een max-width-query voor kleinere vensters over op een verticale stapel.
dvh
Een dvh is één procent van de dynamische viewporthoogte, die veranderingen in het huidige zichtbare gebied volgt als browserwerkbalken bewegen.
Een paneel met 100dvh kan van grootte veranderen terwijl de werkbalk van een telefoon tijdens het scrollen verschijnt of verdwijnt.

E

em
Een em is een lengte relatief aan de lettergrootte, gebaseerd op de lettergrootte van het bovenliggende element voor font-size en op de eigen lettergrootte van het element voor andere eigenschappen.
Een knop met 1em horizontale binnenruimte krijgt meer ruimte rond het label als de eigen lettergrootte groeit.

H

herschikking
Herschikking is het opnieuw indelen van inhoud zodat die in de beschikbare ruimte past; WCAG op niveau AA controleert gewone verticale inhoud bij een breedte van 320 CSS-pixels.
Een alinea moet bij 400% zoom naar smallere regels worden omgebroken zonder dat de pagina horizontaal hoeft te scrollen.
horizontaal overlopende inhoud
Horizontaal overlopende inhoud ontstaat als inhoud buiten de voor de box beschikbare breedte steekt, wat horizontaal scrollen of verborgen inhoud kan veroorzaken.
Een paneel met een vaste breedte van 700px loopt buiten een pagina van 360px, ook als de viewportmetatag aanwezig is.

I

inhoudsafhankelijk breekpunt
Een inhoudsafhankelijk breekpunt wordt gekozen op basis van het gedrag van werkelijke tekst en bedieningselementen, in plaats van een vooraf ingestelde breedte die bij een apparaat hoort.
Door een lange paginatitel te testen, blijkt dat de zijbalk eerder dan verwacht eronder moet komen.
inlineafmeting
De inlineafmeting is de afmeting van een element in de richting waarin tekst binnen een regel loopt; bij horizontale tekst komt die overeen met de breedte.
De inline-size-query van een horizontale kaart reageert op de breedte, terwijl de hoogte de tekst kan blijven volgen.
inpassing van afbeeldingsinhoud
De inpassing van afbeeldingsinhoud bepaalt hoe de inhoud van een afbeelding in een afbeeldingsbox met ingestelde afmetingen past en maakt proportioneel bijsnijden, lege stroken of uitrekken mogelijk.
object-fit: contain behoudt elk deel van een diagram binnen een uniforme miniatuurbox.
intrinsieke afbeeldingsafmetingen
De intrinsieke afbeeldingsafmetingen zijn de informatie over de grootte die de afbeeldingsbron levert en die wordt gebruikt als CSS en HTML geen andere weergavegrootte opgeven.
Een grote afbeelding kan buiten een smal artikel lopen, tenzij CSS de breedte beperkt tot de beschikbare ruimte.
intrinsieke lay-out
Een intrinsieke lay-out past zich aan via eigen regels voor afmetingen en regelomloop, zodat inhoud zonder expliciete breekpunten in de beschikbare ruimte past.
Een kaartenrij met regelomloop krijgt een extra regel als de container smaller wordt, zonder mediaquery.

L

lay-outverschuiving
Een lay-outverschuiving is een zichtbare beweging van pagina-inhoud doordat de oorspronkelijke positie verandert, bijvoorbeeld als een afbeelding zonder gereserveerde ruimte laadt.
Met de attributen width en height van een afbeelding kan de browser ruimte reserveren op basis van een verhouding en verspringende tekst tijdens het laden verminderen.
logische operator
Een logische operator combineert of ontkent voorwaarden, zodat een query meerdere feiten kan vereisen of alternatieve overeenkomende voorwaarden kan accepteren.
screen and (min-width: 40em) vereist zowel schermuitvoer als een voldoende brede viewport.
lvh
Een lvh is één procent van de hoogte van de grote viewport en vertegenwoordigt de beschikbare lay-outruimte wanneer inschuifbare browserwerkbalken verborgen zijn.
Een sectie ingesteld op 100lvh kan achter mobiele werkbalken uitsteken terwijl die werkbalken nog zichtbaar zijn.

M

max()
De functie max() kiest de grootste opgegeven waarde en kan zo een ondergrens stellen aan een lengte terwijl een andere waarde verandert.
Een tussenruimte ingesteld op max(1rem, 2vw) kan niet kleiner worden dan 1rem als de viewport smaller wordt.
mediaquery
Een mediaquery is een voorwaarde die bepaalt wanneer CSS geldt, op basis van viewportkenmerken, uitvoertype, invoermogelijkheden of voorkeuren.
Een min-width-query voegt een tweede inhoudskolom toe als er voldoende vensterruimte beschikbaar komt.
mediatype
Een mediatype geeft de algemene soort uitvoer aan, zoals scherm of afdruk, waarop een stijlblad of voorwaardelijke CSS-regel van toepassing is.
Een @media print-blok verwijdert navigatiebediening die een lezer op papier niet kan gebruiken.
min-width-voorwaarde
Een min-width-voorwaarde komt overeen als de viewport minstens zo breed is als de opgegeven grens, inclusief de grenswaarde zelf.
Aan de voorwaarde (min-width: 620px) is voldaan bij 620px en ook bij grotere viewportbreedtes.
min()
De functie min() kiest de kleinste opgegeven waarde en kan zo een bovengrens stellen aan een afmeting die anders met de beschikbare ruimte groeit.
Een box met width: min(100%, 36rem) vult smalle containers, maar stopt met groeien bij 36rem.
minmax()
De gridfunctie minmax() geeft een spoor een minimum- en maximumafmeting, zodat het spoor binnen het opgegeven bereik kan groeien of krimpen.
Een spoor met minmax(15rem, 1fr) kan niet krimpen tot onder 15rem, ook niet als de container smaller is.
mobile-first-CSS
Mobile-first-CSS gebruikt gewone basisregels voor smalle lay-outs en voegt via minimumbreedtevoorwaarden bredere indelingen toe naarmate de ruimte groeit.
Een kaartenlijst begint als één kolom en krijgt extra kolommen via oplopende min-width-query's.
mogelijkheid tot aanwijzen zonder activering
De mogelijkheid tot aanwijzen zonder activering beschrijft of het primaire aanwijsapparaat gemakkelijk boven een element kan blijven zonder het te activeren.
Essentiële details blijven zichtbaar op aanraakapparaten, terwijl optionele stijlen voor aanwijzen zonder activering binnen een query naar die mogelijkheid gelden.

N

netwerkpaneel
Het netwerkpaneel is een ontwikkelaarshulpmiddel dat bronverzoeken en overdrachtsgegevens weergeeft en zo helpt controleren welke afbeeldingsbestanden een pagina downloadt.
Een test op telefoongrootte kan een grote afbeeldingsdownload tonen die wordt veroorzaakt door een sizes-aanwijzing die de ruimte overschat.

O

object-position
De eigenschap object-position stelt de uitlijning van de afbeeldingsinhoud binnen de box in en bepaalt welk gebied zichtbaar blijft als de afbeelding bij het inpassen wordt bijgesneden.
Een miniatuur gebruikt object-position: top om bij het bijsnijden het bovenste deel van de bron zichtbaar te houden.
orientation-mediakenmerk
Het orientation-mediakenmerk vergelijkt de breedte en hoogte van de viewport; portrait omvat een vierkante viewport en landscape betekent dat de breedte groter is.
Een landscape-query kan overeenkomen met zowel een breed desktopvenster als een telefoon die in liggende stand wordt gehouden.

P

picture
Het picture-element groepeert geordende bronkeuzes met één verplichte img en ondersteunt artdirection en alternatieve formaten met een terugval.
Een picture kan AVIF- en WebP-bronnen aanbieden vóór het JPEG-bestand dat de laatste img levert.
pixeldichtheidsaanduiding
Een pixeldichtheidsaanduiding geeft de schaal voor de pixeldichtheid van een kandidaat aan met het achtervoegsel x, doorgaans voor een afbeelding met een vaste CSS-weergavegrootte.
Een logo dat 180px breed wordt weergegeven, kan een kandidaat van 360 pixels aanbieden met een pixeldichtheidsaanduiding 2x.
procentuele breedte
Een procentuele breedte geeft een element een deel van de breedte van het omsluitende blok, zodat het element veranderingen in de beschikbare ruimte kan volgen.
Een box ingesteld op 50% is 240px breed als het omsluitende blok een breedte van 480px biedt.

Q

querycontainer
Een querycontainer is een voorouder die geschikt is verklaard voor de afmetingskenmerken die een containerregel voor de afstammelingen moet meten.
Een omhullend element met container-type: inline-size kan breedte-informatie leveren aan een kaart daarbinnen.

R

regelomloop van flexitems
Door regelomloop van flexitems kan een flexcontainer items op extra regels plaatsen als hun afmetingen en tussenruimtes niet meer op de huidige regel passen.
Navigatielinks met flex-wrap: wrap kunnen een tweede rij vormen in plaats van buiten de pagina te steken.
relatieve eenheid
Een relatieve eenheid ontleent de berekende grootte aan een andere maat, zoals een containerafmeting, een lettergrootte of de viewport.
Als je rem voor tekst gebruikt, volgt de grootte de lettergrootte van het hoofdelement in plaats van een vaste pixelwaarde.
rem
Een rem is een lengte gelijk aan de lettergrootte van het hoofdelement, zodat afmetingen één referentie kunnen delen zonder zich door nesten te vermenigvuldigen.
Bij een lettergrootte van 20px voor het hoofdelement is een kop ingesteld op 1.5rem 30px vóór eventuele vergroting door zoomen.
resolutiewisseling
Resolutiewisseling biedt versies van dezelfde afbeelding met verschillende pixelafmetingen aan, zodat een browser bruikbaar detail voor de weergave kan kiezen.
Een scherm met verhouding 2 kan een groter bestand ontvangen zonder de uitsnede van de foto of de CSS-box te veranderen.
responsief webontwerp
Responsief webontwerp past de lay-out, tekst en afbeeldingen van één pagina aan de beschikbare ruimte aan in verschillende vensters en op verschillende apparaten.
Een cursuspagina stapelt kaarten op een smalle telefoon en plaatst ze in kolommen wanneer het venster ruimte biedt.
responsieve emulatie
Responsieve emulatie is een browserhulpmiddel dat voor tests apparaatvoorwaarden zoals viewportgrootte, schermdichtheid en aanraakbediening benadert.
Door de geëmuleerde viewport te verslepen, zie je bij welke breedtes een kaarttitel buiten de container steekt.

S

sizes
Het sizes-attribuut beschrijft de beoogde breedte van de weergaveruimte van een afbeelding onder geordende mediavoorwaarden wanneer srcset breedteaanduidingen gebruikt.
sizes="(min-width: 60em) 50vw, 100vw" beschrijft bij bredere viewports een ruimte van een half venster.
source-element
Een source-element binnen picture biedt afbeeldingskandidaten en optionele media- of formaatvoorwaarden die bepalen of het kan worden gekozen.
Een source met (min-width: 55em) kan de brede uitsnede leveren vóór een smalle img-terugval.
srcset
Het srcset-attribuut levert afbeeldingskandidaten met breedte- of pixeldichtheidsaanduidingen en geeft de browser zo alternatieven voor één bronbestand.
Een foto biedt kandidaten van 480w, 800w en 1600w aan die allemaal dezelfde compositie tonen.
svh
Een svh is één procent van de hoogte van de kleine viewport en vertegenwoordigt de mobiele lay-outruimte met zichtbare browserwerkbalken.
Een openingssectie gebruikt min-height: 100svh voor een stabiele beginhoogte en kan meegroeien met de inhoud.

T

tekstvergroting
Tekstvergroting vergroot leesbare tekst met behoud van inhoud en bedieningselementen; WCAG vereist ondersteuning tot 200% zonder verlies.
Een paneel waarvan de hoogte meegroeit, kan de volledige uitleg zichtbaar houden als een lezer de tekstgrootte verdubbelt.
terugval op de kleine viewport
De terugval op de kleine viewport levert metingen voor containereenheden wanneer geen voorouder geschikt is voor de afmeting die de eenheid nodig heeft.
Een ontbrekende container-type kan ervoor zorgen dat afmetingen in cqi aan het venster zijn gekoppeld in plaats van aan het omhullende element van de kaart.

U

uitgesteld laden
Uitgesteld laden stelt het ophalen van een afbeelding uit totdat die in de buurt van het zichtbare gebied komt, zodat inhoud lager op een pagina minder vroege downloads veroorzaakt.
Een galerijafbeelding onder het eerste scherm kan loading="lazy" gebruiken, terwijl de hoofdafbeelding bovenaan snel laadt.

V

viewport
De viewport is het browsergebied waarin de pagina wordt weergegeven, zonder de werkbalken en omringende bedieningselementen van de browser zelf.
Als je een telefoon draait, veranderen de viewportafmetingen en kunnen andere lay-outregels van kracht worden.
viewporteenheid
Een viewporteenheid is een lengte op basis van een percentage van een viewportafmeting, onafhankelijk van het omsluitende blok van het element.
Een kindelement van een zijbalk dat op 50vw is ingesteld, gebruikt nog steeds de helft van de vensterbreedte, ook als dat breder is dan de zijbalk.
viewportmetatag
De viewportmetatag geeft mobiele browsers instructies voor de lay-outbreedte en beginschaal, zodat ze een pagina op een bruikbare grootte kunnen weergeven.
De tag hoort in de <head> van het document en vraagt om width=device-width, initial-scale=1.
voorkeur voor een kleurenschema
Een voorkeur voor een kleurenschema geeft aan of de lezer een licht of donker uiterlijk verkiest; een pagina kan die voorkeur gebruiken om leesbare themakleuren te kiezen.
Een query voor een donker thema combineert een donkere achtergrond met leesbare lichte tekst; controleer het resulterende contrast.
voorkeur voor minder beweging
Een voorkeur voor minder beweging is een systeeminstelling die aangeeft dat de lezer minder animatie wil en die via een CSS-mediakenmerk beschikbaar is.
Grote optionele beweging kan alleen binnen prefers-reduced-motion: no-preference worden uitgevoerd.
vw
Een vw is één procent van de viewportbreedte, waardoor een lengte de vensterbreedte volgt wanneer die breedte in CSS-pixels verandert.
Bij een viewportbreedte van 900px levert 10vw een berekende lengte van 90px op.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag