Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Try reducing specificity of layout style selectors #60228

Merged
merged 8 commits into from
Apr 19, 2024

Conversation

tellthemachines
Copy link
Contributor

@tellthemachines tellthemachines commented Mar 27, 2024

What?

Final part of #57841.

Reduces specificity of the layout selectors:

  • removes root selector (body) from base styles (base styles are the minimum non-optional styles for each layout type e.g. display: flex)
  • wraps non-base styles (such as block global spacing styles) in :where()
  • Removes duplication of selectors where it's no longer necessary due to base style specificity reduction (in the selectors that apply block instance layout styles, such as .wp-container-core-group-is-layout-10, as well as the selectors that apply margin overrides such as :where(.wp-block-group-is-layout-constrained) > :first-child)

I'll leave updating the test strings to after there's been at least one round of testing and we're reasonably sure of the changes because it's such a pain to do.

Testing Instructions

  1. Test all blocks with layout in both block and classic themes;
  2. In block themes check that changing the spacing of a layout block in global styles works correctly;
  3. In all themes check that changing the layout settings on a block instance works correctly;
  4. Check that margins set by blocks in global styles aren't overridden by layout spacing styles;
  5. Exceptions to the above are the top margin of the first block and the bottom margin of the last block in a flow or constrained layout, which should always be 0.

There are likely edge cases I'm missing here. If you can think of any, please test them 🙏

Testing Instructions for Keyboard

Screenshots or screencast

@tellthemachines tellthemachines added [Type] Enhancement A suggestion for improvement. [Feature] Layout Layout block support, its UI controls, and style output. labels Mar 27, 2024
@tellthemachines tellthemachines self-assigned this Mar 27, 2024
Copy link

github-actions bot commented Mar 27, 2024

Size Change: -1.49 kB (0%)

Total Size: 1.75 MB

Filename Size Change
build/block-editor/content.css 4.5 kB +1 B (0%)
build/block-editor/index.min.js 256 kB +187 B (0%)
build/block-library/blocks/gallery/editor-rtl.css 956 B +9 B (+1%)
build/block-library/blocks/gallery/editor.css 960 B +8 B (+1%)
build/block-library/editor-rtl.css 12.4 kB +6 B (0%)
build/block-library/editor.css 12.4 kB +8 B (0%)
build/blocks/index.min.js 51.6 kB -17 B (0%)
build/components/index.min.js 222 kB -148 B (0%)
build/components/style-rtl.css 11.9 kB +13 B (0%)
build/components/style.css 11.9 kB +14 B (0%)
build/edit-post/index.min.js 18.2 kB -1.42 kB (-7%)
build/edit-post/style-rtl.css 4.24 kB -207 B (-5%)
build/edit-post/style.css 4.23 kB -208 B (-5%)
build/edit-site/index.min.js 225 kB -1.5 kB (-1%)
build/edit-site/style-rtl.css 13.9 kB -161 B (-1%)
build/edit-site/style.css 13.9 kB -167 B (-1%)
build/edit-widgets/index.min.js 17.9 kB +76 B (0%)
build/editor/index.min.js 77.9 kB +1.63 kB (+2%)
build/editor/style-rtl.css 6.94 kB +197 B (+3%)
build/editor/style.css 6.94 kB +196 B (+3%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.27 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.51 kB
build/block-editor/default-editor-styles-rtl.css 395 B
build/block-editor/default-editor-styles.css 395 B
build/block-editor/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 133 B
build/block-library/blocks/audio/theme.css 133 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 671 B
build/block-library/blocks/cover/editor.css 674 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 322 B
build/block-library/blocks/embed/editor.css 322 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 327 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 647 B
build/block-library/blocks/group/editor.css 647 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 878 B
build/block-library/blocks/image/editor.css 878 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 133 B
build/block-library/blocks/image/theme.css 133 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 306 B
build/block-library/blocks/media-text/editor.css 305 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 727 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 353 B
build/block-library/blocks/pullquote/theme-rtl.css 174 B
build/block-library/blocks/pullquote/theme.css 174 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 235 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 690 B
build/block-library/blocks/search/style.css 689 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 239 B
build/block-library/blocks/separator/style.css 239 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 801 B
build/block-library/blocks/site-logo/editor.css 801 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 431 B
build/block-library/blocks/template-part/editor.css 431 B
build/block-library/blocks/template-part/theme-rtl.css 107 B
build/block-library/blocks/template-part/theme.css 107 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 133 B
build/block-library/blocks/video/theme.css 133 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 218 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 707 B
build/block-library/theme.css 713 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/commands/index.min.js 15.2 kB
build/commands/style-rtl.css 953 B
build/commands/style.css 951 B
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.5 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 9 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 578 B
build/edit-widgets/style-rtl.css 4.16 kB
build/edit-widgets/style.css 4.16 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.07 kB
build/format-library/style-rtl.css 493 B
build/format-library/style.css 492 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.2 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.17 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.3 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 851 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 1.57 kB
build/nux/style-rtl.css 748 B
build/nux/style.css 744 B
build/patterns/index.min.js 6.47 kB
build/patterns/style-rtl.css 595 B
build/patterns/style.css 595 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.85 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10 kB
build/router/index.min.js 1.88 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.03 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.23 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@tellthemachines
Copy link
Contributor Author

Ok folks, I think I've addressed all the issues that had popped up in #57841, so this is ready for some testing!

@aaronrobertshaw
Copy link
Contributor

FWIW I've begun testing this and it's looking good so far ✨

Unfortunately, I've run out of time and only gotten to reviewing the code and testing mostly standard blocks in a block theme. If nobody else picks this up in the meantime, I'll finish off reviewing it when I'm back online next week.

So far:

✅ Code changes here almost match 1:1 with the original PR except for a few intentional deviations
✅ Standard core blocks render as expected in a block theme
✅ Global layout styles appear ok for both root and block-type styles (more knowledgeable layout support eyes on this would be great)
✅ Block instance styles related to spacing apply correctly in the editor and frontend

The blocks I've primarily tested with include:

  • Cover
  • Column
  • Columns
  • Social Links
  • Details
  • Navigation
  • Gallery
  • Quote
  • Group
  • Buttons

Those I haven't yet looked at are: Query, Post Content/Template, and pagination blocks.

I'll leave updating the test strings to after there's been at least one round of testing and we're reasonably sure of the changes because it's such a pain to do.

I think you should be right to update the tests. I'm happy to share the load and update the tests further down the line if it turns out we need to.

@tellthemachines
Copy link
Contributor Author

Thanks for testing @aaronrobertshaw!

I think you should be right to update the tests. I'm happy to share the load and update the tests further down the line if it turns out we need to.

I don't think it's a valuable use of time to update those tests before the changes are final. The only thing they flag is changes to the styles output, which we already know are happening. They're useless in indicating any actual breakage as a result of the changes, because breakage is purely visual.

The other problem with updating early is that those test strings change often, so the likelihood of merge conflicts increases quite a bit after editing those files.

@aaronrobertshaw
Copy link
Contributor

I don't think it's a valuable use of time to update those tests before the changes are final

Your call, my thinking was these changes already had a fair bit of testing via #57841 and we could have some confidence there that this could land quickly.

@tellthemachines
Copy link
Contributor Author

we could have some confidence there that this could land quickly.

I hope so! It would be good to get a bit more testing on it though, and many of us are heading into a long weekend, so I'd rather be cautious with the expectation 😅

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've had a chance to give this some further testing. This time across both classic and block themes.

Block themes included: 2024, 2023, 2022, and emptytheme
Classic themes included: 2021, 2020, 2019, and emptyhybrid

I primarily focused on the same set of blocks from my previous testing that adopt layout or blockGap support but did also quickly smoke test other blocks at random.

The main blocks tested with included; Cover, Column/s, Social Links, Details, Navigation, Gallery, Quote, Group/Row/Stack, and Buttons.

For the vast majority of cases, this all tested well as per the test instructions.

There did seem to be a couple of theme-specific issues though.

1. TwentyTwentyOne

The Row and Stack blocks display differently between the editor and frontend on this branch. It looks like TT1 adds a .wp-block-group { display: flow-root } style. With the current style load order and specificity it is taking precedence over .is-layout-flex.

Screenshot 2024-04-04 at 4 27 55 PM
2. TwentyTwenty

TwentyTwenty adds some .editor-styles-wrapper scoped styles which reset margins for the Gallery and Quote blocks. On trunk, the higher specificity allows the layout styles to take precedence, however, they lose out on this branch.

3. TwentyTwentyOne & EmptyHybrid

The navigation block's layout controls for justification don't appear to work on trunk or this PR. So just something I thought worth noting.

Do we have an easy means to get a ballpark assessment of how many themes could have styles that may conflict with the reduced specificity here? Or a way to reach out to impacted theme authors like we sometimes do with plugin authors?

All in all, if we can manage the theme-specific issues, I feel like this is pretty close.

That said, some extra eyes and additional reviews would be very beneficial as this one seems like it could be easy to have missed something 🙏

@talldan
Copy link
Contributor

talldan commented Apr 4, 2024

Tested lots of patterns across some core themes. The general trend seems to be that really old classic themes are good, new block themes are good, the in between themes (post block editor but pre block themes) have some issues.

I'll also try to test some third party themes (open to recommendations). Here are the issues I spotted:

  • Twenty Nineteen in the editor: The 'Text with alternating images' pattern has some subtle differences at wider screen widths. The first columns block has a rule html :where(.wp-block)[data-align=wide] { max-width: 1100px; } that's taking effect in this branch, but is overridden in trunk by max-width: var(--wp--style--global--content-size);.
  • Twenty Twenty in the editor: Quite a few of the patterns have extra spacing, especially at the top and bottom, see 'Team members', 'Text with alternating images', 'Feature grid, 3 columns', 'Pricing table' (that one's very noticeable). I think it's the same thing Aaron mentioned, the body .is-layout-flex > * rule usually sets margin to 0, but on this branch other styles are taking precedence.
  • Twenty Twenty frontend: Seem to be different issues here with widths/alignments of blocks in the patterns. 'Project Description' is an example. Seems to be due to different rules take precedence for wide alignments on the columns block in that pattern.
  • Twenty Twenty one frontend: the editor and frontend do seem to be more consistent. Noticing the same display: flow-root taking precedence over display: flex issue that Aaron did for both stack and row blocks on the front end. For example in the 'Title text and button on left with image on right' pattern.

@tellthemachines
Copy link
Contributor Author

Thanks for testing @aaronrobertshaw and @talldan! I couldn't find all the patterns mentioned (e.g. Project Description) in Twenty Twenty or Twenty Twenty One but I tested with the ones I found and made some adjustments.

The base layout rule (the one that sets the display mode) is now identical to trunk, which should fix the issue with Row blocks in TT1. I also very slightly increased specificity for the rules that output margin overrides on flex and grid children, which should fix the extra margins in patterns. Hopefully that covers everything!

The first columns block has a rule html :where(.wp-block)[data-align=wide] { max-width: 1100px; } that's taking effect in this branch, but is overridden in trunk by max-width: var(--wp--style--global--content-size);

I think that's actually as it should be! #60489 removes the max-width: var(--wp--style--global--content-size) from classic themes so it doesn't override theme-set widths.

@tellthemachines tellthemachines marked this pull request as ready for review April 11, 2024 04:11
Copy link

github-actions bot commented Apr 11, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: tellthemachines <[email protected]>
Co-authored-by: aaronrobertshaw <[email protected]>
Co-authored-by: talldan <[email protected]>
Co-authored-by: ramonjd <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@tellthemachines
Copy link
Contributor Author

tellthemachines commented Apr 12, 2024

The navigation block's layout controls for justification don't appear to work on trunk or this PR. So just something I thought worth noting.

I can only reproduce this if the Navigation block contains a Page List with only one or two short blocks in it. Page List is getting a margin-right: auto from this overly generic classic theme stylesheet.

It could be fixed by adding an override in the Page List editor styles but it's not ideal to so when the issue is specific to classic themes. It could also be fixed by updating the Navigation block to follow other layout blocks in adding layout classes to the inner wrapper instead of the outer. That's a bigger piece of work though.

Edit: actually, it happens with the Search block too. I think moving the layout classes is the best fix for this, if we can do it without upsetting all the layers of custom Nav block behaviour 😅

@tellthemachines tellthemachines force-pushed the try/reduce-layout-specificity branch from bbf8ffd to 0776387 Compare April 12, 2024 04:16
@tellthemachines
Copy link
Contributor Author

OK folks I think this is ready for another round! @aaronrobertshaw and @talldan, if you could confirm the issues you found are fixed perhaps I'll move on to the test string updates so we can get this merged soonish.

@ramonjd
Copy link
Member

ramonjd commented Apr 16, 2024

I've been testing themes 2013-2024, just with Group and Column blocks so far.

Switching between trunk and this branch for each theme I can't (yet) see any regressions. Haven't looked at other blocks.

Here's my test HTML
<!-- wp:columns {"style":{"spacing":{"margin":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|60"}}}} -->
<div class="wp-block-columns" style="margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60)"><!-- wp:column {"style":{"spacing":{"blockGap":"var:preset|spacing|50"}}} -->
<div class="wp-block-column"><!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"},"blockGap":"var:preset|spacing|80","margin":{"top":"var:preset|spacing|60"}}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"stretch"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;margin-top:var(--wp--preset--spacing--60);padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:group {"style":{"color":{"background":"#f0e9e9"}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#f0e9e9"><!-- wp:paragraph -->
<p>Inner Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#f0e9e9"}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#f0e9e9"><!-- wp:paragraph -->
<p>Inner Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#f0e9e9"}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#f0e9e9"><!-- wp:paragraph -->
<p>Inner Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"}}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph {"style":{"color":{"background":"#f27c84"}}} -->
<p class="has-background" style="background-color:#f27c84">Row</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#f27c84"}}} -->
<p class="has-background" style="background-color:#f27c84">Row</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#f27c84"}}} -->
<p class="has-background" style="background-color:#f27c84">Row</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"},"blockGap":"var:preset|spacing|50"}},"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"center","orientation":"vertical"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph {"style":{"color":{"background":"#ffdf50"}}} -->
<p class="has-background" style="background-color:#ffdf50">Stack</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#ffdf50"}}} -->
<p class="has-background" style="background-color:#ffdf50">Stack</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#ffdf50"}}} -->
<p class="has-background" style="background-color:#ffdf50">Stack</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"},"blockGap":"var:preset|spacing|60"}},"layout":{"type":"grid","columnCount":2,"minimumColumnWidth":null}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph {"style":{"color":{"background":"#a0ff9e"}}} -->
<p class="has-background" style="background-color:#a0ff9e">Grid</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#a0ff9e"}}} -->
<p class="has-background" style="background-color:#a0ff9e">Grid</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#a0ff9e"}}} -->
<p class="has-background" style="background-color:#a0ff9e">Grid</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"style":{"color":{"background":"#a0ff9e"}}} -->
<p class="has-background" style="background-color:#a0ff9e">Grid</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group --></div>
<!-- /wp:column -->

<!-- wp:column {"width":"316px","style":{"color":{"background":"#dfc8c8"}},"layout":{"type":"constrained","contentSize":"158px","wideSize":"278px","justifyContent":"right"}} -->
<div class="wp-block-column has-background" style="background-color:#dfc8c8;flex-basis:316px"><!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph -->
<p>Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph -->
<p>Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph -->
<p>Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group -->

<!-- wp:group {"style":{"color":{"background":"#daa0f0"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|10","right":"var:preset|spacing|10"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group has-background" style="background-color:#daa0f0;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)"><!-- wp:paragraph -->
<p>Group</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->

@aaronrobertshaw
Copy link
Contributor

aaronrobertshaw commented Apr 16, 2024

if you could confirm the issues you found are fixed perhaps

I've retested with the layout blocks across 2020 - 2024 and the issues noticed previously with 2021 have been resolved.

As for the other issues I noted, the nav block issue was out of scope for this PR, but I'd like a plan to address/fix the 2020 issue flagged.

Anything that can be reproduced on trunk is out of scope for this PR

I'm not sure I agree 100% on this as before #60154 broke the styles, this PR was breaking them too. Or, am I misunderstanding this comment?

If the considered decision is to dismiss the concern, so be it.

In any case, themes that manually add .editor-styles-wrapper probably shouldn't be doing so; I might open a trac ticket to look into it.

True, but the reality is they are.

Do we need to wait on the results of that ticket or are you happy if some themes break in the meantime?

@tellthemachines
Copy link
Contributor Author

I'm not sure I agree 100% on this as before #60154 broke the styles, this PR was breaking them too. Or, am I misunderstanding this comment?

I don't believe so, and reverting #60154 on this branch shows Gallery and Quote looking as expected in the editor. I think it's best to fix that separately; I'm hoping we can re-add specificity to the selector without breaking anything else.

Do we need to wait on the results of that ticket or are you happy to break some themes in the meantime?

No, we'd probably better patch it in the meantime. But our docs explicitly state that "...you should not target any of the editor class names directly" so it's not great that default themes are being inconsistent with that recommendation 😬

@aaronrobertshaw
Copy link
Contributor

I think it's best to fix that separately;

That's fair enough 👍

My concern was in part, whether the earlier issue (introduced in #60154) might result in other issues in this PR being hidden when comparing back and forth between trunk and this branch.

But our docs explicitly state that "...you should not target any of the editor class names directly" so it's not great that default themes are being inconsistent with that recommendation

Agreed, "do as we say, not as we do" doesn't help anyone much!

No, we'd probably better patch it in the meantime.

Sounds good. So long as we have a plan to address it, we hopefully won't be breaking any trust with theme authors 🤞

@tellthemachines
Copy link
Contributor Author

Ok I just put up a fix for the Twenty Twenty issue in #60802.

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the patience here and the quick fix @tellthemachines 👍

I've given this another run after rebasing on trunk and it's looking good.

Block Themes (tested with 2024 & 2023)

  • Didn't spot any new issues across both editors or frontend
  • Global styles worked as expected
  • Block instance styles related to spacing supports apply correctly

Classic Themes (2020, 2019, Neve, OceanWp, emptytheme )

  • Neve: There were some margin differences between the editor and frontend but these were also present on trunk and before Fix horizontal flex layout in classic themes. #60154.
  • OceanWP: Similar top level margin differences between editor and frontend as Neve. Also on trunk.
  • 2019: Didn't centre content but was the same between trunk and this PR

Hybrid Theme (emptyHybrid)

  • Didn't spot any issues

Once the tests are updated, this should be good to go 🚀

@tellthemachines tellthemachines force-pushed the try/reduce-layout-specificity branch from 0776387 to 4b5ea07 Compare April 18, 2024 06:29
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like Docker failed to spin up for the PHP e2es but running the updated theme.json tests locally, I still get 36 failures:

Screenshot 2024-04-18 at 5 36 06 PM

@tellthemachines
Copy link
Contributor Author

It looks like Docker failed to spin up for the PHP e2es but running the updated theme.json tests locally, I still get 36 failures:

I haven't done the PHP ones yet! Just the JS. I should finish updating them all tomorrow.

@aaronrobertshaw
Copy link
Contributor

I haven't done the PHP ones yet! Just the JS. I should finish updating them all tomorrow.

Apologies, I only read the last commit message and thought I could quickly sneak in an approval before finishing up.

@tellthemachines
Copy link
Contributor Author

Ok all the test strings are updated now!

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚢

Layout and Theme.json tests are all passing ✅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Layout Layout block support, its UI controls, and style output. Needs PHP backport Needs PHP backport to Core [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants