CSS-lay-outs met flexbox en grid

Leer hoe browsers boxen op een pagina plaatsen en hoe je die plaatsing zelf bepaalt. Begin met de normale documentstroom, de eigenschap display en zwevende boxen. Positioneer daarna elementen met relatieve, absolute, vaste en klevende positionering en regel overlappende lagen met z-index. Maak rijen en kolommen met flexbox en tweedimensionale lay-outs met CSS-grid, inclusief afmetingen, tussenruimte en uitlijning. Kies tot slot voor elk onderdeel van een pagina de juiste methode, maak gangbare pagina- en componentlay-outs en spoor lay-outfouten op met de ontwikkelaarstools van de browser.

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

Wat je leert

  1. Beschrijf hoe een browser boxen plaatst als er geen CSS voor de lay-out wordt toegepast, verander dat gedrag met de eigenschap display en gebruik zwevende boxen om tekst om een element heen te laten lopen.
    • Volg de normale documentstroom: blokboxen en inlineboxen
      Voorspel waar blokboxen en inlineboxen in de normale documentstroom verschijnen, hoe hun afmetingen zich gedragen en wanneer verticale marges samenvallen.
    • Verander de lay-out met de display-eigenschap
      Gebruik display om te veranderen hoe een element deelneemt aan de lay-out van het ouderelement en hoe de eigen kindelementen worden geplaatst, en verberg elementen op de juiste manier.
    • Laat tekst met float om een element heen lopen
      Laat een afbeelding of citaat zweven zodat tekst eromheen loopt, plaats inhoud onder zwevende boxen met clear en zorg dat een ouderelement zijn zwevende boxen omsluit.
  2. Verschuif elementen vanaf hun normale plaats, zet ze vast aan een container of de viewport, houd ze tijdens het scrollen in beeld en bepaal welk overlappend element vooraan verschijnt.
    • Verschuif elementen met relatieve en absolute positionering
      Gebruik relatieve en absolute positionering om elementen te verschuiven en bovenliggende lagen zoals badges precies binnen een gekozen container te plaatsen.
    • Houd elementen in beeld met vaste en klevende positionering
      Zet elementen met vaste positionering vast aan de viewport, laat kopteksten en koppen met klevende positionering tijdens het scrollen in beeld blijven en voorkom de problemen die beide kunnen veroorzaken.
    • Bepaal met z-index welke elementen vooraan verschijnen
      Voorspel de stapelvolgorde van overlappende elementen, gebruik z-index binnen stapelcontexten en los de klassieke problemen op waarbij “z-index niet werkt”.
  3. Plaats een rij of kolom met items met flexbox: stel de richting en regelomloop in, bepaal hoe items groeien en krimpen en regel hun uitlijning en tussenruimte.
    • Maak een flexcontainer en stel de assen in
      Maak van een element een flexcontainer, leg de hoofdas en dwarsas uit en regel de richting, regelomloop en visuele volgorde zonder de leesvolgorde te verstoren.
    • Bepaal de afmetingen van flexitems met flex-grow, flex-shrink en flex-basis
      Bereken hoe flexbox vrije ruimte en overlopende inhoud over items verdeelt met flex-basis, flex-grow en flex-shrink, en gebruik de verkorte eigenschap flex met vertrouwen.
    • Lijn flexitems uit en regel de tussenruimte
      Verdeel ruimte langs de hoofdas, lijn items uit op de dwarsas, duw items uit elkaar met automatische marges en regel de tussenruimte met gap.
  4. Definieer rijen en kolommen met CSS-grid, plaats items op lijnen en benoemde gebieden, laat het grid items automatisch plaatsen en lijn items en sporen uit.
    • Definieer gridsporen met fr, repeat en minmax
      Maak de rijen en kolommen van een grid, bereken spoorafmetingen met de fr-eenheid en gebruik repeat(), minmax() en gap.
    • Plaats items met lijnnummers, overspanningen en benoemde gridgebieden
      Plaats griditems met lijnnummers, span en benoemde sjabloongebieden en zorg dat de visuele volgorde en de leesvolgorde overeenkomen.
    • Laat het grid items automatisch plaatsen
      Gebruik automatische plaatsing en het impliciete grid om een willekeurig aantal items te plaatsen en maak kaartgrids die hun aantal kolommen aanpassen met auto-fill en auto-fit.
    • Lijn items en sporen in een grid uit
      Lijn elk item binnen zijn gridgebied uit, lijn alle sporen samen binnen de container uit en centreer inhoud met de verkorte place--eigenschappen.
  5. Kies voor elk onderdeel van een pagina de juiste lay-outmethode, maak gangbare pagina- en componentlay-outs en spoor lay-outfouten op en los ze op.
    • Kies de juiste lay-outmethode
      Kies voor een bepaalde lay-out tussen de normale documentstroom, flexbox, grid, positionering, zwevende boxen en meerdere kolommen en combineer ze op één pagina.
    • Maak lay-outs voor volledige pagina's
      Maak een goed leesbare inhoudskolom, een pagina met koptekst, zijbalk, hoofdinhoud en voettekst, een voettekst die onderaan blijft en een klevende zijbalk.
    • Maak gangbare lay-outs voor componenten
      Deel terugkerende onderdelen van een interface in: gecentreerde inhoud, navigatiebalken, blokken met een afbeelding naast tekst, kaartgrids met uitgelijnde onderdelen, bovenliggende lagen, formulieren en invoergroepen.
    • Spoor lay-outproblemen op en los ze op
      Gebruik de ontwikkelaarstools van de browser en een controlelijst met veelvoorkomende oorzaken om te achterhalen waarom een lay-out niet goed werkt of een eigenschap geen effect heeft, en test lay-outs met echte inhoud.

CSS-lay-outs met flexbox en grid: uitleg

5 hoofdstukken

1

Hoe boxen in de documentstroom staan

Browsers delen leesbare pagina's in voordat er speciale lay-outregels worden toegevoegd. Blokboxen en inlineboxen verklaren die uitgangssituatie, ook waarom een smalle alinea toch een eigen regel krijgt en waarom sommige marges samenvallen. Leer hoe display de buiten- en binnenkant van een box verandert en gebruik daarna zwevende boxen voor de specifieke taak om tekst rond een afbeelding te laten lopen. Met deze regels kun je voorspellen wat er verandert als je later flexbox of grid introduceert.

1.1 Hoe blokboxen en inlineboxen een pagina delen

Een pagina heeft al een lay-out voordat je flexbox of grid toevoegt. De normale documentstroom plaatst boxen in HTML-volgorde. In horizontale Nederlandse tekst staan blokken onder elkaar en loopt inline-inhoud van links naar rechts, met een nieuwe regel als de regel vol is.

Blokken nemen een regel in

Alinea's, koppen, div-elementen en secties zijn standaard blokboxen. Een blok met width: auto vult de beschikbare breedte van de container en groeit in hoogte mee met de inhoud. Als je de breedte instelt, komt het volgende blok niet op dezelfde regel te staan.

<p>Read the <a href="/guide">setup guide</a> first.</p>
<p>Then install it.</p>

De alinea's beginnen op afzonderlijke regels. De link is een inlinebox binnen de eerste alinea. Zelfs als de eerste alinea maar 300px breed is, begint de tweede alinea nog steeds eronder.

Inlineboxen volgen de tekst

Een <span>, <a>, <strong> of <em> neemt normaal alleen de breedte van de tekst in. Een niet-vervangen inlinebox negeert width en height. Als je a { width: 200px; } toevoegt, wordt de link dus niet 200px breed.

Horizontale binnenruimte, randen en marges duwen aangrenzende tekst opzij. Verticale binnenruimte en randen worden getekend, maar maken de afstand tussen omliggende regels niet groter; een grote achtergrond kan de regel erboven of eronder overlappen. Verticale marges hebben geen effect. Een afbeelding is een vervangen element: die is standaard inline, maar width en height zijn er wel op van toepassing.

Verticale marges kunnen samenvallen

In de normale documentstroom kunnen rakende verticale marges van blokboxen samenvallen tot één tussenruimte. Een alinea met margin-bottom: 24px, gevolgd door een kop met margin-top: 32px, laat daartussen 32px over. De grootste positieve marge wint; de tussenruimte is geen 56px. Met een positieve marge van 24px en een marge van −10px is het resultaat 14px. Horizontale marges blijven afzonderlijk.

De bovenmarge van een eerste kindelement kan ook samenvallen met de bovenmarge van het ouderelement als er geen rand, binnenruimte of inline-inhoud tussen zit. Een bovenmarge van 20px op een kop kan een hele header zonder binnenruimte omlaag verplaatsen, zonder ruimte binnen de header over te laten. Gebruik binnenruimte aan de bovenkant voor ruimte binnenin, voeg een rand toe of geef het ouderelement display: flow-root. Ook de ondermarge van een laatste kindelement kan samenvallen met de ondermarge van het ouderelement.

Marges van flex- en griditems vallen niet met elkaar samen. Als je een ouderelement van de normale documentstroom naar flexbox omschakelt, kunnen dezelfde twee positieve marges nu bij elkaar worden opgeteld. Ook zwevende en absoluut gepositioneerde boxen houden hun marges afzonderlijk.

Richtingen volgen de schrijfmodus

De blokrichting is de richting waarin opeenvolgende blokken komen; de inlinerichting is de richting waarin tekst loopt. Ook Arabisch en Hebreeuws gebruiken horizontale regels, maar hun inlinerichting loopt van rechts naar links. Logische eigenschappen volgen deze richtingen: margin-inline-start: 16px geeft een linkermarge in het Nederlands en een rechtermarge in het Arabisch. padding-block stelt binnenruimte langs de blokrichting in.

Belangrijkste punten

  • Blokken beginnen op een nieuwe regel, ook als ze een smalle breedte krijgen.
  • Niet-vervangen inlineboxen negeren width en height; afbeeldingen zijn een uitzondering.
  • Rakende verticale blokmarges kunnen samenvallen; horizontale marges niet.
  • Logische eigenschappen volgen de blok- en inlinerichting.
  • Binnenruimte of flow-root kan voorkomen dat de marge van een kindelement samenvalt met die van het ouderelement.

1.2 Wat display verandert

De eigenschap display regelt de verhouding van een box tot het ouderelement en de rangschikking van de kindelementen. Dit zijn afzonderlijke keuzes. Een flexcontainer kan een hele regel innemen en tegelijk de eigen kindelementen naast elkaar plaatsen.

Lees display van buiten naar binnen

Het buitenste weergavetype is block of inline. Het binnenste weergavetype beschrijft de lay-out binnen de box, zoals flow, flex of grid.

WaardeBuitenkantBinnenkant
blockBlockNormale documentstroom
inline-blockInlineAfzonderlijk stroomgebied
flexBlockFlexlay-out
inline-flexInlineFlexlay-out
gridBlockGridlay-out
inline-gridInlineGridlay-out

De moderne syntaxis met twee sleutelwoorden maakt het onderscheid zichtbaar: display: inline flex betekent hetzelfde als inline-flex. display: block flow-root betekent hetzelfde als flow-root. Een enkele waarde zoals grid geeft standaard een buitenste type block.

Laat een inlinebox afmetingen accepteren
nav a {
  display: inline-block;
  padding: 12px 16px;
}

Elke link staat nog steeds op een tekstregel, maar accepteert nu breedte, hoogte en verticale marges. De verticale binnenruimte maakt ruimte in de regelindeling in plaats van alleen over nabijgelegen regels heen te worden getekend. Zo krijgt een link een groter klikdoel.

Witruimte tussen inline-blockelementen in de HTML verschijnt als een kleine ruimte tussen de boxen. Als je een beheerste rij met een exacte tussenruimte nodig hebt, biedt flexbox die rechtstreeks.

Als je display verandert, verandert de betekenis van het HTML-element niet. Een div-element dat inline is vormgegeven, blijft een algemene container. Kies een lijst, link of knop op basis van het doel en geef daarna de box vorm.

Verberg een box met het juiste effect
RegelEffect op de lay-out
display: noneHet element en de afstammelingen maken geen boxen.
visibility: hiddenDe box behoudt zijn ruimte in de lay-out terwijl die verborgen is.

Een verborgen foutmelding met display: none maakt geen tussenruimte. Als je de melding toont, duwt die de latere inhoud omlaag. Met visibility: hidden wordt de tussenruimte gereserveerd, zodat er niets hoeft te verschuiven wanneer de melding verschijnt. display: none voorkomt ook toetsenbordfocus en verwijdert de verborgen inhoud uit de uitvoer van schermlezers. Een klasse voor visueel verborgen tekst heeft een ander doel: tekst beschikbaar houden voor schermlezers terwijl die visueel verborgen is.

Kindelementen en onafhankelijke gebieden

Met ul { display: grid; } worden de lijstitems griditems. Links binnen die lijstitems blijven binnen de lay-out van hun eigen ouderelement. Geef het lijstitem een eigen lay-out om die links te rangschikken, of gebruik subgrid waar gedeelde sporen nodig zijn.

display: contents verwijdert de eigen box van het omhullende element, zodat de kindelementen aan de omliggende lay-out deelnemen. Door het toegankelijkheidsgedrag van browsers kan ook de rol van het omhullende element verdwijnen. Vermijd dit daarom op betekenisvolle bedieningselementen, lijsten en tabellen.

display: flow-root maakt een blokopmaakcontext, een onafhankelijk stroomgebied. Die omsluit zwevende kindelementen en voorkomt dat de marges van het ouderelement samenvallen met die van de kindelementen. Dit bereikt de eigenschap zonder inhoud af te snijden of schuifbalken toe te voegen.

Belangrijkste punten

  • Display heeft een buitenste en een binnenste type.
  • Flex en grid beïnvloeden directe kindelementen.
  • inline-block behoudt de inlineplaatsing en accepteert tegelijk boxafmetingen.
  • display: none verwijdert ruimte uit de lay-out; visibility: hidden behoudt die.
  • flow-root omsluit zwevende boxen en houdt marges van ouderelement en kindelement afzonderlijk.
  • Gebruik display: contents voorzichtig, omdat browsergedrag de toegankelijke rol van het omhullende element kan verwijderen.

1.3 Tekst rond zwevende boxen laten lopen

Bij een portret in een artikel moet tekst er vaak enkele regels naast staan en daarna over de volle breedte eronder doorlopen. Een zwevende box zorgt voor die vorm van tekstomloop. Die heeft een andere taak dan een zijbalk die in een afzonderlijke kolom blijft staan.

Zet een afbeelding naast doorlopende tekst
img.portrait {
  float: left;
  width: 160px;
  margin: 0 16px 8px 0;
}

Plaats de afbeelding vóór de alinea's die eromheen moeten lopen. De afbeelding verplaatst zich naar de linkerrand van de container. De tekst die volgt gebruikt de ruimte rechts ervan en blijft horizontaal 16px en onder de onderrand 8px op afstand. Zodra de tekst voorbij de afbeelding is, krijgen regels weer de volledige breedte van de container. Gebruik float: right voor de tegenoverliggende rand en float: none om het zweven op te heffen.

Een zwevende box wordt uit de normale documentstroom gehaald, maar inline-inhoud in de buurt loopt er nog steeds omheen. De volgende blokboxen zelf negeren de zwevende box: hun achtergronden en randen kunnen erachter doorlopen. Als je de achtergrond van een alinea onder de afbeelding ziet, betekent dat niet dat de tekst er niet omheen loopt.

Een zwevend element wordt een box op blokniveau. Een zwevende <span> kan daarom breedte en hoogte accepteren. Zonder ingestelde breedte krimpt een zwevende tekstbox tot de grootte van de inhoud; een afbeelding heeft eigen afmetingen.

Begin de volgende sectie onder de afbeelding

Stel dat de tekst korter is dan het portret en een nieuwe sectiekop naast het portret begint. Met clear regel je deze verhouding:

.next-section {
  clear: both;
}

De kop verschuift tot onder eerdere zwevende boxen aan beide kanten. clear: left maakt alleen ruimte onder links zwevende boxen; clear: right alleen onder rechts zwevende boxen. Als je een latere kop met clear verplaatst, wordt de eerdere afbeelding daardoor niet weer een gewoon blok.

Laat het ouderelement zijn zwevende boxen omsluiten

Een ouderelement met alleen zwevende kindelementen krijgt daardoor geen hoogte vanuit de normale documentstroom. De achtergrond en rand kunnen samengevallen lijken en de volgende inhoud kan naast de zwevende boxen omhoog schuiven. Laat het ouderelement de boxen omsluiten:

.profile {
  display: flow-root;
}

De hoogte van het ouderelement omvat nu de zwevende afbeelding. Dit verschilt van clear: flow-root verandert het stroomgebied van het ouderelement, terwijl clear een volgend element tot onder zwevende boxen verplaatst.

Oudere stijlbladen bevatten vaak een clearfix: een ::after-pseudo-element met content: "", display: block en clear: both. Je kunt ook overflow: auto tegenkomen om zwevende boxen te omsluiten. Dat kan scrollen toevoegen als de inhoud te groot is; flow-root geeft de omsluitende taak rechtstreeks aan.

Herken oudere kolomlay-outs

Vóór flexbox en grid werden paginakolommen vaak zwevend gemaakt met procentuele breedtes en clear-regels. Onderhoud die regels met kennis van zwevende boxen, maar kies flexbox of grid voor nieuwe kolommen waarvan je de afmetingen en uitlijning moet bepalen.

Een direct kindelement van een flex- of gridcontainer volgt die lay-out, zodat float geen effect heeft op dat item. Als tekst niet meer rond een zwevende afbeelding loopt nadat je display: flex aan het ouderelement hebt toegevoegd, inspecteer dan eerst de lay-out van het ouderelement.

Belangrijkste punten

  • Een zwevende box laat volgende inline-inhoud ernaast doorlopen.
  • clear verplaatst een latere box tot onder eerdere zwevende boxen.
  • flow-root zorgt dat een ouderelement zijn zwevende kindelementen omsluit.
  • Zwevende boxen hebben geen effect op flex- of griditems.
2

Positionering en overlappende lagen

Met positionering regel je verschuivingen, bovenliggende lagen en elementen die tijdens het scrollen zichtbaar blijven. Het belangrijkste is te weten welke ruimte een box behoudt en welk voorouderelement de referentie levert. Werk van een badge binnen een kaart naar vaste bedieningselementen en klevende koppen en bekijk daarna overlappende lagen. Stapelcontexten verklaren waarom een uitklapmenu verborgen kan blijven, ook als de eigen z-index heel groot is, en laten zien welk voorouderelement je daadwerkelijk moet veranderen.

2.1 Verschuivingen en de box van waaruit je ze meet

Met positionering kan een box een andere overlappen of van zijn normale plaats worden verschoven. Bepaal voordat je een verschuiving instelt of de box zijn oorspronkelijke ruimte moet behouden en welk voorouderelement als referentie moet dienen.

Statisch, relatief en absoluut
PositioneringRuimte in normale documentstroomReferentie voor verschuivingen
staticBehoudenVerschuivingen hebben geen effect
relativeBehoudenDe oorspronkelijke positie van de box
absoluteVerwijderdHet omsluitende blok

Met position: relative; top: 10px; left: 20px wordt een box 10px omlaag en 20px naar rechts vanaf de oorspronkelijke plaats getekend. De aangrenzende elementen blijven staan. De oorspronkelijke ruimte blijft bestaan, zodat de box bij een grote verschuiving aangrenzende elementen kan overlappen.

Een relatief gepositioneerd ouderelement heeft geen verschuivingen nodig om als referentie voor een absoluut gepositioneerd kindelement te dienen. Dit is een veelgebruikt doel van relatieve positionering.

Bevestig een badge aan een kaart
.card {
  position: relative;
}
.badge {
  position: absolute;
  top: 8px;
  right: 8px;
}

De badge staat buiten de normale documentstroom, zodat de kaart er geen ruimte voor reserveert. De boven- en rechterrand van de badge staan 8px naar binnen vanaf de binnenruimteranden van de kaart. Laat genoeg ruimte in de inhoud van de kaart zodat een lange titel niet onder de badge door kan lopen.

Het omsluitende blok van een absoluut gepositioneerde box is meestal de box inclusief binnenruimte van het dichtstbijzijnde gepositioneerde voorouderelement. Een gepositioneerd element heeft een andere position-waarde dan static. Als de kaart statisch blijft, zoekt de badge verder omhoog in de reeks voorouderelementen. Zonder geschikt voorouderelement gebruikt de badge het oorspronkelijke omsluitende blok: een rechthoek ter grootte van de viewport bovenaan het document die met de pagina meescrolt. Een transform, filter of perspective met een andere waarde dan none op een voorouderelement kan ook deze referentie bepalen.

Rek of centreer een bovenliggende laag

Een absoluut gepositioneerde box met automatische afmetingen en verschuivingen die de box niet uitrekken, krimpt tot de grootte van de inhoud. Als je zowel de linker- als rechterverschuiving instelt bij een automatische breedte, vult de box de ruimte daartussen; het paar boven en onder werkt op dezelfde manier bij een automatische hoogte.

.overlay {
  position: absolute;
  inset: 0;
}

inset stelt boven, rechts, onder en links samen in. Met automatische afmetingen en zonder marges vult deze bovenliggende laag het omsluitende blok. Een ingestelde breedte of hoogte verandert de afmetingen, dus verwijder die beperkingen als de laag de hele box moet bedekken.

Gebruik voor een gecentreerde badge met onbekende afmetingen top: 50%; left: 50%; transform: translate(-50%, -50%). De verschuivingen verplaatsen de linkerbovenhoek van de badge naar het midden van het omsluitende blok. De translatie verplaatst de badge terug met de helft van de eigen breedte en hoogte. Bij een bekende breedte en hoogte is inset: 0; margin: auto een andere methode om te centreren.

Controleer de referentie voor percentages

Een ouderelement met content-box, width: 400px en een horizontale binnenruimte van 20px heeft een box inclusief binnenruimte van 440px. Een absoluut gepositioneerd kindelement met width: 50% heeft daarom een inhoudsbreedte van 220px. Als je alleen het inhoudsgebied van 400px van het ouderelement meet, krijg je een verkeerd resultaat.

Gebruik absolute positionering voor een badge, knopinfo of bovenliggende laag. Paginakolommen hebben boxen nodig die op elkaars afmetingen reageren; flexbox, grid en de normale documentstroom bieden die samenhang.

Belangrijkste punten

  • Relatieve positionering behoudt de oorspronkelijke ruimte; absolute positionering verwijdert die.
  • Een absoluut gepositioneerde box meet verschuivingen meestal vanaf de box inclusief binnenruimte van het dichtstbijzijnde gepositioneerde voorouderelement.
  • inset: 0 rekt een absoluut gepositioneerde bovenliggende laag met automatische afmetingen uit tot het omsluitende blok.
  • Percentages voor verschuivingen en voor translaties gebruiken verschillende referentieboxen.
  • Gebruik de normale documentstroom, flexbox of grid voor de hoofdstructuur van de pagina.

2.2 Elementen die zichtbaar blijven terwijl je scrolt

Een knop om terug naar boven te gaan en een tabelkop moeten allebei zichtbaar blijven, maar hebben een verschillende verhouding tot de pagina. Vaste positionering koppelt een bedieningselement aan een referentievenster. Klevende positionering houdt een box in de documentstroom en beperkt de beweging tot de eigen sectie.

Zet een bedieningselement vast aan de viewport
.back-to-top {
  position: fixed;
  right: 16px;
  bottom: 16px;
}

De knop blijft rechtsonder in het venster staan terwijl het document scrolt. De knop neemt geen ruimte in de normale documentstroom in. Een vaste koptekst reserveert evenmin ruimte en kan de eerste alinea bedekken.

Bij een vaste koptekst van 64px laat body { padding-top: 64px; } ruimte voor de eerste inhoud. Stel ook html { scroll-padding-top: 64px; } in, zodat links naar secties hun doelkoppen niet onder de koptekst plaatsen. Geef de koptekst een achtergrond, zodat tekst die erachterdoor scrolt niet zichtbaar is.

Een transform, filter of perspective met een andere waarde dan none op een voorouderelement kan dat voorouderelement tot het omsluitende blok van het vast gepositioneerde element maken. Het element blijft dan binnen dat voorouderelement en kan ermee uit beeld scrollen. Inspecteer voorouderelementen wanneer een vast bedieningselement onverwacht met de pagina meebeweegt.

Laat een kop binnen een sectie kleven
thead th {
  position: sticky;
  top: 0;
  background: white;
}

Een klevende kop neemt eerst de normale plaats in. Wanneer de kop door scrollen boven de drempel top: 0 zou komen, blijft die daar staan. De kop kan niet voorbij het omsluitende blok bewegen: het einde van de sectie duwt de kop uiteindelijk uit beeld. Dit is nuttig voor lange tabellen en sectienavigatie.

GedragVastKlevend
Ruimte in normale documentstroomVerwijderdGereserveerd
Begint op de gewone plaatsNeeJa
Stopt aan het einde van de sectieNeeJa

De viewport is gewoonlijk de referentie voor vaste positionering. Klevende positionering gebruikt het dichtstbijzijnde relevante scrollende voorouderelement; de pagina is de referentie als er geen dichterbij gelegen scrollende box tussen zit.

Onderzoek een klevende box die niet blijft kleven

Controleer deze oorzaken op volgorde:

  1. Stel op de as waarop de box moet kleven een andere verschuiving dan auto in, zoals top: 0 voor verticaal scrollen. Het sleutelwoord sticky alleen stelt geen drempel in.
  2. Inspecteer voorouderelementen op overflow: hidden, auto of scroll. Die kunnen de referentie voor het klevende element worden, ook als een andere box daadwerkelijk scrolt.
  3. Vergelijk de hoogte van de klevende box met het omsluitende blok. Een omhullend element dat slechts even hoog is als de kop, geeft de kop geen ruimte om te bewegen.

Een klevende zijbalk in een grid kan ook uitrekken tot de volledige hoogte van de rij. Met align-self: start behoudt de zijbalk de hoogte van de inhoud en blijft er bewegingsruimte over.

Houd inhoud en focus zichtbaar

Vaste en klevende balken gebruiken een deel van het zichtbare scherm. Bij 200% tekstvergroting kan een navigatiebalk veel hoger worden. Test zowel de toetsenbordnavigatie als het scrollen. WCAG 2.2-criterium 2.4.11, Focus niet bedekt (minimum), vereist dat door de auteur toegevoegde inhoud een element met focus niet volledig verbergt. Houd balken laag en zorg voor voldoende scrollruimte rond doelen.

Belangrijkste punten

  • Vaste positionering haalt de box uit de documentstroom; klevende positionering behoudt de plaats.
  • Klevende positionering heeft een verschuiving en bewegingsruimte binnen het omsluitende blok nodig.
  • Overlopende inhoud op een voorouderelement kan de referentie voor klevende positionering veranderen.
  • Reserveer ruimte voor vaste kopteksten en controleer of inhoud met focus zichtbaar blijft.

2.3 Stapelniveaus en stapelcontexten

Wanneer boxen overlappen, bepaalt de stapelvolgorde welke je vooraan ziet. Een hogere z-index kan een box naar voren brengen, maar alleen binnen de groep waarin die waarde wordt vergeleken.

Zorg dat z-index van toepassing is

z-index werkt op gepositioneerde elementen en op flex- of griditems. Een statische alinea in de normale documentstroom negeert de eigenschap. Een statisch griditem kan de eigenschap gebruiken zonder position: relative toe te voegen.

Zonder expliciete niveaus worden gepositioneerde boxen boven gewone niet-gepositioneerde boxen getekend. Bij vergelijkbare boxen op hetzelfde niveau wordt de box die later in de HTML staat bovenop getekend. Met positieve z-index-waarden, nul en negatieve waarden heb je meer controle over die volgorde.

Een context wordt als één geheel gestapeld

Een stapelcontext bevat een groep die de browser als geheel stapelt. Het niveau van een kindelement kan de groep niet boven een hoger geplaatste zustergroep tillen die zelf een stapelcontext is.

.site-header {
  position: relative;
  z-index: 1;
}
.menu {
  position: absolute;
  z-index: 9999;
}
main {
  position: relative;
  z-index: 2;
}

Hier staat .menu binnen .site-header, terwijl main een zusterelement daarvan is. Vergelijk eerst de buitenste groepen: de header staat op 1 en main op 2. Main wordt boven de hele header getekend, inclusief het menu. Als je 9999 verhoogt, verandert alleen de plaats van het menu binnen de header.

Verhoog de header zelf, bijvoorbeeld naar z-index: 3, of verwijder het onnodige niveau op main. Kies de wijziging die past bij de bedoelde volgorde van de hele pagina.

Zoek wat de groep maakt

Het hoofdelement maakt een stapelcontext. Veelvoorkomende andere oorzaken zijn:

  • Een relatieve of absolute box met een andere z-index dan auto.
  • Een flex- of griditem met een andere z-index dan auto.
  • Elke vaste of klevende box.
  • opacity onder 1, of een andere transform of filter dan none.
  • isolation: isolate.

Een ouderelement met opacity: 0.9 kan daardoor een uitklapmenu vasthouden, ook als niemand een niveau op dat ouderelement heeft ingesteld. Loop in de ontwikkelaarstools de voorouderelementen omhoog langs als een hoger getal geen zichtbaar verschil maakt. Zoek het eerste paar zustergroepen waarvan de volgorde verkeerd is.

Houd decoraties binnen een component
.panel {
  position: relative;
  isolation: isolate;
}
.panel-decoration {
  position: absolute;
  inset: 0;
  z-index: -1;
}

isolation: isolate maakt een context zonder het uiterlijk van het paneel te veranderen. Het kindelement met de negatieve waarde wordt achter de tekst van het paneel maar boven de achtergrond van het paneel getekend. Zonder de lokale context kan het achter de achtergrond van het ouderelement terechtkomen en verdwijnen.

Gebruik een kleine gedeelde schaal voor de bedoelde paginalagen: bijvoorbeeld 1 voor verhoogde kaarten, 10 voor een klevende koptekst, 100 voor uitklapmenu's en 1000 voor een modaal dialoogvenster. Aangepaste CSS-eigenschappen zoals --z-dropdown: 100 maken de keuzes gemakkelijker te onderhouden.

Belangrijkste punten

  • z-index is van toepassing op gepositioneerde boxen en flex- of griditems.
  • Een stapelcontext wordt als één geheel met aangrenzende contexten vergeleken.
  • Een hoog niveau van een kindelement kan niet ontsnappen aan een lager geplaatste context van een voorouderelement.
  • Ondoorzichtigheid en transformaties kunnen onverwachte contexten maken.
  • isolation: isolate houdt de stapelniveaus binnen een component.
  • Gebruik een kleine gedeelde schaal nadat je de contexten van voorouderelementen hebt gecontroleerd.
3

Rijen en kolommen met flexbox

Flexbox maakt van een groep kindelementen een rij of kolom die de beschikbare ruimte kan delen. De assen verklaren de richting en uitlijning, terwijl basis, groei en krimp de uiteindelijke afmetingen verklaren. Volg een rij die naar een volgende regel loopt en werk de berekening uit voordat je tussenruimte, automatische marges en uitlijning kiest. Je ziet ook waarom visueel herordenen de toetsenbordnavigatie kan verstoren en waarom een lange coderegel kan voorkomen dat een flexibele kolom krimpt.

3.1 Flexrijen, flexkolommen en regelomloop

Flexbox rangschikt een groep langs één hoofdrichting. Het is geschikt voor navigatielinks, werkbalken en andere items waarvan de afmetingen door hun inhoud worden bepaald. Een flexlay-out met regelomloop kan meerdere regels hebben, maar elke regel verdeelt de ruimte afzonderlijk.

Maak de container
.nav {
  display: flex;
}

De directe kindelementen van de navigatie worden flexitems. Een link binnen een lijstitem is geen flexitem van de navigatie, tenzij die ook een direct kindelement is. Tekst rechtstreeks binnen de container vormt een anoniem flexitem.

De standaardwaarden zijn een rij, geen regelomloop, niet groeien en wel mogen krimpen. Items beginnen aan de beginrand van de hoofdas. In een horizontale rij rekken items met automatische hoogte uit tot de hoogte van de regel, zodat ze vaak even hoog lijken.

Benoem de assen voordat je uitlijnt

De hoofdas volgt flex-direction. De dwarsas staat daar loodrecht op. In horizontale Nederlandse tekst:

RichtingHoofdasEerste item begint
rowHorizontaalLinks
row-reverseHorizontaalRechts
columnVerticaalBoven
column-reverseVerticaalOnder

Een rij volgt de inlinerichting, zodat het begin bij tekst van rechts naar links rechts ligt. Een kolom volgt de blokrichting. Hoofd- en dwarsas beschrijven rollen, geen vaste horizontale en verticale richtingen.

justify-content werkt op de hoofdas. align-items werkt op de dwarsas. Nadat je van rij naar kolom bent overgeschakeld, centreert justify-content: center verticaal, mits er hoogte over is.

Bereken welke items passen
.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  flex: 1 1 200px;
}

Neem vijf kaarten in een inhoudsbreedte van 700px. Elke kaart begint op 200px en kan groeien of krimpen. Drie kaarten plus twee tussenruimtes hebben 632px nodig; vier plus drie tussenruimtes hebben 848px nodig. Op de eerste regel passen er drie.

De eerste regel verdeelt 700px min 32px aan tussenruimtes: elke kaart wordt ongeveer 222,7px breed. De overige twee delen 700px min één tussenruimte van 16px: elke kaart wordt 342px breed. Items op de tweede regel nemen de breedtes van de eerste regel niet over. Gebruik grid als kolommen over meerdere rijen moeten uitlijnen.

flex-flow: row wrap is een verkorte eigenschap voor richting en regelomloop. Zonder regelomloop houdt flexbox alle items op één regel en krimpen ze waar hun afmetingsgrenzen dat toelaten.

Houd de leesvolgorde betekenisvol

order is standaard 0. Lagere waarden verschijnen eerst; order: -1 plaatst een item vóór gewone items. Omgekeerde richtingen en order veranderen de tekenvolgorde, terwijl schermlezers en de normale toetsenbordfocus de HTML blijven volgen.

Houd belangrijke reeksen in een logische HTML-volgorde. Visueel herordenen kan een toetsenbordgebruiker over het scherm laten springen en ertoe leiden dat de pagina niet voldoet aan WCAG 1.3.2, Betekenisvolle volgorde, of 2.4.3, Focusvolgorde, wanneer de betekenis of bediening eronder lijdt.

Een item kan ook een container zijn. Een kaart in een flexrij kan de eigen display: flex; flex-direction: column gebruiken om de inhoud onder elkaar te zetten. Gebruik inline-flex als de buitenste container binnen een tekstregel moet staan, zoals een knop met een pictogram en label.

Belangrijkste punten

  • Flexbox verandert de lay-out van directe kindelementen.
  • De richting bepaalt de hoofdas; de dwarsas staat daar loodrecht op.
  • De afmetingen van flexregels met regelomloop worden onafhankelijk van elkaar bepaald.
  • Veranderingen in de visuele volgorde veranderen de lees- of focusvolgorde van de HTML niet.
  • Een flexitem kan een eigen flexlay-out bevatten.

3.2 Hoe flexitems groeien en krimpen

Flexbox begint met een afmeting voor elk item en past die afmetingen daarna aan de container aan. De drie onderdelen van flex regelen die aanpassing: groei, krimp en basis, in die volgorde.

Begin met de basis

flex-basis levert de beginafmeting langs de hoofdas. Bij auto gebruikt de eigenschap de breedte van het item in een rij of de hoogte in een kolom; als die afmeting ook automatisch is, bepaalt de inhoud de afmeting. Een expliciete basis heeft voorrang op de breedte, terwijl minimum- en maximumafmetingen het eindresultaat nog steeds begrenzen.

Trek alle basisafmetingen en tussenruimtes af van de inhoudsafmeting van de container. Een positieve uitkomst is vrije ruimte om te groeien. Een negatieve uitkomst is ruimte die de items moeten inleveren.

Verdeel positieve ruimte

Drie items in een rij van 600px hebben basisafmetingen van 100px en groeifactoren 1, 1 en 2. Zonder tussenruimtes nemen de basisafmetingen 300px in en blijft 300px over. Vier groeiaandelen verdelen die rest in delen van elk 75px. De uiteindelijke afmetingen zijn 175px, 175px en 250px.

Voeg nu gap: 20px toe. Twee tussenruimtes nemen 40px in, zodat na de basisafmetingen 260px overblijft. Elk aandeel wordt 65px; de uiteindelijke breedtes worden 165px, 165px en 230px. Een factor 2 verdubbelt de toegevoegde ruimte, niet de volledige uiteindelijke breedte.

Lever ruimte in met gewogen krimp

Twee items met basisafmetingen van 300px en 400px staan in een container van 500px zonder tussenruimte. Ze moeten 200px inleveren. Als beide flex-shrink: 1 hebben, zijn hun krimpgewichten 300 en 400: elke factor wordt vermenigvuldigd met de bijbehorende basisafmeting.

Het eerste item verliest ongeveer 85,7px en eindigt op ongeveer 214,3px. Het tweede verliest ongeveer 114,3px en eindigt op ongeveer 285,7px. Gelijke krimpfactoren betekenen niet dat het verlies in pixels gelijk is. flex-shrink: 0 beschermt de basisafmeting van een item, wat nuttig is voor een avatar of logo.

Deze berekeningen beschrijven items zonder binnenruimte, randen, marges of afmetingsgrenzen die het resultaat veranderen. Controleer die beperkingen als een werkelijke lay-out afwijkt.

Lees veelgebruikte verkorte waarden
DeclaratieUitgeschreven waardeUitgangspunt
flex: initial0 1 autoBreedte of inhoud; kan krimpen
flex: auto1 1 autoBreedte of inhoud; kan groeien of krimpen
flex: none0 0 autoBreedte of inhoud; behoudt die afmeting
flex: 11 1 0%Basis nul in een rij met vastgestelde breedte

Twee items met inhoudsbreedtes van 80px en 200px in een rij van 600px worden 240px en 360px met flex: auto: beide krijgen de helft van de resterende 320px erbij. Met flex: 1 en zonder beperkende minima beginnen beide bij nul en worden ze 300px breed.

Laat een flexibele kolom smal worden

Het automatische minimum van een flexitem kan ervoor zorgen dat het even breed blijft als een onafgebroken URL of coderegel. Sta krimpen toe op het item en regel de inhoud daarbinnen:

.sidebar { flex: 0 0 240px; }
.main { flex: 1; min-width: 0; }
.main pre { overflow-x: auto; }

De zijbalk blijft 240px breed. Main neemt de rest in. De code scrolt binnen main in plaats van de hele pagina breder te maken. Voor gewone lange tekst staat overflow-wrap: anywhere regelafbreking toe. Een minimum van nul maakt ruimte beschikbaar; het laat de inhoud niet vanzelf afbreken of scrollen.

Belangrijkste punten

  • De volgorde in de verkorte eigenschap is groei, krimp, basis.
  • Groeifactoren verdelen toegevoegde ruimte, niet de uiteindelijke breedtes.
  • Krimpverlies hangt af van elke factor vermenigvuldigd met de bijbehorende basisafmeting.
  • Een andere basis dan auto heeft voorrang op de breedte.
  • flex: 1 en flex: auto gebruiken verschillende beginafmetingen.
  • min-width: 0 staat krimpen toe; de inhoud binnenin heeft nog steeds een geschikte afhandeling van overlopende inhoud nodig.

3.3 Ruimte en uitlijning in flexbox

Uitlijning begint nadat de afmetingen zijn bepaald. Bepaal de hoofdas, de dwarsas en de ruimte die op elke as overblijft. Een eigenschap kan geldig zijn en toch geen zichtbaar verschil maken als er geen ruimte meer te verdelen is.

Verdeel ruimte op de hoofdas

justify-content positioneert de groep langs de hoofdas. Bij drie items van 100px in een rij van 600px zonder tussenruimtes blijft 300px over:

WaardeResultaat
center150px voor en na de groep
space-between150px tussen aangrenzende items; niets aan de uiteinden
space-around50px aan elk buitenste uiteinde; 100px tussen aangrenzende items
space-evenlyVier gelijke ruimtes van 75px

flex-start plaatst items tegen elkaar aan het begin van de hoofdas; flex-end plaatst ze tegen elkaar aan het einde van de hoofdas. start en end volgen daarentegen de schrijfrichting. In een Nederlandstalige row-reverse plaatst flex-start de items tegen de rechterrand, maar start tegen de linkerrand.

Als items met flex: 1 alle ruimte op de regel innemen, heeft justify-content geen ruimte over om te verdelen. Als je de groei vermindert of verwijdert, verandert die situatie.

Lijn binnen elke regel uit

align-items positioneert items op de dwarsas binnen hun regel. De gebruikelijke standaardwaarde stretch laat items met automatische hoogte in een rij de hoogte van de regel vullen. Een item met een ingestelde hoogte rekt niet op deze manier uit. Gebruik center, start of end voor andere posities, of baseline om tekst van verschillende groottes op de basislijn uit te lijnen.

align-self overschrijft deze keuze voor één item. Flexbox heeft geen justify-self: items delen de hoofdas als groep. Ook justify-items lijnt flexitems niet uit.

Om één kindelement in beide richtingen te centreren, stel je justify-content: center; align-items: center in op het bovenliggende flexelement. Een hoger ouderelement, bijvoorbeeld met min-height: 100vh, geeft ruimte om verticaal centreren zichtbaar te maken. Als het enige item de afmeting van de regel op de dwarsas al vult, leidt centreren daar niet tot beweging.

Scheid groepen met automatische marges
nav {
  display: flex;
  align-items: center;
  gap: 16px;
}
.logo {
  margin-inline-end: auto;
}

In horizontaal Nederlands blijft het logo links terwijl de links naar rechts gaan. De automatische eindmarge van het logo neemt de resterende ruimte op. Een automatische beginmarge op een item duwt daarentegen dat item en de daaropvolgende items naar het einde. Logische marges passen zich aan als de tekstrichting verandert.

Eén item met margin: auto kan op beide assen centreren. Als een item te groot is, voorkomen automatische marges dat de overlopende inhoud voorbij de onbereikbare beginrand wordt geplaatst, wat bij gewoon centreren wel kan gebeuren.

Maak onderscheid tussen regels en items

align-content verplaatst de regels als groep op de dwarsas in een container met regelomloop en overgebleven ruimte. De eigenschap heeft geen effect bij flex-wrap: nowrap. Met wrap kan de eigenschap nog steeds een regel positioneren, ook als de huidige items op slechts één regel passen. align-items regelt de items binnen elke regel.

gap: 16px 24px stelt een tussenruimte van 16px tussen rijen en 24px tussen kolommen in. Gap maakt ruimte tussen items en regels, nooit aan de buitenkant van de container. Voeg binnenruimte toe voor ruimte aan de buitenkant. Ruimte die door uitlijning wordt verdeeld, komt boven op de tussenruimte.

Belangrijkste punten

  • justify-content verdeelt de resterende ruimte op de hoofdas.
  • flex-start volgt de flexrichting; start volgt de schrijfrichting.
  • align-items lijnt items binnen regels uit; align-content verdeelt regels bij regelomloop.
  • Automatische marges nemen vrije ruimte op en kunnen groepen scheiden.
  • Gap voegt tussenruimte toe; binnenruimte voegt ruimte aan de buitenkant toe.
  • Gebruik align-self voor de uitlijning van één item op de dwarsas.
  • Flexbox ondersteunt justify-self niet om afzonderlijke items op de hoofdas te plaatsen.
4

Gedeelde sporen met grid

Grid geeft meerdere rijen een gedeelde set kolommen en laat afzonderlijke boxen die sporen overspannen of overlappen. Definieer afmetingen, bereken fractionele aandelen en plaats items op basis van grenzen of benoemde gebieden. Laat daarna automatische plaatsing een groeiende verzameling afhandelen en vergelijk auto-fill met auto-fit. Maak tot slot onderscheid tussen itemuitlijning binnen gebieden en spooruitlijning binnen de hele container, zodat elke eigenschap het bedoelde onderdeel verplaatst.

4.1 Gridsporen en de ruimte die ze delen

Grid definieert rijen en kolommen samen. Stel de sporen in op een container en laat de directe kindelementen ze vervolgens innemen. Anders dan bij flexregels met regelomloop delen gridrijen dezelfde kolomstructuur.

Benoem de onderdelen

Een spoor is één rij of kolom tussen twee gridlijnen. Een cel is het snijpunt van één rij en één kolom. Een gridgebied is een rechthoek van één of meer cellen. Tussenruimtes scheiden de sporen.

.dashboard {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  gap: 20px;
}

grid-template-columns definieert de expliciete kolommen; grid-template-rows definieert de expliciete rijen. Zonder expliciete kolommen heeft een grid één kolom en staan de items onder elkaar in rijen.

Bereken een fr-aandeel

De eenheid fr verdeelt de ruimte die overblijft na vaste sporen en tussenruimtes. In een container van 900px heeft het voorbeeld een vaste kolom van 200px en twee tussenruimtes van 20px. Trek die eerst af: er blijft 660px over. De twee flexibele kolommen vragen samen drie aandelen, dus één aandeel is 220px. De breedtes zijn 200px, 220px en 440px.

De fracties verdelen de resterende ruimte voor sporen, niet de volledige 900px. Een 2fr-spoor krijgt tweemaal het flexibele aandeel van een 1fr-spoor wanneer minimumafmetingen ze niet beperken.

Herhaal sporen en stel grenzen in

repeat(4, 1fr) is een verkorte notatie voor vier gelijke flexibele sporen. Een patroon herhalen kan ook: repeat(2, 100px 1fr) maakt 100px 1fr 100px 1fr.

Voor spoorafmetingen kun je ook lengtes, percentages, auto, min-content en max-content gebruiken. De inhoudssleutelwoorden vragen om afmetingen op basis van de intrinsieke behoeften van de inhoud.

minmax(150px, 1fr) geeft een spoor een minimum van 150px en een flexibel maximum. Gebruik voor automatisch gemaakte rijen grid-auto-rows: minmax(100px, auto) om een minimum van 100px te krijgen en tegelijk hogere inhoud een rij te laten vergroten.

Een gewoon 1fr-spoor heeft een automatisch minimum, zoals minmax(auto, 1fr). Een lange onafbreekbare URL kan één kolom breder maken dan de rest. Gebruik repeat(3, minmax(0, 1fr)) als de kolommen de beschikbare breedte gelijk moeten delen en zorg dat te grote inhoud daarbinnen kan afbreken of scrollen.

Houd tussenruimtes binnen de beschikbare breedte

gap: 16px 32px betekent 16px tussen rijen en 32px tussen kolommen. De eigenschap maakt geen binnenruimte rond het grid.

Drie kolommen van 33.33% gebruiken al bijna de hele container van 900px. Twee tussenruimtes van 20px voegen dan ongeveer 40px toe voorbij de breedte van de container. Fractionele sporen houden rekening met die tussenruimtes voordat ze de ruimte verdelen, zodat repeat(3, 1fr) voorkomt dat percentages plus tussenruimte overlopende inhoud veroorzaken wanneer de inhoudsminima passen.

Laat rijen op inhoud reageren

grid-template-rows: auto 1fr auto past bij een koptekst, hoofdgebied en voettekst. De buitenste rijen passen zich aan hun inhoud aan. Als een ingestelde hoogte of minimumhoogte van de container moet worden gevuld, neemt de middelste rij de resterende hoogte in. Houd ruimte voor groeiende inhoud; met een minimale paginahoogte kan een langere pagina meegroeien.

Belangrijkste punten

  • Rijen en kolommen zijn sporen die door gridlijnen worden begrensd.
  • fr verdeelt ruimte na vaste sporen en tussenruimtes.
  • repeat() kan één afmeting of een spoorpatroon herhalen.
  • minmax() stelt een minimale en maximale spoorafmeting in.
  • minmax(0, 1fr) verwijdert het automatische minimum van een flexibel spoor.
  • Procentuele sporen kunnen overlopen als er tussenruimtes worden toegevoegd.

4.2 Items op lijnen en benoemde gebieden plaatsen

Plaatsing in een grid beschrijft de grenzen van een item. Tel de lijnen rond de kolommen en rijen of geef een rechthoekig gebied een naam en plaats het item daar. Beide methoden rangschikken boxen zonder hun volgorde in de HTML te veranderen.

Tel grenzen, geen kolommen

Een grid met drie kolommen heeft vier kolomlijnen. In horizontaal Nederlands staat kolomlijn 1 links en rijlijn 1 bovenaan. Negatieve getallen tellen terug vanaf het einde van het expliciete grid: -1 is de laatste lijn.

DeclaratiePlaatsing
grid-column: 1 / 3Beslaat de eerste twee kolommen
grid-column: 1 / -1Beslaat de volledige breedte van het expliciete grid
grid-column: 2 / span 2Begint bij lijn 2 en beslaat twee kolommen
grid-column: span 2Beslaat twee kolommen op een automatische plaats

Om drie kolommen vanaf lijn 1 te beslaan, eindig je bij lijn 4. Als je bij lijn 3 eindigt, besla je maar twee sporen.

Plaats in een dashboard met vier kolommen en drie rijen een grafiek met grid-column: 1 / 4; grid-row: 1 / 3. Die neemt drie kolommen en twee rijen in: zes cellen. Een statistiekpaneel op grid-column: 4; grid-row: 1 / 3 neemt de laatste kolom ernaast in. Een tabel op grid-column: 1 / -1; grid-row: 3 vult de derde rij.

Teken de pagina met gebiedsnamen
.page {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "nav    main"
    "footer footer";
}
header { grid-area: header; }
nav    { grid-area: nav; }
main   { grid-area: main; }
footer { grid-area: footer; }

Elke tekenreeks beschrijft een rij en elk woord beschrijft een cel. Door header over de eerste rij te herhalen, beslaat de header beide kolommen. Een punt markeert een lege cel. Elke rij moet hetzelfde aantal cellen bevatten en elke herhaalde naam moet één rechthoek vormen. Een benoemd gebied in L-vorm maakt de hele declaratie grid-template-areas ongeldig.

Een gebied met de naam main maakt ook lijnen met de namen main-start en main-end. Je kunt die namen gebruiken voor de grenzen van een ander item. Definieer eigen lijnnamen tussen vierkante haken in de sporenlijst, zoals [content-start] 600px [content-end].

Laat items binnen één gridgebied overlappen

Een afbeelding en bijschrift kunnen allebei grid-area: 1 / 1 gebruiken. Ze delen de eerste cel; het bijschrift dat later in de HTML staat, wordt over de afbeelding getekend. align-self: end verplaatst het bijschrift naar de onderkant van dat gebied. Griditems accepteren z-index zonder dat een niet-statische positie nodig is, zodat je hun laagvolgorde expliciet kunt veranderen.

Behoud de leesvolgorde

Handmatige plaatsing beïnvloedt het uiterlijk, niet de HTML-volgorde die schermlezers en toetsenbordfocus volgen. Houd instructies, koppen en links in een betekenisvolle bronvolgorde. Een lay-out kan logisch lijken terwijl navigatie met de tabtoets tussen ver uit elkaar gelegen cellen springt; daardoor kan de pagina niet voldoen aan WCAG 1.3.2 of 2.4.3 wanneer de betekenis of bediening eronder lijdt.

Belangrijkste punten

  • Plaatsing gebruikt gridlijnen; drie sporen hebben vier grenzen.
  • -1 verwijst naar de laatste lijn van het expliciete grid.
  • Elk benoemd gebied moet rechthoekig zijn en alle sjabloonrijen moeten evenveel cellen hebben.
  • Items kunnen in één gebied overlappen en z-index gebruiken zonder positionering.
  • Plaatsing in een grid verandert de lees- of focusvolgorde niet.

4.3 Automatische grids die zich aan hun inhoud aanpassen

Een productlijst kan groeien van enkele kaarten naar veel kaarten zonder de CSS te veranderen. Definieer de kolommen, laat automatische plaatsing rijen maken en kies of ongebruikte kolommen hun ruimte moeten behouden.

Laat items de volgende cel vinden

De standaardwaarde grid-auto-flow: row plaatst niet-gepositioneerde items in bronvolgorde, eerst over een rij en daarna omlaag naar de volgende. Bezette cellen worden overgeslagen. Extra sporen vormen het impliciete grid.

.products {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(150px, auto);
}

Zeven items maken drie rijen. De laatste rij bevat één item. Elke rij is minstens 150px hoog en kan met de inhoud meegroeien. Expliciete sporen komen uit het sjabloon; impliciete sporen worden toegevoegd wanneer de plaatsing ze nodig heeft.

Negatieve lijnnummers tellen alleen binnen het expliciete grid. Als je kolommen maar geen rijen definieert, kan grid-row: 1 / -1 niet elke automatisch gemaakte rij betekenen. Definieer expliciete rijen als een item hun volledige hoogte moet beslaan.

grid-auto-flow: column vult kolommen en maakt extra kolommen waarvan grid-auto-columns de afmetingen bepaalt. Als je dense toevoegt, kunnen latere kleinere items gaten opvullen die grotere overspanningen achterlaten. Dat kan de visuele volgorde veranderen, dus vermijd dit bij instructies in een bepaalde volgorde of andere inhoud waarvan de volgorde van belang is.

Bereken het aantal kolommen vanuit een minimum
.products {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
}

Bij een inhoudsbreedte van 1000px hebben vier kolommen van 200px plus drie tussenruimtes van 16px samen 848px nodig. Vijf kolommen plus vier tussenruimtes hebben 1064px nodig, dus er passen er maar vier. Hun flexibele uiteindelijke breedtes zijn 238px: trek 48px aan tussenruimtes af en deel de resterende 952px door vier.

Bij 500px hebben twee minimale kolommen plus één tussenruimte 416px nodig; drie hebben 632px nodig. Er passen er twee en elk wordt 242px. Het aantal kolommen verandert met de beschikbare ruimte zonder breekpunt.

Kies wat er met ongebruikte kolommen gebeurt

Met genoeg items zien auto-fill en auto-fit er hetzelfde uit. Met slechts drie items in dat grid van 1000px behoudt auto-fill een vierde lege kolom, zodat elke bezette kolom 238px breed blijft. auto-fit laat dat lege spoor en de bijbehorende tussenruimte samenvallen. De drie bezette kolommen delen dan 968px en worden elk ongeveer 322,7px.

Een kolom met ergens daarin een item is bezet, ook als één cel in de laatste rij leeg is. Auto-fit laat lege sporen samenvallen, niet elke lege cel.

Bescherm de smalste container

Automatisch herhalen vereist een bepaalde minimale of maximale spoorafmeting. repeat(auto-fill, 1fr) is ongeldig. Een vast minimum van 400px kan ook overlopen in een container van 320px. Gebruik:

grid-template-columns:
  repeat(auto-fit, minmax(min(100%, 400px), 1fr));

min(100%, 400px) kiest het kleinere minimum, zodat een smalle container één spoor kan bevatten zonder tot 400px te worden gedwongen. Blijf te grote tekst of afbeeldingen binnen de kaarten afhandelen.

Belangrijkste punten

  • Automatische plaatsing vult beschikbare cellen en maakt waar nodig impliciete sporen.
  • grid-auto-rows bepaalt de afmetingen van automatisch gemaakte rijen.
  • Auto-fill behoudt lege sporen; auto-fit laat ze samenvallen.
  • Bij het tellen van kolommen moet je de tussenruimtes tussen kolommen meenemen.
  • Gebruik bij automatisch herhalen een bepaald minimum of maximum.
  • min(100%, …) houdt het minimum van een spoor binnen een smalle container.
  • Compacte plaatsing kan de visuele volgorde veranderen.

4.4 Lijn boxen binnen gebieden of sporen binnen een container uit

Uitlijning in een grid werkt op twee verschillende niveaus. Je kunt een item binnen zijn gebied verplaatsen of alle sporen samen binnen de container verplaatsen. Bepaal eerst welke ruimte je wilt verdelen.

Lijn items binnen hun gebied uit

In horizontaal Nederlands werken justify--eigenschappen op de inlineas, de horizontale as. align--eigenschappen werken op de blokas, de verticale as. Grid ondersteunt itemuitlijning op beide assen.

Instellen op de containerOverschrijven op één itemEffect
justify-itemsjustify-selfInlinepositie binnen het gebied
align-itemsalign-selfBlokpositie binnen het gebied

Mogelijke waarden zijn start, end, center en stretch. align-items: baseline lijnt tekst op de basislijn uit. De meeste items met automatische afmetingen rekken standaard uit. Een afbeelding met een eigen beeldverhouding begint normaal aan de beginrand van het gebied in plaats van in beide richtingen te worden uitgerekt.

Bij een rij kaarten zorgt uitrekken ervoor dat elke kaart de hoogte van de rij vult. Verander dit naar align-items: start en elke kaart behoudt de hoogte van de inhoud; de onderranden kunnen verschillen. align-self: end op één bijschrift plaatst het onderaan het gridgebied.

Centreer een box in beide richtingen
.hero {
  display: grid;
  place-items: center;
  min-height: 60vh;
}

place-items combineert align-items gevolgd door justify-items. Bij één waarde past de eigenschap die waarde op beide toe. De minimumhoogte maakt verticale ruimte rond een kort item. place-self is de bijbehorende verkorte eigenschap op een afzonderlijk item.

Het item blijft een box met tekst erin. Om de woorden binnen die box te centreren, stel je text-align: center in op het item. Als je een box naar het midden van een cel verplaatst, verandert de uitlijning van de tekst niet.

Verplaats de sporen als groep

justify-content positioneert alle kolommen samen langs de inlineas. align-content positioneert de rijen langs de blokas. Deze eigenschappen hebben extra ruimte buiten de sporen nodig om hun effect te tonen.

Bij drie vaste kolommen van 200px in een container van 900px zonder tussenruimtes blijft 300px over. justify-content: center laat 150px over vóór de eerste kolom en na de laatste. justify-content: space-between plaatst de buitenste kolommen aan de containerranden en verdeelt 150px tussen aangrenzende kolommen. Items blijven binnen hun eigen sporen terwijl de sporen bewegen.

Als de kolommen fr gebruiken en alle beschikbare breedte vullen, blijft er horizontaal niets over voor justify-content om te verdelen. Met justify-items: center kun je nog steeds zichtbaar een smal kindelement binnen het brede spoor centreren. De eerste eigenschap positioneert sporen; de tweede positioneert items.

Belangrijkste punten

  • justify- volgt de inlineas; align- volgt de blokas.
  • Itemuitlijning verplaatst boxen binnen hun gebied.
  • Inhoudsuitlijning verplaatst sporen binnen de container.
  • place-items combineert de twee eigenschappen voor itemuitlijning.
  • Gebruik text-align om tekst binnen een item uit te lijnen.
5

Bouw en debug lay-outs in de praktijk

Webpagina's combineren verschillende lay-outs: een paginagrid kan een flexibele werkbalk, kaarten en een gepositioneerde badge bevatten. Kies de methode die bij elke verhouding past en bouw vervolgens patronen die blijven werken als tekst langer wordt of de ruimte smaller. Werk met inhoudskolommen, voetteksten, zijbalken en formulieronderdelen voordat je ontwikkelaarstools gebruikt om inactieve eigenschappen en overlopende inhoud op te sporen. Langere tekst, zoom en controles met het toetsenbord brengen problemen aan het licht die voorbeeldinhoud kan verbergen.

5.1 Kies een methode voor de verhouding die je nodig hebt

Een pagina kan meerdere lay-outmethoden tegelijk gebruiken. Kies elke methode op basis van de verhouding tussen de boxen in dat deel van de pagina: een tekstreeks, een flexibele groep, gedeelde kolommen of een overlappende laag.

Begin bij de inhoud

De normale documentstroom handelt artikelen, koppen en alinea's al af. Tekst loopt door op een volgende regel en latere blokken schuiven omlaag als eerdere inhoud groeit. Voeg meer structuur toe als het ontwerp om een andere verhouding vraagt.

BehoefteBruikbare methodeReden
Een rij of kolom bedieningselementenFlexboxVerdeelt ruimte tussen items waarvan de afmetingen door hun inhoud worden bepaald
Kolommen die over meerdere rijen uitlijnenGridDefinieert gedeelde rij- en kolomsporen
Een badge over een afbeeldingAbsolute positioneringPlaatst een laag ten opzichte van een gekozen container
Een bedieningselement dat op de hele pagina zichtbaar isVaste positioneringHoudt het aan de viewport gekoppeld
Een kop die binnen de eigen sectie zichtbaar isKlevende positioneringBehoudt ruimte in de documentstroom en stopt aan het einde van de sectie
Tekst die om een foto looptZwevende boxMaakt tekstregels naast de afbeelding korter
Tekst die doorloopt in krantenkolommenMeerkolomslay-outLaat tekst van de ene kolom doorlopen in de volgende

Flexbox is eendimensionaal: het verdeelt ruimte langs een rij of kolom, waarbij elke regel die naar een volgende regel loopt onafhankelijk is. Grid is tweedimensionaal: het definieert kolommen en rijen samen. Dit zijn keuzes over de beperkingen van de lay-out, geen verbod om een van beide hulpmiddelen voor een eenvoudige rij te gebruiken.

Vergelijk een rij met regelomloop met gedeelde kolommen

Zeven kaarten nemen een inhoudsbreedte van 1000px in met tussenruimtes van 16px. Geef in flexbox elke kaart flex: 1 1 200px en sta regelomloop toe. Op de eerste regel passen vier kaarten die elk groeien tot 238px. De drie kaarten op de tweede regel groeien elk tot ongeveer 322,7px. Elke regel verdeelt de eigen vrije ruimte.

Gebruik nu repeat(auto-fill, minmax(200px, 1fr)) in grid. Er passen vier kolommen. Alle zeven kaarten gebruiken dezelfde kolombreedte van 238px; op de laatste rij blijft één cel leeg. Grid houdt de rijen onderling uitgelijnd.

Gebruik de flexversie als bredere items op de laatste regel bij het ontwerp passen. Gebruik de gridversie als een consistente kolomstructuur belangrijk is.

Combineer methoden op verschillende niveaus

Een pagina kan grid gebruiken voor een zijbalk en hoofdgebied, flexbox voor de werkbalk van het hoofdgebied en een absoluut gepositioneerde badge binnen één kaart. Een kaart kan aan de buitenkant een griditem zijn en aan de binnenkant een flexcontainer. Stel de buitenste verhouding in op het ouderelement en de binnenste indeling op de kaart zelf.

Voor een lange tekstlijst maakt columns: 3 of column-width: 250px een meerkolomslay-out. Tekst loopt eerst omlaag door één kolom en daarna verder in de volgende; het is geen grid van onafhankelijke kaarten. Controleer of deze leesroute bij de inhoud past.

Lees oudere lay-outs zorgvuldig

Zwevende kolommen, inline-blockgrids en HTML-tabellen voor paginalay-outs komen nog steeds voor in oudere code. Hun regels voor tussenruimte en omsluiting verschillen van die van flexbox en grid. Gebruik moderne lay-outtools voor nieuwe paginastructuren. Bewaar <table> voor gegevens waarvan de rijen en kolommen verbanden in tabelvorm uitdrukken.

Belangrijkste punten

  • Kies grid voor gedeelde rijen en kolommen en flexbox voor een onafhankelijke rij of kolom.
  • Gebruik zwevende boxen als tekst om een afbeelding moet lopen.
  • Gebruik positionering voor overlappingen of plaatsing die met scrollen samenhangt.
  • Bij meerdere kolommen loopt tekst door van de ene kolom naar de volgende.
  • Een box kan een item van de ene lay-out en een container voor een andere zijn.

5.2 Paginapatronen die met de inhoud meegroeien

Een bruikbare paginalay-out heeft een goed leesbare inhoudsbreedte, ruimte aan de randen en plaats voor langere inhoud. Bouw de hoofdgebieden in de documentstroom, zodat een groeiend artikel de voettekst vanzelf omlaag duwt.

Centreer een inhoudskolom
.container {
  max-width: 1100px;
  margin-inline: auto;
  padding-inline: 16px;
}

De maximale breedte begrenst de groei op brede schermen. Automatische inlinemarges verdelen de overgebleven ruimte over beide kanten. Binnenruimte houdt tekst weg van de randen van smalle schermen. Voor lopende tekst geeft max-width: 65ch een regellengte van ongeveer 65 tekens; één ch is de breedte van het cijfer 0 in het huidige lettertype. Een regellengte van ongeveer 45–75 tekens is prettig leesbaar, al verschillen de breedtes van letters.

Zet paginagebieden op een grid
.page {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}
header { grid-area: header; }
aside  { grid-area: sidebar; }
main   { grid-area: main; }
footer { grid-area: footer; }

De koptekst en voettekst beslaan beide kolommen. De zijbalk behoudt 240px en het hoofdgebied krijgt de rest. Het minimum van nul op het flexibele spoor voorkomt dat brede inhoud het spoor groter maakt dan het beschikbare aandeel. Zorg dat die inhoud binnen het hoofdgebied kan afbreken of scrollen.

Het patroon met drie kolommen, vaak de heilige-graallay-out genoemd, gebruikt 200px 1fr 200px en de gebieden "nav main aside" in de middelste rij, met de koptekst en voettekst over alle drie de kolommen. Vaste zijkolommen hebben nog steeds voldoende beschikbare breedte nodig; test de lay-out bij smalle afmetingen.

Houd de voettekst van een korte pagina onderaan
body {
  margin: 0;
  min-height: 100dvh;
  display: grid;
  grid-template-rows: auto 1fr auto;
}

Met koptekst, hoofdgebied en voettekst als directe kindelementen vult de middelste rij de ongebruikte hoogte. De voettekst van een korte pagina komt onderaan het venster; bij een lange pagina volgt de voettekst op de inhoud. Dit patroon houdt de voettekst onderaan, maar de voettekst heeft geen position: sticky nodig.

De traditionele viewporteenheid is vh. Op telefoons kan 100vh doorlopen achter zichtbare bedieningselementen van de browser. Dynamische viewporthoogte, dvh, volgt de zichtbare hoogte als die bedieningselementen veranderen; alle grote browsers ondersteunen de eenheid sinds 2022. Gebruik min-height zodat langere inhoud de pagina kan vergroten. Bij een vaste height kan inhoud overlopen over wat erop volgt.

Een flexalternatief gebruikt een body als kolom met min-height: 100dvh, gevolgd door main { flex: 1; }. Gebruik voor een rij met zijbalk .sidebar { flex: 0 0 240px; } en .main { flex: 1; min-width: 0; }.

Laat een zijbalk kleven en een afbeelding breed uitlopen

Een zijbalk in een grid kan position: sticky; top: 16px; align-self: start gebruiken. Door de hoogte van de eigen inhoud te behouden, blijft er ruimte om binnen de rij te bewegen.

Definieer voor artikelinhoud over de volle breedte de kolommen als 1fr min(65ch, 100% - 32px) 1fr. Plaats gewone kindelementen in kolom 2 en een brede afbeelding op grid-column: 1 / -1. Het middelste spoor blijft leesbaar terwijl de afbeelding de volledige containerbreedte beslaat.

Belangrijkste punten

  • Automatische inlinemarges centreren een inhoudskolom met beperkte breedte.
  • Gebruik min-height voor pagina's die de volledige hoogte vullen en moeten kunnen groeien.
  • Bij een lay-outpatroon met een voettekst onderaan de pagina blijft de voettekst in de normale documentstroom.
  • dvh volgt veranderingen in de zichtbare viewporthoogte.
  • Een minimum van nul voor een flexibel spoor helpt voorkomen dat de pagina overloopt.
  • Een klevende zijbalk in een grid heeft bewegingsruimte nodig; align-self: start voorkomt uitrekken.
  • Een item over de volle breedte strekt zich uit buiten de tekstkolom van het artikel.

5.3 Herbruikbare lay-outs voor interfaceonderdelen

Kleine interfaceonderdelen combineren steeds dezelfde paar verhoudingen: een afbeelding behoudt de eigen afmetingen, tekst vult wat overblijft, samenhangende bedieningselementen delen een rij of verschillende kaarten lijnen hun onderdelen uit. Geef elke container de lay-out die bij de taak past.

Kies de juiste manier van centreren
Te centreren inhoudRegel
Eén box op beide assenOuderelement: display: grid; place-items: center
Een blok met beperkte breedteBlok: margin-inline: auto
Tekst of inline-inhoudOuderelement: text-align: center

Flexbox kan ook één kindelement centreren met justify-content: center; align-items: center. Zorg dat de container ruimte over heeft op de betreffende as.

Een navigatierij en een mediarij
nav { display: flex; align-items: center; gap: 16px; }
.logo { margin-inline-end: auto; }
.media { display: flex; align-items: flex-start; gap: 16px; }
.media img { flex: none; width: 64px; }
.media-body { flex: 1; min-width: 0; }

In het Nederlands blijft het logo links en komen de links rechts te staan. Als de navigatie precies twee kindelementen heeft, een logo en een lijst met links, kan justify-content: space-between ze scheiden; de lijst heeft een eigen flexlay-out nodig om de links te rangschikken.

In de mediarij behoudt de afbeelding de breedte. Tekst krijgt de rest en kan krimpen. Uitlijning aan het begin van de dwarsas voorkomt dat een afbeelding met automatische hoogte wordt uitgerekt tot de hoogte van een lang tekstblok. Dit past bij een reactie, profiel of productregel.

Kaarten met uitgelijnde knoppen
.cards {
  display: grid;
  grid-template-columns:
    repeat(auto-fill, minmax(min(100%, 240px), 1fr));
  gap: 24px;
}
.card { display: flex; flex-direction: column; }
.card .button { margin-top: auto; }

Het bovenliggende grid rekt kaarten in elke rij uit tot dezelfde hoogte. Binnen elke kaart neemt de automatische bovenmarge de ongebruikte verticale ruimte vóór de knop in, zodat de knop onderaan staat. Titels kunnen nog steeds verschillende hoogtes hebben.

Gebruik subgrid om titels, tekst en voetteksten van verschillende kaarten uit te lijnen. Maak van elke kaart een griditem dat drie bovenliggende rijen beslaat en stel dan display: grid; grid-template-rows: subgrid in. Elke kaart neemt die bovenliggende rijen over voor de drie onderdelen. Subgrid werkt sinds september 2023 in alle grote browsers.

Bovenliggende lagen, formulieren en invoergroepen

Maak voor tekst over een afbeelding van het omhullende element een grid en plaats beide kindelementen op grid-area: 1 / 1. Een later bijschrift wordt boven de afbeelding getekend. Een andere mogelijkheid is een relatief gepositioneerd omhullend element met een absoluut gepositioneerde bijschriftlaag die inset: 0 gebruikt.

Een formulier met afwisselend labels en velden kan grid-template-columns: max-content 1fr; gap: 12px 16px; align-items: center gebruiken. Het breedste label bepaalt één gedeelde labelkolom. De velden staan uitgelijnd in de tweede kolom; afzonderlijke flexrijen kunnen die labelbreedte niet automatisch delen.

Een zoekgroep gebruikt display: flex; gap: 8px, met input { flex: 1; min-width: 0; } en button { flex: none; }. Het invoerveld kan krimpen terwijl de knop de natuurlijke breedte behoudt. Gebruik voor labels of bedieningselementen in een werkbalk die bij hun natuurlijke breedte naar een volgende regel moeten lopen display: flex; flex-wrap: wrap; gap: 8px.

Belangrijkste punten

  • Centreer een box, een blok en inlinetekst met de juiste soort uitlijning.
  • Gebruik voor een mediarij een afbeelding met vaste afmetingen en een flexibel tekstitem.
  • Flexbox als kolom en een automatische bovenmarge lijnen knoppen van kaarten uit.
  • Subgrid deelt bovenliggende sporen tussen geneste onderdelen van kaarten.
  • Grid kan labels over rijen van een formulier uitlijnen.
  • Een flexibel invoerveld heeft vaak min-width: 0 nodig.

5.4 Zoek de box die de lay-outfout veroorzaakt

Een lay-outfout is gemakkelijker op te lossen als je de werkelijke boxen van de browser inspecteert. Begin bij het element dat is verschoven of overloopt en controleer de lay-out waaraan het deelneemt voordat je waarden verandert.

Inspecteer in een bruikbare volgorde
  1. Zoek het element in de ontwikkelaarstools.
  2. Inspecteer de berekende display van het ouderelement: de normale documentstroom, flex en grid geven eigenschappen verschillende taken.
  3. Controleer of je eigenschap in die lay-out van toepassing is op dat element.
  4. Vergelijk berekende afmetingen, marges en positie met de waarden die je verwachtte.
  5. Schakel steeds één declaratie uit of in om te zien welke beperking het probleem veroorzaakt.

Het boxmodelpaneel toont inhoud, binnenruimte, rand en marge. Gridhulplagen tonen lijnen, nummers, sporen en tussenruimtes; flexhulplagen tonen items en de ruimte die ze krijgen. Gebruik ze om te controleren wat de browser heeft gemaakt, niet alleen wat met het stijlblad was bedoeld.

Controleer inactieve eigenschappen

Verschuivingen doen niets op een statisch element. Breedte en hoogte doen niets op een gewone inline-<span>, al bepalen ze wel de afmetingen van een inlineafbeelding. z-index heeft een gepositioneerde box of een flex- of griditem nodig. float heeft geen effect op flex- of griditems en justify-self kan een flexitem niet uitlijnen.

Een geldige uitlijningsdeclaratie kan geen zichtbaar effect hebben omdat items alle ruimte al gebruiken. Ook heeft align-content geen effect op een flexcontainer met nowrap. Klevende positionering heeft een verschuiving en bewegingsruimte nodig.

Spoor horizontaal overlopende inhoud op

Overlopende inhoud kan komen door een te grote box of door een kleinere box die door marges, verschuivingen of breedtes van aangrenzende elementen voorbij een rand wordt geduwd. Veelvoorkomende oorzaken zijn:

  • Een vaste breedte, zoals 1200px, die groter is dan de viewport.
  • width: 100% plus binnenruimte bij berekening met content-box.
  • width: 100vw, waarin de breedte van een zichtbare verticale schuifbalk kan zijn inbegrepen.
  • Een lang onafgebroken woord, een URL of een coderegel.
  • Het automatische minimum van een flexitem of van een 1fr-spoor.
  • Een minimum voor automatisch herhalen dat breder is dan de container.

Voeg tijdelijk * { outline: 1px solid red; } toe om randen zichtbaar te maken. Omtreklijnen gebruiken geen ruimte in de lay-out, zodat ze grenzen tonen zonder de boxafmetingen te veranderen, zoals randen wel zouden doen.

Werk een breed codeblok uit

Een flexpagina heeft een zijbalk van 240px en een hoofdkolom met een codevoorbeeld van 1400px breed. De hele pagina scrolt zijwaarts. De flexhulplaag toont dat het hoofdgebied breder is dan zijn aandeel en de berekende minimumbreedte is auto.

.main { min-width: 0; }
.main pre { overflow-x: auto; }

De eerste regel laat het flexitem krimpen. De tweede houdt de brede code toegankelijk via lokaal horizontaal scrollen. Als je alle overlopende pagina-inhoud verbergt, verberg je het symptoom zonder de code beschikbaar te maken.

Inspecteer bij andere verrassingen samenvallende marges, een vaste koptekst die inhoud bedekt, een absoluut gepositioneerd kindelement waarvan het bedoelde ouderelement statisch is, of een laag die vastzit binnen een stapelcontext die door ondoorzichtigheid of een transformatie is gemaakt.

Test echte inhoud en beperkte ruimte

Verander de grootte van het venster, gebruik een lange naam of URL en vergroot tekst tot 200%. Controleer de toetsenbordfocus bij vaste balken. WCAG 2.2-criterium 1.4.4 vereist dat tekst tot 200% kan worden vergroot zonder verlies van inhoud of functie. Criterium 1.4.10 vereist in het algemeen herschikking bij 320 CSS-pixels zonder scrollen in twee richtingen; voor inhoud die een tweedimensionale lay-out nodig heeft, zoals een gegevenstabel, gelden uitzonderingen. Test meer dan de korte voorbeeldtekst waarmee de pagina er aanvankelijk goed uitzag.

Belangrijkste punten

  • Inspecteer de bovenliggende lay-out en berekende waarden voordat je declaraties verandert.
  • Gebruik hulplagen en omtreklijnen om de werkelijke boxgrenzen te vinden.
  • Controleer of een eigenschap van toepassing is en of er vrije ruimte voor is.
  • Regel zowel het minimum van een flexibel item als de overlopende inhoud ervan.
  • Test smalle breedtes, 200% tekstvergroting, langere tekst en toetsenbordfocus.

CSS-lay-outs met flexbox en grid: voorbeelden

5 Walkthroughs

1

Lees de natuurlijke lay-out van de pagina

13 stappen
Volg de boxen van een artikel, verander de weergave van een link en laat tekst om een foto heen lopen.
  1. 1
    IntroductieBegin met een gewoon artikel

    Stel je een artikel voor met een kop, twee alinea's, een link en een portret. De browser weet al hoe die elementen moeten worden geplaatst voordat je CSS voor de lay-out toevoegt: koppen en alinea's zijn blokboxen, links staan inline in de tekst en display kan dat gedrag veranderen.

    Je volgt de standaardboxen, maakt van de link een groter doel en plaatst daarna het portret met een zwevende box zodat tekst ernaast loopt. Let op zowel de tekst als de achtergronden van ouderelementen: die reageren op verschillende onderdelen van de lay-out.

  2. 2
    UitlegVolg de regels van blokken

    De kop en alinea's zijn standaard blokboxen. Elk begint op een nieuwe regel en wordt hoger als de inhoud naar een volgende regel loopt.

    Stel de eerste alinea in op width: 260px. Die wordt smal, maar de volgende alinea begint nog steeds eronder. Een blok wordt niet inline alleen omdat er horizontaal ruimte naast over is. Laat de breedte automatisch als het blok de beschikbare regel moet vullen.

  3. 3
    VoorbeeldVolg de link binnen een zin

    In <p>Open the <a href="/notes">reading notes</a> before class.</p> is de link onderdeel van de tekstregel. De link neemt de ruimte in die de woorden nodig hebben en kan met de zin naar een volgende regel lopen.

    Als je width: 190px toevoegt, veranderen de afmetingen van deze gewone inlinelink niet. Verticale binnenruimte kan een grotere achtergrond tekenen zonder aangrenzende tekstregels verder uit elkaar te plaatsen. Een inlineafbeelding is anders: breedte en hoogte zijn daarop wel van toepassing.

  4. 4
    VoorbeeldMeet een samengevallen tussenruimte

    De alinea van het artikel heeft een ondermarge van 14px. De volgende kop heeft een bovenmarge van 26px. Wanneer die positieve verticale marges elkaar in de normale documentstroom raken, vallen ze samen tot 26px.

    Ze worden niet opgeteld tot 40px. Als het ouderelement later flex of grid wordt, blijven de marges tussen de items afzonderlijk, zodat dezelfde declaraties meer ruimte kunnen opleveren.

  5. 5
    UitdagingPlaats de tussenruimte binnen de header

    Een header zonder binnenruimte bevat alleen een kop met een bovenmarge. De marge valt samen met die van de header en de tussenruimte verschijnt boven de achtergrond. Hoe kun je in plaats daarvan ruimte aan de bovenkant binnen de header maken?

    ---reveal---

    Verwijder de bovenmarge van de kop en voeg binnenruimte aan de bovenkant van de header toe. Binnenruimte hoort binnen de box van de header. Ook een rand of flow-root zou voorkomen dat marges van ouderelement en kindelement samenvallen, maar binnenruimte maakt rechtstreeks de gewenste ruimte binnenin.

  6. 6
    UitlegGeef de link een eigen box met afmetingen

    Gebruik display: inline-block op de link in het artikel als die een breedte en een hoger klikdoel met binnenruimte nodig heeft, terwijl de link in de tekstregel blijft staan.

    .article-link {
      display: inline-block;
      padding: 10px 14px;
    }
    

    De box neemt nu met de volledige verticale afmeting deel aan de lay-out. Display verandert het lay-outgedrag; het blijft een HTML-link. Witruimte tussen aangrenzende inline-blocks verschijnt nog steeds als een tekstspatie.

  7. 7
    KernpuntMaak onderscheid tussen buitenkant en binnenkant

    Een box kan deelnemen aan de ene lay-out en daarbinnen een andere lay-out gebruiken. display: flex betekent block aan de buitenkant en flex aan de binnenkant. inline-flex behoudt dezelfde flexlay-out binnenin, maar gebruikt inlineplaatsing aan de buitenkant.

    De regel beïnvloedt directe kindelementen. Een flexnavigatie maakt van de lijst een flexitem; de geneste links worden niet automatisch items in die buitenste rij. Geef de lijst een afzonderlijke lay-out als de links een eigen rij nodig hebben.

  8. 8
    UitdagingReserveer ruimte voor een bericht

    Een bericht over de leesstatus moet aanvankelijk verborgen zijn, waarbij de ruimte gereserveerd blijft zodat het artikel niet verschuift als het bericht verschijnt. Moet je display: none of visibility: hidden gebruiken?

    ---reveal---

    Gebruik visibility: hidden om de ruimte in de lay-out te behouden. display: none verwijdert de box en de tussenruimte, zodat latere inhoud zou verschuiven als je het bericht toont. Als tekst beschikbaar moet blijven voor schermlezers terwijl die visueel verborgen is, gebruik je daarvoor een klasse voor visueel verborgen tekst.

  9. 9
    VoorbeeldLaat het portret zweven

    Plaats het portret vóór de alinea en laat het zweven:

    .portrait {
      float: left;
      width: 130px;
      margin: 0 18px 10px 0;
    }
    

    Tekstregels lopen naast de foto met een horizontale tussenruimte van 18px. Zodra ze voorbij de ondermarge zijn, krijgen ze weer de volle breedte. De achtergrond van de alinea kan achter de zwevende box doorlopen, ook al blijft de tekst zelf ernaast.

  10. 10
    VoorbeeldLaat het ouderelement de hoogte van de afbeelding omvatten

    Als de tekst van het artikel erg kort is, kan de zwevende box onder de achtergrond van het ouderelement uitsteken. Zwevende kindelementen leveren geen gewone hoogte voor de documentstroom.

    Voeg display: flow-root toe aan het omhullende element. Het onafhankelijke stroomgebied omsluit nu het portret, zodat de rand en achtergrond van het omhullende element eromheen komen. Dit houdt ook de marges van ouderelement en kindelement gescheiden; het snijdt geen inhoud af en voegt geen scrollgebied toe.

  11. 11
    UitdagingBegin een nieuwe sectie onder het portret

    Het portret steekt nog steeds onder de eerste alinea van het artikel uit. De volgende sectiekop moet eronder beginnen, terwijl de tekst van de alinea mag blijven omlopen. Welke regel hoort op de kop?

    ---reveal---

    Gebruik clear: left, of clear: both als de kop onder zwevende boxen aan beide kanten moet komen. Dit verplaatst de kop tot onder eerdere zwevende boxen. Het is een andere taak dan die van flow-root, dat een ouderelement de hoogte van zijn zwevende kindelementen laat omvatten.

  12. 12
    UitdagingEen wijziging aan het ouderelement stopt de tekstomloop

    Je verandert het omhullende element van de foto en tekst naar display: flex. De zwevende portretfoto laat tekstregels niet meer onder de afbeelding doorlopen. Waarom is dat zo en hoe herstel je de bedoelde documentstroom van het artikel?

    ---reveal---

    Het portret is nu een flexitem, dus het zweven heeft geen effect. De alinea neemt een afzonderlijk flexitem in. Zet dit omhullende element terug naar de normale documentstroom, laat het portret zweven en gebruik flow-root als het omhullende element de afbeelding moet omsluiten.

  13. 13
    SamenvattingBekijk het ouderelement voordat je het kindelement verandert

    Het gedrag van block en inline verklaart de oorspronkelijke lay-out van het artikel. Display kan de deelname aan de buitenste lay-out veranderen, de binnenste lay-out veranderen of bepalen of een box überhaupt bestaat.

    Voor tekst rond een portret houd je de tekst in de normale documentstroom met een zwevende box, omsluit je die box wanneer nodig en plaats je latere secties eronder als dat moet. Als het resultaat onverwacht verandert, inspecteer dan zowel de display van het ouderelement als de regels van het kindelement.

2

Plaats badges en houd navigatie zichtbaar

14 stappen
Maak een lokale bovenliggende laag, vergelijk vast en klevend gedrag en herstel daarna een verborgen menu.

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

  1. 1
    IntroductieBepaal wat met wat moet meebewegen
  2. 2
    UitlegBehoud of verwijder de oorspronkelijke ruimte
  3. 3
    VoorbeeldMaak de kaart de referentie van de badge
  4. 4
    VoorbeeldPlaats de badge binnen de hoek
  5. 5
    UitdagingKies de referentie voor het percentage
  6. 6
    VoorbeeldZet de hulpknop vast aan het venster
  7. 7
    VoorbeeldHoud een sectiekop binnen de sectie
  8. 8
    UitdagingEen kop heeft geen bewegingsruimte
  9. 9
    TipLaat ruimte onder een vaste koptekst
  10. 10
    UitlegVergelijk eerst de buitenste groepen
  11. 11
    VoorbeeldPas het niveau van het voorouderelement aan
  12. 12
    UitdagingHeeft een statisch gridbijschrift position nodig?
  13. 13
    UitdagingEen vaste werkbalk komt toch onder een ander element
  14. 14
    SamenvattingControleer referentie, ruimte in de documentstroom en groep
3

Maak een flexibele werkbalk en rij kaarten

17 stappen
Volg de richting, bereken groei en krimp en gebruik uitlijning pas nadat de afmetingen zijn bepaald.

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

  1. 1
    IntroductieMaak een rij die de ruimte verdeelt
  2. 2
    UitlegMaak alleen van directe kindelementen flexitems
  3. 3
    UitlegDraai de assen met de richting
  4. 4
    UitdagingCentreer een verticale groep
  5. 5
    VoorbeeldBegin de groeiberekening
  6. 6
    VoorbeeldVoeg groei toe aan de basisafmetingen
  7. 7
    VoorbeeldWeeg de krimp naar basisafmeting
  8. 8
    UitdagingKies gelijke breedtes of behoud verschillen in afmeting
  9. 9
    TipHoud een lange coderegel binnen het eigen gebied
  10. 10
    VoorbeeldLaat kaarten naar onafhankelijke regels lopen
  11. 11
    UitlegVerdeel alleen de overgebleven ruimte
  12. 12
    VoorbeeldLijn tekst binnen de regel uit
  13. 13
    UitdagingDuw een groep naar het andere uiteinde
  14. 14
    KernpuntRegels en items hebben verschillende uitlijning
  15. 15
    TipHoud te grote gecentreerde inhoud bereikbaar
  16. 16
    UitdagingEen gecentreerde rij beweegt niet
  17. 17
    SamenvattingLees flexbox in drie stappen
4

Maak een dashboard en een automatisch kaartgrid

18 stappen
Bereken sporen, plaats een paneel, pas het aantal kolommen aan en kies het juiste niveau van uitlijning.

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

  1. 1
    IntroductieGeef meerdere rijen gedeelde grenzen
  2. 2
    UitlegSporen zijn de ruimtes tussen lijnen
  3. 3
    VoorbeeldTrek vaste sporen en tussenruimtes af
  4. 4
    VoorbeeldZet aandelen om in kolombreedtes
  5. 5
    UitdagingProcentuele kolommen zijn samen breder dan de rij
  6. 6
    VoorbeeldTel de eindgrens van het paneel
  7. 7
    UitlegGebruik namen voor paginagebieden
  8. 8
    UitdagingEen vorm die gebieden niet kunnen uitdrukken
  9. 9
    VerbandDeel een cel om een afbeeldingslaag te maken
  10. 10
    UitlegLaat nieuwe rijen verschijnen
  11. 11
    VoorbeeldBepaal hoeveel kolommen met de minimumbreedte passen
  12. 12
    VoorbeeldLaat ongebruikte sporen samenvallen met auto-fit
  13. 13
    UitdagingHoud een minimum binnen een smalle box
  14. 14
    UitlegVerplaats een item binnen het eigen gebied
  15. 15
    VoorbeeldVerplaats de kolommen als één groep
  16. 16
    UitdagingWaarom staan de onderkanten van de kaarten niet meer op één lijn?
  17. 17
    UitdagingEen banner over de volle breedte boven automatische kaarten
  18. 18
    SamenvattingMaak onderscheid tussen afmetingen, plaatsing en uitlijning
5

Stel een leespagina samen en verbeter de zwakke punten

19 stappen
Kies methoden voor de pagina en de componenten en test de lay-out daarna met lastige inhoud.

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

  1. 1
    IntroductieBouw van de pagina naar de onderdelen
  2. 2
    UitlegGeef elke methode een concrete taak
  3. 3
    UitdagingKies kolommen voor een verzameling bronnen
  4. 4
    VoorbeeldBeperk de leesbreedte
  5. 5
    VoorbeeldReserveer één vaste en één flexibele kolom
  6. 6
    VoorbeeldMaak ruimte voor de voettekst zonder die vast te zetten
  7. 7
    TipLaat de hoogte en viewportruimte veranderen
  8. 8
    UitdagingLaat een foto breder zijn dan het artikel
  9. 9
    VoorbeeldNest een flexwerkbalk binnen het paginagrid
  10. 10
    VoorbeeldHoud de afbeelding en tekst in balans
  11. 11
    VoorbeeldLijn kaartonderdelen op het juiste niveau uit
  12. 12
    VoorbeeldLaat een veld een rij delen met een knop
  13. 13
    UitdagingDe box of de woorden centreren?
  14. 14
    UitlegInspecteer de lay-out die de browser heeft gemaakt
  15. 15
    VoorbeeldVolg een breed codeblok naar buiten
  16. 16
    TipMaak randen zichtbaar zonder ze te verplaatsen
  17. 17
    UitdagingAlleen de breedte aanpassen is niet genoeg
  18. 18
    UitdagingTest de pagina met meer dan het voorbeeld
  19. 19
    SamenvattingControleer elke verhouding met echte inhoud

CSS-lay-outs met flexbox en grid: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Boxen, ruimte en lay-outkeuzes10 Oefenvragen

Vraag 1 van 10

Twee aangrenzende blokken in de normale documentstroom hebben rakende positieve verticale marges van 18px en 30px. Hoe groot is de samengevallen tussenruimte?
  1. 18px
  2. 30px
  3. 48px
  4. 12px
Toon antwoordVerberg antwoord
Antwoord: B
Rakende positieve verticale blokmarges vallen samen tot de grootste marge, dus de tussenruimte is 30px. Als je ze optelt tot 48px, behandel je ze als afzonderlijke tussenruimtes. Dat optellen zou gelden tussen flex- of griditems, waarvan de marges niet samenvallen, maar deze boxen staan in de normale documentstroom.

Vraag 2 van 10

Een gewone tekstlink heeft een ingestelde breedte nodig terwijl die binnen een tekstregel blijft. Welke displaywaarde geeft de box dat gedrag?
  1. inline
  2. block
  3. contents
  4. inline-block
Toon antwoordVerberg antwoord
Antwoord: D
Een inline-block accepteert breedte en hoogte terwijl het inline op een regel staat. Een gewone inlinelink negeert de breedtedeclaratie. Block accepteert de breedte ook, maar begint een blokregel en voldoet dus niet aan de eis om de box binnen de tekstregel te houden.

Vraag 3 van 10

Een badge is absoluut gepositioneerd binnen een kaart. De kaart heeft position: relative en geen andere regel maakt daartussen een omsluitend blok. Welke box levert de referentie voor de verschuivingen van de badge?
  1. De box inclusief binnenruimte van de kaart.
  2. Het inhoudsgebied van de kaart.
  3. De box inclusief rand van de badge.
  4. Het inhoudsgebied van de viewport.
Toon antwoordVerberg antwoord
Antwoord: A
De gepositioneerde kaart bepaalt het omsluitende blok van de badge bij de binnenruimteranden. Als je alleen het inhoudsgebied van de kaart meet, laat je de binnenruimte weg en krijg je een andere referentie. De viewport wordt alleen gebruikt als geen dichterbij gelegen geschikt voorouderelement de referentie voor absolute positionering levert.

Vraag 4 van 10

Een sectiekop heeft position: sticky, maar alle vier verschuivingen blijven auto. Welke declaratie laat de kop bovenaan kleven tijdens verticaal scrollen?
  1. z-index: 1
  2. margin-top: 0
  3. top: 0
  4. height: auto
Toon antwoordVerberg antwoord
Antwoord: C
Een klevende box heeft een andere verschuiving dan auto nodig op de as waarop die moet kleven. Met top: 0 stel je de bovenste drempel in. Een z-index kan veranderen welke overlappende laag zichtbaar is, maar kan niet de ontbrekende scrolldrempel leveren die klevend gedrag activeert.

Vraag 5 van 10

Drie flexitems hebben basisafmetingen van 60px en groeifactoren 1, 2 en 1 in een rij van 460px met twee tussenruimtes van 20px. Er zijn geen marges, binnenruimte, randen of afmetingsgrenzen die de berekening beïnvloeden. Wat zijn hun uiteindelijke breedtes, in volgorde?
  1. 130px, 200px, 130px
  2. 120px, 180px, 120px
  3. 105px, 210px, 105px
  4. 140px, 140px, 140px
Toon antwoordVerberg antwoord
Antwoord: B
De basisafmetingen nemen 180px in en de tussenruimtes 40px, zodat 240px overblijft voor vier groeiaandelen. Elk aandeel is 60px, wat 120px, 180px en 120px oplevert. Als je de uiteindelijke breedte van het middelste item tweemaal zo groot maakt als die van de andere, verwar je het aandeel in de toegevoegde ruimte met de volledige breedte.

Vraag 6 van 10

Welk onderdeel van de verkorte eigenschap flex met drie waarden stelt de beginafmeting van het item langs de hoofdas in?
  1. Het derde onderdeel, flex-basis.
  2. Het eerste onderdeel, flex-grow.
  3. Het tweede onderdeel, flex-shrink.
  4. De align-itemswaarde van het ouderelement.
Toon antwoordVerberg antwoord
Antwoord: A
De volgorde van de drie waarden is groei, krimp, basis, dus het derde onderdeel levert de beginafmeting. Groei regelt een aandeel in de positieve vrije ruimte nadat de basisafmetingen bekend zijn. Het stelt geen beginbreedte in, ook al kan een verandering ervan de uiteindelijke breedte van het item veranderen.

Vraag 7 van 10

Een grid van 760px heeft kolommen 160px 1fr 2fr en een kolomtussenruimte van 15px. Inhoudsminima beperken de sporen niet. Hoe breed is de kolom 2fr?
  1. 400px
  2. 300px
  3. 190px
  4. 380px
Toon antwoordVerberg antwoord
Antwoord: D
Twee tussenruimtes nemen 30px in; na aftrek daarvan en van de vaste kolom van 160px blijft 570px over. Bij drie aandelen is één aandeel 190px, dus de kolom van 2fr is 380px. Bij een resultaat van 400px is de vaste kolom afgetrokken, maar is vergeten dat tussenruimtes ook beschikbare breedte innemen.

Vraag 8 van 10

Een griditem moet de eerste drie kolommen van een grid met vijf kolommen beslaan. Welke plaatsing op lijnen geeft die overspanning?
  1. grid-column: 1 / 3
  2. grid-column: 2 / 4
  3. grid-column: 1 / 4
  4. grid-column: 1 / 5
Toon antwoordVerberg antwoord
Antwoord: C
Drie sporen die bij lijn 1 beginnen, eindigen bij lijn 4, omdat lijnen de grenzen van sporen markeren. De plaatsing 1 / 3 eindigt aan het begin van de derde kolom en beslaat slechts twee sporen. Tel de ruimtes tussen de grenslijnen, niet alleen de getallen in de declaratie.

Vraag 9 van 10

Een overzicht bevat veel kaarten. Kaarten in latere rijen moeten dezelfde kolomgrenzen gebruiken als kaarten in eerdere rijen, ook als de laatste rij onvolledig is. Welke lay-outmethode geeft die eis het beste weer?
  1. Grid met gedeelde kolomsporen.
  2. Flexbox met flexregels met regelomloop.
  3. Zwevende boxen met afzonderlijke breedtes.
  4. Inline-blocks met natuurlijke breedtes.
Toon antwoordVerberg antwoord
Antwoord: A
Grid definieert één kolomstructuur die alle rijen delen, zodat een gedeeltelijk gevulde laatste rij dezelfde grenzen behoudt. Flexregels met regelomloop verdelen hun ruimte onafhankelijk en kunnen de items in de laatste rij breder maken. De eis gaat over uitlijning tussen rijen, waardoor gedeelde sporen de nuttige beperking zijn.

Vraag 10 van 10

Kaarten met verschillende tekstlengtes vormen één gridrij. Hun knoppen moeten onderaan op één lijn staan zonder vaste kaarthoogtes, en de kaarten moeten meegroeien als de tekst groeit. Hoe moeten het buitenste grid en de kaarten binnenin samenwerken?
  1. Lijn kaarten uit aan het begin; gebruik flexkolommen en automatische bovenmarges op knoppen.
  2. Rek de kaarten uit; gebruik flexkolommen en automatische bovenmarges op knoppen.
  3. Rek de kaarten uit; gebruik flexrijen en automatische bovenmarges op knoppen.
  4. Rek de kaarten uit; gebruik flexkolommen en automatische ondermarges op knoppen.
Toon antwoordVerberg antwoord
Antwoord: B
Door uitrekken in het grid krijgen de kaarten een gedeelde rijhoogte die wordt bepaald door de hoogste inhoud. Een flexkolom binnen elke kaart laat de automatische bovenmarge van de knop ongebruikte verticale ruimte opnemen. Absoluut gepositioneerde knoppen reserveren geen eigen ruimte, zodat groeiende tekst eronder kan lopen, ook als de onderranden op één lijn staan.
Set 2: Documentstroom, lagen en flexibele containers10 Oefenvragen

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

Vraag 1 van 10

Een profielbox bevat alleen een zwevende foto en de achtergrond loopt niet om de foto heen. Welke displaywaarde op de profielbox omsluit de zwevende box?
  1. inline
  2. contents
  3. flow-root
  4. none
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een gewone inline-<span> heeft width: 180px en 10px verticale binnenruimte. Waarom kan de achtergrond aangrenzende tekstregels overlappen terwijl de breedte gelijk blijft aan die van de inhoud?
  1. Inlinebreedte wordt genegeerd; verticale binnenruimte wordt getekend zonder grotere regelafstand.
  2. Inlinebreedte wordt overgeërfd; verticale binnenruimte valt samen met aangrenzende marges.
  3. Inlinebreedte stelt een minimum in; verticale binnenruimte haalt de box uit de documentstroom.
  4. Inlinebreedte reserveert lege ruimte; verticale binnenruimte verandert alleen de basislijn.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een relatief gepositioneerde header met z-index: 4 bevat een absoluut gepositioneerd menu met z-index: 800. Een relatief gepositioneerd hoofdgebied ernaast heeft z-index: 5. Beide buitenste boxen staan in dezelfde bovenliggende stapelcontext. Welke wijziging plaatst de hele header boven het hoofdgebied?
  1. Verhoog het menu naar z-index: 900.
  2. Verlaag het menu naar z-index: 6.
  3. Stel het menu in op position: relative.
  4. Verhoog de header naar z-index: 6.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een alinea heeft position: relative; top: 9px. Wat gebeurt er met de positie van de volgende alinea in de normale documentstroom?
  1. Die schuift ook 9px omlaag.
  2. Die blijft op de oorspronkelijke plaats.
  3. Die schuift omhoog in de oorspronkelijke ruimte.
  4. Die wordt absoluut gepositioneerd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

In een horizontale flexrij met Nederlandse schrijfrichting moet het laatste bedieningselement naar het andere uiteinde worden geduwd, terwijl eerdere bedieningselementen aan het begin blijven. Welke marge op het laatste bedieningselement neemt de vrije ruimte ervoor op?
  1. margin-inline-start: auto
  2. margin-inline-end: auto
  3. margin-block-start: auto
  4. margin-block-end: auto
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een flexrij van 540px heeft twee items met basisafmetingen van 240px en 480px en krimpfactoren 2 en 1. Er zijn geen tussenruimtes, marges, randen, binnenruimte of beperkende minima. Welke uiteindelijke breedtes ontstaan?
  1. 180px en 360px
  2. 120px en 420px
  3. 150px en 390px
  4. 160px en 380px
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een grid met drie kolommen definieert geen rijen en plaatst acht gewone items automatisch. Hoeveel impliciete rijen zijn nodig?
  1. Twee rijen.
  2. Drie rijen.
  3. Vier rijen.
  4. Acht rijen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een smal item moet in de inlinerichting in het midden van het eigen brede gridgebied staan, zonder de kolommen te verplaatsen. Welke eigenschap hoort op dat item?
  1. justify-content: center
  2. align-content: center
  3. text-align: center
  4. justify-self: center
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

De voettekst van een korte pagina moet de onderkant van de viewport bereiken en daarna vanzelf omlaag bewegen als het artikel groeit. Welke gridinstelling op de body ondersteunt dit met header, main en footer als kindelementen?
  1. height: 100dvh; grid-template-rows: auto 0 auto
  2. max-height: 100dvh; grid-template-rows: 1fr auto 1fr
  3. min-height: 100dvh; grid-template-rows: auto 1fr auto
  4. height: auto; grid-template-rows: auto auto auto
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Het hoofditem van een flexpagina bevat een lange onafgebroken coderegel. Ontwikkelaarstools tonen dat main min-width: auto heeft; de hele pagina scrolt zijwaarts. De code moet beschikbaar blijven zonder de pagina breder te maken. Welke combinatie lost dit voor beide boxen op?
  1. Geef main min-width: 0 en het codeblok overflow-x: auto.
  2. Geef main width: 100% en het codeblok white-space: nowrap.
  3. Geef main overflow: visible en het codeblok min-width: 100%.
  4. Geef main flex-shrink: 0 en het codeblok overflow-x: hidden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Gedeelde sporen en veranderende inhoud10 Oefenvragen

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

Vraag 1 van 10

Een bericht moet aanvankelijk onzichtbaar zijn, maar de huidige ruimte reserveren zodat latere inhoud niet verschuift als het verschijnt. Welke eigenschapswaarde geeft dat gedrag?
  1. display: none
  2. display: contents
  3. position: absolute
  4. visibility: hidden
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een artikel heeft een links zwevend portret, gevolgd door een kop voor een nieuwe sectie. Tekst mag naast het portret lopen, maar de kop moet eronder beginnen. Welke regel moet op de kop staan?
  1. float: left
  2. clear: left
  3. overflow: visible
  4. position: relative
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een klevende kop heeft top: 0 binnen een voorouderelement met overflow: auto. De pagina scrolt, maar dat voorouderelement niet. Wat moet je inspecteren als waarschijnlijke reden waarom de kop nooit aan de viewport blijft kleven?
  1. Het voorouderelement met overflow is de scrollreferentie geworden.
  2. De bronvolgorde van de kop is het stapelniveau geworden.
  3. De bovenste verschuiving wordt vanaf de eigen hoogte van de kop gemeten.
  4. De flexrichting van de pagina heeft de kleefdrempel verwijderd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Knopinfo staat binnen een statische kaart met opacity: 0.8. De kaart staat binnen een relatief gepositioneerde sectie met z-index: 2. Een overlappende sectie ernaast is relatief gepositioneerd met z-index: 3. Als je de z-index van de knopinfo verhoogt, verandert er niets. Welke wijziging aan de buitenkant kan de hele sectie van deze knopinfo naar voren brengen?
  1. Verhoog de ondoorzichtigheid van de kaart tot precies 1.
  2. Verhoog het niveau van de knopinfo boven 3000.
  3. Verhoog de omsluitende sectie boven niveau 3.
  4. Verhoog de eigen z-index van de kaart naar 4.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een verticale flexkolom heeft hoogte over en moet de groep kindelementen van boven naar beneden centreren. Welke declaratie op de container regelt die as?
  1. justify-content: center
  2. align-items: center
  3. justify-items: center
  4. align-self: center
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een grid moet binnen 810px drie precies gelijke kolommen hebben, met tussenruimtes van 24px, ook als één item een lange URL bevat. De URL mag overal worden afgebroken. Welke combinatie regelt de spoorafmetingen en de inhoud?
  1. Gebruik repeat(3, 33.33%) en overflow-wrap: anywhere op het item met de URL.
  2. Gebruik repeat(3, minmax(0, 1fr)) en overflow-wrap: anywhere op het item met de URL.
  3. Gebruik repeat(3, 1fr) en white-space: nowrap op het item met de URL.
  4. Gebruik repeat(3, minmax(270px, 1fr)) en overflow: visible op het item met de URL.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een sjabloon gebruikt "banner banner" "banner main" als twee rijen. Waarom is deze declaratie met benoemde gebieden ongeldig?
  1. De naam main heeft minstens twee cellen nodig.
  2. Een gridgebied kan geen rijgrens overschrijden.
  3. Elk gebied moet een volledige gridrij vullen.
  4. De bannercellen vormen geen rechthoek.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Drie kaarten gebruiken repeat(auto-fit, minmax(180px, 1fr)) in een grid van 860px met tussenruimtes van 20px. Ze hebben geen afmetingsgrenzen of extra tussenruimte. Hoeveel bezette kolommen blijven over en hoe breed is elke kolom?
  1. Vier kolommen, elk precies 200px.
  2. Drie kolommen, elk ongeveer 286,7px.
  3. Drie kolommen, elk ongeveer 273,3px.
  4. Vier kolommen, elk precies 180px.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een lange begrippenlijst moet als in een krant omlaag door één smalle kolom en daarna verder in de volgende lopen. Welke CSS-lay-outfunctie biedt die tekststroom rechtstreeks?
  1. Gridlay-out met herhaalde 1fr-sporen.
  2. Meerkolomslay-out met columns.
  3. Flexlay-out met flex-direction: row.
  4. Absolute positionering met gelijke verschuivingen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een afbeelding en het bijschrift delen grid-area: 1 / 1. Het bijschrift volgt in de HTML op de afbeelding en geen van beide heeft een z-index. Welke wordt bovenop getekend?
  1. De afbeelding wordt bovenop getekend.
  2. Het hoogste kindelement wordt bovenop getekend.
  3. Het breedste kindelement wordt bovenop getekend.
  4. Het bijschrift wordt bovenop getekend.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Onderzoek plaatsing en uitlijning10 Oefenvragen

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

Vraag 1 van 10

Een header heeft geen binnenruimte of rand. De kop die het eerste kindelement is, heeft een bovenmarge van 22px die met die van de header samenvalt. De tussenruimte verschijnt buiten de achtergrond van de header. Welke wijziging plaatst de tussenruimte in plaats daarvan binnen de header?
  1. Behoud die kindmarge en voeg 22px bovenmarge toe aan de header.
  2. Verwijder die kindmarge en voeg 22px ondermarge toe aan de header.
  3. Verwijder die kindmarge en voeg 22px binnenruimte bovenaan de header toe.
  4. Behoud die kindmarge en stel de positie van de header in op relative.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een <ul> is een gridcontainer. Elk <li> bevat een link. Welke elementen worden griditems van de <ul>?
  1. De lijstitems die directe kindelementen zijn.
  2. De links binnen de lijstitems.
  3. De lijstitems en hun links.
  4. De zusterelementen van de lijstcontainer.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een gepositioneerde kaart heeft een inhoudsbreedte van 280px, 18px binnenruimte aan elke kant en een rand van 2px. De kaart gebruikt content-box. Een absoluut gepositioneerd kindelement heeft width: 50% en right: 12px, zonder eigen binnenruimte, rand of marge. Wat is de breedte van het kindelement en de afstand van de linkerrand tot de linker binnenruimterand van de kaart?
  1. 140px breed; de linkerrand staat 128px naar binnen.
  2. 160px breed; de linkerrand staat 148px naar binnen.
  3. 158px breed; de linkerrand staat 158px naar binnen.
  4. 158px breed; de linkerrand staat 146px naar binnen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Zeven flexkaarten hebben flex: 1 1 150px in een rij van 640px met regelomloop en tussenruimtes van 10px. Er zijn geen marges, binnenruimte, randen of afmetingsgrenzen. Hoe verdelen de kaarten zich over de regels en welke breedtes leveren de twee regels op?
  1. Drie en dan vier; ongeveer 206,7px en dan 152,5px.
  2. Vier en dan drie; 152,5px en dan ongeveer 206,7px.
  3. Vier en dan drie; 160px op beide regels.
  4. Vier en dan drie; 150px en dan ongeveer 213,3px.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een flexcontainer met Nederlandse schrijfrichting gebruikt row-reverse. De groep moet tegen de linkerrand staan, ongeacht het omgekeerde begin van de hoofdas. Welke waarde voor justify-content volgt die beginrand van de schrijfrichting?
  1. flex-start
  2. flex-end met row
  3. start
  4. space-between
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke uitgeschreven sporenlijst levert repeat(2, 80px 1fr) op?
  1. 80px 80px 1fr 1fr
  2. 80px 1fr 80px 1fr
  3. 160px 2fr
  4. 80px 1fr 1fr
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een grid heeft zeven kaarten, vier auto-fitkolommen die binnen de breedte passen en gewone plaatsing rij voor rij. De laatste rij heeft één lege cel. Laat auto-fit de vierde kolom samenvallen en waarom?
  1. Nee; het item in de eerste rij houdt die kolom bezet.
  2. Ja; elke lege cel laat de hele kolom samenvallen.
  3. Nee; auto-fit laat gegenereerde kolommen nooit samenvallen.
  4. Ja; alleen de laatste rij bepaalt of een kolom bezet is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Twee vaste kolommen van 140px staan in een grid van 500px met een tussenruimte van 20px. Er geldt geen andere tussenruimte. Hoeveel ruimte staat met justify-content: center vóór de eerste kolom?
  1. 110px
  2. 90px
  3. 200px
  4. 100px
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een klevende zijbalk deelt een hoge gridrij met een artikel. De zijbalk heeft top: 12px, geen vaste hoogte en wordt standaard uitgerekt; daardoor vult die de rij en beweegt niet zichtbaar. Er is geen voorouderelement met overflow dat dit beïnvloedt. Welke wijziging maakt ruimte om te kleven terwijl de zijbalk in de documentstroom blijft?
  1. Stel justify-self: start in op de zijbalk.
  2. Stel align-self: start in op de zijbalk.
  3. Stel position: absolute in op de zijbalk.
  4. Stel z-index: 12 in op de zijbalk.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een box gebruikt width: 100%, 14px binnenruimte links en rechts en box-sizing: content-box, zonder rand. De inhoudsbreedte van het ouderelement is 390px. Waarom steekt deze box buiten het ouderelement uit?
  1. Bij de inhoudsbreedte van 390px komt 28px binnenruimte.
  2. De inhoudsbreedte wordt door binnenruimte 362px.
  3. De binnenruimte vervangt de buitenmarges van het ouderelement.
  4. De breedte wordt vanaf de rand van de viewport gemeten.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Combineer de regels in nieuwe lay-outs10 Oefenvragen

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

Vraag 1 van 10

Een afbeelding en een alinea zijn directe kindelementen van een ouderelement dat van de normale documentstroom naar display: flex is veranderd. De afbeelding heeft nog steeds float: left, maar de onderste regels van de alinea lopen niet meer eronder door. Hoe herstel je de gewone tekstomloop rond de afbeelding?
  1. Behoud flex en voeg clear: both toe aan de alinea.
  2. Behoud flex en vergroot de linker zweefmarge van de afbeelding.
  3. Behoud flex en geef de alinea flex-grow: 1.
  4. Zet het ouderelement terug naar de normale documentstroom en laat de afbeelding zweven.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een vaste hulpknop staat binnen een paneel met een transformatie dat uit beeld scrolt. Geen ander voorouderelement verandert de referentie voor vaste positionering. Een afzonderlijke vaste koptekst van 72px bedekt ook doelen van links op dezelfde pagina. De knop moet aan de viewport gekoppeld blijven en doelen moeten onder de koptekst zichtbaar blijven. Welk paar wijzigingen pakt beide referenties aan?
  1. Verhoog de z-index van de knop; voeg 72px margin-bottom toe aan de vaste koptekst.
  2. Maak de knop klevend binnen het paneel; voeg 72px padding-bottom toe aan html.
  3. Verplaats de knop buiten het paneel met transformatie; voeg 72px scroll-padding-top toe aan html.
  4. Geef de knop top: 0; voeg 72px border-bottom toe aan de linkdoelen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Twee relatief gepositioneerde panelen delen een bovenliggende stapelcontext: A heeft z-index 1, B heeft z-index 2. A bevat een geïsoleerde component met een decoratie op een negatief niveau en een menu met z-index 100. Het menu moet boven B verschijnen, terwijl de decoratie achter de tekst van de component blijft. Welke wijziging voldoet aan beide doelen?
  1. Verhoog A boven 2 en houd de component geïsoleerd.
  2. Verhoog het menu boven 200 en verwijder de isolatie van de component.
  3. Houd A op 1 en verhoog de geïsoleerde component boven 2.
  4. Verwijder de positionering van het menu en behoud beide paneelniveaus.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De links van een flexrij staan in een logische HTML-volgorde, maar order: -1 verplaatst de laatste link visueel naar voren. Welke volgorde volgen de normale toetsenbordfocus en het lezen door een schermlezer?
  1. Alleen de focus volgt de visuele volgorde.
  2. Beide volgen de HTML-volgorde.
  3. Alleen het lezen volgt de visuele volgorde.
  4. Beide volgen de visuele volgorde.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Drie flexitems van 80px die niet groeien staan in een rij van 500px met Nederlandse schrijfrichting en tussenruimtes van 20px. Het derde heeft margin-inline-start: auto en de container heeft justify-content: center. Er geldt geen andere tussenruimte. Op welke afstand vanaf de linker inhoudsrand begint het derde item?
  1. 420px
  2. 280px
  3. 310px
  4. 400px
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een grid heeft zes expliciete kolommen en vier expliciete rijen. Een paneel gebruikt grid-column: 2 / -1; grid-row: 2 / span 2. Hoeveel cellen beslaat het?
  1. 8 cellen
  2. 12 cellen
  3. 15 cellen
  4. 10 cellen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Welke verkorte grideigenschap centreert elk item op beide assen binnen het eigen gebied?
  1. place-content: center
  2. place-items: center
  3. text-align: center
  4. justify-content: center
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een artikelgrid gebruikt 1fr min(65ch, 100% - 32px) 1fr. In het huidige lettertype is 1ch gelijk aan 8px. Wat zijn bij inhoudsbreedtes van 480px en 900px de breedtes van het middelste spoor en welke plaatsing laat een foto de volle breedte beslaan?
  1. 480px en 520px; grid-column: 1 / -1.
  2. 448px en 868px; grid-column: 2.
  3. 448px en 520px; grid-column: 1 / -1.
  4. 520px en 520px; grid-column: 1 / 3.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Bij een verzameling kaarten moeten titels, beschrijvingen en voetteksten over de kaarten uitlijnen. Elke kaart heeft die drie directe kindelementen, maar het huidige onafhankelijke rijgrid kan hun grenzen niet uitlijnen met die van aangrenzende kaarten. Welke verhouding moet die onafhankelijke bepaling van rijafmetingen vervangen?
  1. Elke kaart beslaat drie bovenliggende kolommen en neemt die over met een kolomsubgrid.
  2. Elke kaart neemt één bovenliggende rij in en geeft de voettekst een automatische bovenmarge.
  3. Elke kaart neemt één bovenliggende cel in en stelt alle drie kindrijen in op 1fr.
  4. Elke kaart beslaat drie bovenliggende rijen en neemt die over met een rijsubgrid.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een box van 210px begint op 150px van de linkerrand van de viewport. De viewport is 340px breed. Hoe ver steekt de rechterrand van de box voorbij de rechterrand van de viewport uit?
  1. 20px
  2. 60px
  3. 130px
  4. 150px
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

86 Kernbegrippen, elk met een definitie

A

absolute positionering
Absolute positionering haalt een box uit de normale documentstroom en plaatst die met verschuivingen vanaf het omsluitende blok.
Absolute positionering plaatst de badge 10px van de bovenste en rechter binnenruimterand van de kaart.
align-content
De eigenschap align-content verdeelt flexregels op de dwarsas of gridrijen op de blokas wanneer er ruimte over is.
Align-content kan een flexregel in een container met regelomloop centreren, maar heeft geen effect wanneer de container nowrap gebruikt.
align-items
De eigenschap align-items stelt de uitlijning van items in op de flexdwarsas of de gridblokas binnen het gebied van elk item.
Align-items ingesteld op baseline lijnt een werkbalklabel uit met de eerste tekstregel van een grotere kop.
align-self
De eigenschap align-self overschrijft de keuze voor itemuitlijning van het ouderelement voor één flex- of griditem op de uitlijningsas.
Align-self ingesteld op start voorkomt dat één gridzijbalk uitrekt om een hoge artikelrij te vullen.
auto-fill
Auto-fill is een sleutelwoord voor automatisch herhalen dat zoveel sporen maakt als passen en herhaalde sporen behoudt, ook wanneer ze leeg zijn.
Auto-fill laat een ongebruikte laatste kolom naast een korte rij kaarten staan in plaats van de kaarten daarin te laten uitrekken.
auto-fit
Auto-fit is een sleutelwoord voor automatisch herhalen dat lege herhaalde sporen en hun tussenruimtes laat samenvallen nadat items zijn geplaatst.
Auto-fit laat drie flexibele kaartkolommen uitrekken wanneer een vierde gegenereerde kolom nergens een item bevat.
automatische marge
Een automatische marge neemt beschikbare ruimte aan de betreffende kant van een item op en maakt zo flexibele scheiding of centrering in een lay-out mogelijk.
Een automatische marge na het logo neemt overgebleven breedte in en houdt navigatielinks aan het andere uiteinde.
automatische minimumafmeting
Een automatische minimumafmeting kan een flexitem of gridspoor groot genoeg houden voor onafbreekbare inhoud, waardoor het niet zo ver krimpt als verwacht.
De automatische minimumafmeting van een lange onafbreekbare coderegel kan het flexitem dat die bevat breder maken dan het beschikbare aandeel.
automatische plaatsing
Automatische plaatsing wijst niet-gepositioneerde griditems toe aan beschikbare cellen, normaal in bronvolgorde over rijen, en voegt waar nodig sporen toe.
Automatische plaatsing zet de zevende kaart in een derde rij wanneer het grid drie kolommen heeft.

B

benoemd gridgebied
Een benoemd gridgebied is een rechthoekig gridgebied dat in sjabloongebiedstekenreeksen wordt beschreven en met grid-area aan een item wordt toegewezen.
In een sjabloon met twee kolommen wordt het benoemde gridgebied van de header over beide cellen van de bovenste rij herhaald, zodat de header de pagina overspant.
benoemde gridlijn
Een benoemde gridlijn is een gridgrens met een label, dat in een sporenlijst is gedeclareerd of uit een benoemd gebied is gegenereerd.
Dankzij de benoemde gridlijn main-start kan een ander paneel de begingrens van het hoofdinhoudsgebied delen.
berekende waarde
Een berekende waarde is de bepaalde CSS-waarde die ontwikkelaarstools tonen en waarmee je kunt controleren welke regels een element daadwerkelijk beïnvloeden.
De berekende waarde van display toont dat het ouderelement flex is geworden, ook al had een oudere regel block gedeclareerd.
binnenste weergavetype
Het binnenste weergavetype bepaalt hoe een box de eigen kindelementen rangschikt, met een methode zoals de normale documentstroom, flexbox of grid.
Als je het binnenste weergavetype van een paneel verandert naar grid, worden de directe kindelementen in sporen geplaatst.
blokbox
Een blokbox begint op een nieuwe blokregel en vult normaal de beschikbare breedte als de breedte automatisch is.
Een alinea blijft een blokbox, ook als de breedte wordt verkleind tot 280px.
blokopmaakcontext
Een blokopmaakcontext is een onafhankelijk stroomgebied dat de eigen zwevende boxen omsluit en de marges gescheiden houdt van die van kindelementen.
Als een profielbox een zwevende foto bevat, zorgt de blokopmaakcontext dat de achtergrond rond die foto loopt.
bovenliggende laag (overlay)
Een bovenliggende laag is een box die over een ander element wordt getekend, gemaakt met overlappende gridgebieden of gepositioneerde lagen.
Het bijschrift bij de afbeelding vormt een bovenliggende laag doordat het de cel van de afbeelding deelt en later in de HTML verschijnt.
buitenste weergavetype
Het buitenste weergavetype bepaalt hoe een gegenereerde box deelneemt aan de lay-out van het ouderelement, bijvoorbeeld als block of inline.
Een inline-flexknop heeft een buitenste weergavetype inline en kan daardoor binnen een tekstregel staan.

C

ch-eenheid
De ch-eenheid meet de breedte van het cijfer 0 in het huidige lettertype en geeft zo een benaderende tekengebaseerde grens voor tekstbreedtes.
Met de ch-eenheid beperk je de regellengte van een tekstkolom van 65ch zonder de werkelijke letters te tellen.
clear-eigenschap
De clear-eigenschap verplaatst een box in de normale documentstroom tot onder eerdere zwevende boxen aan de gekozen kant of aan beide kanten.
Als je clear op both instelt, begint de volgende sectiekop onder de zwevende afbeelding van het artikel.
clearfix
Een clearfix is een oudere techniek om zwevende boxen te omsluiten, waarbij een clearend pseudo-element na de inhoud van een container wordt toegevoegd.
Een ouder stijlblad gebruikt een clearfix zodat de volgende sectie niet naast een rij zwevende boxen omhoog schuift.
compacte plaatsing (dense packing)
Compacte plaatsing vult eerdere gaten in een grid op met latere kleinere items, waardoor hun zichtbare volgorde kan veranderen.
Compacte plaatsing kan een kleine afbeelding in een galerij in een gat boven een eerdere grote afbeelding plaatsen.

D

display: none
Display: none is een displayinstelling die een element en de afstammelingen uit de lay-out verwijdert, zonder boxruimte te reserveren.
Als je display: none gebruikt voor een gesloten bericht, verdwijnt de ruimte die het zichtbare bericht zou innemen.
dwarsas
De dwarsas is de richting loodrecht op de hoofdas van een flexcontainer en wordt gebruikt voor dwarsuitlijning van items en regels.
In een Nederlandstalige flexrij loopt de dwarsas verticaal, zodat align-items korte bedieningselementen kan centreren.
dynamische viewporthoogte
De dynamische viewporthoogte is de veranderende zichtbare viewporthoogte die door dvh wordt weergegeven wanneer browserbediening verschijnt of verdwijnt.
Dynamische viewporthoogte helpt een schermvullende mobiele sectie passen terwijl de adresbalk zichtbaar is.

E

eendimensionale lay-out
Een eendimensionale lay-out rangschikt items hoofdzakelijk langs één as, waarbij regels bij regelomloop onafhankelijk worden behandeld, zoals in flexbox.
Een werkbalk met regelomloop gebruikt een eendimensionale lay-out omdat elke rij alleen de eigen overgebleven breedte deelt.
expliciet grid
Het expliciete grid bestaat uit de sporen en grenzen die door het gridsjabloon zijn gedefinieerd, inclusief de benoemde sjabloongebieden.
Lijn -1 markeert het einde van het expliciete grid, ook als plaatsing daarbuiten meer sporen maakt.

F

flex-basis
De eigenschap flex-basis levert de beginafmeting van een flexitem op de hoofdas voordat groei of krimp de ruimte verdeelt.
Een flex-basis van 180px levert de beginbreedte van de kaart, ook als de eigenschap width op 140px staat.
flex-grow
De eigenschap flex-grow geeft een item een relatief aandeel in positieve vrije ruimte nadat rekening is gehouden met flexbasisafmetingen en tussenruimtes.
Een flex-growwaarde van 2 geeft een kaart tweemaal de toegevoegde ruimte van een aangrenzende kaart met waarde 1.
flex-shrink
De eigenschap flex-shrink regelt ruimteverlies met een gewicht dat gelijk is aan de krimpfactor vermenigvuldigd met de basisafmeting van het item.
Twee gelijke flex-shrinkfactoren kunnen verschillende aantallen pixels wegnemen als de kaarten verschillende basisafmetingen hebben.
flexbox
Flexbox is een lay-outmethode die ruimte tussen items langs een hoofdrij of hoofdkolom verdeelt, waarbij de afmetingen van elke regel bij regelomloop onafhankelijk worden bepaald.
Met flexbox kunnen korte en lange bedieningselementen van een werkbalk één rij delen en bij beperkte ruimte naar een volgende regel lopen.
flexcontainer
Een flexcontainer is een box waarvan het flexweergavetype de directe kindelementen als flexitems langs een hoofdas rangschikt.
De navigatie wordt een flexcontainer, terwijl de geneste lijst met links een eigen lay-out kan hebben.
flexitem
Een flexitem is een directe kindbox in de documentstroom die deelneemt aan de flexlay-out van het ouderelement, met flexibele regels voor afmetingen en uitlijning.
Elke kaart is een flexitem van de buitenste rij en kan ook de eigen inhoud als kolom rangschikken.
flow-root
Flow-root is een displaywaarde die een blokbox met een eigen onafhankelijk stroomgebied maakt en zwevende kindelementen omsluit.
Flow-root op een omhullend profielelement met een zwevende foto houdt de rand van dat element rond de foto.
formuliergrid
Een formuliergrid gebruikt gedeelde sporen voor formulierinhoud, zoals één kolom voor labels en een andere voor de bijbehorende velden.
Een formuliergrid lijnt de velden uit, ook als één label veel langer is dan de labels in andere rijen.
fr-eenheid
De fr-eenheid vertegenwoordigt een aandeel van de gridruimte die na vaste sporen en tussenruimtes overblijft, rekening houdend met de afmetingsbeperkingen van de sporen.
Een kolom met de fr-eenheid krijgt flexibele ruimte nadat de zijbalk en kolomtussenruimtes zijn afgetrokken.

G

gap-eigenschap
De gap-eigenschap stelt tussenruimte in tussen lay-outitems of sporen; die maakt geen binnenruimte rond de buitenkant van de container.
Een gap van 12px houdt de bedieningselementen van de werkbalk uit elkaar zonder 12px rond de buitenranden van de werkbalk toe te voegen.
geneste lay-out
Een geneste lay-out is een binnenste indeling waarvan de container zelf een item in een buitenste lay-out is, zodat methoden kunnen worden gecombineerd.
Het paginagrid en de flexkolom van elke kaart vormen een geneste lay-out met afzonderlijke taken aan de buiten- en binnenkant.
gepositioneerd element
Een gepositioneerd element heeft een andere berekende positionwaarde dan static, waardoor positionele verschuivingen erop van toepassing zijn.
Een relatief gepositioneerd element kan de referentiebox voor een badge leveren zonder zelf te bewegen.
gridcel
Een gridcel is de ruimte waar één gridrij en één gridkolom elkaar kruisen, begrensd door hun omliggende lijnen.
Een bijschrift en een afbeelding kunnen één gridcel delen om zonder absolute positionering een bovenliggende laag te maken.
gridcontainer
Een gridcontainer is een box waarvan het gridweergavetype de directe kindelementen rangschikt met gedeelde rij- en kolomsporen.
De gridcontainer van het dashboard definieert kolommen die over meerdere rijen panelen uitgelijnd blijven.
gridgebied
Een gridgebied is een rechthoekig gebied van één of meer gridcellen dat een item kan bevatten of de plaatsing ervan kan begrenzen.
In een dashboard met een grid beslaat het gridgebied van een grafiek drie kolommen en twee rijen.
griditem
Een griditem is een directe kindbox in de documentstroom van een gridcontainer die automatisch of expliciet in gridsporen wordt geplaatst.
Een kaart is een griditem, ook als die een eigen flexlay-out gebruikt om de titel en knop te rangschikken.
gridlijn
Een gridlijn is een grens tussen of rond gridsporen, aangeduid met een nummer of naam om items te plaatsen.
Gridlijn 4 is de eindgrens wanneer een item vanaf lijn 1 de eerste drie kolommen beslaat.
gridspoor
Een gridspoor is één rij of kolom begrensd door twee aangrenzende gridlijnen, met een afmeting die door de afmetingsregels van het grid wordt bepaald.
Een vast gridspoor van 180px bevat de zijbalk, terwijl het aangrenzende fractionele spoor de rest inneemt.

H

herschikking (reflow)
Herschikking is het aanpassen van inhoud aan een smallere weergavebreedte, zodat die bruikbaar blijft zonder onnodig in twee richtingen te scrollen.
De controle op herschikking bij 320 CSS-pixels brengt een paneel met vaste breedte aan het licht dat de pagina opzij duwt.
hoofdas
De hoofdas is de richting waarin een flexcontainer de items plaatst, bepaald door flex-direction.
Bij een kolomrichting loopt de hoofdas verticaal en verdeelt justify-content de overgebleven hoogte.

I

impliciet grid
Het impliciete grid bestaat uit extra sporen die worden gegenereerd wanneer plaatsing ruimte buiten de expliciet gedefinieerde sporen nodig heeft.
De productlijst voegt impliciete gridrijen toe wanneer er nieuwe kaarten bijkomen, zonder het kolomsjabloon te veranderen.
inhoudskolom
Een inhoudskolom is een gebied met beperkte breedte voor leesbare pagina-inhoud, vaak gecentreerd met automatische inlinemarges en binnenruimte aan de zijkanten.
De gecentreerde inhoudskolom groeit niet verder op brede schermen en behoudt binnenruimte op smalle schermen.
inhoudsuitlijning
Inhoudsuitlijning positioneert de sporen van een grid of de flexregels als groep binnen hun container wanneer er ruimte over is.
Inhoudsuitlijning verplaatst drie vaste kolommen als één groep naar het midden van de gridcontainer.
inline-blockbox
Een inline-blockbox is een box die op een inlineregel blijft staan en tegelijk breedte, hoogte en verticale boxruimte accepteert.
Een navigatielink die als inline-blockbox is vormgegeven, kan een groter klikdoel met binnenruimte hebben.
inlinebox
Een inlinebox neemt deel aan een tekstregel en loopt met de tekst mee naar een volgende regel, in plaats van een hele blokregel in te nemen.
De link is een inlinebox binnen de zin, zodat de omliggende woorden dezelfde regel delen.
inlinerichting
De inlinerichting is de richting waarin tekst binnen een regel loopt, zoals van links naar rechts in het Nederlands of van rechts naar links in het Arabisch.
Een automatische marge aan het begin van de inlinerichting komt aan de rechterkant als de tekst Arabisch is.
inset-eigenschap
De verkorte inset-eigenschap stelt de positionele verschuivingen top, right, bottom en left in één declaratie in.
Een absoluut gepositioneerde bovenliggende laag met automatische afmetingen en inset op nul vult het omsluitende blok.
invoergroep
Een invoergroep combineert een veld met bijbehorende bedieningselementen, vaak met een flexibel invoerveld en een knop met natuurlijke afmetingen in één rij.
De invoergroep voor zoeken laat het veld krimpen terwijl de verzendknop binnen de container blijft.
isolation-eigenschap
De isolation-eigenschap is een CSS-instelling waarvan de waarde isolate een lokale stapelcontext maakt zonder de ondoorzichtigheid of positie van de box te veranderen.
Isolation houdt een decoratieve laag met een negatieve waarde boven de eigen achtergrond van een kaart en onder de tekst.
itemuitlijning
Itemuitlijning positioneert elk flex- of griditem binnen de ruimte die eraan is toegewezen, zoals een gridgebied of flexregel.
Itemuitlijning in een grid kan een smalle kaart binnen het spoor centreren zonder het spoor zelf te verplaatsen.

J

justify-content
De eigenschap justify-content verdeelt resterende ruimte op de hoofdas in flexbox of lijnt gridkolommen uit langs de inlineas.
Justify-content centreert een flexgroep alleen als de itemafmetingen en automatische marges er ruimte omheen overlaten.
justify-self
De eigenschap justify-self lijnt één griditem op de inlineas binnen het eigen gebied uit; die lijnt geen afzonderlijke flexitems uit.
Justify-self ingesteld op end verplaatst een gridbadge naar het inline-einde van het gebied zonder aangrenzende items te beïnvloeden.

K

klevende positionering (sticky positioning)
Klevende positionering houdt een box in de documentstroom en begrenst die vervolgens bij een verschuivingsdrempel terwijl de box binnen het omsluitende blok beweegt.
Klevende positionering houdt tabelkoppen zichtbaar totdat hun tabel het einde van het scrollgebied bereikt.

L

lay-outhulplaag (layout overlay)
Een lay-outhulplaag is een tekening van ontwikkelaarstools die de sporen en lijnen van een grid of de itemindeling van een flexcontainer zichtbaar maakt.
De lay-outhulplaag toont een hoofdflexitem dat naast een zijbalk breder is geworden dan zijn aandeel.
lay-outpatroon met een voettekst onderaan de pagina (sticky footer)
Een lay-outpatroon met een voettekst onderaan de pagina houdt een voettekst onderaan een korte pagina en laat die bij langere inhoud in de normale documentstroom op de inhoud volgen.
Het lay-outpatroon met een voettekst onderaan gebruikt een flexibele middelste rij in plaats van de voettekst uit de documentstroom te halen.

M

mediaobject
Een mediaobject is een componentpatroon met een afbeelding naast flexibele tekst, zoals een profiel, reactie of productregel.
Het mediaobject houdt een avatar van 64px naast een bericht, terwijl het bericht de resterende breedte gebruikt.
meerkolomslay-out
Een meerkolomslay-out laat één inhoudsstroom door opeenvolgende tekstkolommen lopen met behulp van een aantal of een gewenste kolombreedte.
Een meerkolomslay-out laat een lange begrippenlijst eerst omlaag door de eerste kolom en daarna verder in de tweede lopen.
minmax-functie
De minmax-functie geeft een gridspoor een minimale en maximale afmeting en combineert zo een ondergrens met ruimte om te groeien.
Met minmax en een minimum van nul kan een gelijke kolom smal blijven terwijl lange tekst daarbinnen afbreekt.

N

normale documentstroom
De normale documentstroom is de standaardindeling van boxen door de browser in bronvolgorde, waarbij blokken onder elkaar staan en inline-inhoud naar volgende regels loopt.
In de normale documentstroom schuiven latere alinea's omlaag als de tekst van een toegevoegde alinea groeit.

O

omsluitend blok
Een omsluitend blok is de referentierechthoek waarmee de afmetingen of verschuivingen van een box volgens de toepasselijke lay-outregels worden berekend.
De relatief gepositioneerde kaart levert het omsluitende blok van de absolute badge bij de binnenruimteranden van de kaart.
over de volle breedte (full bleed)
Over de volle breedte beschrijft inhoud die buiten een smallere tekstkolom doorloopt om de beschikbare breedte van de omliggende lay-out te vullen.
Een foto loopt over de volle breedte van het artikelgrid, terwijl de alinea's in het middelste spoor blijven.
overlopende inhoud (overflow)
Overlopende inhoud is inhoud die buiten het toegewezen gebied van een box uitsteekt en die met CSS zichtbaar, afgesneden of scrollbaar kan worden gemaakt.
De lange coderegel veroorzaakt horizontaal overlopende inhoud, die binnen een lokaal scrollend codeblok kan worden gehouden.
overspanning
Een overspanning bij plaatsing in een grid geeft aan hoeveel sporen een item vanaf een grens of een automatisch gekozen plaats beslaat.
De declaratie grid-column: 2 / span 3 geeft het paneel een overspanning van drie kolomsporen.

P

place-items
De verkorte eigenschap place-items stelt align-items en justify-items samen in en maakt zo itemuitlijning op twee assen in een grid beknopt.
Place-items ingesteld op center centreert een korte welkomstbox binnen het gridgebied van de hoofdsectie.

R

regelomloop van flexitems
Regelomloop van flexitems laat items naar extra flexregels gaan wanneer hun beginafmetingen niet op de huidige regel passen.
Door regelomloop van flexitems kan een lijst met labels op een tweede regel doorgaan, waarbij elke regel de eigen ruimte deelt.
relatieve positionering
Relatieve positionering verschuift waar een box wordt getekend en behoudt tegelijk de oorspronkelijke ruimte in de normale documentstroom.
Relatieve positionering verplaatst het label omlaag zonder de alinea erna te verplaatsen.

S

samenvallende marges
Samenvallende marges ontstaan wanneer bepaalde rakende verticale blokmarges in de normale documentstroom worden samengevoegd tot één marge.
Door samenvallende marges laten een ondermarge van 20px en een bovenmarge van 36px een tussenruimte van 36px over.
scroll-padding-top
De eigenschap scroll-padding-top reserveert bovenaan ruimte in het doelgebied van een scrollende box, wat nuttig is onder vaste kopteksten.
Scroll-padding-top op de pagina helpt een sectielink de kop onder de navigatiebalk in beeld te brengen.
stapelcontext
Een stapelcontext is een groep boxen die als één geheel wordt getekend bij vergelijking met andere groepen in de omliggende context.
De stapelcontext van de header blijft onder main, ook al heeft het menu een zeer hoog intern niveau.
stapelvolgorde
De stapelvolgorde is de volgorde waarin overlappende boxen worden getekend en bepaalt welke zichtbare delen vooraan verschijnen.
Het latere bijschrift verschijnt boven de afbeelding totdat een z-indexregel hun stapelvolgorde verandert.
subgrid
Subgrid laat een genest grid de sporen van het bovenliggende grid op een as overnemen, zodat onderdelen binnen aangrenzende componenten kunnen uitlijnen.
Een rijsubgrid geeft aangrenzende kaarten gedeelde grenzen voor titels, beschrijvingen en voetteksten.

T

tweedimensionale lay-out
Een tweedimensionale lay-out regelt rijen en kolommen samen, zodat items in beide richtingen grenzen kunnen delen, zoals in grid.
Een dashboard heeft een tweedimensionale lay-out nodig om panelen zowel tussen rijen als binnen kolommen uit te lijnen.

U

uitlijning op de basislijn
Uitlijning op de basislijn positioneert items met tekst zo dat hun tekstbasislijnen op één lijn staan ondanks verschillen in lettergrootte of boxhoogte.
Uitlijning op de basislijn laat een klein werkbalklabel natuurlijk aansluiten naast een grotere kop.

V

vaste positionering
Vaste positionering haalt een box uit de documentstroom en positioneert die normaal ten opzichte van de viewport terwijl het document scrolt.
Vaste positionering houdt de hulpknop in de hoek van het venster, tenzij een geschikt voorouderelement de referentie verandert.
verkorte flex-eigenschap
De verkorte flex-eigenschap combineert groei, krimp en basis, in die volgorde, om de flexibele afmeting van een item op de hoofdas te beschrijven.
De verkorte flex-eigenschap 0 0 180px geeft een zijbalk een basis van 180px zonder groei of krimp.
viewport
De viewport is het zichtbare venstergebied waardoor je een document bekijkt en wordt normaal gebruikt als referentie voor vaste positionering.
De knop om terug naar boven te gaan blijft 18px van de onderrand van de viewport terwijl het document scrolt.
visibility: hidden
Visibility: hidden is een zichtbaarheidsinstelling die een box verbergt en tegelijk de ruimte behoudt die de box in de lay-out inneemt.
Visibility: hidden reserveert ruimte voor het statusbericht, zodat latere tekst niet hoeft te verschuiven wanneer het bericht verschijnt.
vrije ruimte
Vrije ruimte is de ruimte op de hoofdas die overblijft nadat de beginafmetingen van de flexitems en de tussenruimtes van de container zijn afgetrokken.
Een werkbalk waarin na het meetellen van basisafmetingen en tussenruimtes 120px overblijft, geeft die vrije ruimte aan de groeiende bedieningselementen.

Z

z-index
De eigenschap z-index stelt binnen een stapelcontext een stapelniveau in voor een gepositioneerde box of een flex- of griditem.
Een hoge z-index op een uitklapmenu kan het nog steeds niet boven een hoger geplaatst zusterelement van de context van een voorouderelement tillen.
zwevende box (float)
Een zwevende box is een box die naar één kant van een container wordt verplaatst, zodat volgende inline-inhoud eromheen kan lopen.
Een links zwevende box laat de eerste regels van het artikel naast het portret lopen, waarna ze weer de volle breedte krijgen.

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