Start here
What you change first
- The pictures. Select an image and choose Replace.
- The heading and the line beside it. The line says out loud what the pointer does, because a control nobody knows about is a control nobody uses.
- The two small lines under the wall.
- Item height. The pairs are sized for 240px rows: if you change the height, set each portrait to half of 1.6 times the new height, less 4px.
- The heading level. The heading is an
h2for a section inside a page.
The signature moment
A wall of photographs in motion
Nothing sits between the pictures: no caption, no card, no plate, only an 8px seam of your section's ground. Three rows run in alternate directions, and each row mixes single landscapes with pairs of portraits in the same slot, so the band reads as a wall of mixed crops rather than one shape repeated. The edges are a hard cut, not a fade: pictures slide in and out at the frame's edge like prints under a guillotine.
Theme handoff
What comes from where
From your theme
The ground behind the wall and in every seam is your section's base; the heading and the orientation line are contrast on it, text at 4.5:1 and the heading on the x-large rung. The two small lines under the wall reach for role-label and fall back to contrast. The faces are your theme's. Nothing states a colour or a family, and no text ever sits on a photograph.
Set by this pattern
- Row height 240px, gap 8px
- One slot, two shapes.
- Fifteen items, five to a row
- Speed 0.5.
- Fade off.
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
Three full-bleed rows of photographs running opposite ways under a short heading, with nothing in the rows but the pictures.
The signature moment: a wall of photographs in motion
Nothing sits between the pictures: no caption, no card, no plate, only an 8px seam of your section's ground. Three rows run in alternate directions, and each row mixes single landscapes with pairs of portraits in the same slot, so the band reads as a wall of mixed crops rather than one shape repeated. The edges are a hard cut, not a fade: pictures slide in and out at the frame's edge like prints under a guillotine.
Why this is not gallery-marquee-frames or hero-marquee-ribbon
gallery-marquee-frames is two rows of plated landscape cards with dissolved edges and a caption under each picture: a run of labelled things. This one has no plate, no caption and no fade, three rows and an 8px gap, so it is one surface of photography rather than a row of objects.
hero-marquee-ribbon is one row of tall portraits under a page-opening headline; the pictures are a ground for the pitch. Here the pictures are the section, the heading is one short row, and three counter-running rows at a lower height make a wall instead of a ribbon.
Make it yoursVariations and the edits to make first
What you change first
- The pictures. Select an image and choose Replace. "Fill items from media library" in the block's toolbar deals one picture per item, so it fills the landscapes and the first picture of each pair; replace the second portrait of a pair by hand. Write alt text for your own; the example text describes the examples.
- The heading and the line beside it. The line says out loud what the pointer does, because a control nobody knows about is a control nobody uses. If you take that sentence out, turn Scrub off in the inspector too.
- The two small lines under the wall. The hold hint stays true whatever you change; every row can always be stopped.
- Item height. The pairs are sized for 240px rows: if you change the height, set each portrait to half of 1.6 times the new height, less 4px. Speed if 0.5 is too slow for yours.
- The heading level. The heading is an
h2for a section inside a page. If this opens the page and your theme prints no title, make it anh1.
Theme behaviourInheritance, fixed decisions and contrast
What it inherits from your theme
The ground behind the wall and in every seam is your section's base; the heading and the orientation line are contrast on it, text at 4.5:1 and the heading on the x-large rung. The two small lines under the wall reach for role-label and fall back to contrast. The faces are your theme's. Nothing states a colour or a family, and no text ever sits on a photograph.
What it decides for itself
- Row height 240px, gap 8px, stated, so the band is exactly three rows and two seams, 736px, at every width.
- One slot, two shapes. The block gives every picture item the same landscape slot, 1.6 times the row height (384px). A single landscape fills it at 16:10; a pair of portraits fills it as two 188 by 240 pictures with the same 8px seam between them. That is how the rows mix crops without the block learning a second width.
- Fifteen items, five to a row: ten landscapes and five pairs, dealt so every row carries at least one pair and no two pairs meet. The block copies each run until it outruns the frame, so there is never bare ground.
- Speed 0.5. Three rows moving at once is a lot of picture; slower than the other galleries so each one can be recognised before it leaves.
- Fade off. The edges are cut, so the full-bleed wall ends where the page ends.
Technical notesBlock mechanics, responsive behaviour and constraints
What needs the plugin
The running, the pointer control and the press-to-hold. Everything else is core blocks: with the plugin inactive, or with motion switched off in the block's inspector, the heading is followed by the twenty photographs as a plain stack. A reader who asks their system for reduced motion always gets the still wall.
Included images
The copied markup includes WordPress Photo Directory example photographs. The public image URLs keep the examples visible after pasting. Select an image 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.
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…