Skip to main content

Footer

Used to create a page footer.

Submit feedback
github

Migration Information

For teams migrating from the V1 to V2 component, please refer to the migration guide for changes to the component.
Component Guide
import { Footer } from '@uhg-abyss/web/ui/Footer';

Variants

The default variant of Footer has a dark blue background and white text. Use 'alt' for a light color scheme with dark text.

Footer.Upper

For additional customization, use Footer.Upper as a slot that goes above the main footer.

Footer.MainContent

The main content of the footer is wrapped in Footer.MainContent.

Footer.Brandmark

There are two optional locations to add a logo to the footer. Subcomponent Footer.Brandmark is the upper left location, while the prop brandmark on Footer.SubFooter is in the bottom right.

Social

Footer.Social adds a section on the right of the footer dedicated to social media links. There are two ways to utilize this section: the predefined layout or a custom layout.

Predefined layout

The predefined layout is a basic layout with space for icon links and an optional site security image. To use this option, provide the following props to Footer.Social:

{
title?: string;
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
icons?: Array<{
icon: string | { icon: string; variant: 'filled' | 'outlined' } | React.ReactElement;
href: string;
title: string;
}>;
securityImage?: string;
}
  • title: The title of the social media section.
  • headingLevel: The heading level to use for the title. Default is 2.
  • icons: An array of objects with the following properties:
    • icon: The icon to display. Use a string of an object with the icon and variant values to use an IconSymbol. Use a ReactElement to provide a custom icon.
    • href: The URL the icon links to.
    • title: The accessible title of the icon link.
  • securityImage: An optional image to display at the bottom of the social media section.

Custom layout

Footer.Social also accepts a ReactNode for custom layouts. Below is an example with a custom section:

Footer.Sections

Footer.Sections is a container for Footer.Section components. It allows for the prop spreadSections to be passed down to control the alignment of the sections. Default is set to true. When false, content is left-aligned.

Footer.Section

Each individual section is wrapped in Footer.Section. Use the title prop to add a title to the footer section container.

For accessibility purposes, section titles are implemented as HTML headers—<h2> elements by default. Use the headingLevel prop to change the heading level.

The Footer.Link sub-component leverages props from the Link component. Find additional resources on our Link page.

Use the href prop to set the URL of the link.

Use the onClick prop to trigger a custom function when the footer link title is clicked.

Use the openNewWindow prop to specify whether links open in a new window. openNewWindow is false for relative links. Absolute links will open in a new window.

Footer.SubFooter

To customize the sub-footer, use the Footer.SubFooter sub-component. This sub-component accepts children of type React.ReactNode, similar to Footer.Upper, or the following props:

{
copyright?: string;
links?: Array<{ label: string, href: string }>;
bottomText?: string | React.ReactNode;
brandmark?: React.ReactNode;
name?: string;
}
  • copyright: The text to display in the copyright section.
  • links: An array of objects with the following properties:
    • label: The text of the link.
    • href: The URL the link points to.
  • bottomText: Text to display below the copyright.
  • brandmark: A logo to display in the sub-footer.
  • name: The name of the sub-footer for accessibility purposes.

Use the copyright prop to change the title of the copyright section.

Use the bottomText prop to add content below the copyright text.

Use the links prop to add the sub-footer link array. Use href to set the link to a different page, and use label to set the descriptive text for the href.

Footer.Sectionss prop footerName and Footer.SubFooters name are used for accessibility purposes. If you have more than one footer on a page, footerName and name can help differentiate them for screen readers.

Footer Props

NameTypeDefaultRequiredDescription
bottomFixed
boolean
false
-
If true, the Footer will be fixed to the bottom of the page
children
React.ReactNode
--
The children of the Footer
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
footerRootTag
string
'footer'
-
The HTML element to render the footer root element as
fullWidth
boolean
false
-
If true, the Footer will take up the full width of the page
variant
"default" | "alt"
'default'
-
The variant of the Footer

Below are the link(s) to the relevant GitHub type files:

Abyss.d.ts

Footer.Upper Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
-
The content of the upper footer
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.

Below are the link(s) to the relevant GitHub type files:

Footer.MainContent Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
-
The main content of the footer
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.

Below are the link(s) to the relevant GitHub type files:

Footer.Brandmark Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
-
The brandmark content (logo, image, etc)
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
inSubFooter
boolean
false
-
Whether to render in sub-footer

Below are the link(s) to the relevant GitHub type files:

Footer.Sections Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
-
The main content of the footer
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
footerLinksTag
string
'nav'
-
The HTML element to render the footer links container element as
footerName
string
''
-
The ARIA label for the Footer
spreadSections
boolean
true
-
If true, the section column content will be spread across the Footer container. This is only recommended when using four or more section columns.

Below are the link(s) to the relevant GitHub type files:

Footer.Section Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
--
The children of the FooterSection
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
headingLevel
1 | 2 | 3 | 4 | 5 | 6
2
-
Heading level of the FooterSection title
title
string
--
The title of the FooterSection

Below are the link(s) to the relevant GitHub type files:

Footer.Link Props

NameTypeDefaultRequiredDescription
afterIcon
"function" | "article" | "code" | "details" | "html" | "iframe" | "input" | "label" | "link" | "map" | "menu" | "output" | "search" | "script" | "select" | "style" | "table" | "title" | ... 3567 more ... | { ...; }
--
The IconSymbol to insert at the end of the Link
beforeIcon
"function" | "article" | "code" | "details" | "html" | "iframe" | "input" | "label" | "link" | "map" | "menu" | "output" | "search" | "script" | "select" | "style" | "table" | "title" | ... 3567 more ... | { ...; }
--
The IconSymbol to insert at the start of the Link
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
fontWeight
"regular" | "normal" | "$normal" | "medium" | "$medium" | "bold" | "$bold"
'medium'
-
The font weight of the Link
hideIcon
boolean
false
-
If true, the "opens in new window" icon will be hidden
href
string
--
The href to navigate to
isActive
boolean
--
If true, the Link is considered the active route
isDarkMode
boolean
false
-
If true, use dark mode styles
isStandardAnchor
boolean
false
-
If true, ignore router and external Link checks
onClick
(event: React.MouseEvent<HTMLElement, MouseEvent>) => void
--
Callback function executed when the Link is clicked
openNewWindow
boolean
false
-
If true, the Link opens in a new window. By default, external links will open in a new window.
routerComponent
React.ComponentType<any>
--
Custom router component to use for client-side navigation
(e.g., Next.js Link, Gatsby Link, etc.)
size
"xs" | "$xs" | "sm" | "$sm" | "md" | "$md" | "lg" | "$lg"
'md'
-
The font size of the Link
variant
"default" | "underlined" | "alt" | "alt-underlined"
'default'
-
The visual variant of the Link

Below are the link(s) to the relevant GitHub type files:

Footer.Social Props

NameTypeDefaultRequiredDescription
children
React.ReactNode
--
Custom social content, in place of using props from Footer.Social
className
string
--
CSS class name to apply to each element within the component
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
headingLevel
1 | 2 | 3 | 4 | 5 | 6
--
Custom heading level for the social section title
icons
SocialIconConfig[]
--
Icons and links for social media
securityImage
React.ReactNode
--
Optional security/certification image
title
React.ReactNode
--
Title for the social links section

Below are the link(s) to the relevant GitHub type files:

Footer.SubFooter Props

NameTypeDefaultRequiredDescription
bottomText
React.ReactNode
--
Additional text below copyright
brandmark
React.ReactNode
--
Brandmark to be placed in the sub-footer
children
React.ReactNode
--
Custom children instead of using props
className
string
--
CSS class name to apply to each element within the component
copyright
string
--
Copyright text. Note that the copyright symbol and year are automatically prepended.
css
Abyss.CSSProperties | Partial<Record<`abyss-${T}`, Abyss.CSSProperties>>
--
Object containing CSS styling to apply; uses the classes listed in the "Integration" tab of the component's documentation

See CSS Prop Styling for more information
data-testid
string
--
Suffix used to create a unique ID used for automated testing

See Component Testing for more information
disableDefaultProviderProps
boolean
false
-
If set to true, the component will not use the DefaultPropsProvider values.

If you aren’t using the DefaultPropsProvider, this prop can be ignored.
links
FooterSubFooterLink[]
--
Array of link objects
name
string
'sub footer'
-
The ARIA label for the sub-footer

Below are the link(s) to the relevant GitHub type files:

Footer Classes

Class NameDescription
.abyss-footer-rootFooter root
.abyss-footer-containerFooter container
.abyss-footer-fixedFooter fixed position

Footer.Upper Classes

Class NameDescription
.abyss-footer-upper-containerContainer element for upper footer content

Footer.MainContent Classes

Class NameDescription
.abyss-footer-main-containerContainer element for main footer content

Footer.Brandmark Classes

Class NameDescription
.abyss-footer-brandmark-containerContainer for the brandmark

Footer.Sections Classes

Class NameDescription
.abyss-footer-linksContainer element for list of Footer.Link

Footer.Section Classes

Class NameDescription
.abyss-footer-sectionFooter section element
.abyss-footer-section-titleFooter section title
.abyss-footer-list-containerFooter list section

Footer.Link Classes

Class NameDescription
.abyss-footer-link-itemLink item container
.abyss-footer-linkLink item

Footer.Social Classes

Class NameDescription
.abyss-footer-social-containerContainer for social section
.abyss-footer-social-titleTitle for social section
.abyss-footer-social-linkContainer for linked social icons

Footer.SubFooter Classes

Class NameDescription
.abyss-footer-sub-brandmark-containerBrandmark container for sub-footer
.abyss-footer-copyright-containerSub-footer copyright container
.abyss-footer-copyrightSub-footer copyright text
.abyss-footer-bottom-textSub-footer text below copyright
.abyss-footer-sub-wrapperSub-footer wrapper
.abyss-footer-sub-navSub-footer navigation container
.abyss-footer-sub-listSub-footer link list
.abyss-footer-sub-linkSub-footer link
.abyss-footer-sub-dividerSub-footer link divider
.abyss-footer-sub-footnotesSub-footer footnotes - copyright and links

Keyboard Interactions

KeyDescription
TabMoves focus to the next focusable element; all focusable elements in the footer are included in the page Tab sequence.
Shift + TabMoves focus to the previous focusable element; all focusable elements in the footer are included in the page Tab sequence.
EnterWhen focus is on the link element, pressing Enter will take the user to a separate page.

Component Tokens

Note: Click on the token row to copy the token to your clipboard.

Footer Tokens

Token NameValue
footer.color.border.separator.dark
#FFFFFF
footer.color.border.separator.light
#4B4D4F
footer.color.border.top.container.dark
#002677
footer.color.border.top.container.light
#FFFFFF
footer.color.surface.container.dark
#002677
footer.color.surface.container.light
#FFFFFF
footer.border-width.separator
1px
footer.border-width.top.container
2px
footer.spacing.gap.horizontal.content.web
48px
footer.spacing.gap.vertical.bottom-content
24px
footer.spacing.gap.vertical.content.mobile
48px
footer.spacing.padding.bottom.container
16px
footer.spacing.padding.horizontal.container.mobile
32px
footer.spacing.padding.horizontal.container.web
48px
footer.spacing.padding.top.container
32px

Footnote Tokens

Token NameValue
footer-footnote.color.border.separator.dark
#FFFFFF
footer-footnote.color.border.separator.light
#4B4D4F
footer-footnote.color.text.copyright.dark
#FFFFFF
footer-footnote.color.text.copyright.light
#4B4D4F
footer-footnote.spacing.gap.horizontal.container.web
80px
footer-footnote.spacing.gap.horizontal.copyright
8px
footer-footnote.spacing.gap.horizontal.links.web
8px
footer-footnote.spacing.gap.horizontal.right-content.web
24px
footer-footnote.spacing.gap.vertical.container.mobile
12px
footer-footnote.spacing.gap.vertical.links.mobile
8px

Link Tokens

Token NameValue
footer-link.color.icon.alt.active
#E5E5E6
footer-link.color.icon.alt.hover
#F3F3F3
footer-link.color.icon.alt.rest
#FFFFFF
footer-link.color.icon.default.active
#000000
footer-link.color.icon.default.hover
#323334
footer-link.color.icon.default.rest
#4B4D4F
footer-link.color.icon.disabled
#7D7F81
footer-link.color.text.alt.active
#E5E5E6
footer-link.color.text.alt.hover
#F3F3F3
footer-link.color.text.alt.rest
#FFFFFF
footer-link.color.text.default.active
#000000
footer-link.color.text.default.hover
#323334
footer-link.color.text.default.rest
#4B4D4F
footer-link.color.text.disabled
#7D7F81
footer-link.sizing.all.icon
16px
footer-link.spacing.gap.horizontal.label
4px

Sections Tokens

Token NameValue
footer-sections.color.text.heading.light
#4B4D4F
footer-sections.color.text.heading.dark
#FFFFFF
footer-sections.color.icon.social.light
#4B4D4F
footer-sections.color.icon.social.dark
#FFFFFF
footer-sections.sizing.all.icon
24px
footer-sections.spacing.gap.horizontal.container.web
48px
footer-sections.spacing.gap.horizontal.social-icons
8px
footer-sections.spacing.gap.vertical.columns
8px
footer-sections.spacing.gap.vertical.container.mobile
48px
Table of Contents