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.
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.