StartFoundationsComponentsContent

Page header

The block at the top of a page: breadcrumbs, title, description, actions and tabs. There is no page header component; build it from four components and two spacing tokens.

Stable
OverviewUsageAccessibility
Projects Aurora
Aurora A shared workspace for the design team.
Duplicate Share
Overview Files Activity
<header style="display: flex; flex-direction: column; gap: var(--space-16); inline-size: 100%">
  <tk-breadcrumb>
    <tk-breadcrumb-item href="/projects">Projects</tk-breadcrumb-item>
    <tk-breadcrumb-item>Aurora</tk-breadcrumb-item>
  </tk-breadcrumb>
  <div style="display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-16)">
    <div style="display: flex; flex-direction: column; gap: var(--space-4)">
      <tk-text as="h2" variant="title-lg">Aurora</tk-text>
      <tk-text color="secondary">A shared workspace for the design team.</tk-text>
    </div>
    <tk-button-group spaced label="Project actions">
      <tk-button>Duplicate</tk-button>
      <tk-button variant="primary">Share</tk-button>
    </tk-button-group>
  </div>
  <tk-tab-bar label="Project views" value="overview">
    <tk-tab value="overview">Overview</tk-tab>
    <tk-tab value="files">Files</tk-tab>
    <tk-tab value="activity">Activity</tk-tab>
  </tk-tab-bar>
</header>

The parts

Part Use Required
Breadcrumb where the page sits no, drop it on a top-level page
Text the title, and a description in color="secondary" the title is
Button group with spaced the page's actions no
Tab bar views of the same page no

The same layout as classes:

.page-header { display: flex; flex-direction: column; gap: var(--space-16); }
.page-header__title-row { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-16); }
.page-header__text { display: flex; flex-direction: column; gap: var(--space-4); }

Separating it from the page

  • If the header ends in a tab bar, add nothing. The tab bar already draws a hairline under its tabs.
  • Otherwise, give the header a bottom border: border-block-end: 1px solid var(--border-subtle). Don't use a Divider for this; Divider separates pieces of content.