KANTO DS v1.12.0
Customise

Theme

Accent

Font

Corners

Density

Text size

Reset to Kanto
Navigation

kt-footer

GitHub Copy link

The site footer: a contentinfo landmark holding the brand and a word about the product, columns of links, actions, and a legal line under them.

Preview

ACME Invoicing for small teams. Contact us © 2026 Acme. All rights reserved. ACME © 2026 Acme

The site footer: a contentinfo landmark holding the brand and a word about the product, columns of links, actions, and a legal line under them.

<kt-footer label="Site"> <a slot="brand" href="/">ACME</a> Invoicing for small teams. <kt-button slot="actions" size="small" variant="secondary" icon="mail">Contact us</kt-button> <span slot="legal">© 2026 Acme. All rights reserved.</span> </kt-footer> <script> document.querySelector('kt-footer').columns = [ { heading: 'Product', links: [ { label: 'Features', href: '/features' }, { label: 'Pricing', href: '/pricing' }, ], }, { heading: 'Company', links: [ { label: 'About', href: '/about' }, { label: 'GitHub', href: 'https://github.com/acme', external: true }, ], }, ]; </script>

Columns

The links are data, set as a property: columns is a list of { heading, links }, and each link is { label, href, external? }. Every column is laid out, named and marked the same way, so a footer cannot drift into a mix of styles.

An external link — one that leaves the site — gets the external-link icon, hidden from screen readers, and rel="noopener". It opens where the reader is, as every other link does.

The headings are <h2> by default, since a footer sits under the page's h1. Set heading-level to 3–6 when the footer sits deeper in the outline.

Variants

variantWhat it is
columnsThe default: the brand on one side, a column per heading opposite.
simpleOne row: the brand, then every link run together. No headings.

simple is for a page that needs a footer rather than a site map: an app's settings, a sign-in screen, a single-page product.

Slots

SlotWhere
brandLogo or wordmark.
defaultA word under the brand: what the product is. Hidden in simple.
actionsUnder it: social links, a newsletter form, a contact button.
legalThe bottom line — copyright, terms, privacy. Its row is left out while empty.

Layout

The footer lays itself out from its own width, not the viewport's: side by side once it is 720px wide, stacked below that — in a narrow panel as on a phone. --kt-footer-max-width keeps the content to a column on a wide page while the background and the rule run edge to edge.

kt-footer { --kt-footer-max-width: 1200px; }

Set --kt-footer-padding-inline: 0 to line the footer up with the content of a page that already has its own margins.

bordered, on by default, draws a rule along the top; turn it off where the footer sits on a surface of its own.

Accessibility

A <footer role="contentinfo">, named by label when the page has more than one. Put it outside <main> — beside it, at the end of the page — since a contentinfo landmark must not sit inside another. The columns are one <nav> with the same name, a heading over each list. Links keep the theme's focus ring and read 4.5:1 in both themes.

API

PropertyAttributeTypeDefault
columns—KtFooterColumn[][]
variantvariant'columns' | 'simple''columns'
borderedborderedbooleantrue
headingLevelheading-levelnumber (2–6)2
labellabelstring''
PartDescription
baseThe <footer>
brandThe brand, its text and the actions
columnsThe navigation holding the columns
columnOne column
bottomThe legal row
CSS propertyDefault
--kt-footer-max-widthnone
--kt-footer-padding-inlinevar(--padding-card)