Skip to content
Site volume
Colourway

Components

Section

The legibility structure: words print on a plate, art sits beside, above, below or around it, never under the words.

  • Beta
  • Reading layer
  • Server component
  • Since 0.1.0
  • Press check
Import from@maxgrits/overprint-react/section
On this page

Example#

Look of this example

Fernlight

Booked out to March, and the price list is on the first screen.

Live render of examples/section/basic.tsx

Usage#

Every block of a page is a Section. It is the legibility rule in code: the words print on a plate, and the art, if there is any, sits beside, above, below or around that plate, never under the words (D-B1).

  • plate is where the children print: the stock (default), white, sunken, the slab or a line plate. Every plate is opaque and re-scopes the text, rule and focus inks, so components read right on it.
  • art takes one <Art> element; artPlacement puts it at the end (default), start, above, below or surround, and artOnPhone decides where it goes below the md width. With surround, the plate becomes an inset with a paper gutter.
  • volume="up" prints the section one step louder than the page, for a hero or a campaign band. Absolute volumes are for the places D-B3 allows: heroes up to Press, campaigns and the 404.
  • Pins. stock, theme and colourway pin a subtree, such as a Night band or a client colourway on a case study.
  • width (prose, content, wide, full) and space (none to lg) set the measure and the rhythm.

Anatomy#

Fernlight

Booked out to March, and the price list is on the first screen.

The parts of examples/section/basic.tsx, numbered:
  1. Innerdata-mk-part="inner"
  2. Platedata-mk-part="plate"
  3. Artdata-mk-part="art"

Volume#

The plate and its words never change. The art slot is where the volume shows: at Quiet art stays still and flat, from Studio it can move and settle, and at Press and Rave a loop gets a pause key.

  • Quiet

    Fernlight

    Booked out to March, and the price list is on the first screen.

    Docs, forms, legal and long reads. Flat inks, no art in motion.

  • Studio

    Fernlight

    Booked out to March, and the price list is on the first screen.

    The site default. Art on its own plates, one display moment per view.

  • Press

    Fernlight

    Booked out to March, and the price list is on the first screen.

    Hero moments, covers and campaigns. Halftone fields and the second ink.

  • Rave

    Fernlight

    Booked out to March, and the price list is on the first screen.

    Launches, posters and the 404. Every ink, and the words still win.

Content#

  • One idea per section, introduced by a SectionHead.
  • Name a section that is a landmark with labelledBy pointing at its heading; most sections need no landmark.
  • Art is decoration or a picture with its own alternative text; a sentence is never written into the art.

Do and don't#

Do

Fernlight

Booked out to March.

The art beside the plate.

Don't

Fernlight

Booked out to March.

Words printed straight on the halftone.

Text on art fails somewhere: in another colourway, at another volume or for someone with low vision. The plate keeps the words on a calm surface in every look.

Accessibility#

  • The plate comes first in the DOM, so reading order never depends on where the art is drawn.
  • Art is aria-hidden unless it has a label (then role="img") or is interactive (the 3D pile brings its own keyboard and text alternatives).
  • A section is a region landmark only when you give it labelledBy or aria-label.
  • surround keeps an opaque plate with a gutter over the art; the art never takes pointer events over the plate.

Props#

PropTypeDefaultDescription
renderRenderProp<section>Default `<section>`.
theme"bone" | "night"nonePins `data-mk-theme` on the subtree.
colourwayColourwayIdnonePins `data-mk-colourway` (a client colourway on a case study).
volumeSectionVolumenone`inherit` (default), `up` (`data-mk-volume-step="up"`), or an absolute volume (D-B3 places only).
artReactElement<unknown, string | React.JSXElementConstructor<any>>noneMust be an `<Art>` element.
artOnPhone"above" | "below" | "hide"noneBelow the width where art sits beside the plate: above, below (default) or away.
artFrom"lg" | "md"noneWhere `end` and `start` art moves beside the plate: the md container width (default) or lg (PageHero).
widthSectionWidthnone70ch · 72rem (default) · 90rem · 100 %.
spaceSectionSpacemdBlock padding 32 / 64 / 96 px (phones 24 / 48 / 64); default `md`.
labelledBystringnoneMakes the section a region landmark (or pass `aria-label`).
children requiredReactNodenoneThe reading layer.
stock"bone" | "kraft" | "newsprint" | "night" | "pulp" | "white"none
plate"action" | "custom-apps" | "growth" | "maxos" | "none" | "slab" | "software" | "stock" | "sunken" | "websites" | "white"none
artPlacement"above" | "below" | "end" | "start" | "surround"none

Plus 279 React and DOM attributes passed through to the root element (className, ref, aria-*, event handlers and the rest). Generated from SectionProps in packages/overprint-react/src/reading/section/section.tsx.

Tokens#

System tokens (19)

Its own properties (2)

  • --mk-section-gutter
  • --mk-section-pad

Scanned from its CSS at build and checked against its registry entry; 9 read but not declared there.

Changelog#

Arrived in 0.1.0.

0.9.024 October 2026

  • MinorreactSection's development check accepts an Art from any copy of the module through a Symbol.for brand (ART_BRAND, isArtElement; DF-48). Read the whole entry

0.1.024 October 2026

  • MinorreactSection with its plate and Art slot, Plate, VolumeScope, PageHero, SectionHead, Eyebrow, Card, LineCard, InfoPanel, Stack, Cluster, Grid, Container, Main, Rule and the FittedLine client fitter; Navbar with the NavDisclosure mega panels, Footer, FooterMap, BuildStamp, SkipLink, ActionDock and VisitorControls; the Table parts, ComparisonTable with the one-tier switcher, SpecStrip, Numeral, Stat, StatGroup, StatusChip, Badge and ScoreDial; Prose with mdxComponents, Quote, CodeBlock with CopyButton, Figure, ScreenshotFrame and PhoneFrame; and the brand: the three evolved 2 × 2 options in markGeometry (a Overprint by default, b Paper seam, c Key block) with the pixel-snapped px mode and the one-ink seam variant, logoGeometry with the 1x clear-space frame, Mark, Wordmark, Logo, MaxosMark and LineBadge. Read the whole entry