[Library] Hero

Catalogue accessStandard

Hero column portrait

An opening section whose photograph stands as a column rather than a band: a tracked eyebrow, a display headline, a lede held to a 30rem measure and two actions on the left, and on the right a single portrait cover taller than everything beside it, carrying nothing but one tracked caption on an opaque plate at its foot. The cover ships empty; you choose the picture. States no colour and no font of its own.

Variation View
Before you copy

Identical markup in every theme. Manrope typeface rgb(255, 255, 255) ground 1280px viewport

An opening section built from one core/columns inside a full-bleed band on your theme's paper. The left column, 48% wide, carries a tracked eyebrow, a display headline, a lede held to a 30rem measure and two buttons. The right column, 44% wide, carries a single core/cover in portrait, 38rem tall, holding nothing but a small opaque plate at its foot with one tracked line on it.

The signature moment

The picture is a column, not a band

Every other cover in this catalogue runs edge to edge; this one stands up inside the content measure and is deliberately taller than all the type beside it, so the section's weight is on the right while its reading order is on the left. That asymmetry is the whole idea, and it survives colourlessness because it is made of proportion: a 38rem picture against roughly 30rem of type, both sitting on the same bottom line.

The columns are bottom-aligned so the foot of the picture and the foot of the button row agree, and everything the picture is taller by happens at the top, where there is nothing to collide with. verticalAlignment is written on the parent core/columns and on every child core/column: the parent attribute alone does nothing on the front end, because core pins .wp-block-columns { align-items: normal !important } over the class the parent emits.

What it inherits, what it decides

Inherits: every colour (the band is base with contrast on it, the veil and the primary button are contrast, the plate is base), the typeface, the spacing scale, and the button's hover and focus states, which are the theme's. Decides: the proportion. A 13px tracked eyebrow, a headline from 40px to 68px at 0.96 line-height and -0.035em, a 17px to 19px lede at 1.6 on a 30rem measure, square buttons sized by padding rather than by a font-size preset, and the 48/44 split with a gutter that opens from 2rem to 5.5rem.

core/button carries no typography attribute anywhere in this pattern: that is valid at 7.0 and marked invalid in the 6.6 editor, so the buttons are sized with padding.

The cover, and what is not in it267 words

The cover ships EMPTY, which is valid at WordPress 6.6 and 7.0: the buyer clicks it and picks a photograph, and build:previews substitutes one of ours at render time. There is no url, no src and no background-image anywhere in the pattern.

The veil is a contrast chain at dimRatio 20, which is decoration and nothing else: no word in this pattern sits on the photograph. The one line that reads as a caption is on an opaque plate whose ground is a base chain and whose type is a contrast chain, so the contrast walk finds the plate first and measures an ordinary guaranteed pair rather than type over an image whose luminance nobody can know. That is the only legible way to put a line on a picture at a veil this light.

The plate lives INSIDE the cover's inner container, because a cover clips its overflow and forms no stacking context: anything pulled up from outside would paint under the photograph, invisibly. It is pushed to the foot by a vertical flex group with verticalAlignment: bottom and its own min-height: 38rem, not by a custom contentPosition, which would shrink-wrap the inner container and make the plate's width depend on the length of its words.

The cover's height is 38rem, never a vh value: the preview on this page sizes its frame to the pattern, and a viewport-relative height would size the pattern to the frame in turn.

The cover also states its own style.color.text as a base chain, so core's :where(.wp-block-cover:not(.has-text-color)) rule, which would otherwise paint anything in it a literal #fff, never fires.

Below 78272 words

Core stacks the columns. In the base the type column is first in the markup, so a phone reads the eyebrow, the headline, the lede and the buttons, and then meets the picture: the reading order the desktop composition already had. portrait-mirror puts the picture first in the markup, so on a phone the picture comes first; that is the trade the mirror makes and it is stated on the product page.

No hand-off row57 words

cover-plate and the other full-bleed covers ship a short row of page copy below them so a buyer can see where the section ends. This cover is inside the 1240px measure with the band's own paper around it on all four sides, so the section already reads as a section and the extra row would be scenery.

What a buyer changes first37 words

The photograph, then the headline. The eyebrow and the plate's caption are both set in caps with wide tracking and read best under about 28 characters; past that they wrap and the plate grows a second line.

Variations116 words
  • Portrait left (portrait-mirror): the composition mirrors. The cover takes the left column at 44%, the type the right at 48%. Nothing else moves, so it is a composition variation and not a colour one.
  • Night portrait (night-portrait): the colour axis, by inversion. The band becomes contrast with base type, both buttons swap, and the foot plate inverts with the band, so it stays ink on the picture rather than becoming a white chip on a dark section. Inversion between base and contrast is the only colour move that arrives in every theme; every other slug's luminance is unknowable. The veil is unchanged, because it is still a contrast chain over the photograph in both.
Back to the library