Accessibility

Framer prefabs adhere to the WAI-ARIA best practices and guidelines. They are tested across a wide range of modern browsers and commonly used assistive technologies.

We strive to manage implementation details related to accessibility that are challenging to implement within Framer. This includes aria and role attributes, focus management, and keyboard navigation. Consequently, users can typically use our prefabs as-is in most contexts, relying on functionality to adhere to expected accessibility design patterns. If you notice any issues or missing details, please inform us, and we'll do our best to resolve them. Keep in mind that we balance ease of adoption with best practices in Framer, which may occasionally require additional work from you or us. However, this greatly surpasses the current landscape of Framer projects concerning accessibility considerations.

W3C Authoring Pattern guides

WAI-ARIA, published and maintained by the W3C, outlines the semantics for many common UI patterns. These guidelines provide meaning for controls not constructed using browser-provided elements. For instance, if you use a div instead of a button element to create a button, certain attributes must be added to the div to convey to screen readers or voice recognition tools that it's a button.

Accessible Labels

The native HTML label element is designed to provide semantic meaning and context for corresponding input elements in many built-in form controls. For non-form control elements or custom controls, WAI-ARIA specifies how to provide accessible names and descriptions.

Where possible, Framer Prefabs incorporate abstractions to simplify control labeling. The Label primitive is designed to work with many of our prefabs, but it's up to you as the user to ensure proper labeling is incorporated and correctly linked to your components.

Keyboard Navigation

Framer prefabs offer basic keyboard support in line with the WAI-ARIA authoring practices. We aim to consistently manage focus, tab, and other keyboard inputs according to the outlined guidance.

Focus Management

Proper keyboard navigation and good labeling often coincide with focus management. When a user interacts with an element and something changes as a result, it's often beneficial to shift the focus with the interaction. This ensures that the next tab stop is logical based on the new app context. For screen reader users, the moving focus often results in an announcement to convey this new context, which relies on proper labeling.

In many Framer prefabs, we move focus based on the user's typical interactions with a given component. For example, in our text input prefab when nested, we chose to ensure focus occurs when the user clicks the parent container. We assume here that the parent container houses the input.

Framer Tab Index

Framer currently manages focus on components by applying the tabindex attribute. This approach is beneficial as it ensures that interactive components are focusable. However, it can also be problematic, as it may lead to unnecessary focus points. When using prefabs, we strive to manage focus effectively; nevertheless, it is crucial to always conduct testing. If you are nesting a component within a layer that is not its parent, use Framer's accessibility tools to add tabindex. Additionally, if necessary, remove focus from the parent component by setting its tabindex to -1.

Framer Tab Index

Framer currently manages focus on components by applying the tabindex attribute. This approach is beneficial as it ensures that interactive components are focusable. However, it can also be problematic, as it may lead to unnecessary focus points. When using prefabs, we strive to manage focus effectively; nevertheless, it is crucial to always conduct testing. If you are nesting a component within a layer that is not its parent, use Framer's accessibility tools to add tabindex. Additionally, if necessary, remove focus from the parent component by setting its tabindex to -1.

Framer Tab Index

Framer currently manages focus on components by applying the tabindex attribute. This approach is beneficial as it ensures that interactive components are focusable. However, it can also be problematic, as it may lead to unnecessary focus points. When using prefabs, we strive to manage focus effectively; nevertheless, it is crucial to always conduct testing. If you are nesting a component within a layer that is not its parent, use Framer's accessibility tools to add tabindex. Additionally, if necessary, remove focus from the parent component by setting its tabindex to -1.

Framer Focus & layer order

In keyboard navigation, focus order is primarily determined by tabindex, followed by layer order. Therefore, it's important to consider your site's tab order from bottom to top. The component or layer that appears last in the Framer page view will be the first to receive focus. Consequently, for proper focus management, elements like navigation should be placed on the bottom-most layer. This ensures they correctly receive layer focus, even though this may seem counterintuitive.

Framer Focus & layer order

In keyboard navigation, focus order is primarily determined by tabindex, followed by layer order. Therefore, it's important to consider your site's tab order from bottom to top. The component or layer that appears last in the Framer page view will be the first to receive focus. Consequently, for proper focus management, elements like navigation should be placed on the bottom-most layer. This ensures they correctly receive layer focus, even though this may seem counterintuitive.

Framer Focus & layer order

In keyboard navigation, focus order is primarily determined by tabindex, followed by layer order. Therefore, it's important to consider your site's tab order from bottom to top. The component or layer that appears last in the Framer page view will be the first to receive focus. Consequently, for proper focus management, elements like navigation should be placed on the bottom-most layer. This ensures they correctly receive layer focus, even though this may seem counterintuitive.