Using The New Constrained Layout In WordPress Block Themes
First off, we already have root-level padding which is a fancy way of describing padding on the
<body> element. That’s nice because it ensures consistent spacing on an element that is shared on all pages and posts.
But there’s more to it because now we have a way for blocks to bypass that padding and align themselves full-width. That’s thanks to padding-aware alignments which is a new opt-in feature in
theme.json. So, even if you have root-level padding, you can still allow, say, an image (or some other block) to break out and go full-width.
That gets us to another thing we get: constrained layouts. The idea here is that any blocks nested in the layout respect the layout’s content width — which is a global setting — and do not flow outside of it. We can override that behavior on a block-by-block basis with alignments, but we’ll get to that.
Let’s start with…
This is a global setting. So, if we were to crack open DevTools and inspect the
<body> element, we would see these CSS styles:
Cool. But herein lies the issue of how in the world we can allow some blocks to break out of that spacing to fill the full screen, edge-to-edge. That’s why the spacing is there, right? It helps prevent that from happening!
But there are indeed plenty of cases where you might want to break out of that spacing on a one-off instance when working in the Block Editor. Say we plop an Image block on a page and we want it to go full-width while the rest of the content respects the root-level padding?
New features in WordPress 6.1 were created to address this issue. Let’s dig into those next.
When we do enable
useRootPaddingAwareAlignments, we are provided with custom properties with root padding values that are set on the
<body> element on the front end. Interestingly, it also applies the padding to the
.editor-styles-wrapper class so the spacing is displayed when working in the back-end Block Editor. Pretty cool!
I was able to confirm those CSS custom properties in DevTools while digging around.
useRootPaddingAwareAlignments also applies left and right padding to any block that supports the “content” width and “wide” width values in the Global Styles image above. We can also define those values in
So, that last code example will give us the following CSS:
[id] indicates a unique number automatically generated by WordPress.
But guess what else we get? Full alignment as well!
See that? By enabling
useRootPaddingAwareAlignments and defining
wideSize, we also get a full alignment CSS class for a total of three container configurations for controlling the width of blocks that are added to pages and posts.
This applies to the following layout-specific blocks: Columns, Group, Post Content, and Query Loop.
Let’s say we add any of those aforementioned layout-specific blocks to a page. When we select the block, the block settings UI offers us new layout settings based on the
settings.layout values we defined in
theme.json (or the Global Styles UI).
We’re dealing with very specific blocks here — ones that can have other blocks nested inside. So, these Layout settings are really about controlling the width and alignment of those nested blocks. The “Inner blocks use content width” setting is enabled by default. If we toggle it off, then we have no
max-width on the container and the blocks inside it go edge-to-edge.
If we leave the toggle on, then nested blocks will adhere to either the
wideWidth values (more on that in a bit). Or we can use the numeric inputs to define custom
wideWidth values in this one-off instance. That’s great flexibility!
The settings we just looked are set on the parent block. Once we’ve nested a block inside and select it, we have additional options in that block to use the
wideWidth, or go full-width.
Notice how WordPress multiplies the root-level padding CSS custom properties by
-1 to create negative margins when selecting the “Full width” option.
We just covered the new spacing and alignments we get with WordPress 6.1. Those are specific to blocks and any nested blocks within blocks. But WordPress 6.1 also introduces new layout features for even more flexibility and consistency in a theme’s templates.
Case in point: WordPress has completely restructured its Flex and Flow layout types and gave us a constrained layout type that makes it easier to align block layouts in themes using the content width settings in the Site Editor’s Global Styles UI.
This new slate of layout types creates semantic class names for each layout:
These are recently released block themes that have enabled spacing settings with
useRootPaddingAwareAlignments and have an updated
theme.json file that defines a constrained layout:
The base layout styles are default features that ship in WordPress 6.1 Core. In other words, they’re enabled right out of the box. But we can disable them if we need to with this little snippet in
Now, we have to wait and look at how the imagination and creativity of ordinary designers and content creators use these incredible tools and take it to a new level.
I consulted and referenced a lot of sources while digging into all of this. Here’s a big ol’ list of things I found helpful and think you might enjoy as well.
If you need help creating a digital marketing strategy for your business, don’t hesitate to contact one of Digidude’s consultants.