Surfaces
Collapse
Collapse is the container that opens and closes a section of a page. It renders no trigger of its own, so anything can drive it - a button, a switch, a link, a piece of state - and one trigger can drive several sections at once. It animates the real size of its content rather than a guessed maximum, downwards or sideways, all the way or down to a peek that keeps the first few lines readable. The pace of the transition - one for each direction if they differ - the padding, the background and the fade are all parameters, the start and the end of each transition are reported back, the closed content is taken out of the tab order and the accessibility tree, and it can still be reached by find-in-page. Content that is expensive to build can be kept out of the DOM until the section is opened, or dropped again once it is closed.
Notes
The expand and collapse transition is motion, so it honors the reduced motion preference of the OS/browser (prefers-reduced-motion) by finishing at once instead of animating. If nothing on this page is animating, either turn the reduce motion setting off, use the ForceAnimation parameter, or turn on the ForceAnimation toggle at the top of this page. An explicit Duration - or ExpandDuration / CollapseDuration, or Delay - retunes the pace but is collapsed by the preference all the same: ForceAnimation is the one thing that opts out of it.
Usage
Every example is live. Open its code to see exactly what produced the component running underneath.
Basic
In this space, potential reigns supreme. It is a moment suspended in time, where imagination dances freely and each word has the power to transform into something extraordinary. Here lies the start of something new-an opportunity to craft, inspire, and create. Whether it's a tale of adventure, a reflection of truth, or an idea that sparks change, these lines are yours to fill, to shape, and to make uniquely yours. The journey begins here, in this quiet moment where everything is possible.
Binding & control
Horizontal
Collapsed size
In this space, potential reigns supreme. It is a moment suspended in time, where imagination dances freely and each word has the power to transform into something extraordinary. Here lies the start of something new-an opportunity to craft, inspire, and create.
Transition
Transition events
Padding & background
Overflow
Rendering
Find in page
Accessibility
Style & Class
RTL
API
Every parameter, public member, sub-class and enum this component exposes.
BitCollapse parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| Background | BitColorKind? | null | The color kind of the background of the collapse. |
| Body | RenderFragment? | null | Alias for the ChildContent parameter. |
| ChildContent | RenderFragment? | null | The content of the collapse. |
| Classes | BitCollapseClassStyles? | null | Custom CSS classes for different parts of the collapse. |
| CollapseDuration | int? | null | The duration of the collapse transition in ms, which overrides Duration while the collapse is closing and leaves the opening alone. |
| CollapsedSize | string? | null | The size the collapse keeps while it is collapsed, as any CSS length, which leaves a peek of the content on the page instead of closing it all the way. It is a width instead of a height while Horizontal is on. |
| DefaultExpanded | bool? | null | The default value of the Expanded parameter, applied once at initialization and only while Expanded itself has not been set. |
| Delay | int? | null | The delay of the expand/collapse transition in ms. |
| Duration | int? | null | The duration of the expand/collapse transition in ms. Leaving it unset keeps the duration of the motion theme. A value set here is still collapsed to nothing by the reduced motion preference, which only ForceAnimation opts out of. It is what OnExpanded, OnCollapsed, NoClip, HiddenUntilFound and UnmountOnCollapse wait for. |
| Easing | string? | null | The timing function of the expand/collapse transition, as any CSS easing value. |
| ExpandDuration | int? | null | The duration of the expand transition in ms, which overrides Duration while the collapse is opening and leaves the closing alone. |
| Expanded | bool | false | Determines whether the collapse is expanded or collapsed. |
| ExpandedChanged | EventCallback<bool> | The callback of the two-way binding of the Expanded parameter, raised with the new state. | |
| HiddenUntilFound | bool | false | Hands the closed content to the browser as hidden="until-found", so find-in-page and a navigation to a fragment inside the section reach into it and open it. Such a collapse ignores LazyRender and UnmountOnCollapse, since the content has to stay in the DOM to be found, and one that cannot open - disabled, or with a one-way Expanded - is not offered to find-in-page at all. |
| Horizontal | bool | false | Collapses the content along the inline axis instead of the block one, so it opens sideways from the start edge. |
| LabelledBy | string? | null | The id of the element that names the content region of the collapse, rendered as aria-labelledby. |
| LazyRender | bool | false | Keeps the content out of the DOM until the collapse is expanded for the first time. A collapse that keeps a CollapsedSize or is searchable through HiddenUntilFound ignores it. |
| NoAnimation | bool | false | Removes the expand/collapse transition, so the content appears and disappears at once. |
| NoClip | bool | false | Stops clipping the content once the collapse has finished opening, so a focus ring, a shadow or a menu that reaches past the edges of the section is drawn in full. The clipping is put back the moment the collapse starts closing. |
| NoFade | bool | false | Removes the fade of the content, leaving the size on its own to open and close the collapse. |
| NoPadding | bool | false | Removes the padding the collapse puts around its content. |
| OnChange | EventCallback<bool> | Callback that is called when the Expanded value has changed by the component itself. | |
| OnCollapsed | EventCallback | Callback that is called once the collapse has finished closing, which is the end of the collapse transition. | |
| OnCollapsing | EventCallback | Callback that is called as the collapse starts closing, which is the start of the collapse transition. | |
| OnExpanded | EventCallback | Callback that is called once the collapse has finished opening, which is the end of the expand transition. | |
| OnExpanding | EventCallback | Callback that is called as the collapse starts opening, which is the start of the expand transition. | |
| Role | string? | null | The ARIA role of the content region of the collapse, which is region by default. An empty string renders no role at all. |
| Styles | BitCollapseClassStyles? | null | Custom CSS styles for different parts of the collapse. |
| UnmountOnCollapse | bool | false | Takes the content back out of the DOM once the collapse has closed, after the transition has had time to finish. A collapse that keeps a CollapsedSize or is searchable through HiddenUntilFound ignores it. |
BitCollapse public members
| Name | Type | Default value | Description |
|---|---|---|---|
| ContentId | string | The id of the content element of the collapse, which is the id of the root element with -content after it, so a trigger elsewhere on the page can point its aria-controls at the section it opens. | |
| CollapseAsync | Task | Collapses the collapse, reporting the change through ExpandedChanged and OnChange. | |
| ExpandAsync | Task | Expands the collapse, reporting the change through ExpandedChanged and OnChange. | |
| FocusAsync | ValueTask | Moves the focus to the content region of the collapse, which is worth pairing with OnExpanded so the focus lands once the section has finished opening. | |
| ToggleAsync | Task | Flips the collapse between expanded and collapsed, reporting the change through ExpandedChanged and OnChange. |
BitComponentBase parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| AriaLabel | string? | null | Gets or sets the accessible label for the component, used by assistive technologies. |
| Class | string? | null | Gets or sets the CSS class name(s) to apply to the rendered element. |
| Dir | BitDir? | null | Gets or sets the text directionality for the component's content. |
| ForceAnimation | bool | false | Gets or sets a value indicating whether the component's animations play at their full duration even when reduced motion is requested. |
| HtmlAttributes | Dictionary<string, object> | new Dictionary<string, object>() | Captures additional HTML attributes to be applied to the rendered element, in addition to the component's parameters. |
| Id | string? | null | Gets or sets the unique identifier for the component's root element. |
| IsEnabled | bool | true | Gets or sets a value indicating whether the component is enabled and can respond to user interaction. |
| Style | string? | null | Gets or sets the CSS style string to apply to the rendered element. |
| TabIndex | string? | null | Gets or sets the tab order index for the component when navigating with the keyboard. |
| Visibility | BitVisibility | BitVisibility.Visible | Gets or sets the visibility state (visible, hidden, or collapsed) of the component. |
BitComponentBase public members
| Name | Type | Default value | Description |
|---|---|---|---|
| UniqueId | Guid | Guid.NewGuid() | Gets the readonly unique identifier for the component's root element, assigned when the component instance is constructed. |
| RootElement | ElementReference | Gets the reference to the root HTML element associated with this component. |
BitCollapseClassStyles properties
| Name | Type | Default value | Description |
|---|---|---|---|
| Root | string? | null | Custom CSS classes/styles for the root element of the BitCollapse. |
| Expanded | string? | null | Custom CSS classes/styles for the root element of the BitCollapse in the expanded state. |
| Collapsed | string? | null | Custom CSS classes/styles for the root element of the BitCollapse in the collapsed state. |
| Content | string? | null | Custom CSS classes/styles for the content region of the BitCollapse, which is the element that fades between the two states and clips what is outside the collapsed size. |
| Wrapper | string? | null | Custom CSS classes/styles for the wrapper the BitCollapse puts around its content, which is the element that carries the padding. |
BitColorKind enum
| Name | Value | Description |
|---|---|---|
| Primary | 0 | The primary color kind. |
| Secondary | 1 | The secondary color kind. |
| Tertiary | 2 | The tertiary color kind. |
| Transparent | 3 | The transparent color kind. |
BitVisibility enum
| Name | Value | Description |
|---|---|---|
| Visible | 0 | The content of the component is visible. |
| Hidden | 1 | The content of the component is hidden, but the space it takes on the page remains (visibility:hidden). |
| Collapsed | 2 | The component is hidden (display:none). |
BitDir enum
| Name | Value | Description |
|---|---|---|
| Ltr | 0 | Ltr (left to right) is to be used for languages that are written from the left to the right (like English). |
| Rtl | 1 | Rtl (right to left) is to be used for languages that are written from the right to the left (like Arabic). |
| Auto | 2 | Auto lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then applies that directionality to the whole element. |
Feedback
Found a mistake, a gap, or something that could be clearer? Every page and every component is one click from its source.