13 KiB
templateEngineOverride, layout, title, description, toc
| templateEngineOverride | layout | title | description | toc | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| njk | layouts/page.njk | Button Group | A container that groups related buttons together with consistent styling. |
|
{% from "dropdown-menu.njk" import dropdown_menu %} {% from "popover.njk" import popover %} {% from "select.njk" import select %} {% from "macros/code_preview.njk" import code_preview %} {% from "macros/code_block.njk" import code_block %}
{% set code_default %}
{{ code_preview("button-group-default", code_default | prettyHtml) }}
Usage
Wrap related buttons or inputs in a <div role="group" class="button-group"> element. Add aria-label or aria-labelledby when the group purpose is not already clear from nearby text.
Use data-orientation="vertical" to stack items vertically. Use <hr role="separator"> to visually divide non-outline buttons. Use button-group-text for static text inside a group.
{% set code_simple %}
Accessibility
- Use
role="group"on thebutton-groupcontainer. - Use
aria-labeloraria-labelledbyto label groups whose purpose is not obvious. - Keyboard navigation remains native: users tab through each button, input, select, dropdown trigger, or popover trigger.
Button Group vs Toggle Group
- Use Button Group for related actions, such as archive/report/snooze.
- Use Toggle Group when each item controls selected/on state.
Examples
Orientation
Use data-orientation="vertical" to stack buttons vertically.
{% set code_orientation %}
{{ code_preview("button-group-orientation", code_orientation | prettyHtml) }}
Size
{% set code_size %}
{{ code_preview("button-group-size", code_size | prettyHtml) }}
Nested
{% set code_nested %}
{{ code_preview("button-group-nested", code_nested | prettyHtml) }}
Separator
Use <hr role="separator"> to visually divide buttons within a group.
{% set code_separator %}
Paste
{{ code_preview("button-group-separator", code_separator | prettyHtml) }}
Split
Use a separator to create a split action with a primary action and a secondary menu trigger.
{% set code_split %}
{% set trigger_split %} {% lucide "chevron-down" %} {% endset %} {% call dropdown_menu( trigger=trigger_split, trigger_attrs={"class": "btn-icon-secondary", "aria-label": "More save options"}, popover_attrs={"data-align": "end"} ) %}
{{ code_preview("button-group-split", code_split | prettyHtml) }}
Input
{% set code_input %}
{{ code_preview("button-group-input", code_input | prettyHtml) }}
Input Group
{% set code_input_group %}
{{ code_preview("button-group-input-group", code_input_group | prettyHtml) }}
Dropdown Menu
{% set code_dropdown_menu %}
{{ code_preview("button-group-dropdown-menu", code_dropdown_menu | prettyHtml) }}
Select
{% set code_select %}
{% lucide "arrow-right" %}
{{ code_preview("button-group-select", code_select | prettyHtml) }}
Popover
{% set code_popover %}
Start a new task with Copilot
Describe your task in natural language. Copilot will work in the background and open a pull request for your review.
{{ code_preview("button-group-popover", code_popover | prettyHtml) }}
RTL
Button groups support right-to-left layouts through logical border and radius rules. Add dir="rtl" to the group or an ancestor. Directional icons should be flipped explicitly.
{% set code_rtl %}
{{ code_preview("button-group-rtl", code_rtl | prettyHtml) }}