Button Group
Joined actions and polished segmented controls with single or multiple selection.
Presets
Curated looks for c2-button-group. Open any card in the studio to start from it. Use the built-in segmented appearance for a polished single-selection track, or theme the joined appearance through its button variables.
<c2-button-group client:only="lit">
<c2-button>Save</c2-button>
<c2-button>Publish</c2-button>
<c2-button>Archive</c2-button>
</c2-button-group><style>
.outlined {
--c2-button-group--border: 1px solid var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group__divider--color: var(--c2-theme--color-outline, #d4d4d8);
--c2-button__container--background-color: transparent;
--c2-button__container--color: color-mix(in srgb, var(--c2-theme--color-on-surface, #18181b) 82%, var(--c2-theme--color-surface, #ffffff));
--c2-button__container__hover--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__hover--color: var(--c2-theme--color-on-surface, #18181b);
--c2-button__container__active--background-color: var(--c2-theme--color-outline-variant, #e4e4e7);
}
</style>
<c2-button-group client:only="lit" class="outlined">
<c2-button>Save</c2-button>
<c2-button>Publish</c2-button>
<c2-button>Archive</c2-button>
</c2-button-group><c2-button-group client:only="lit" appearance="segmented" value="board">
<c2-button value="list">List</c2-button>
<c2-button value="board">Board</c2-button>
<c2-button value="calendar">Calendar</c2-button>
</c2-button-group><style>
.wide-segmented {
width: 360px;
max-width: 100%;
--c2-button-group__indicator--background-color: var(--c2-theme--color-primary-container, #edf1fe);
--c2-button-group__indicator--border: 1px solid light-dark(#c7d6ff, #11255f);
--c2-button-group__segmented-item__selected--color: var(--c2-theme--color-primary, #0265dc);
}
</style>
<c2-button-group client:only="lit" class="wide-segmented" appearance="segmented" size="l" stretched value="month">
<c2-button value="day">Day</c2-button>
<c2-button value="week">Week</c2-button>
<c2-button value="month">Month</c2-button>
</c2-button-group><style>
.accent {
--c2-button-group--border: 1px solid #d4d4d8;
--c2-button-group__divider--color: #d4d4d8;
--c2-button__container--background-color: #ffffff;
--c2-button__container--color: #3f3f46;
--c2-button__container__hover--background-color: #f4f4f5;
--c2-button__container__hover--color: #18181b;
--c2-button__container__selected--background-color: #0265dc;
--c2-button__container__selected--color: var(--c2-theme--color-on-fill, #ffffff);
--c2-button__container__selected--border: 1px solid #0265dc;
}
</style>
<c2-button-group client:only="lit" class="accent" selection="single" value="week">
<c2-button value="day">Day</c2-button>
<c2-button value="week">Week</c2-button>
<c2-button value="month">Month</c2-button>
</c2-button-group><style>
.pills {
--c2-button-group--gap: 4px;
--c2-button-group--border-radius: 999px;
--c2-button__container--height: 30px;
--c2-button__container--padding-left: 8px;
--c2-button__container--padding-right: 8px;
--c2-button__container--font-size: 12px;
--c2-button__container--border: 1px solid var(--c2-theme--color-outline-variant, #e4e4e7);
--c2-button__container--background-color: var(--c2-theme--color-surface, #ffffff);
--c2-button__container--color: color-mix(in srgb, var(--c2-theme--color-on-surface, #18181b) 74%, var(--c2-theme--color-surface, #ffffff));
--c2-button__container__hover--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__hover--color: var(--c2-theme--color-on-surface, #18181b);
--c2-button__container__selected--background-color: var(--c2-theme--color-inverse-surface, #18181b);
--c2-button__container__selected--color: var(--c2-theme--color-on-primary, #ffffff);
--c2-button__container__selected--border: 1px solid var(--c2-theme--color-inverse-surface, #18181b);
}
</style>
<c2-button-group client:only="lit" class="pills" selection="multiple" value="design,frontend">
<c2-button value="design">Design</c2-button>
<c2-button value="frontend">Frontend</c2-button>
<c2-button value="backend">Backend</c2-button>
<c2-button value="ops">Ops</c2-button>
</c2-button-group><style>
.compact {
--c2-button-group--border: 1px solid var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group__divider--color: var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group--border-radius: 4px;
--c2-button__container--height: 28px;
--c2-button__container--padding-left: 10px;
--c2-button__container--padding-right: 10px;
--c2-button__container--font-size: 12px;
--c2-button__container--background-color: var(--c2-theme--color-surface, #ffffff);
--c2-button__container--color: color-mix(in srgb, var(--c2-theme--color-on-surface, #18181b) 82%, var(--c2-theme--color-surface, #ffffff));
--c2-button__container__hover--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__selected--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__selected--color: var(--c2-theme--color-on-surface, #18181b);
}
</style>
<c2-button-group client:only="lit" class="compact" selection="single" value="10">
<c2-button value="10">10</c2-button>
<c2-button value="25">25</c2-button>
<c2-button value="50">50</c2-button>
<c2-button value="100">100</c2-button>
</c2-button-group><style>
.vertical {
--c2-button-group--border: 1px solid var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group__divider--color: var(--c2-theme--color-outline, #d4d4d8);
--c2-button__container--background-color: var(--c2-theme--color-surface, #ffffff);
--c2-button__container--color: color-mix(in srgb, var(--c2-theme--color-on-surface, #18181b) 82%, var(--c2-theme--color-surface, #ffffff));
--c2-button__container__hover--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__hover--color: var(--c2-theme--color-on-surface, #18181b);
--c2-button-group__item--flex: 1 1 0;
width: 140px;
}
</style>
<c2-button-group client:only="lit" class="vertical" orientation="vertical">
<c2-button>Zoom in</c2-button>
<c2-button>Zoom out</c2-button>
<c2-button>Reset</c2-button>
</c2-button-group><style>
.vertical-segmented {
--c2-button-group__segmented--padding: 4px;
--c2-button-group__segmented--gap: 4px;
--c2-button-group__segmented--background-color: var(--c2-theme--color-outline-variant, #e4e4e7);
--c2-button-group__indicator--border: 1px solid var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group__indicator--box-shadow: 0 2px 6px rgba(24, 24, 27, 0.18);
--c2-button-group__indicator--transition-duration: 320ms;
}
</style>
<c2-button-group client:only="lit" class="vertical-segmented" appearance="segmented" orientation="vertical" size="m" value="list" aria-label="View layout">
<c2-icon-button value="list" aria-label="List view">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M8 6h13M8 12h13M8 18h13"></path><path d="M3 6h.01M3 12h.01M3 18h.01"></path></svg>
</c2-icon-button>
<c2-icon-button value="grid" aria-label="Grid view">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1"></rect><rect x="14" y="3" width="7" height="7" rx="1"></rect><rect x="3" y="14" width="7" height="7" rx="1"></rect><rect x="14" y="14" width="7" height="7" rx="1"></rect></svg>
</c2-icon-button>
</c2-button-group><style>
.full {
width: 300px;
max-width: 100%;
--c2-button-group__item--flex: 1 1 0;
--c2-button-group--border: 1px solid var(--c2-theme--color-outline, #d4d4d8);
--c2-button-group__divider--color: var(--c2-theme--color-outline, #d4d4d8);
--c2-button__container--background-color: var(--c2-theme--color-surface, #ffffff);
--c2-button__container--color: color-mix(in srgb, var(--c2-theme--color-on-surface, #18181b) 82%, var(--c2-theme--color-surface, #ffffff));
--c2-button__container__hover--background-color: var(--c2-theme--color-surface-container, #f4f4f5);
--c2-button__container__selected--background-color: var(--c2-theme--color-primary-container, #edf1fe);
--c2-button__container__selected--color: var(--c2-theme--color-primary, #0265dc);
}
</style>
<c2-button-group client:only="lit" class="full" selection="single" value="no">
<c2-button value="yes">Yes</c2-button>
<c2-button value="no">No</c2-button>
<c2-button value="maybe">Maybe</c2-button>
</c2-button-group>