Footer Navigation
Navigation – Footer
Footer Navigation organises a site’s secondary links into up to four columns, each with a title and one or more link groups. On desktop every column is fully expanded; on narrower viewports each column collapses into its own accordion, so users can scan section titles first and open only the ones they need.
- React
Maintained by Foundation
Ready to use
Footer Navigation is an AEM-authored component. Import FooterNavigationAem from @tmedxp/aem-react-components and render it with the model AEM resolves for the component’s resource type — you don’t assemble the columns or link groups yourself.
import type { AEMComponentProperties } from '@dcx-be/aem-react-components';import { FooterNavigationAem } from '@tmedxp/aem-react-components';
import type { FooterNavigationModel } from './types/types';
const FooterNavigation = ({ model, cqPath, context, resourceType,}: AEMComponentProperties<FooterNavigationModel>) => { return ( <FooterNavigationAem context={context} cqPath={cqPath} resourceType={resourceType} model={model} /> );};
export { FooterNavigation };Properties
Section titled “Properties”FooterNavigationAem takes the standard AEMComponentProperties<FooterNavigationModel> shape (model, cqPath, context) shared by every AEM-authored component.
FooterNavigationModel
Section titled “FooterNavigationModel”The root model always exposes exactly four columns, column1 through column4, each resolved as its own AEM resource.
| Prop | Type | Description | Optional |
|---|---|---|---|
:items |
{ column1, column2, column3, column4 } of NavigationColumnModel |
The four footer columns, keyed by slot. | ❌ |
:itemsOrder |
['column1', 'column2', 'column3', 'column4'] |
Render order of the columns. | ❌ |
NavigationColumnModel
Section titled “NavigationColumnModel”Each column is described by NavigationColumnProperties, which combines a title with a list of link groups.
| Prop | Type | Description | Optional |
|---|---|---|---|
title |
string |
The column heading, shown always on desktop and as the accordion trigger on narrower viewports. | ❌ |
groupType |
string |
Authoring hint used to resolve how the column’s groups were configured. | ✅ |
linkGroups |
NavigationColumnLinkGroup[] |
The groups of links rendered inside the column. | ✅ |
NavigationColumnLinkGroup
Section titled “NavigationColumnLinkGroup”Each group is either a single link, a flat list of links, or a collapsible sub-group with its own subtitle — the component picks the right presentation based on which fields are set.
| Prop | Type | Description | Optional |
|---|---|---|---|
subtitleLink |
LinkModel |
The group’s heading link. Rendered as a plain link when the group has no children. | ❌ |
linkLevelType |
string |
Set to 'singlelevelLinks' for a flat group of singleLinks with no subtitle. |
✅ |
groupSelector |
string |
Authoring identifier for the group. | ✅ |
links |
LinkModel[] |
Child links shown under subtitleLink, collapsible together with it. |
✅ |
singleLinks |
LinkModel[] |
Flat links shown with no subtitle, used when linkLevelType is 'singlelevelLinks'. |
✅ |
LinkModel is the shared AEM link shape (linkText, linkType, internalLink/externalLink, ctaType, and related behaviour flags) used by every AEM-authored link and button in the design system, so it isn’t redefined here — refer to the component that renders the actual anchor for its full shape.
Footer Navigation is a landmark region containing up to four columns of links, some of which are grouped behind their own accordion trigger. It meets WCAG 2.1 AA: the whole region is reachable and identifiable as navigation, every trigger is operable and announces its expanded/collapsed state, and focus always follows the visual reading order — left to right, top to bottom.
For designers
Section titled “For designers”- Only offer a choice between an accordion and plain links per section — never mix the two patterns for the same group, and always give every section a visible title, even when it isn’t interactive. Source: WCAG 2.4.6 Headings and Labels.
- The open/closed state of a column or group must never be conveyed by colour alone — pair it with the chevron rotation. Source: WCAG 1.4.1 Use of Color.
- Keep footer link labels short enough to stay on one or two lines; a label that wraps past two lines is harder to scan and to target with assistive technology. Source: WCAG 2.4.6 Headings and Labels.
- All link and trigger states (default, hover, focus) must maintain accessible contrast on every supported surface. Source: WCAG 1.4.3 Contrast (Minimum).
- If a link opens in a new tab or leaves the Toyota domain, that must be indicated programmatically, not only visually. Source: WCAG 3.2.5 Change on Request.
For developers
Section titled “For developers”Wrap the whole region in a <footer> landmark so assistive technology can jump to it directly; a page should only have one. Each column and group trigger is a native <details>/<summary> pair, exactly like a standalone accordion — no custom ARIA is required, and multiple triggers can be open at the same time since expanding one never collapses another. Column and group titles are plain text, never links: only the <summary> wrapper itself is a focusable, interactive element, and its chevron is decorative and must never be a separate focus stop. Standard sequential Tab navigation is enough — this is not a menu pattern, so no arrow-key handling should be added.
Keyboard interaction
Section titled “Keyboard interaction”| Key | Action |
|---|---|
| Tab / Shift + Tab | Move to the next / previous focusable element in the footer |
| Enter / Space | On a trigger, expand or collapse its column or group; on a link, navigate |
Focus follows DOM order from left to right and top to bottom — build the markup in that visual order rather than reordering it with CSS. Interactive targets must be at least 44 px high for comfortable touch use. Source: WCAG 2.5.8 Target Size (Minimum).
Labelling elements
Section titled “Labelling elements”Footer container
Use a <footer> element for the region. If the page already has a page-level footer landmark, give this one an accessible name — e.g. aria-label="Footer navigation" — so screen-reader users can tell it apart from the rest of the footer.
Column and group triggers
The <summary> is the trigger; the browser keeps its expanded/collapsed state in sync with the parent <details> automatically, so no aria-expanded needs to be managed by hand. Its accessible name comes from the visible title text — never ship a chevron-only trigger.
Links
Give every link a self-describing accessible name from its own text — avoid repeated labels like “Learn more” across the footer. A link that opens in a new tab or leaves the Toyota domain needs that stated in its accessible name, for example aria-label="Our leadership (opens in a new window)".
Source: WCAG 4.1.2 Name, Role, Value.