Repository navigation
Tracking: Addressing Design Tooling Consistency #43241
Description
Important
The adoptions below are being opened as PRs by an automated process. Please don't open separate PRs for them.
That process works through this issue and keeps it up to date. Leaving the adoptions to it is the quickest and cleanest way to get these features to users.
Where help makes the biggest difference is reviewing and testing the generated PRs. Each one follows the decisions from the audit below and includes testing instructions and screenshots.
Overview
This issue tracks design tool and block support consistency across the block library. The goal is unchanged from 2022: as few gaps as possible, and every remaining gap a deliberate choice with a recorded reason.
The four per-support tracking issues that sat under this one are now closed. What they listed is either shipped or carried forward here.
Where things stand
I have audited the current block library: all 116 blocks against every design tool, including the supports the original issues never covered, such as background, shadow, block gap, sticky position and duotone.
Every block and tool combination now has a decision. The support is already there, a pull request will add it, or it is deliberately left alone with a reason.
| Support | Gaps left | Pull request open | Not started | Of those, migrations |
|---|---|---|---|---|
| Dimensions | 69 | 6 | 63 | 10 |
| Border | 12 | 9 | 3 | 0 |
| Spacing | 12 | 9 | 3 | 0 |
| Typography | 5 | 0 | 5 | 2 |
| Shadow | 5 | 0 | 5 | 0 |
| Colour | 4 | 2 | 2 | 0 |
| Background image and gradient | 3 | 1 | 2 | 0 |
| Sticky position and duotone | 0 | 0 | 0 | 0 |
| Total | 110 | 27 | 83 | 12 |
Remaining work
One pull request per block per support, with all features of that support in the one pull request. The lists below are the full remaining set, grouped by support. A block with an open pull request already covering that support carries the number on its line.
Two exceptions to the one support rule:
- Border and spacing may be combined where padding and border both affect box sizing.
- Migrations are always on their own, because each needs a deprecation and a content migration.
Most of these are small: a block.json change, sometimes selectors or skipped serialization where the styles have to land on an inner element.
Note
These lists are generated from the audit and from block.json on trunk, so an item disappears once its support lands. Please do not edit them in place, the next refresh will overwrite your change. An item marked in progress or with a pull request number is already being handled.
Border, 12 gaps, 9 with a pull request open
- Calendar
core/calendar: add colour, radius, style, width (open: #64345) - Comments Page Numbers
core/comments-pagination-numbers: add colour, radius, style, width (open: #66471) - Navigation
core/navigation: add colour, radius, style, width (open: #66392) - Navigation Link
core/navigation-link: add colour, radius, style, width - Next Page
core/query-pagination-next: add colour, radius, style, width (open: #66394) - Page Numbers
core/query-pagination-numbers: add colour, radius, style, width (open: #66401) - Playlist track
core/playlist-track: add colour, radius, style, width - Previous Page
core/query-pagination-previous: add colour, radius, style, width (open: #66393) - Site Logo
core/site-logo: add colour, radius, style, width (open: #83957) - Social Icon
core/social-link: add colour, radius, style, width - Submenu
core/navigation-submenu: add colour, radius, style, width (open: #68455) - Video
core/video: add colour, radius, style, width (open: #63777)
Colour, 4 gaps, 2 with a pull request open
Typography, 5 gaps, 0 with a pull request open
- Playlist track
core/playlist-track: add font size, line height, font family, font style, font weight, letter spacing, text transform, text decoration - Pullquote
core/pullquote: add fit text - Quote
core/quote: add fit text
Needs a migration first. These blocks already do the job with a bespoke attribute, so each needs a deprecation and a content migration.
- Quote
core/quote: add text align - Social Icons
core/social-links: add font size
Spacing, 12 gaps, 9 with a pull request open
- Calendar
core/calendar: add padding, margin (open: #64345) - Comment Template
core/comment-template: add block gap (open: #69292) - Comments
core/comments: add block gap (open: #79477) - List
core/list: add block gap (open: #69310) - Navigation
core/navigation: add padding, margin (open: #66392) - Navigation Link
core/navigation-link: add padding, margin - Next Page
core/query-pagination-next: add padding (open: #66394) - Page Numbers
core/query-pagination-numbers: add padding (open: #66401) - Playlist track
core/playlist-track: add padding - Previous Page
core/query-pagination-previous: add padding (open: #66393) - Social Icon
core/social-link: add padding - Submenu
core/navigation-submenu: add padding, margin, block gap (open: #68455)
Dimensions, 69 gaps, 6 with a pull request open
- Archives
core/archives: add width, height - Audio
core/audio: add width - Buttons
core/buttons: add width - Code
core/code: add width, height - Column
core/column: add height, min width, min height (open: #76684) - Columns
core/columns: add width, height - Comments Form
core/post-comments-form: add width - Content
core/post-content: add width, height - Cover
core/cover: add width, height - Details
core/details: add width - Embed
core/embed: add width, height - Excerpt
core/post-excerpt: add width, height - Featured Image
core/post-featured-image: add min width, min height (open: #61485) - File
core/file: add width, height - Footnotes
core/footnotes: add width, height - Gallery
core/gallery: add width, height - Group
core/group: add width, height - Heading
core/heading: add width, height - Home Link
core/home-link: add width, height - Icon
core/icon: add height - Image
core/image: add min width, min height (in progress) - Latest Comments
core/latest-comments: add width, height - Latest Posts
core/latest-posts: add width, height - List
core/list: add width, height - Login/out
core/loginout: add width, height - Math
core/math: add width, height - Media & Text
core/media-text: add width, height, aspect ratio - Navigation
core/navigation: add width, height, min width, min height - Navigation Link
core/navigation-link: add width, height, min width, min height - Navigation Overlay Close
core/navigation-overlay-close: add width, height - No Results
core/query-no-results: add width, height - Page List
core/page-list: add width, height - Paragraph
core/paragraph: add width, height - Playlist
core/playlist: add width, height - Playlist track
core/playlist-track: add width, height, min width, min height - Poetry
core/verse: add width, height - Post Navigation Link
core/post-navigation-link: add width, height - Post Template
core/post-template: add width, height - Post Terms
core/post-terms: add width, height - Preformatted
core/preformatted: add width, height - Pullquote
core/pullquote: add width, height - Query Total
core/query-total: add width, height - Quote
core/quote: add width, height - RSS
core/rss: add width, height - Read More
core/read-more: add width, height - Search
core/search: add height, min width, min height (open: #83977) - Separator
core/separator: add width, height - Site Logo
core/site-logo: add height, min width, min height - Site Tagline
core/site-tagline: add width, height - Site Title
core/site-title: add width, height - Submenu
core/navigation-submenu: add width, height, min width, min height - Tab Panels
core/tab-panels: add height - Table of Contents
core/table-of-contents: add width - Tabs
core/tabs: add width - Term Count
core/term-count: add width, height - Term Description
core/term-description: add width, height - Term Name
core/term-name: add width, height - Term Template
core/term-template: add width, height - Title
core/post-title: add width, height
Needs a migration first. These blocks already do the job with a bespoke attribute, so each needs a deprecation and a content migration.
- Avatar
core/avatar: add width, height - Column
core/column: add width (open: #76684) - Cover
core/cover: add min height - Featured Image
core/post-featured-image: add width, height, aspect ratio (open: #61485) - Gallery
core/gallery: add aspect ratio - Image
core/image: add width, height, aspect ratio (in progress) - Search
core/search: add width (open: #83977) - Site Logo
core/site-logo: add width - Spacer
core/spacer: add width, height - Video
core/video: add width, height, aspect ratio
Background image and gradient, 3 gaps, 1 with a pull request open
- Post Navigation Link
core/post-navigation-link: add background image, background size, gradient (open: #83940) - Social Icon
core/social-link: add gradient - Submenu
core/navigation-submenu: add background image, background size, gradient (in progress)
Shadow, 5 gaps, 0 with a pull request open
- Navigation
core/navigation: add shadow - Navigation Link
core/navigation-link: add shadow - Playlist track
core/playlist-track: add shadow - Site Logo
core/site-logo: add shadow - Social Icon
core/social-link: add shadow
Sticky position and duotone, 0 gaps, 0 with a pull request open
Platform fixes these adoptions needed
Three gaps turned up while working through the list. Each is a small fix of its own, and each unblocks adoptions that cannot be done correctly without it.
- The editor ignored background skip serialization, so a block that applies its background to an inner element was painted on the wrapper in the editor and on the inner element on the front end. Fixed in #83943, which also adds
useBackgroundPropsandgetBackgroundClassesAndStylesto@wordpress/block-editor, the helpers every other support already has. Icon, Table, Button, Tab List, Search and Post Navigation Link background all depend on it. - Fit text sized every copy of a block in a loop from one rule, so in a Query Loop the longest title clipped while the shortest stayed small. Fixed in #83985. This is what Post Title fit text was waiting on.
- A per-instance state rule was scoped to the wrong element when a block's root selector names its parent, so a responsive or pseudo-state value set on a single block did nothing. List Item is the case, with
.wp-block-list > li. Fixed in #83986, in PHP and in the editor.
Decisions worth knowing before reviewing
Three rules came out of the audit. They explain choices that will otherwise look inconsistent across the pull requests.
Gradients use background.gradient. No block adopts color.gradients from here on. packages/block-editor/src/hooks/background.jsx treats color.gradient as the legacy path and background.gradient as the current one. Blocks already shipping color.gradients add background.gradient alongside it rather than switching, so existing content keeps working.
Element colours need a descendant to target. elements.heading resolves to h1, h2, h3, h4, h5, h6 scoped under the block selector, see packages/blocks/src/api/constants.ts:299. A block whose own wrapper is the heading cannot use it. Accordion Heading is the clearest case: it renders the heading as its own wrapper and its toggle button does not carry the element button classes, so it takes neither elements.heading nor elements.button. The other three Accordion blocks take both.
Bespoke attributes get their own pull request. Several blocks already do a support's job with a custom attribute. Social Icons size turns out to be a font size rather than a dimension. Spacer height and width map onto the dimension supports, which have their own presets through settings.dimensions.dimensionSizes. These are listed separately under each support above.
Exceptions
The larger half of the audit is the decisions not to adopt. That was the second goal in the original version of this issue and the part that never got written down. Spacer renders an empty sizing box, so typography and shadow do not apply to it. Separator has no content to style. Embed does not take border, shadow or aspect ratio for now: a fixed size third party embed does not fill the block, so a border or shadow is drawn around empty space. Each of these is recorded per block with its reason.
I would like to land the full set as a reference page under docs/, so block authors can see why a support is absent rather than reporting it as a bug. That is a follow-up.
Related
- Block supports and design tools follow-up: Block Supports and design tools follow-up #76525
- Layout audit, completed: Tracking: Layout Design Tools Consistency #43248
Activity
jameskoster commentedon Aug 25, 2022
Might it be worth considering #43082 as a part of this work?
aaronrobertshaw commentedon Aug 26, 2022
Thanks for flagging #43082 @jameskoster 👍
It's a little out of the scope I originally intended here. That said, the more widespread adoption of block supports does increase the exposure of the issue outlined in #43082. I agree it can be considered under the banner of "consistency".
As long as we allow themes or plugins to enqueue stylesheets, I don't think there is a quick win there. The low-hanging fruit in relation to closing that gap will be exposing the merged global styles in the block editor as per #34178. Once that is in place we'd need to go through all the block supports and their controls to leverage that global styles data to set better defaults. Additionally, we'd probably need some updated designs for several controls that allow for selection of, or reflect that, a value is being inherited.
Long story, short. I think that is large enough in scope to require its own dedicated tracking issue. For now though, I've added it to this issue's description as a future follow-up.
jameskoster commentedon Aug 26, 2022
This is what I am afraid of. Hopefully there is a heuristic we can come up with (e.g. simply hiding controls when the value is inherited from css) and apply it across all tools.
Fair enough, this sounds good, thanks!
aaronrobertshaw commentedon Aug 26, 2022
If a control is not displayed by default, it will only be shown for a block if a user has toggled it on or customized its value previously. Is your concern primarily with default controls (the ones shown without the user having to toggle them on via the ellipsis menu)?
I believe the previous driver for having these default controls was that they should be the controls that users tweak often. Exactly which controls are displayed by default was something we aimed to refine over time.
jameskoster commentedon Aug 26, 2022
Yes that's it. It's really awkward to see empty controls when a value is clearly set (albeit via css). My hypothesis is that in these cases seeing no control would be less confusing, and makes adding the control feel more like what it is – a local override.
Indeed, and this is a good argument against simply hiding the controls when they inherit values from css.
But if the alternative requires us to come up with designs for every single control so that they clearly indicate what is already a fairly confusing concept, then I think it's worth considering. We ran in a lot of circles trying to handle this just in the new padding control alone.
At least we can find comfort in the fact that this issue should (hopefully) fade away over time as theme.json is becomes more widely adopted, and #34178 is closed like you mentioned.
Sorry to derail this issue, we can continue the conversation in #43082 :D
aaronrobertshaw commentedon Sep 5, 2022
Update: 5 September 2022
Current Status
Work towards completing Phase 1, as outlined in this PR, is still ongoing. We have several contributors from the wider WordPress community assisting in these efforts, which is greatly appreciated 🙇
If there are particular block supports you wish to ensure land in time for 6.1, please feel free to jump in and create or review relevant PRs. If you submit a PR, it would be great if you could also update the relevant block support tracking issue or comment on them (see links at bottom of this issue's description). We'd like to keep these as up-to-date as possible, so anyone can quickly identify gaps and contribute without overlapping the efforts of others.
Rough guide to current Phase 1 completion:
* Not all blocks will be candidates for adopting layout support. As such, the available blocks number reflects eligibility.
** What makes sense for color support can differ more from block to block. This figure is a very rough approximation.
The figures above don't yet acknowledge any blocks we determine should not in fact opt into a particular block support. As a result, these numbers will tend to be conservative.
What's planned for WordPress 6.1
The current plan is to achieve as much as possible towards completing Phase 1.
Given the large number of blocks and the potential for tricky edge cases, we won't be able to complete phase 1 across all block supports. As such, we'll be approaching them in general order of priority:
Typography > Spacing > Layout > Color > Border
Beyond 6.1
WordPress 6.1 will only be the start of our efforts to achieve consistency across our design tools. The immediate goal post 6.1 will be to complete Phase 1 for all block supports. From there, we should be well positioned to complete phases 2 & 3 for WordPress 6.2.
aaronrobertshaw commentedon Sep 16, 2022
Update: 16 September 2022
This update is a little late as I was AFK for a few days recently but here goes 🙂
Current Status
In the lead up to the 6.1 feature freeze, we focused primarily on Typography and Spacing supports.
The majority of blocks requiring typography design tools received them. There were of course several exceptions such as captioned blocks e.g. Image, Embed, Video etc. While these blocks could have benefited from typography supports, the potential in the near future for them to be refactored to use an inner standalone Caption block made it worth holding off here to avoid any backwards compatibility issues.
Phase 1 is continuing however the pace here might slow in the short term as we shift focus to help iron out kinks for the 6.1 beta.
Phase 1 completion so far:
* Not all blocks will be candidates for adopting layout support. As such, the available blocks number reflects eligibility.
** What makes sense for color support can differ more from block to block. This figure is a very rough approximation.
aaronrobertshaw commentedon Dec 15, 2022
Quick comment to drop a link to a PR aiming to extend and stabilize our block.json selectors API.
It will offer the ability to specify CSS selectors for individual styles (e.g. font size), not just features (e.g. typography). In turn, that extra flexibility might help smooth out edge cases and make adoption of block supports easier.
paaljoachim commentedon Jan 23, 2023
It would be great with an update in regards to the upcoming WordPress 6.2. Beta 1 is 7th of February.
Thanks!
aaronrobertshaw commentedon Jan 25, 2023
Hi @paaljoachim 👋
There hasn't been much progress on further block support adoptions for this release.
Most of the low-hanging fruit (especially for typography supports) has been picked. Those remaining have some trickier edge cases requiring greater control over CSS selectors to ensure we don't create a disjoint between individual blocks and theme.json/global styles (more on this in a moment).
We also ran into some issues with margins being broken by the new layout supports, which became a blocker to adopting spacing supports. With any luck that will be resolved later this week. You can follow progress there on #47399.
With the rapid adoption of block supports adding more and more controls to our sidebar, we've needed to switch focus a little this release to refining the sidebar. A big part of that was the sidebar tabs experiment #45005.
Back to the CSS selectors mentioned earlier, I've been working on stabilizing and extending the block.json selectors API. This will provide blocks with greater control over the selectors used for each block support feature (e.g. color, typography) and subfeature (e.g. background color, font size).
The combination of these efforts should help reduce the friction in adopting missing block supports. Hopefully, allowing for this issue to regain some of its lost momentum.
t-hamano commentedon Feb 27, 2023
A new "Post Time To Read" block has been merged with #43403. This is an experimental block, but please add it to each table if needed 🙏
4 remaining items
markhowellsmead commentedon Jul 2, 2024
As @t-hamano mentioned in #63050, this might be the better place to track all of the requirements and missing features. I have compiled a task list in that issue: does it make sense to bring that here? I imagine that a revised list would make sense once 6.6 drops and I would imagine that having one issue per requirement would lead to them all receiving very little attention in the wider context.
aaronrobertshaw commentedon Jul 2, 2024
I think so.
The linked issues here per block support also capture when deliberate decisions have been made to omit a support from a block when it doesn't make sense.
markhowellsmead commentedon Jul 3, 2024
Adding the list of outstanding missing supports (which @bph originally compiled).
Edit: see the existing summaries linked at the top of this issue under Tracking Issues for Individual Block Supports.
markhowellsmead commentedon Jul 3, 2024
Note from #63050 (comment):
I don't feel that the difficulty of implementation is a valid reason to exclude support of a particular feature.
aaronrobertshaw commentedon Jul 3, 2024
Thanks for consolidating #63050 into this and adding that list @markhowellsmead 👍
I don't know how useful it is in that long form though. In addition to pushing the rest of this issue's conversation way down the page for a while, it won't act as a source of truth or task list over the dedicated feature issues linked in the description.
For me, it is also a bit misleading as it suggests some supports should be adopted, or are missing, when they were deliberately omitted previously.
Perhaps it could be collapsed under a
<details>block if we wish to keep it, what do you think?Each of the individual feature issues linked in the description will need a quick pass to make sure they are up to date. I suspect they'll only need a few minor tweaks but I don't really have the bandwidth at the moment to do that pass myself.
My interpretation of that comment was it was highlighting not that support couldn't be adopted but that discussion around it should be contained to an issue that's related to that particular block support.
Marc-pi commentedon Jul 3, 2024
Hello,
don’t forget the highly needed radius on column (so border is partially implemented on child columns, it’s ok on the parent column). In case we need to build pricing grids, we have to encapsulate a group just to get the radius option.
Related
markhowellsmead commentedon Jul 3, 2024
@aaronrobertshaw I agree that it is a very long list, but it also highlights the disparity between the many blocks; some of which have been incomplete for a very long time. Hiding it in a Details block (is that even possible in Github?) is brushing the many problems under the carpet.
I'd opened #63050 in order to try and have a central overview, but it was agreed that this issue (#43241) is the correct place to continue the discussion. I don't want to drag this in the direction of issue administration, but it's more than possible that the summaries are best retained within the issues linked under the original Tracking Issues for Individual Block Supports heading at the top of this issue, rather than having a single check-list here. To that end, I've removed the check-list from my previous comment.
aaronrobertshaw commentedon Jul 3, 2024
@markhowellsmead that's exactly the reason all these design tooling issues were created in the first place 🙂
The details block was a compromise to keep a historical record of where things are at right now.
Contrary to "sweeping problems under the carpet", the dedicated feature issues are more discoverable than a list in a single comment on this issue. So I think we are on the same team here in that we'd both like to see progress made. The dedicated issues per block support are our best bet to do that.
To this point, yes, #43241 was referred to explicitly but I think it was more meant as the collective set of design tooling issues. This is just the primary entry point to those.
Thank you 🙇
Having a single checklist or source of truth per block support should help limit confusion and hopefully make it easier for anyone to contribute if they have a particular block and support they'd like to see adopted 🤞
P.S. Yes, you can use a simple HTML
detailsblock in GitHub comments.Click for snippet
andrewserong commentedon Jul 3, 2024
Yes, that was my intention — there are heaps of great features that folks would love to implement but some will require more discussion than others. My main hesitation with big tasks lists is that they can sometimes obfuscate how challenging and involved each task might be, and that there'll be discussions to be had along the way.
To be clear, though, I'm very excited seeing all the enthusiasm for improving block supports consistency and feature support here! With many eyes, hopefully it'll be easier for us to tackle in the long term.
t-hamano commentedon Jul 28, 2024
Should the following block support also be managed in a separate tracking issue?
backgroundbackgroundImagebackgroundSizeshadowaaronrobertshaw commentedon Jul 29, 2024
Eventually yes.
My preference would be to address the issues we have now, moving them to a point we can call them complete, before splitting effort further.
Background supports are still in flux, in particular the merging of color gradient and background image support. So that one needs some more time.
Shadow support is only new as well. There is nothing stopping it being adopted for critical use cases but I think its a little premature to try and get it adopted widely over the other pre-existing supports.
simison commentedon Aug 9, 2024
@aaronrobertshaw related to design tooling:
aaronrobertshaw commentedon Aug 9, 2024
Thanks for flagging that one and creating a separate issue @simison 👍
Given it's only a handful of blocks that need an update around caption handling, it might be best to track that via #64385. I've added the
[Feature] Design Toolsand[Type] Enhancementlabels to the issue so it should come up in related searches and work efforts.aaronrobertshaw commentedon Sep 8, 2026
I have updated this issue's description with the current state of this work.
The per-support tracking issues under this one have been closed. Their tables had fallen behind, there were 26 new blocks added since this effort began. Multiple new block supports have also been implemented yet not included in these efforts. Decisions recorded in those sub-issues still stand unless this issue description says otherwise.
This issue's description now lists the full remaining set as of today. About 330 updates grouped by support with any open pull request linked on the line it affects.
Those lists are generated from the audit and from
block.jsonfiles on trunk. So an item disappears once its support lands. Please do not edit them in place, the next refresh will overwrite the change. Comment here to claim something and reference this issue from the PR.aaronrobertshaw commentedon Sep 17, 2026
I've closed #83019 as something we won't adopt for now. There are a few embed types that won't render in standard aspect ratios that would fill the block so applying borders and shadows to the embed block itself isn't clean. Further we can't reliably apply the styles to or target inner markup within iframes of an unknown or potentially changeable structure.
So for now, we have more valuable additions that we should focus on before revisiting this.