Skip to content
# ActionButton ## Description ActionButton is the lightweight, icon-first flavor of button: a transparent box with a colorized icon and plain text, made for inline commands like New, Edit, or Share. It renders as a native button or, given an Href, as a link with hardened navigation attributes, and ships with a full loading state (AutoLoading with double-click protection, loading label, delayed spinner) and accessible disabled and loading semantics. ## Parameters | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | AllowDisabledFocus | `bool` | false | Keeps the disabled action button focusable and discoverable by assistive technologies, conveying the disabled state using aria-disabled instead of the native disabled attribute. | | AriaDescription | `string?` | null | Detailed description of the button for the benefit of screen readers, rendered as visually hidden text beside the button and read after its name. An aria-describedby written on the component by hand is kept and this description is added to it. | | AriaHidden | `bool` | false | If true, adds an aria-hidden attribute instructing screen readers to ignore the button. | | AutoFocus | `bool` | false | If true, the action button automatically receives focus when the page renders (rendered as the autofocus attribute). | | AutoLoading | `bool` | false | If true, enters the loading state automatically while awaiting the OnClick event and prevents subsequent clicks by default. | | ButtonType | `BitButtonType` | null | The type of the button element; defaults to submit inside an EditForm otherwise button. | | Body | `RenderFragment?` | null | Alias for ChildContent, the custom body of the action button (text and/or any render fragment). | | ChildContent | `RenderFragment?` | null | The custom body of the action button (text and/or any render fragment). | | Classes | `BitActionButtonClassStyles?` | null | Custom CSS classes for the root, icon, content, loading label, and spinner of the action button. | | Color | `BitColor?` | null | The color role of the action button. At rest it paints the icon and the spinner while the text keeps the neutral foreground; on hover and press it takes over the text as well, and it also picks the focus ring color. | | Download | `string?` | null | The value of the download attribute of the link rendered by the button when the Href parameter is provided. Instructs the browser to download the linked resource instead of navigating to it, using the provided value (if any) as the suggested file name. | | EditContext | `EditContext?` | null | The EditContext, which is set if the button is inside an EditForm. The value is coming from the cascading value provided by the EditForm. | | FormId | `string?` | null | The id of the form element that the action button is associated with (rendered as the form attribute). Allows a submit/reset button to be placed outside of its form element. | | FullWidth | `bool` | false | Stretches the action button across the full available width. The icon and the content stay next to each other with IconPosition.Start; IconPosition.End reverses the inner wrapper, so the growing content pushes them to the opposite edges. | | Href | `string?` | null | The value of the href attribute of the link rendered by the button. If provided, the component will be rendered as an anchor tag instead of button. | | Icon | `BitIconInfo?` | null | Gets or sets the icon to display using custom CSS classes for external icon libraries. Takes precedence over IconName when both are set. | | IconName | `string?` | null | Gets or sets the name of the icon to display from the built-in Fluent UI icons. | | IconOnly | `bool` | false | Gets or sets a value indicating whether only the icon is displayed, without accompanying text. The button then takes the square shape of an icon button, so give it an AriaLabel: with the content dropped it has no text left to name it with. | | IconPosition | `BitIconPosition?` | null | Gets or sets the position of the icon relative to the component's content. | | IconUrl | `string?` | null | The url of a custom image to render as the icon of the action button, used when neither Icon nor IconName is set. | | IsLoading | `bool` | false | Determines whether the action button is in loading mode or not (two-way bindable). | | LoadingDelay | `int` | 0 | The delay in milliseconds before the loading indicator appears after entering the loading state, useful to avoid a spinner flash for fast operations. The click-guard of the loading state applies immediately regardless of this delay. | | LoadingLabel | `string?` | null | The text to show next to the spinner while the action button is in the loading state, replacing the button body. It is also announced by screen readers through a status live region when the loading state starts. | | LoadingTemplate | `RenderFragment?` | null | The custom template used to replace the default loading indicator inside the action button in the loading state. | | NoWrap | `bool` | false | Keeps the content of the action button on a single line and ends it with an ellipsis where it does not fit. It has no effect on a button left to hug its content, which is never narrower than its text. | | OnClick | `EventCallback<MouseEventArgs>` | | Gets or sets the callback that is invoked when the component is clicked. | | Reclickable | `bool` | false | Enables re-clicking the action button while it is in the loading state. By default, clicks are ignored while the button is loading to protect against double submissions. | | Rel | `BitLinkRels?` | null | Gets or sets the relationship type between the current element and the linked resource, as defined by the link's rel attribute. | | Size | `BitSize?` | null | Sets the preset size (Small, Medium, Large) for typography and padding of the action button. | | StopPropagation | `bool` | false | If true, stops the propagation of the click event to the parent elements. Useful when the action button is placed inside clickable containers like rows or cards. | | Styles | `BitActionButtonClassStyles?` | null | Gets or sets the custom CSS inline styles to apply to the action button component. | | Target | `string?` | null | Gets or sets the name of the target frame or window for the navigation action when the action button renders as an anchor (by providing the Href parameter). When set to _blank and no opener-related Rel is provided, noopener is added to the rel attribute automatically. | | Title | `string?` | null | The tooltip to show when the mouse is placed on the button. | | Underlined | `bool` | false | Underlines the text of the action button, which thickens on hover, for the link-style use inside running text. | | 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. | ## Public Members | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | FocusAsync | `ValueTask` | | Gives focus to the root element of the action button. | | 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. | ## Enums ### BitButtonType Enum | Name | Value | Description | | :--- | :--- | :---------- | | Button | 0 | The button is a clickable button. | | Submit | 1 | The button is a submit button (submits form-data). | | Reset | 2 | The button is a reset button (resets the form-data to its initial values). | ### BitColor Enum | Name | Value | Description | | :--- | :--- | :---------- | | Primary | 0 | Info Primary general color. | | Secondary | 1 | Secondary general color. | | Tertiary | 2 | Tertiary general color. | | Info | 3 | Info general color. | | Success | 4 | Success general color. | | Warning | 5 | Warning general color. | | SevereWarning | 6 | SevereWarning general color. | | Error | 7 | Error general color. | | PrimaryBackground | 8 | Primary background color. | | SecondaryBackground | 9 | Secondary background color. | | TertiaryBackground | 10 | Tertiary background color. | | PrimaryForeground | 11 | Primary foreground color. | | SecondaryForeground | 12 | Secondary foreground color. | | TertiaryForeground | 13 | Tertiary foreground color. | | PrimaryBorder | 14 | Primary border color. | | SecondaryBorder | 15 | Secondary border color. | | TertiaryBorder | 16 | Tertiary border color. | ### BitSize Enum | Name | Value | Description | | :--- | :--- | :---------- | | Small | 0 | The small size button. | | Medium | 1 | The medium size button. | | Large | 2 | The large size button. | ### BitIconPosition Enum | Name | Value | Description | | :--- | :--- | :---------- | | Start | 0 | Icon renders before the content (default). | | End | 1 | Icon renders after the content. | ### BitLinkRels Enum | Name | Value | Description | | :--- | :--- | :---------- | | Alternate | 1 | Provides a link to an alternate representation of the document. (i.e. print page, translated or mirror) | | Author | 2 | Provides a link to the author of the document. | | Bookmark | 4 | Permanent URL used for bookmarking. | | External | 8 | Indicates that the referenced document is not part of the same site as the current document. | | Help | 16 | Provides a link to a help document. | | License | 32 | Provides a link to licensing information for the document. | | Next | 64 | Provides a link to the next document in the series. | | NoFollow | 128 | Links to an unendorsed document, like a paid link. ("NoFollow" is used by Google, to specify that the Google search spider should not follow that link) | | NoOpener | 256 | Requires that any browsing context created by following the hyperlink must not have an opener browsing context. | | NoReferrer | 512 | Makes the referrer unknown. No referrer header will be included when the user clicks the hyperlink. | | Prev | 1024 | The previous document in a selection. | | Search | 2048 | Links to a search tool for the document. | | Tag | 4096 | A tag (keyword) for the current document. | | Me | 8192 | Indicates that the linked document represents the person who owns the current content. (used for identity verification) | | Opener | 16384 | Requires that any browsing context created by following the hyperlink keeps its opener browsing context. (reverses the implicit noopener modern browsers apply to _blank targets) | | PrivacyPolicy | 32768 | Links to the privacy policy that applies to the current document. (rendered as privacy-policy) | | Sponsored | 65536 | Marks the link as an advertisement or paid placement, so search engines do not count it as an organic endorsement. | | TermsOfService | 131072 | Links to the terms of service that apply to the current document. (rendered as terms-of-service) | | Ugc | 262144 | Marks the link as user-generated content, like forum posts or comments, for search engines. | ### 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. | ## Sub Classes ### BitActionButtonClassStyles Properties Defines per-part CSS class/style values for BitActionButton. | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | Root | `string?` | null | Custom class or style applied to the root element of the BitActionButton. | | Icon | `string?` | null | Custom class or style applied to the icon element of the BitActionButton (the glyph, or the image rendered for IconUrl). | | Content | `string?` | null | Custom class or style applied to the content container of the BitActionButton. | | LoadingLabel | `string?` | null | Custom class or style applied to the loading label element of the BitActionButton. | | Spinner | `string?` | null | Custom class or style applied to the loading spinner element of the BitActionButton. | ### BitIconInfo Properties | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | Name | `string?` | null | Gets or sets the name of the icon. | | BaseClass | `string?` | null | Gets or sets the base CSS class for the icon. For built-in Fluent UI icons, this defaults to "bit-icon". For external icon libraries like FontAwesome, you might set this to "fa" or leave empty. | | Prefix | `string?` | null | Gets or sets the CSS class prefix used before the icon name. For built-in Fluent UI icons, this defaults to "bit-icon--". For external icon libraries, you might set this to "fa-" or leave empty. | ## CSS Variables Public CSS custom properties read off the component's root. Set one on `:root` to restyle every instance, on any ancestor to restyle the ones inside it, or on the `Style` of one instance. | Name | Default Value | Description | | :--- | :------------ | :---------- | | `--bit-ActionButton-color` | --bit-clr-fg-pri | Text color in the rest state, where the role color reaches the icon alone. The hover and pressed states paint the text through their own override variables, so this one does not apply there. | | `--bit-ActionButton-icon-color` | The Color role's main color | Icon and spinner color at rest. | | `--bit-ActionButton-hover-color` | The Color role's hover color | Text and icon color while hovered (pointer devices only). | | `--bit-ActionButton-active-color` | The Color role's active color | Text and icon color while pressed. | | `--bit-ActionButton-disabled-color` | --bit-clr-fg-dis (text), the Color role's disabled text color (icon) | Text and icon color when IsEnabled is false; also the focus ring color of a disabled button kept focusable with AllowDisabledFocus. | | `--bit-ActionButton-focus-color` | The Color role's focus color | Color of the keyboard focus ring. | | `--bit-ActionButton-background` | transparent | Background at rest, and the fallback of the two state backgrounds below. | | `--bit-ActionButton-hover-background` | --bit-ActionButton-background | Background while hovered. A translucent tint of the role color, such as color-mix(in srgb, var(--bit-clr-pri) 12%, transparent), gives the Material-style state layer. | | `--bit-ActionButton-active-background` | --bit-ActionButton-hover-background | Background while pressed. | | `--bit-ActionButton-radius` | --bit-shp-radius-button | Corner radius of the box, which the backgrounds and the focus ring follow. | | `--bit-ActionButton-min-height` | Per Size: --bit-siz-ctrl-sm / -md / -lg | Smallest height of the box, which is what lines an action button up with the other controls of its size and keeps the smallest one above the 24px minimum pointer target of WCAG 2.2. It is a floor, not a height: a wrapped label still grows the box. Set it to 0 for a button that has to sit on the line of the running text around it. | | `--bit-ActionButton-padding` | Per Size: the control's y padding and one step below the standalone button's x padding | Padding of the box. Set it to 0 for a button that sits flush inside running text or a table cell. | | `--bit-ActionButton-gap` | spacing(1) | Room between the icon (or spinner) and the content. | | `--bit-ActionButton-font-size` | Per Size: --bit-tpg-fs-xs / -sm / -md | Font size of the text and the loading label. | | `--bit-ActionButton-icon-size` | Per Size: --bit-siz-icon-sm / -md / -lg | Size of the icon, the IconUrl image and the spinner, which share one slot so entering the loading state moves nothing. | ## Examples \n**Basic**: ```razor Create account Disabled No icon Inbox (3 unread) ``` \n**IconPosition**: ```razor Start (default) End ``` \n**Href**: ```razor Open bitplatform.dev in a new tab Go to bitplatform GitHub Download the logo Download with a custom file name nofollow nofollow & noreferrer ``` \n**ButtonType**: ```razor
Submit Reset Button
Submit from outside the form @if (formIsValidSubmit) { The form submitted successfully. } ``` ```csharp public class ButtonValidationModel { [Required] public string RequiredText { get; set; } = string.Empty; public string? NonRequiredText { get; set; } } private bool formIsValidSubmit; private ButtonValidationModel buttonValidationModel = new(); private async Task HandleValidSubmit() { formIsValidSubmit = true; await Task.Delay(2000); buttonValidationModel = new(); formIsValidSubmit = false; } private void HandleInvalidSubmit() { formIsValidSubmit = false; } ``` \n**FullWidth & NoWrap**: ```razor
Settings Notifications Privacy
Notifications, sounds and background activity Notifications, sounds and background activity
``` \n**Loading**: ```razor Save changes Send message AutoLoading LoadingLabel LoadingDelay Guarded (@guardedClickCount) Reclickable (@reclickableClickCount) Download Downloading... ``` ```csharp private bool isLoading; private bool templateIsLoading; private int guardedClickCount; private int reclickableClickCount; private async Task HandleAutoLoadingClick() { await Task.Delay(2000); } private async Task HandleGuardedClick() { guardedClickCount++; await Task.Delay(2000); } private async Task HandleReclickableClick() { reclickableClickCount++; await Task.Delay(2000); } ``` \n**Underlined**: ```razor Link style Open GitHub More info

Everything here is covered by the terms of service , which you accept by continuing.

``` \n**Events**: ```razor Click me (@clickCounter)
Row clicks: @rowClickCount | Button clicks: @innerClickCount Bubbles up StopPropagation
``` ```csharp private int clickCounter; private int rowClickCount; private int innerClickCount; ``` \n**Accessibility**: ```razor Hover me Download the brand guidelines Disabled (skipped by Tab) Disabled (still focusable) Focus the next button Focus lands here ``` ```csharp private BitActionButton focusTargetRef = default!; ``` \n**Cascading parameters**: ```razor Takes the icon position, the underline, and the target from the cascade So does this one, without repeating any of it Its own Underlined, the cascaded rest Outside the cascade, and back to the defaults ``` ```csharp private readonly BitActionButtonParams[] actionButtonParams = [ new() { Underlined = true, IconPosition = BitIconPosition.End, Target = "_blank", } ]; ``` \n**Color**: ```razor Primary Primary Secondary Secondary Tertiary Tertiary Info Info Success Success Warning Warning SevereWarning SevereWarning Error Error
PrimaryBackground PrimaryBackground SecondaryBackground SecondaryBackground TertiaryBackground TertiaryBackground
PrimaryForeground PrimaryForeground SecondaryForeground SecondaryForeground TertiaryForeground TertiaryForeground PrimaryBorder PrimaryBorder SecondaryBorder SecondaryBorder TertiaryBorder TertiaryBorder Primary Secondary Tertiary Info Success Warning SevereWarning Error
PrimaryBackground SecondaryBackground TertiaryBackground
PrimaryForeground SecondaryForeground TertiaryForeground PrimaryBorder SecondaryBorder TertiaryBorder ``` \n**External Icons**: ```razor House (Icon=@@("fa-solid fa-house")) Heart (Icon="@@BitIconInfo.Css("fa-solid fa-heart")") GitHub (Icon="@@BitIconInfo.Fa("fa-brands fa-github")") Rocket (Icon="@@BitIconInfo.Fa("solid rocket")") House (Icon=@@("bi bi-house-fill")) Heart (Icon="@@BitIconInfo.Css("bi bi-heart-fill")") GitHub (Icon="@@BitIconInfo.Bi("github")") Gear (Icon="@@BitIconInfo.Bi("gear-fill")") bit platform Large, click to load ``` \n**Size**: ```razor Small Medium Large ``` \n**Style & Class**: ```razor Action Button Styles Action Button Classes (Hover me) Colored text, custom icon color Hover me for a state layer Big icon, wide gap, no padding
New Edit Share Delete
``` \n**RTL**: ```razor
ساخت حساب ادامه
```