COMPONENTS / MOLECULES / al-section-header← ALL COMPONENTS

Section Header

<al-section-header>betaOPEN IN FIGMA ↗

The heading block that opens a section of a Southleft page: a mono rule carrying an index and label, an accent kicker, a heading, an optional lead, and an optional trailing link.

PLAYGROUND0 CONTROLS
PREVIEW / al-section-header / SOUTHLEFT
Loading preview
CODE — HTML

Guidance

AUTHORED · CITED TO SOURCE

The rule that opens a section inside a page: an optional ordinal, a label, the section heading, an optional dek, and an optional link out. It is the punctuation between a page's parts.

WHEN TO USE

  • A page has several distinct sections and a reader needs to see where one ends and the next begins.
  • The section has somewhere to go in full, an archive or a listing page, which becomes the link-href and link-label pair.

WHEN NOT TO USE

  • You need the heading band at the very top of an interior page rather than a divider between sections.USE PAGE-HERO →
  • All you actually want is space between two blocks. Spacing is arrangement and belongs to the layout primitive, not to a component.USE LAYOUT →

DO

  • Number sections with index only when the order is meaningful; an ordinal on an unordered set implies a sequence that does not exist.
  • Keep heading-tag consistent down a page so the section headings form one flat level rather than a drifting hierarchy.

DON’T

  • Do not repeat the page title as the first section heading. The band above already said it, and the repetition reads as a rendering bug.
  • Do not use the dek for body copy; it is a one-line orientation, and anything longer belongs in the section itself.

ACCESSIBILITY IN PRACTICE

  • The link is a real anchor with its own label, so link-label has to make sense read on its own. A screen-reader user may reach it out of context in a list of links.

CONTENT GUIDELINES

  • The label is the section's kind; the heading is what this particular section says. Do not collapse the two into one string.

WHERE THIS CAME FROM

  • libs/sl-web-components/components/section-header/section-header.tsThe component this guidance describes.

Each line above names a file and a literal string that must still appear in it.pnpm gate:guidance re-reads them from this built page, so guidance that has stopped being true fails a check rather than misleading you.

IN SYNCSouthleft Design SystemFIGMA SET · Section Header

Code and the Figma component set matched at the last confirmed sync, and neither has changed since.

DECIDED BY
CONTRACT DIFF
FIGMA SIDE
OBSERVED
LAST CONFIRMED SYNC
2026-08-28
PUBLIC SURFACE
8 ATTR · 1 SLOT · 0 EVENT · 5 PART

The component’s public surface — attributes and their value sets, slots, events, CSS parts and custom properties, from the manifest — compared against the Figma set’s property definitions.

Measured by axe on this documentation site’s own preview of the default story — @southleft/sl-web-components has no Storybook in the measured set.

CHECKEVIDENCEDETAILRESULT
Default stateAXEDefaultPASS
Advanced statesAXEThe docs page renders the default story only. This component’s other stories have not been measured.NOT MEASURED
Screen readerMANUALNo screen-reader pass has been recorded for this component.NOT RECORDED
Keyboard navigationINTERACTION TESTSNo interaction tests and no manual keyboard pass.NOT RECORDED

MEASURED 2026-09-08 · 1 STORIES · AXE WCAG2A + WCAG2AA + WCAG21A + WCAG21AA + WCAG22AA

COLOR CONTRAST0 RULES FAILING

The CI gate disables color-contrast globally (libs/al-web-components/story-fixture/src/main.ts), so its result never reaches a test run. It is enabled for this measurement, and reported here whichever way it comes out.

NO CONTRAST VIOLATIONS ACROSS THIS COMPONENT’S 1 STORIES.

import '@southleft/sl-web-components/components/section-header';
PROPTYPEDEFAULT
indexstringThe ordinal shown before the label in the rule, e.g. `02`. Omit for a label-only rule.
labelstringThe rule's label, and the source of the kicker slug below it.
headingstringThe section heading.
dekstringThe lead paragraph under the heading. Omit for none.
link-hrefstringTarget for the trailing link. Omit (or fill the default slot) for no link.
link-labelstringText for the trailing link.
heading-tagstringThe heading's semantic level — a document-outline concern, so not fixed.'h2'
kickerstringKicker text without the angle brackets. Derives from `label` when unset; pass an empty string for a rule with no kicker.
SLOTDESCRIPTION
(default)The trailing position, for a control the link cannot express — a filter, a segmented toggle. Use it INSTEAD of `linkHref`; both render if both are set.

THIS COMPONENT DECLARES NO EVENTS IN THE MANIFEST.

PARTDESCRIPTION
ruleThe mono index/label rule above everything.
kickerThe accent `<label>` kicker.
headingThe `<al-heading>`.
dekThe lead paragraph.
linkThe trailing mono link.
PROPERTYDESCRIPTIONDEFAULT
--al-section-header-margin-block-endSpace between the header and the section body. Defaults to `--al-theme-space-xl`.

SOURCE — components/section-header/section-header.ts · Molecules/Section Header