Svelte Button Group - Flowbite

Button groups are a Tailwind CSS powered set of buttons sticked together in a horizontal line

The button group component from flowbite-svelte can be used to stack together multiple buttons and links inside a single element.

Button groups are perfect for:

  • Segmented controls - choosing between mutually exclusive options
  • Toolbars - grouping related actions (text formatting, alignment)
  • View switchers - toggling between list, grid, or table views
  • Social sharing - organizing share buttons for different platforms
  • Pagination controls - previous, numbers, next buttons together
  • Filter groups - related filter options in a cohesive unit
  • Action menus - primary and secondary actions grouped logically
  • Navigation tabs - compact tab navigation for smaller spaces

Setup #

  • Svelte
<script lang="ts">
  import { ButtonGroup, Button } from "flowbite-svelte";
</script>

Default #

Use the following code to stack together buttons into a single group. Grouped buttons provide visual cohesion and make it clear that actions are related. The first and last buttons have rounded corners while middle buttons have square edges, creating a unified appearance.

This pattern is especially effective for:

  • Creating a visual hierarchy of related actions
  • Saving space by removing gaps between buttons
  • Improving scannability of available options
  • Reducing visual clutter in dense interfaces
  • Svelte
<ButtonGroup class="*:ring-primary-700!">
  <Button>Profile</Button>
  <Button>Settings</Button>
  <Button>Messages</Button>
</ButtonGroup>

Disabled #

Disable individual buttons within a group to indicate unavailable actions while maintaining the group’s visual integrity. This is useful for:

  • Conditional actions - showing options that aren’t currently available
  • Progressive disclosure - revealing actions as prerequisites are met
  • Permission-based UI - displaying actions user lacks permission for
  • State-dependent controls - disabling actions based on current state

Disabled buttons should remain visible to maintain predictable UI layout and help users understand all available options, even if temporarily unavailable.

  • Svelte
<ButtonGroup>
  <Button disabled>Profile</Button>
  <Button>Settings</Button>
  <Button>Messages</Button>
</ButtonGroup>

<ButtonGroup disabled>
  <Button>Profile</Button>
  <Button>Settings</Button>
  <Button>Messages</Button>
</ButtonGroup>

More examples #

Multiple button group variations demonstrating different color schemes and styles. Different visual treatments can:

  • Distinguish groups by purpose or importance
  • Match brand colors and design systems
  • Provide visual hierarchy between primary and secondary groups
  • Create emphasis for critical action groups
  • Support theming across light and dark modes

Choose color combinations that maintain sufficient contrast and clearly communicate the relationship between grouped buttons.

Pills
Standard buttons
Outline
Gradient with shadows
Dualtone gradient
Dualtone gradient pill
  • Svelte
<script lang="ts">
  import { ButtonGroup, Button, GradientButton } from "flowbite-svelte";
</script>

<div class="text-gray-900 dark:text-gray-100">
  <div class="py-4">Pills</div>
  <ButtonGroup class="space-x-px">
    <Button pill color="purple">Profile</Button>
    <Button pill color="purple">Settings</Button>
    <Button pill color="purple">Messages</Button>
  </ButtonGroup>
  <div class="py-4">Standard buttons</div>
  <ButtonGroup>
    <Button color="red">Profile</Button>
    <Button color="green">Settings</Button>
    <Button color="yellow">Messages</Button>
  </ButtonGroup>
  <div class="py-4">Outline</div>
  <ButtonGroup>
    <Button outline color="red">Profile</Button>
    <Button outline color="green">Settings</Button>
    <Button outline color="yellow">Messages</Button>
  </ButtonGroup>
  <div class="py-4">Gradient with shadows</div>
  <ButtonGroup>
    <GradientButton shadow color="green">Profile</GradientButton>
    <GradientButton shadow color="pink">Settings</GradientButton>
    <GradientButton shadow color="teal">Messages</GradientButton>
  </ButtonGroup>
  <div class="py-4">Dualtone gradient</div>
  <ButtonGroup class="space-x-px">
    <GradientButton color="purpleToBlue">Profile</GradientButton>
    <GradientButton color="cyanToBlue">Settings</GradientButton>
    <GradientButton color="greenToBlue">Messages</GradientButton>
  </ButtonGroup>
  <div class="py-4">Dualtone gradient pill</div>
  <ButtonGroup class="space-x-px">
    <GradientButton pill color="purpleToBlue">Profile</GradientButton>
    <GradientButton pill color="cyanToBlue">Settings</GradientButton>
    <GradientButton pill color="greenToBlue">Messages</GradientButton>
  </ButtonGroup>
</div>

Button group as links #

You can also use the button group component as links. Link-based button groups are ideal for:

  • Navigation menus - related navigation options
  • Category filters - linking to different filtered views
  • Language switchers - switching between locale versions
  • Tab navigation - navigating between different sections
  • Breadcrumb alternatives - showing hierarchical navigation paths

Using semantic <a> tags instead of buttons improves SEO and provides native browser navigation features like “open in new tab” and proper link handling.

  • Svelte
<ButtonGroup class="*:ring-primary-700!">
  <Button href="/">Profile</Button>
  <Button href="/">Settings</Button>
  <Button href="/">Messages</Button>
</ButtonGroup>

Group buttons with icons #

You can also use SVG icons inside the grouped buttons. Icons enhance button groups by:

  • Improving recognition - visual symbols are processed faster than text
  • Saving space - icons can replace or supplement text labels
  • Supporting internationalization - reducing text translation needs
  • Creating visual patterns - consistent icons help users scan quickly
  • Adding personality - unique icons reinforce brand identity

Best practices:

  • Use consistent icon style (outlined or filled)
  • Ensure icons clearly represent their actions
  • Combine with text labels when meaning isn’t obvious
  • Maintain adequate touch target size (minimum 44x44px)
  • Svelte
<script lang="ts">
  import { ButtonGroup, Button } from "flowbite-svelte";
  import { UserCircleSolid, AdjustmentsVerticalOutline, DownloadSolid } from "flowbite-svelte-icons";
</script>

<ButtonGroup class="*:ring-primary-700!">
  <Button>
    <UserCircleSolid class="me-2 h-4 w-4" />
    Profile
  </Button>
  <Button>
    <AdjustmentsVerticalOutline class="me-2 h-4 w-4" />
    Settings
  </Button>
  <Button>
    <DownloadSolid class="me-2 h-4 w-4" />
    Download
  </Button>
</ButtonGroup>

Outline #

Group a series of buttons together on a single line or stack them in a vertical column. Outline buttons provide a more subtle appearance that works well for:

  • Secondary actions - less emphasis than filled buttons
  • Dense interfaces - reducing visual weight
  • Light backgrounds - maintaining contrast without heavy fills
  • Multiple groups - distinguishing from primary action groups
  • Hover states - providing clear interactive feedback

Outline style maintains button hierarchy while keeping the interface feeling lighter and less cluttered.

  • Svelte
<ButtonGroup>
  <Button outline color="dark">Profile</Button>
  <Button outline color="dark">Settings</Button>
  <Button outline color="dark">Messages</Button>
</ButtonGroup>

Outline with icon #

Combine outline styling with icons for a refined, modern appearance. This combination is particularly effective in:

  • Toolbars - professional software interfaces
  • Media controls - playback, volume, settings
  • Text editors - formatting and editing tools
  • Dashboard controls - filtering and view options
  • Settings panels - configuration toggles

The outline style with icons strikes a balance between clarity and subtlety, making it ideal for frequently accessed controls that shouldn’t dominate the interface.

  • Svelte
<script lang="ts">
  import { ButtonGroup, Button } from "flowbite-svelte";
  import { UserCircleSolid, AdjustmentsVerticalOutline, DownloadSolid } from "flowbite-svelte-icons";
</script>

<ButtonGroup>
  <Button outline color="dark">
    <UserCircleSolid class="me-2 h-4 w-4" />
    Profile
  </Button>
  <Button outline color="dark">
    <AdjustmentsVerticalOutline class="me-2 h-4 w-4" />
    Settings
  </Button>
  <Button outline color="dark">
    <DownloadSolid class="me-2 h-4 w-4" />
    Download
  </Button>
</ButtonGroup>

Events #

You can add the onclick event to the Button component. Event handling allows you to:

  • Track interactions for analytics and metrics
  • Trigger actions like API calls or state updates
  • Provide feedback through toast notifications or modals
  • Implement toggles for segmented controls
  • Manage selections in button toggle groups

Each button in a group can have its own event handler, enabling sophisticated interaction patterns while maintaining visual cohesion.

  • Svelte
<script lang="ts">
  import { ButtonGroup, Button } from "flowbite-svelte";
  const handleClick = () => {
    alert("Clicked");
  };
</script>

<ButtonGroup class="*:ring-primary-700!">
  <Button onclick={handleClick}>Click me</Button>
  <Button>Settings</Button>
  <Button>Messages</Button>
</ButtonGroup>

Accessibility #

The Button Group component follows accessibility best practices:

  • Keyboard Navigation: All buttons are keyboard accessible using Tab and Enter/Space
  • Focus Indicators: Clear focus states show which button is selected
  • ARIA Roles: Use appropriate ARIA roles for button groups (like role="group")
  • Label Association: Ensure all buttons have clear, descriptive labels
  • Touch Targets: Maintain minimum 44x44px target size for mobile
  • Semantic HTML: Use <button> for actions, <a> for navigation
  • Screen Readers: Button text or aria-labels are properly announced

Best Practices #

When implementing button groups, consider these guidelines:

  • Limit Group Size: Keep groups to 3-5 buttons for optimal usability
  • Consistent Sizing: All buttons in a group should have the same height
  • Clear Labels: Use concise, action-oriented labels (1-3 words)
  • Logical Order: Arrange buttons in order of importance or workflow
  • Visual Separation: Use button groups to separate distinct action sets
  • Responsive Design: Consider stacking buttons vertically on mobile
  • Single Action: Only one button should trigger per click
  • Avoid Mixing: Don’t mix buttons and links in the same group
  • Color Consistency: Use consistent colors within each group
  • Active States: Clearly indicate which button is currently selected (for toggles)

Common Patterns #

Segmented Control: Single-select toggle where one button is always active

  • Text alignment (left, center, right)
  • View modes (list, grid, map)
  • Time ranges (day, week, month, year)

Toolbar: Multiple independent actions grouped together

  • Text formatting (bold, italic, underline)
  • Undo/redo controls
  • Zoom controls

Pagination: Sequential navigation controls

  • Previous, page numbers, next
  • First, previous, next, last
  • Load more patterns

Social Sharing: Multiple sharing options

  • Share to different platforms
  • Copy link, email, print options

Design Considerations #

  • Spacing: Buttons share borders, creating seamless appearance
  • Corner Radius: First and last buttons maintain rounded corners
  • Hover States: Individual buttons should respond to hover
  • Active States: Selected buttons need distinct visual treatment
  • Dividers: Consider adding subtle dividers between buttons
  • Orientation: Support both horizontal and vertical layouts
  • Responsive: Adapt layout for different screen sizes
  • Z-index: Manage layering for hover/focus states

See also #

Loading related links...

Component data #

The component has the following props, type, and default values. See types page for type information.

Loading...

References #

GitHub Links #

LLM Link #