pub fn FloatingButton(props: FloatingButtonProps) -> impl IntoViewExpand description
Elevated floating control for the single most important action on a screen.
Rounded-square icon-only by default with elevated surface styling. Pin to a viewport corner with FloatingButtonConfig::fixed. Set config.variant to [FloatingButtonVariant::Circular] for a full circle, or [FloatingButtonVariant::Extended] for icon plus label with the same rounded-square corners.
§When to use
- One primary action that should stay visible above page content - Back-to-top and similar floating affordances built on the same base
§Usage
- Provide an icon or extended label via
children. 2. Setaria_labelfor icon-only buttons. 3. Useconfig.fixed(right, bottom)when the button should float on the viewport.
§Best Practices
§Do’s
- Use one floating primary action per screen for the most important command * Provide a descriptive
aria_labelwhen no visible text is shown
§Don’ts
- Do not use floating buttons for secondary or destructive actions without clear labeling
§Examples
§Default
Rounded-square icon-only floating button with primary emphasis.
use crate::FloatingButton;
view! {
<div data-testid="floating-button-preview">
<FloatingButton aria_label="Add".to_string() icon=icondata::AiPlusOutlined />
</div>
}§Extended
Extended variant includes a visible text label beside the icon.
use crate::{FloatingButton, FloatingButtonConfig, FloatingButtonVariant};
use leptos::prelude::*;
view! {
<div data-testid="floating-button-extended">
<FloatingButton
config=FloatingButtonConfig { variant: FloatingButtonVariant::Extended.into(), ..Default::default() }
aria_label="Navigate".to_string()
icon=icondata::AiCompassOutlined
>
"Navigate"
</FloatingButton>
</div>
}§Size
Compare small, medium, and large icon-only sizes.
use crate::{FloatingButton, FloatingButtonConfig, FloatingButtonSize, Stack, StackConfig, FlexGap};
use leptos::prelude::*;
view! {
<div data-testid="floating-button-size">
<Stack config=StackConfig::horizontal(FlexGap::Medium)>
<FloatingButton
config=FloatingButtonConfig { size: FloatingButtonSize::Small.into(), ..Default::default() }
aria_label="Add small".to_string()
icon=icondata::AiPlusOutlined
/>
<FloatingButton
config=FloatingButtonConfig { size: FloatingButtonSize::Medium.into(), ..Default::default() }
aria_label="Add medium".to_string()
icon=icondata::AiPlusOutlined
/>
<FloatingButton aria_label="Add large".to_string() icon=icondata::AiPlusOutlined />
</Stack>
</div>
}§Secondary color
Secondary treatment for less prominent floating actions.
use crate::{FloatingButton, FloatingButtonColor, FloatingButtonConfig};
use leptos::prelude::*;
view! {
<div data-testid="floating-button-secondary">
<FloatingButton
config=FloatingButtonConfig { color: FloatingButtonColor::Secondary.into(), ..Default::default() }
aria_label="Edit".to_string()
icon=icondata::AiEditOutlined
/>
</div>
}§Required Props
- aria_label:
impl Into<String>- Accessible name for icon-only buttons.
§Optional Props
- config:
FloatingButtonConfig- Color, size, variant, and optional fixed viewport placement.
- icon:
impl Into<MaybeProp<IconData>>- Optional leading icon from the icondata catalog.
- class:
impl Into<MaybeProp<String>>- Optional CSS class on the button element.
- disabled:
impl Into<Signal<bool>>- When true, the button does not respond to clicks.
- children:
Children- Optional visible label for the extended variant.