|
| 1 | +# Container |
| 2 | + |
| 3 | +Visuele groepering van gerelateerde content met achtergrond, border en optionele schaduw. |
| 4 | + |
| 5 | +## Doel |
| 6 | + |
| 7 | +Container biedt een afgebakend kader voor content die visueel bij elkaar hoort. Het component combineert een `bg-elevated` achtergrond, een subtiele border en een optionele `box-shadow` tot een herkenbaar geheel. Container is puur visueel — het heeft geen eigen semantische rol en laat de keuze van het HTML-element aan de gebruiker over via de `as` prop. |
| 8 | + |
| 9 | +<!-- VOORBEELD --> |
| 10 | + |
| 11 | +## Use when |
| 12 | + |
| 13 | +- Gerelateerde componenten visueel groeperen (formuliersecties, kaarten, panelen). |
| 14 | +- Een duidelijke grens nodig is tussen content en pagina-achtergrond. |
| 15 | +- Je een kaart-achtig element wilt met een lichte schaduw (`elevated`). |
| 16 | +- Layout componenten (Stack, Grid) een visueel kader geven in een pagina of demo. |
| 17 | + |
| 18 | +## Don't use when |
| 19 | + |
| 20 | +- Je alleen witruimte nodig hebt tussen secties — gebruik Stack of Grid met de juiste spacing tokens. |
| 21 | +- Het element navigatie, een formulier of andere semantisch geladen structuur is — geef dan de juiste HTML-semantiek aan de parent zelf mee. |
| 22 | +- Je een kleurrijke statusachtergrond wilt — gebruik Alert of Note. |
| 23 | + |
| 24 | +## Best practices |
| 25 | + |
| 26 | +### `as` prop |
| 27 | + |
| 28 | +| Waarde | Wanneer | |
| 29 | +| ----------------- | --------------------------------------------------------- | |
| 30 | +| `'div'` (default) | Generieke groepering zonder extra semantische betekenis | |
| 31 | +| `'section'` | Benoemde inhoudssectie met een heading als label | |
| 32 | +| `'article'` | Zelfstandig herbruikbaar stuk content (kaart, nieuwsitem) | |
| 33 | +| `'aside'` | Tangentieel aanvullende content naast de hoofdinhoud | |
| 34 | + |
| 35 | +### Elevated |
| 36 | + |
| 37 | +Gebruik `elevated` alleen als de Container visueel boven de pagina zweeft — zoals een dropdown-panel, een card in een raster of een demo-wrapper in Storybook. Gebruik het niet voor alle containers, want schaduw werkt op contrast: hoe minder schaduwen, hoe meer impact. |
| 38 | + |
| 39 | +### Nesting |
| 40 | + |
| 41 | +Container kan andere layout-componenten bevatten (Stack, Grid). Container regelt de buitenkant (achtergrond, border, padding), Stack of Grid regelen de binnenste spacing. |
| 42 | + |
| 43 | +## Design tokens |
| 44 | + |
| 45 | +| Token | Beschrijving | |
| 46 | +| ------------------------------------- | ------------------------------------------ | |
| 47 | +| `--dsn-container-background-color` | Achtergrond — `neutral.bg-elevated` | |
| 48 | +| `--dsn-container-border-color` | Borderkleur — `neutral.border-subtle` | |
| 49 | +| `--dsn-container-border-radius` | Afronding — `border.radius.md` (8px) | |
| 50 | +| `--dsn-container-border-width` | Breedte — `border.width.thin` (1px) | |
| 51 | +| `--dsn-container-box-shadow` | Standaard geen schaduw (`none`) | |
| 52 | +| `--dsn-container-color` | Tekstkleur — `neutral.color-document` | |
| 53 | +| `--dsn-container-padding-block` | Verticale padding — `space.block.3xl` | |
| 54 | +| `--dsn-container-padding-inline` | Horizontale padding — `space.inline.3xl` | |
| 55 | +| `--dsn-container-elevated-box-shadow` | Schaduw elevated variant — `box-shadow.sm` | |
| 56 | + |
| 57 | +## Accessibility |
| 58 | + |
| 59 | +Container voegt geen ARIA-rollen of labels toe. Gebruik de `as` prop voor semantisch correcte HTML. Bij `as="section"` of `as="aside"` met een heading: voeg zelf `aria-labelledby` toe aan de Container en koppel het aan het `id` van de heading. |
0 commit comments