Utilia

Flexbox- en grid-playground

Bouw flexbox- en CSS-grid-lay-outs visueel. Stel container en items in, benoem grid-gebieden, zie het resultaat live en kopieer nette CSS en HTML.

Voorinstellingen

Lay-out

Klik op een item in het voorbeeld om het te selecteren en de eigenschappen hieronder te bewerken.

Container
Items

Zo gebruik je de flexbox- en grid-playground

  1. Kies een Lay-out: Flexbox of Grid, of begin met een van de Voorinstellingen (Gecentreerd, Navigatiebalk, Kaarten die doorlopen, Zijbalk, Responsief kaartenraster, Holy grail, 12 kolommen).
  2. Stel de eigenschappen van de Container in. Voor flexbox: flex-direction en flex-wrap. Voor grid: grid-template-columns, grid-template-rows, grid-auto-flow, justify-items en grid-template-areas. Beide delen justify-content, align-items, align-content, row-gap (px) en column-gap (px).
  3. Beheer de Items met Item toevoegen, Geselecteerd item verwijderen en Geselecteerd item resetten. Klik op een item in het voorbeeld (of ga er met Tab naartoe en druk op Enter) om het te selecteren.
  4. Bewerk het geselecteerde item: order en align-self in beide modi, flex-grow, flex-shrink en flex-basis voor flexbox, en grid-area, grid-column, grid-row en justify-self voor grid.
  5. Kopieer de CSS-code en de bijbehorende HTML-code met hun knoppen Kopiëren.

Elk bedieningselement is een gewoon formulierveld, dus de hele playground werkt ook alleen met het toetsenbord. De CSS bevat alleen de eigenschappen die je ten opzichte van de standaardwaarden hebt gewijzigd, zodat ze kort blijft, en items met identieke instellingen delen één regel (.item als ze allemaal gelijk zijn).

Flexbox in het kort

Flexbox zet items langs één as. flex-direction bepaalt de hoofdas (een rij of een kolom); justify-content verdeelt de items erlangs (center, space-between…), en align-items plaatst ze op de dwarsas. Met flex-wrap: wrap gaan items die niet passen naar een nieuwe regel, en align-content verdeelt dan de ruimte tussen die regels.

Elk item heeft drie eigenschappen voor de grootte, meestal samen geschreven als flex:

  • flex-basis: de begingrootte (auto gebruikt de inhoud of de width);
  • flex-grow: hoeveel van de vrije ruimte het item inneemt (0 = niets, 1 = een gelijk deel);
  • flex-shrink: hoeveel het inlevert als er te weinig ruimte is (0 = krimpt nooit).

De voorinstelling Zijbalk toont het klassieke patroon: een zijbalk met flex-basis: 200px en flex-shrink: 0, en een hoofdgedeelte met flex-grow: 1.

CSS Grid in het kort

Grid zet items in twee dimensies. grid-template-columns: repeat(3, 1fr) maakt drie gelijke kolommen; fr is een deel van de vrije ruimte. repeat(auto-fill, minmax(120px, 1fr)) maakt zoveel kolommen van minstens 120px als er passen, wat een responsief kaartenraster oplevert zonder één media query.

Items vullen de cellen op volgorde, tenzij je ze plaatst: grid-column: span 2 maakt een item twee kolommen breed, en grid-column: 1 / -1 rekt het uit over de hele rij.

Met grid-template-areas teken je de lay-out met namen. Typ één rij per regel, bijvoorbeeld header header en dan nav main, en geef items grid-area: header of grid-area: main. Een punt staat voor een lege cel. Elke rij moet hetzelfde aantal cellen hebben en elke naam moet een rechthoek vormen; anders waarschuwt de tool je.

Veelgestelde vragen

Gebruik ik flexbox of grid?

Flexbox voor eendimensionale inhoud zoals werkbalken, groepen knoppen of iets centreren. Grid als rijen en kolommen op één lijn moeten liggen, zoals in paginalay-outs en kaartgalerijen. Ze gaan goed samen: een grid van kaarten waarvan de binnenkant flexbox gebruikt.

Waarom verandert align-items niets?

In een rij rekken items standaard uit tot de hoogte van de container, en de container is maar zo hoog als zijn inhoud. Geef hem een hoogte, of kijk naar het voorbeeld, dat een minimumhoogte heeft.

Wat doet gap?

Het bepaalt de ruimte tussen items (niet eromheen). Het werkt in alle actuele browsers, zowel in flexbox als in grid.

Verandert order de leesvolgorde?

Nee. order verplaatst items alleen visueel; schermlezers en toetsenbordnavigatie volgen nog steeds de volgorde in de HTML, dus gebruik het spaarzaam.

Moet ik de gegenereerde HTML-klassen houden?

Nee. De HTML-code is een eenvoudig startpunt met een container en items. Je kunt de klassennamen hernoemen, zolang je ze in de CSS-code op dezelfde manier aanpast.