Accordion

Accordions are vertically stacked, expandable panels that allow users to show and hide content. They support single or multiple expansion modes, keyboard navigation, lazy content loading, and accessibility features per WAI-ARIA Accordion Pattern.

Basic Usage

A simple accordion with multiple items. Click on a header to expand or collapse the panel.

razor
<FodAccordion>
    <FodAccordionItem Title="Section 1">
        <p>This is the content for section 1.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Section 2">
        <p>This is the content for section 2.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Section 3">
        <p>This is the content for section 3.</p>
    </FodAccordionItem>
</FodAccordion>

Expansion Modes

Accordions support two modes: Single (only one item expanded at a time) and Multiple (multiple items can be expanded simultaneously).

Single Mode (Default)

Expanding one item automatically collapses others.

When you expand Panel B or C, this panel will automatically collapse.

Multiple Mode

Multiple items can be expanded simultaneously.

This panel can stay open while you expand others.

Multiple panels can be open at the same time.

razor
<FodAccordion Mode="AccordionMode.Single">
    <FodAccordionItem Title="Panel A">Content A</FodAccordionItem>
    <FodAccordionItem Title="Panel B">Content B</FodAccordionItem>
</FodAccordion>

<FodAccordion Mode="AccordionMode.Multiple">
    <FodAccordionItem Title="Panel X">Content X</FodAccordionItem>
    <FodAccordionItem Title="Panel Y">Content Y</FodAccordionItem>
</FodAccordion>

Default Expanded

Use DefaultExpanded to specify which items should be expanded on initial render.

Pre-expanded Item

This section is expanded by default to show important introductory content immediately.

razor
<FodAccordion>
    <FodAccordionItem Title="Getting Started" DefaultExpanded="true">
        <p>This section is expanded by default.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Advanced Topics">
        <p>Users can expand this when ready.</p>
    </FodAccordionItem>
</FodAccordion>

Disabled State

Accordion items can be disabled to prevent user interaction.

Disabled Items

razor
<FodAccordion>
    <FodAccordionItem Title="Available Section">
        <p>This section can be expanded.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Locked Section (Premium)" Disabled="true">
        <p>This content is not accessible.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Coming Soon" Disabled="true">
        <p>This feature is not yet available.</p>
    </FodAccordionItem>
</FodAccordion>

Supporting Text

Add secondary descriptive text below the title to provide more context about each section.

With Supporting Text

razor
<FodAccordion>
    <FodAccordionItem Title="Personal Information"
                      SupportingText="Name, email, and contact details">
        <p>Enter your personal information here.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Shipping Address"
                      SupportingText="Where should we deliver your order?">
        <p>Provide your shipping address.</p>
    </FodAccordionItem>
</FodAccordion>

Custom Title Template

Use TitleTemplate to render custom content in the accordion header instead of plain text.

Custom Headers

razor
<FodAccordion>
    <FodAccordionItem Title="Notifications">
        <Icon>
            <FodIcon Icon="IconName.Notification"/>
        </Icon>
        <ChildContent>
            <p>You have 3 unread notifications.</p>
        </ChildContent>
    </FodAccordionItem>
    <FodAccordionItem Title="Settings">
        <Icon>
            <FodIcon Icon="IconName.Settings"/>
        </Icon>
        <ChildContent>
            <p>Manage your settings.</p>
        </ChildContent>
    </FodAccordionItem>
</FodAccordion>

Lazy Content Loading

Use LazyContent to defer rendering of heavy content until the item is first expanded. The content is rendered once and preserved.

Deferred Content Loading

This content renders immediately with the component.

razor
<FodAccordion>
    <FodAccordionItem Title="Immediate Content">
        <p>This content renders immediately.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="Lazy Loaded Content">
        <LazyContent>
            <p>This only renders when first expanded.</p>
            <HeavyComponent />
        </LazyContent>
    </FodAccordionItem>
</FodAccordion>

Keyboard Navigation

Accordions support full keyboard navigation following WAI-ARIA patterns for accessibility.

Keyboard Shortcuts

  • Tab: Move focus into/out of the accordion
  • Arrow Down: Move focus to the next accordion header
  • Arrow Up: Move focus to the previous accordion header
  • Home: Move focus to the first accordion header
  • End: Move focus to the last accordion header
  • Enter / Space: Toggle the focused accordion item

Try keyboard navigation:

razor
<FodAccordion>
    <FodAccordionItem Title="First Item">Content</FodAccordionItem>
    <FodAccordionItem Title="Second Item">Content</FodAccordionItem>
    <FodAccordionItem Title="Third Item" Disabled="true">Skipped</FodAccordionItem>
    <FodAccordionItem Title="Fourth Item">Content</FodAccordionItem>
</FodAccordion>

Two-way Binding

Use two-way binding with bind-Expanded to programmatically control and respond to expansion state changes.

Controlled Expansion

This panel's state is controlled via @bind-Expanded.

Current state: Expanded

razor
<FodButton OnClick="() => isExpanded = !isExpanded">
    Toggle Panel
</FodButton>

<FodAccordion Mode="AccordionMode.Multiple">
    <FodAccordionItem Title="Controlled Panel" @bind-Expanded="isExpanded">
        <p>Current state: @(isExpanded ? "Expanded" : "Collapsed")</p>
    </FodAccordionItem>
</FodAccordion>

@code {
    private bool isExpanded = false;
}

Practical Example: FAQ

A real-world example showing an FAQ section with supporting text and structured content.

Frequently Asked Questions

razor
<FodAccordion>
    <FodAccordionItem Title="What is Blazor?"
                      SupportingText="Learn about the framework">
        <p>Blazor is a web framework using C# and HTML.</p>
    </FodAccordionItem>
    <FodAccordionItem Title="How do I get started?"
                      SupportingText="Quick start guide">
        <ol>
            <li>Install .NET SDK</li>
            <li>Create project</li>
            <li>Start building!</li>
        </ol>
    </FodAccordionItem>
</FodAccordion>

API Reference - FodAccordion

FodAccordion container component properties.

No properties defined.

API Reference - FodAccordionItem

FodAccordionItem component properties.

No properties defined.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.