[Library] Gallery

Catalogue accessStandard

Half and half

A fifty-fifty split in which one frame equals four: a single square on the left and a two-by-two of four squares on the right, at a tight gutter, so the two halves occupy the same rectangle. A tracked caps label and one short line sit above the pair. Ships all five image frames empty; you choose the photographs. States no colour and no font of its own.

Variation View
Before you copy Corners As authored

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

A gallery band split down the middle. The left half is one square photograph running the full half-width; the right half is four square photographs in a two-by-two at a tight gutter. Both halves are the same rectangle, so the section is a single square divided two different ways. A 13px tracked caps label and one short line sit above the pair, on the band's own ground; nothing a visitor reads goes anywhere near a photograph.

The signature moment

One frame against four, at the same area

The design is an equation. One aspectRatio: "1" frame at 50% of the measure and a 2x2 of aspectRatio: "1" frames at the same 50% occupy the identical rectangle, so what the section shows is not two galleries side by side but the same space spent once and spent four times. Nothing else is doing any work: there is no rule, no tint, no border and no caption on the images.

The numbers, at the 1240px measure. The outer core/columns carries a blockGap of 2rem, and neither column states a width, so each is (1240 - 32) / 2 = 604px. The left frame is 1:1, so it is 604px tall.

The right half is where the arithmetic has to be watched. A true quarter of 604px would be 302px, and four of those at any gutter at all would overflow the half. Core does not overflow it: each nested column is flex-basis: 0; flex-grow: 1, so the two squares in a row share 604 - 8 = 596px and are 298px, not 302px. Each square is therefore 4px short of a true quarter, and a naive 2x2 built from true quarters plus an 8px gutter would be 612px tall against a 604px neighbour, 8px out.

The gutter is what closes it, and it closes it exactly. The vertical gap between the two rows is the same 0.5rem (8px) as the gutter between the columns, stated as margin-bottom on the first row rather than left to a block gap. So the 2x2 is 298 + 8 + 298 = 604px tall against a 604px left frame. The residual is 0px at 1240px, and it is zero at every width, not by luck: a 2x2 of squares whose row gap equals its column gutter is 2w + g wide and 2w + g tall, which is the same number. The one way to reopen the mismatch is to give the rows a different vertical gap from the horizontal one: a 1rem row gap against a 0.5rem gutter puts the 2x2 8px below the single frame's bottom edge.

That figure is arithmetic on core's own flex behaviour, not a reading taken off a render in this pass. Two things could move it on a buyer's site and both are guarded here: a theme's own .wp-block-columns margin, which is why both nested rows state margin-top and margin-bottom inline, and sub-pixel rounding at a measure that does not divide evenly, which can leave the two halves half a pixel apart and is invisible.

It survives colourlessness because it is pure proportion. There is no colour in the device at all: take the palette away and the left square and the right 2x2 still occupy the same rectangle, because that is a fact about widths and gutters rather than about hue. The band's ground is a base chain, its type a contrast chain, and neither carries any part of the idea.

What it inherits, what it decides

Inherits: every colour (the band is a base chain, its type a contrast chain, and nothing else in the pattern is coloured at all), the typeface, and the spacing scale for the band's own air (spacing|80 top and bottom, spacing|60 between the intro and the pair, spacing|30 inside the intro).

Decides: the 1240px measure and the clamp gutters, the 50/50 split, the 1:1 crop on all five frames, the 2rem outer gap and the 0.5rem inner gutter, which are literal lengths rather than presets because the equation depends on the two being equal to each other and a preset is a different number in every theme, the 34rem measure the intro is held to, and the type proportion: a 13px tracked caps label against a 15px to 17px line at 1.55.

What happens at 390px166 words

The outer core/columns stacks, as core does below 782px, and the two halves become two full-width objects: the single frame first, at the full column width, and the 2x2 beneath it, also at the full column width. The 2x2 does not stack with it. Both nested rows carry isStackedOnMobile: false, which serialises to is-not-stacked-on-mobile, the class core's own .wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column {flex-basis: 100% !important} rule is testing at 0-3-0. Without that attribute the four would collapse into a single column and the section would be five photographs in a row down the page, which is any gallery.

So the equation survives as one-then-four in a column: one big square, then four small ones in a block of the same width. At a 350px content width each small square is (350 - 8) / 2 = 171px, so the four together are still the same square as the one above them, and the reading is unchanged; only the direction of the comparison turns from across to down.

What a buyer changes first170 words

The photographs. All five image blocks ship EMPTY, which is what WordPress's own save() writes before a file is chosen and is valid at both matrix entries: click each frame, choose an image, and the 1:1 crop and object-fit: cover are already set, so nothing distorts whatever shape the upload is.

Which photograph goes on the left is the second decision and the one that matters, because the single frame is four times the area of any of the other four. Put the one picture the section is about there and let the four be detail, texture or sequence. The label reads best under about 24 characters and the line under about 80, since the intro is held to a 34rem measure.

If you want the pair to sit tighter or looser as a whole, change the outer 2rem gap; if you change the 0.5rem inner gutter, change it in three places, on both nested rows' blockGap and on the first row's margin-bottom, or the two halves stop finishing level.

Variations92 words
  • Swapped halves: the single frame moves to the right and the 2x2 to the left, and the label and the line move with it to the right edge (the intro group's justifyContent becomes right and both paragraphs take align: "right"). Same five frames, same 1:1 crops, same gaps, same chains; the composition is the only thing that moves, which is what makes it a variation rather than a second pattern. At 390px it stacks in its own order, four then one, so the phone reading mirrors the desktop one there too.
Back to the library