Stack
Stack er en layout-primitiv for å stable innhold i én dimensjon — vertikalt eller horisontalt. Den fungerer både som custom element (<ix-stack>) og som CSS-klasse (.ix-stack).
Egnet til
- Stable seksjoner, kort eller elementer loddrett med jevnt mellomrom
- Plassere ikoner, etiketter og knapper side om side horisontalt
- Bygge opp sammensatte layout-strukturer ved å neste stacks
Uegnet til
- Todimensjonal layout — bruk CSS Grid og grid-utilities
- Komplekst innholdsoppsett som artikler og dashboard-views
Kom i gang
ix-stack har md gap som standard. Bruk gap-attributtet (eller prop) for å overstyre.
Kode
<VStack> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 1</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 2</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 3</div> </VStack>
Kode
<HStack> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 1</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 2</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Element 3</div> </HStack>
Eksempler
Vertikal — align
Kode
<HStack gap="lg"> <VStack gap="sm" align="start"> <strong>start (standard)</strong> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> <div className="ix-color-surface-info-default ix-px-xl ix-py-2xs">Bred</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> </VStack> <VStack gap="sm" align="center"> <strong>center</strong> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> <div className="ix-color-surface-info-default ix-px-xl ix-py-2xs">Bred</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> </VStack> <VStack gap="sm" align="end"> <strong>end</strong> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> <div className="ix-color-surface-info-default ix-px-xl ix-py-2xs">Bred</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Smal</div> </VStack> </HStack>
Horisontal — align
Kode
<VStack gap="lg"> <div> <strong>center (standard)</strong> <HStack gap="sm" align="center"> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-lg">Høy</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> </HStack> </div> <div> <strong>start</strong> <HStack gap="sm" align="start"> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-lg">Høy</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> </HStack> </div> <div> <strong>end</strong> <HStack gap="sm" align="end"> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-lg">Høy</div> <div className="ix-color-surface-info-default ix-px-sm ix-py-2xs">Lav</div> </HStack> </div> </VStack>
Gap
Standard gap er md. Bruk gap-prop/-attributt for å overstyre.
Kode
<VStack gap="lg"> <HStack gap="xs"> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">A</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">B</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">C</div> </HStack> <HStack> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">A</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">B</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">C</div> </HStack> <HStack gap="xl"> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">A</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">B</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">C</div> </HStack> <HStack gap="none"> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">A</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">B</div> <div className="ix-color-surface-info-default ix-px-md ix-py-2xs">C</div> </HStack> </VStack>
Universell utforming
Hva du selv må sørge for
- Bruk semantiske elementer når konteksten krever det —
ix-stacker et ukjent HTML-element uten semantisk rolle. Nettleseren behandler det som generisk blokkinnhold, på samme måte som<div>. Brukas-prop i React (f.eks.<HStack as="nav">) eller CSS-klasser direkte på et native element når innholdet krever semantikk.
På native elementer (ikke <ix-stack>) virker ikke attributter — bruk modifier-klasser:
<!-- CSS-klasse på semantisk element — modifier-klasser styrer retning og gap -->
<section class="ix-stack ix-gap-md">
<h2>Seksjonstittel</h2>
<p>Innhold her.</p>
</section>
<!-- Tilsvarende med <ix-stack> — her bruker du attributter i stedet for klasser -->
<ix-stack gap="md">...</ix-stack>
WCAG-kriterier
Sist gjennomgått: 2026-05-11 — alle 56 WCAG 2.2-kriterier vurdert
WCAG-kriterier3 ditt ansvar · 0 håndtert · 53 ikke relevant · 0 ikke på plass
Ditt ansvar (3)
| Kriterium | Nivå | Hva du må gjøre |
|---|---|---|
| 1.3.1 Informasjon og relasjoner | A | Bruk semantiske elementer når konteksten krever det. ix-stack er et ukjent HTML-element uten semantisk rolle — tilsvarende <div>. Nettleseren injiserer ingen ARIA. Bruk et semantisk native element med ix-stack-*-klasser (eller as-prop i React) når innholdet krever det — f.eks. <nav class="ix-stack-horizontal"> for navigasjonslenker, <ul class="ix-stack"> for lister. |
| 1.3.2 Meningsfull rekkefølge | A | Pass på DOM-rekkefølgen ved reverse-layout. ix-stack[reverse] snur den visuelle rekkefølgen uten å endre DOM-rekkefølgen. Skjermlesere og tastaturnavigasjon følger DOM. Bruk reverse kun der det gir mening uavhengig av presentasjon — aldri for å rette opp feil i innholdsrekkefølgen. |
| 2.4.3 Fokusrekkefølge | A | Pass på DOM-rekkefølgen ved reverse-layout. ix-stack[reverse] snur den visuelle rekkefølgen uten å endre DOM-rekkefølgen. Skjermlesere og tastaturnavigasjon følger DOM. Bruk reverse kun der det gir mening uavhengig av presentasjon — aldri for å rette opp feil i innholdsrekkefølgen. |
Ikke relevant (53)
| Kriterium | Nivå | Hvorfor ikke relevant |
|---|---|---|
| 1.1.1 Ikke-tekstlig innhold | A | Ingen bilder eller ikke-tekstlig innhold i selve layout-elementet. |
| 1.2.1 Bare lyd og bare video (forhåndsinnspilt) | A | Ingen medieelementer. |
| 1.2.2 Teksting (forhåndsinnspilt) | A | Ingen medieelementer. |
| 1.2.3 Synstolking eller mediealternativ (forhåndsinnspilt) | A | Ingen medieelementer. |
| 1.2.4 Teksting (direkte) | AA | Ingen medieelementer. |
| 1.2.5 Synstolking (forhåndsinnspilt) | AA | Ingen medieelementer. |
| 1.3.3 Sensoriske egenskaper | A | Ingen sensoriske karakteristikker brukes for å formidle informasjon. |
| 1.3.4 Visningsretning | AA | Ingen orientasjonslåsing. |
| 1.3.5 Identifiser formål med inndata | AA | Ingen skjemafelt. |
| 1.4.1 Bruk av farge | A | Farge brukes ikke for å formidle informasjon. |
| 1.4.2 Styring av lyd | A | Ingen lyd. |
| 1.4.3 Kontrast (minimum) | AA | Ingen tekst i selve layout-elementet. |
| 1.4.4 Endre tekststørrelse | AA | Ingen tekst i komponenten. Layout bruker relative enheter og skalerer korrekt. |
| 1.4.5 Bilder av tekst | AA | Ingen bilder av tekst. |
| 1.4.10 Omflyt | AA | Flex-layout med wrap flyter naturlig ved smal viewport. |
| 1.4.11 Kontrast for ikke-tekstlig innhold | AA | Ingen UI-komponenter med krav til ikke-tekstlig kontrast. |
| 1.4.12 Tekstavstand | AA | Ingen tekst i selve elementet. |
| 1.4.13 Innhold ved hover eller fokus | AA | Ingen hover/fokus-innhold. |
| 2.1.1 Tastatur | A | Rent layout-element — ikke fokuserbart. |
| 2.1.2 Ingen tastaturfelle | A | Ingen fokus-felle. |
| 2.1.4 Tastatursnarveier | A | Ingen hurtigtaster. |
| 2.2.1 Justerbar hastighet | A | Ingen tidsfrister. |
| 2.2.2 Pause, stopp, skjul | A | Ingen bevegelig eller autooppdatert innhold. |
| 2.3.1 Terskelverdi på tre glimt | A | Ingen blinking eller flimring. |
| 2.4.1 Hoppe over blokker | A | Ingen blokker som må hoppes over. |
| 2.4.2 Sidetitler | A | Ikke en side-komponent. |
| 2.4.4 Formål med lenke (i kontekst) | A | Ingen lenker i komponenten. |
| 2.4.5 Flere måter | AA | Ikke en navigasjonsstruktur. |
| 2.4.6 Overskrifter og ledetekster | AA | Ingen overskrifter eller labeler i komponenten. |
| 2.4.7 Synlig fokus | AA | Ikke fokuserbar. |
| 2.4.11 Fokus ikke skjult (minimum) | AA | Ikke fokuserbar. |
| 2.5.1 Pekerbevegelser | A | Ingen peker-gester. |
| 2.5.2 Avbryt peker | A | Ingen peker-kanselleringslogikk. |
| 2.5.3 Label i navn | A | Ingen synlig label. |
| 2.5.4 Bevegelsesaktivering | A | Ingen bevegelsesbasert aktivering. |
| 2.5.6 Samtidige inndatamekanismer | A | Ingen begrensning på input-modalitet. |
| 2.5.7 Drabevegelser | A | Ingen draing-funksjonalitet. |
| 2.5.8 Målstørrelse (minimum) | AA | Ikke et interaktivt mål. |
| 3.1.1 Språk på siden | A | Ikke en side-komponent. |
| 3.1.2 Språk på deler av innhold | AA | Ingen språkendringer. |
| 3.2.1 Ved fokus | A | Ikke fokuserbar. |
| 3.2.2 Ved inndata | A | Ingen input. |
| 3.2.3 Konsistent navigasjon | AA | Ingen navigasjon. |
| 3.2.4 Konsistent identifikasjon | AA | Ingen gjentagende komponenter med inkonsistent identifisering. |
| 3.2.6 Konsistent hjelp | A | Ingen hjelp-funksjonalitet. |
| 3.3.1 Identifikasjon av feil | A | Ingen skjemavalidering. |
| 3.3.2 Ledetekster eller instruksjoner | A | Ingen skjemafelt. |
| 3.3.3 Forslag ved feil | AA | Ingen feilforslag. |
| 3.3.4 Forhindring av feil (juridisk, økonomisk, data) | AA | Ingen juridisk forpliktende handlinger. |
| 3.3.7 Redundant oppføring | A | Ingen redundant input. |
| 3.3.8 Tilgjengelig autentisering (minimum) | AA | Ingen tilgjengelighetsautentisering. |
| 4.1.2 Navn, rolle, verdi | A | Ikke et interaktivt element — ingen rolle, navn eller tilstand å eksponere. |
| 4.1.3 Statusmeldinger | AA | Ingen statusmeldinger. |
Props / API
HStack
| Prop | Type | Standard | Beskrivelse |
|---|---|---|---|
as | ElementType | Rendrer et native element med CSS-klasser i stedet for <ix-stack> med attributter. Bruk for semantikk — f.eks. as="nav". | |
align | 'start' | 'center' | 'end' | 'center' | Kryssaksejustering av barn |
gap | GapSize | 'md' | Avstand mellom barn |
className | string | Ekstra CSS-klasser | |
ref | Ref<HTMLElement> | Ref til rotelementet |
Støtter alle standard HTML-attributter for det rendrede elementet (id, style, data-* osv.).
VStack
| Prop | Type | Standard | Beskrivelse |
|---|---|---|---|
as | ElementType | Rendrer et native element med CSS-klasser i stedet for <ix-stack> med attributter. Bruk for semantikk — f.eks. as="ul". | |
align | 'start' | 'center' | 'end' | 'start' | Kryssaksejustering av barn |
gap | GapSize | 'md' | Avstand mellom barn |
className | string | Ekstra CSS-klasser | |
ref | Ref<HTMLElement> | Ref til rotelementet |
Støtter alle standard HTML-attributter for det rendrede elementet (id, style, data-* osv.).
Tilpasning med CSS
Stack-komponentene har ingen egne CSS custom properties. Bruk ix-justify-* og ix-items-* utility-klasser for ytterligere tilpasning:
<ix-stack horizontal gap="md" class="ix-justify-between">
<div>Venstre</div>
<div>Høyre</div>
</ix-stack>
Relatert
- Flex utility-klasser —
ix-justify-*,ix-items-*,ix-flex-* - Gap utility-klasser —
ix-gap-*,ix-row-gap-*,ix-col-gap-* - Spacing tokens — størrelser tilgjengelig for gap
- Layout-mønstre — overordnet veiledning om Flex vs Grid