Appearance
Appearance
Help improve the accessibility of Funkwhale!
Test the component examples below. Did you find a bug? A missing hint? Some component feature doesn't work as expected with your setup?
Get in touch on the Funkwhale forum, Matrix chat, Mattermost room and code forge.
Recommended tools...
See The W3C Web Accessibility Initiative's Web Accessibility Evaluation Tools List for a comprehensive and well-curated list of advanced tools, especially for automated testing. These tools typically catch less than half the accessibility issues.
See the MDN guide on Accessibility tooling and assistive technology for an overview of screen readers you can install, including Orca (on Linux), VoiceOver(on Macintosh), TalkBack (on Android) or NVDA (on Windows).
MDN has a list of additional tooling that users typically use to access web apps such as Funkwhale. If you are using a braille keyboard, trackballs, joysticks, a touchpad, a screen magnifier, or voice commands, your critical feedback is very valuable to make funkwhale accessible.
If you use a desktop, laptop or tablet with a keyboard, you can usually open a pane or window with helpful tools by pressing F12 (or Fn+F12). Find the Accessibility tab and follow the instructions there. In addition, the Inspector tab helps you understand the hierarchical structure of the component's DOM nodes.

Components:
Using forms: Complete example
Goal
Form fields must be properly labeled and grouped to ensure users can understand their purpose and relationship.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Form fields collecting user information should have their purpose programmatically identified to support autocomplete and other assistive features.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Visual labels must match their programmatic names.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Form errors must be clearly identified and described to users.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Form fields must have clear labels and instructions.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Error messages should suggest how to fix the problem.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
When providing important or sensitive data, users need to be able to review and correct information before final submission, or review and revert erroneous submissions in hindsight.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Alert example
Goal
UI components must communicate their name, role, and value to assistive technologies.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Status messages must be programmatically determined and announced without receiving focus.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Button example
Goal
Buttons with icons must provide text alternatives that describe their purpose.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
All button functionality must be operable with a keyboard.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Button must have a visible focus indicator when navigating with keyboard.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Button must be large enough to be easily activated.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Button must communicate its name, role, and state to assistive technologies.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Card example
Goal
Images that convey information must have a text alternative
How to test
Use your screen reader on the image in the first card above
Expected outcome
The screen reader announces the image's alternative text: 'Colorful whales communicating in a network'
Learn more: Practical guide - Deep dive
Goal
Where visual headings are used to communicate the structure of a page, they must also be communicated in a way that supports assistive technology users to access this structure.
How to test
Right-click on any heading and select the 'Inspect' option, or use a screen reader
Expected outcome
The Card title is marked up as a heading (<h6>)
Learn more: Practical guide - Deep dive
Goal
There should be enough contrast between a background and the foreground content so that users can easily distinguish them.
How to test
Use a contrast checker tool to compare background and the foreground colors on text
Expected outcome
Text, including text in images, must have a contrast ratio of at least 4.5:1 against its background color. Large text can be 3:1.
Learn more: Practical guide - Deep dive
Goal
Visual elements used to indicate state or boundaries must have sufficient contrast.
How to test
:hover and :focus states on the second card ("Link")Expected outcome
Learn more: Practical guide - Deep dive
Goal
All functionality must be available using only a keyboard.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Interactive elements must receive focus in an order that preserves meaning and operability.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Keyboard focus indicator must be clearly visible.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Users must be able to cancel or undo pointer interactions with the card.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Visible labels must match their programmatic names for interactive elements within the card.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Interactive elements must be large enough to be easily activated.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Header example

Goal
Interactive elements must receive focus in an order that preserves meaning and operability.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
See Heading
See Section
Using this component: A11y checklist - Accessible Heading example
Goal
Headings must be properly structured and marked up to communicate document hierarchy.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Input example
See Form fields.
Using this component: A11y checklist - Accessible Layout example
Goal
Interactive elements must receive focus in an order that preserves meaning and operability.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Link example
Lorem ipsum dolor sit amet, Text-only link in a paragraph , consectetur adipiscing elit.
Link with solid secondary background Link with solid primary backgroundGoal
Links with icons must provide text alternatives that describe their purpose.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
All link functionality must be operable through a keyboard interface.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Link must have a visible focus indicator when navigating with keyboard.
How to test
Expected outcome
Focus indicator is clearly visible and has sufficient contrast with background
Learn more: Practical guide - Deep dive
Goal
Link must communicate its name, role, and state to assistive technologies.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Loader example
Using this component: A11y checklist - Accessible Modal example
Goal
Modal content must be dismissible, hoverable, and persistent.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Users must be able to navigate to and from all modal content using keyboard.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
When a modal opens, focus should move into it and be trapped within until it closes.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
The modal's role, state, and name must be properly communicated to assistive technologies.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Nav example
Goal
Ensure that the structure and relationships within the Nav component, especially when used as tabs, are programmatically determinable and presented in a way that preserves meaning.
How to test
Inspect the Nav component above using browser developer tools and accessibility inspectors as well as screen readers. If used as tabs, verify the following: - The main container (<Layout>) has role="tablist". - Individual tab elements (<Button>) have role="tab". - Each tab has an id and an aria-controls attribute pointing to its corresponding tab panel's id. - Each tab panel (<slot>) has role="tabpanel" and an aria-labelledby attribute pointing to its corresponding tab's id. - aria-posinset and aria-setsize are correctly calculated and applied to each tab to convey its position within the set. - The span with class falseTitle uses aria-hidden="true" to hide duplicated or visually formatted text from screen readers.
Expected outcome
Nav component's structure, including tab lists, tabs, and their relationships to tab panels.Learn more: Practical guide: 1.3.1 - Deep dive: Info and relationships
Goal
Ensure that all functionality of the Nav component, particularly when used as tabs, is operable via a keyboard interface without requiring specific timings for individual keystrokes. Users should be able to navigate between tabs using standard keyboard interactions.
How to test
Nav component using the Tab key.ArrowRight or ArrowDown to move focus to the next tab.ArrowLeft or ArrowUp to move focus to the previous tab.Home to move focus to the first tab.End to move focus to the last tab.Expected outcome
Learn more: Practical guide: 2.1.1 - Deep dive: Keyboard Accessible
Goal
Users should be able to determine their location within navigation.
How to test
Check for current location indicators:
aria-current="page" for active navigation links.aria-selected="true" for the active tab.Expected outcome
Learn more: Practical guide: 2.4.8 - Deep dive: Location
Goal
Verify that all interactive components within the Nav component communicate their name, role, and state to assistive technologies.
How to test
role="tab" is correctly applied to tab elements.aria-selected attribute accurately reflects the active state of a tab (true for the selected tab, absent for unselected tabs).Expected outcome
Learn more: Practical guide: 4.1.2 - Deep dive: Name, Role, Value
Using this component: A11y checklist - Accessible Pagination example
Goal
Navigation elements like pagination should use appropriate list markup to convey their structure.
How to test
Expected outcome
Learn more: Practical guide: 1.3.1b - Deep dive: Info and relationships
Goal
Assistive technology can understand what the page indicators mean.
How to test
Use a screen reader or your browser's inspection tools and navigate through the pagination controls.
Expected outcome
The current page number and total number of pages are clearly indicated.
Learn more: Practical guide - Deep dive: Info and relationships
Using this component: A11y checklist - Accessible Pill example
See Form fields.
Using this component: A11y checklist - Accessible Pills example
See Form fields.
Using this component: A11y checklist - Accessible Popover example
Goal
Popover content must be dismissible, hoverable, and persistent.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
Users must be able to navigate to and from popover content using keyboard.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Goal
When a popover opens, focus should move into it and be managed appropriately.
How to test
Expected outcome
Learn more: Practical guide: 2.4.3 - Deep dive: Info and relationships
Goal
The popover's role, state, and name must be properly communicated to assistive technologies.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
Using this component: A11y checklist - Accessible Section example
Goal
Interactive elements must receive focus in a predictable order.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
See Heading for additional relevant criterion
Using this component: A11y checklist - Accessible Select example
See Form fields.
Using this component: A11y checklist - Accessible Slider example
See Form fields
Using this component: A11y checklist - Accessible Spacer example
See Layout
Using this component: A11y checklist - Accessible Textarea example
See Form fields
Using this component: A11y checklist - Accessible Toggle example
See Form fields
Deprecated component
This component is currently not used in the Funkwhale app. See Nav for a full-featured, accessible alternative.
Component documentation: Tabs
Using this component: A11y checklist - Accessible Table example
| 200px | 1fr | cell 2 | cell 3 |
|---|
Goal
Data tables must use proper table markup to communicate their structure and relationships.
How to test
Expected outcome
Learn more: Practical guide - Deep dive
WARNING
This component is currently undergoing renovation. Check back later to test it when overhauled.
Using this component: A11y checklist - Accessible TOC example