The signature moment
Density contrast
Two frames of identical size, weight and colour, one loaded and one empty, so the eye is told where to go by density alone rather than by scale, position or colour. The emptiness of the right frame is the design, not a slot waiting to be filled: it is what makes the plate in the left frame read as the thing to read. Resist adding a caption to the right frame. A label there balances the two halves, and the moment they are balanced the section is a 50/50 photo row with some text in it, which is the competent-and-forgettable failure this catalogue exists to avoid.
Theme handoff
What comes from where
Theme and pattern
Inherits: every colour (the plate is base with contrast type, the veil is contrast at 30%, the button is contrast with base type), the typeface, the spacing scale. Decides: the 50/50 split, the 32rem frame height, the gutter, the plate's 27rem measure and its padding, and the type ramp on the plate (a 13px tracked eyebrow at 0.22em, a headline from 28px to 44px at 1.05 line-height and -0.025em, one button sized by padding rather than by a font size).
Each cover 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 everything inside a cover a literal #fff, never fires.
Full pattern notes
Why it works, and how it is built
Open a topic for the complete design reasoning, editing guidance and implementation notes.
Design rationaleComposition, intent and nearest alternatives
Overview
An opening section built from two core/cover frames side by side at 50/50, separated by a gutter of about a rem. Both are the same height, both carry the same 30% veil of your theme's contrast colour, and both include example photographs that the buyer can replace. The left frame carries an opaque plate with an eyebrow, a headline and one action. The right frame carries nothing.
The signature moment: density contrast
Two frames of identical size, weight and colour, one loaded and one empty, so the eye is told where to go by density alone rather than by scale, position or colour. The emptiness of the right frame is the design, not a slot waiting to be filled: it is what makes the plate in the left frame read as the thing to read. Resist adding a caption to the right frame. A label there balances the two halves, and the moment they are balanced the section is a 50/50 photo row with some text in it, which is the competent-and-forgettable failure this catalogue exists to avoid.
Make it yoursVariations and the edits to make first
Variations
- Loaded right (
covers-swapped): the composition mirrors. The loaded frame becomes the right one, its plate moves to the bottom-right corner throughcontentPosition: "bottom right"and a constrained wrapper withjustifyContent: right, and the empty frame opens the row. One axis: composition. Colour and type are untouched. - Ink plate (
ink-plate): the colour move on its own, by inversion. The plate becomescontrastground withbasetype, and the button inverts with it so it stays legible on the new ground. Inversion betweenbaseandcontrastis the only colour move that arrives in every theme;base-2is plain white in both Twenty Twenty-Four and Twenty Twenty-Five. The frames, the veil and the layout are identical to the base.
Theme behaviourInheritance, fixed decisions and contrast
What it inherits, what it decides
Inherits: every colour (the plate is base with contrast type, the veil is contrast at 30%, the button is contrast with base type), the typeface, the spacing scale. Decides: the 50/50 split, the 32rem frame height, the gutter, the plate's 27rem measure and its padding, and the type ramp on the plate (a 13px tracked eyebrow at 0.22em, a headline from 28px to 44px at 1.05 line-height and -0.025em, one button sized by padding rather than by a font size).
Each cover 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 everything inside a cover a literal #fff, never fires.
Technical notesBlock mechanics, responsive behaviour and constraints
Two photographs, not one
This is the one thing to know before the buyer starts. The pattern holds two covers, and it only works when they are two DIFFERENT photographs: one that can carry a plate over its corner and one that is worth looking at with nothing on it at all. Both the preview and copied markup include two different stills for that reason. Choose Replace on each cover to select your images, then use the focal-point tool to adjust their crops.
Type never sits on a photograph
Every word in this pattern is on the plate, whose ground is a base chain and whose type is a contrast chain, so the contrast is measured as an ordinary guaranteed pair rather than as type on an image. A photograph's luminance is unknowable and the buyer swaps it anyway; the veil over both frames is decoration and may recede without loss.
The button carries no typography
Sized by padding only. A core/button with a typography attribute does not stay valid across editor versions, and nothing about the render gives it away.
Below 782
Core stacks the columns, so the two frames become two full-width bands. In the base the loaded frame is first in source order, which is what a phone should open with. In Loaded right the empty frame comes first, which is the ordinary picture-then-text order on a phone and is the price of the mirror; the mirror is a desktop composition and it says so.
The hand-off row
Two full-bleed frames on their own fill the preview on this page edge to edge, and on a buyer's page the opening is never alone. So the pattern ships with what comes next: a short row on your theme's paper under the frames, a tracked label at a fixed 12rem and one paragraph at a 34rem measure, in a wrapping flex row so the label does not break in two on a phone. It is ordinary page copy and it is the first thing a buyer rewrites or deletes.
Why the loaded frame has a fluid inset
The frames are full-bleed and the hand-off row below them is a constrained band at 1240px, so the two are sized by different things: past about 1350 the band stops filling the window and starts centring its column, while a contentPosition plate goes on being positioned against the cover's own full-bleed edge. Measured at 1280 and 1920 in Twenty Twenty-Five, the plate's text and the hand-off copy started 250px further apart at the wider window; mirrored in Loaded right, where the plate is pinned to the opposite page edge and the row is not, the drift was 353px, the largest in the catalogue.
The fix is on the loaded cover only, as padding-left: max(0rem, min(100%, 50vw) + 0.5rem - 660px) (padding-right in the mirror). 660px is the band's half-column, 620px, plus the plate's own 2.5rem padding, and the 0.5rem is half the gutter, so the plate's text lands on the same column edge the copy below it does. It is 0 at and below 1280, which is the width this catalogue is authored at, so nothing about the 1280 rendering moves and the plate is still flush into the frame's corner there; the min(100%, 50vw) term keeps it 0 below 782 as well, where core stacks the columns and 100% becomes the whole page. No CSS, no class: it is one length on one block, and a theme that never gets that wide never sees it.
Why the height is in rem
minHeight is 32rem, 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, a loop that only ever shrinks.
Measured
The cover's markup was checked on WordPress 7.0: the element order the two covers are authored in, the has-background-dim-30 class that a dimRatio of 30 emits, and isUserOverlayColor. Columns-level verticalAlignment is deliberately absent here: it does nothing on the front end, and with two frames of equal height there is nothing to align.
Included images
The copied markup includes WordPress Photo Directory example photographs. The public image URLs keep the examples visible after pasting. Select an image or cover and choose Replace to use your own Media Library files. See image credits for the sources and licenses. Pasting an image URL does not import a Media Library attachment.
Questions
Hero, two covers: common questions
Does Hero, two covers need a plugin?
No. It is built only from core WordPress blocks (button, buttons, column, columns, cover, group, heading and paragraph), so it pastes into the block editor with nothing to install.
Will Hero, two covers match my theme?
Yes. It names no colour or font of its own: every colour, size and space is a preset from your theme, so it takes your theme’s palette and type when pasted.
How many variations does Hero, two covers have?
3: Loaded left, Loaded right and Ink plate. Each is its own markup; choose one in the toolbar above the preview before you copy.
Can I use my own images?
Yes. Sample images stay in the copied blocks. Replace them in WordPress; pasting does not upload them to your Media Library.
Is Hero, two covers free?
It is included with a subscription, with every Core Pattern and variation. 62 Core Patterns are free to copy without one.
The markup
Core block markup and nothing else. Copy it, then paste it straight into the block editor: WordPress reads the delimiters and rebuilds the blocks.
Fetching the markup…Variation: Loaded right
Fetching the markup…Variation: Ink plate
Fetching the markup…