Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Knappegruppe

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-button-group> – Knappegruppe / Button group

    Om komponenten

    Formål

    Visuell og semantisk gruppering av relaterte knapper, f.eks. "Avbryt"/"Lagre" eller flere "+ Legg til"-handlinger. Gruppen får role="group" og valgfri aria-label, slik at skjermlesere annonserer handlingene samlet.

    Egner seg for

    • Handlingsrader i dialoger og skjemaer, f.eks. "Avbryt"/"Lagre" eller "Tilbake"/"Neste".
    • Flere likeverdige handlingsknapper som bør annonseres samlet med role="group".
    • Med type="verktoylinje": en rad med mange kontroller der roving tabindex forbedrer tastaturnavigasjonen.
    • Med type="enkeltvalg": en segmentert bryter der nøyaktig ett av flere alternativer skal være valgt om gangen.

    Egner seg ikke for

    • En enkelt knapp uten reell gruppering.
    • Store, komplekse kontrollsett med blandede kontrolltyper (ikke bare knapper) - vurder en dedikert komponent i så fall.

    Bruk

    <script type="module" src="/designsystem/komponenter/handling/button-group/button-group.js"></script>
    
    <!-- Handlingsknapper nederst i en dialog - høyrestilt -->
    <lm-button-group align="end">
        <button type="button" command="close" commandfor="min-dialog">Avbryt</button>
        <button type="submit">Lagre</button>
    </lm-button-group>
    
    <!-- Flere likestilte "legg til"-knapper - venstrestilt (standard) -->
    <lm-button-group label="Legg til i turen">
        <button type="button" command="show-modal" commandfor="stopp-dialog">+ Legg til stopp</button>
        <button type="button" command="show-modal" commandfor="fly-dialog">+ Legg til fly</button>
    </lm-button-group>
    
    <!-- Segmentert bryter - APG Radio Group, kun ett valg om gangen -->
    <lm-button-group type="enkeltvalg" label="Visning">
        <button type="button" data-verdi="liste" aria-checked="true">Liste</button>
        <button type="button" data-verdi="kart">Kart</button>
    </lm-button-group>
    
    <!-- Verktøylinje med mange kontroller - APG Toolbar, roving tabindex -->
    <lm-button-group type="verktoylinje" label="Tekstformatering">
        <button type="button">Fet</button>
        <button type="button">Kursiv</button>
        <button type="button">Understreket</button>
    </lm-button-group>

    Prøv selv

    Rediger koden under - resultatet oppdateres live.

    Attributter

    Attributt Type Standard Beskrivelse
    align"start" | "end""start"Attributt. "end" høyrestiller knappene (dialog-handlinger). "start" (standard) venstrestiller dem og lar dem bryte over flere linjer.
    labelstringnullAttributt/property. Settes som aria-label på gruppen, når gruppens hensikt ikke er åpenbar av knappetekstene alene.
    type"gruppe" | "verktoylinje" | "enkeltvalg""gruppe"Attributt/property. "gruppe" (standard) gir kun role="group" og vanlig tab-rekkefølge. "verktoylinje" gir role="toolbar" med roving tabindex og piltast-navigasjon (Toolbar-mønsteret). "enkeltvalg" gir role="radiogroup" med knappene som role="radio" - kun én kan være valgt (segmentert bryter, Radio Group-mønsteret).

    Events

    Event Type Beskrivelse
    button-group:valgtCustomEventDispatches i type="enkeltvalg"-modus når en knapp velges (klikk eller piltast). detail.verdi er knappens data-verdi, eller tekstinnholdet hvis attributtet mangler.

    Slots

    Slot Beskrivelse
    (standard)To eller flere <button>-elementer (eller <a> stylet som knapp).

    Parts

    Part Beskrivelse
    gruppeIndre wrapper med role="group".

    Styling med ::part()

    Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:

    lm-button-group::part(gruppe) {
        /* egne stiler for "Indre wrapper med role="group"." */
    }

    Tilgjengelighet

    Den interne wrapperen får role="group" (standard), role="toolbar" (type="verktoylinje") eller role="radiogroup" (type="enkeltvalg"), og label kopieres til aria-label når attributtet er satt. I de to sistnevnte modusene styrer komponenten roving tabindex og piltast-navigasjon; i standardmodusen beholder slottede <button>/<a>-elementer bare native tastaturstøtte.

    • Den interne wrapperen får role="group"/"toolbar"/"radiogroup" avhengig av type, og label kopieres til aria-label når attributtet er satt.
    • Slottede <button>- og <a>-elementer beholder native tastaturstøtte i standardmodusen.
    • I type="verktoylinje": kun én knapp er i tab-rekkefølgen om gangen (roving tabindex); venstre/høyre (eller opp/ned) flytter fokus mellom knappene, Home/End hopper til første/siste - selve klikk-/aktiveringsatferden er uendret (Toolbar-mønsteret).
    • I type="enkeltvalg": knappene får role="radio" og aria-checked; piltaster flytter OG velger samtidig, slik at nøyaktig én knapp alltid er valgt (Radio Group-mønsteret).

    Detaljer

    • role="group" settes alltid, også uten label, fordi det gir tydeligere gruppering enn løse knapper i et vanlig <div> eller en <dialog>.
    • Native command/commandfor-attributter fungerer uendret på knappene; komponenten wrapper bare innholdet.

    Referanser

    Se også:

    Brukes av:

    • turer/index.html og turer/trip.html - erstatter tidligere .dialog-actions- og .legg-til-knapper-klassene i alle skjema-dialoger.
    • turer/trip.html - handlingsknappene ("Rediger tur"/arkiver-knapp) øverst på tur-siden.

    Avhengigheter: Ingen