Accessibility Guide
Faststrap includes built-in accessibility components and follows Bootstrap's accessibility patterns. This guide covers how to build accessible FastHTML apps.
Built-in Accessibility Components
SkipLink
SkipLink renders a hidden "Skip to main content" link that appears on focus:
LiveRegion
LiveRegion creates an ARIA live region for dynamic content updates:
from faststrap import LiveRegion
LiveRegion(
"3 new messages",
aria_live="polite",
aria_atomic="true",
)
Aria live values:
- "polite" — announces when the user is idle
- "assertive" — announces immediately
- "off" — disables announcements
VisuallyHidden
VisuallyHidden renders content that is visible to screen readers but hidden visually:
from faststrap import VisuallyHidden
Button(
"Close",
aria_label="Close dialog",
)
VisuallyHidden("Dialog closed")
FocusTrap
FocusTrap constrains keyboard focus within a modal or dialog:
from faststrap import FocusTrap
FocusTrap(
Modal(
Modal.Header("Confirm Action"),
Modal.Body("Are you sure?"),
Modal.Footer(
Button("Cancel", variant="secondary"),
Button("Confirm", variant="primary"),
),
),
)
ARIA Patterns with Faststrap
Modals
from faststrap import Modal, ModalHeader, ModalBody, ModalFooter
Modal(
ModalHeader("Delete Item", close_button=True),
ModalBody("Are you sure you want to delete this item?"),
ModalFooter(
Button("Cancel", variant="secondary", data_bs_dismiss="modal"),
Button("Delete", variant="danger", hx_delete="/items/1", hx_target="#item-list"),
),
id="delete-modal",
aria_labelledby="delete-modal-label",
)
Alerts
from faststrap import Alert, VisuallyHidden
Alert(
"Form submitted successfully!",
variant="success",
role="status",
VisuallyHidden("Success"),
)
Navigation
from faststrap import Navbar, NavbarBrand, NavbarNav, NavbarItem
Navbar(
NavbarBrand("My App", href="/"),
NavbarNav(
NavbarItem("Home", href="/", active=True),
NavbarItem("About", href="/about"),
NavbarItem("Contact", href="/contact"),
),
aria_label="Main navigation",
)
Keyboard Navigation
Faststrap components support keyboard interaction:
| Component | Keys | Action |
|---|---|---|
Modal |
Escape |
Close modal |
Dropdown |
Escape, Arrow keys |
Close / navigate items |
CommandPalette |
Escape, Arrow keys, Enter |
Close / navigate / select |
Tabs |
Arrow keys |
Switch tabs |
Accordion |
Enter, Space |
Toggle panel |
Color Contrast
Faststrap components use Bootstrap's built-in color contrast ratios. When creating custom themes:
- Ensure text meets WCAG 2.1 AA (4.5:1 for normal text, 3:1 for large text)
- Use
text-bg-{variant}classes for semantic backgrounds - Test with browser dev tools Accessibility panel
Screen Reader Testing
- Enable a screen reader (NVDA on Windows, VoiceOver on macOS)
- Navigate with keyboard only — Tab through interactive elements
- Check landmarks — Ensure regions are properly labeled
- Verify live regions — Dynamic updates should be announced
Form Accessibility
from faststrap import FormGroup, Input, Button
FormGroup(
"Email Address",
Input(
name="email",
type="email",
required=True,
aria_describedby="email-help",
),
help_text="We'll never share your email.",
help_id="email-help",
)
Best practices:
- Always provide labels via FormGroup
- Use help_text for additional context
- Use aria-describedby to link inputs to help text
- Use required attribute for mandatory fields