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

Don't apply root padding to nested layout blocks #43842

Merged
merged 3 commits into from
Sep 9, 2022

Conversation

tellthemachines
Copy link
Contributor

What?

Fixes #43095 by resetting each root padding rule so it doesn't apply where there are nested .has-global-padding selectors. The new rules added simply negate the existing rules if the .has-global-padding block is nested inside another .has-global-padding block.

Behaviour before fix

  • Add left/right root padding value to all blocks with .has-global-padding;
  • Set negative left/right margin with same value on all .alignfull direct children of blocks with .has-global-padding;
  • Set left/right root padding value on all blocks that are direct children of the .alignfull blocks with negative margins.

Expected behaviour with fix applied

  1. The outermost container block with content width set will get left/right root padding value;
  2. Its direct alignfull children will get negative left/right margins;
  3. The direct children of those alignfull children will also get left/right root padding value.
  4. Any nested blocks with content width set will not get left/right root padding value unless they are also direct children of the alignfullblocks with negative margins mentioned in 2..

I've tested this with a bunch of different nesting patterns and it seems to be working as expected. The one place where there can be a bit of weirdness is in the post editor view, because the .has-global-padding class isn't output at root level even if the Post Content block has layout set. This means that a block with layout in the post editor might display some extra padding:
Screen Shot 2022-09-05 at 3 54 47 pm
which won't appear in the front end view:
Screen Shot 2022-09-05 at 3 55 10 pm

I think the only way to fully fix that is to make it possible for the post editor to be aware of the Post Content block settings, which we should look into doing separately from this fix.

Testing Instructions

  1. In theme.json, add "useRootPaddingAwareAlignments": true inside the settings object;
  2. In both post and site editor, add a few container blocks (e.g. Group) nested inside each other, with other content inside them. Try with both full width and regular width set, and try adding full width content (e.g. Image block) inside them too;
  3. Check that root padding behaves as expected.

Screenshots or screencast

Before:
Screen Shot 2022-09-05 at 4 30 14 pm

After:
Screen Shot 2022-09-05 at 4 29 21 pm

@tellthemachines tellthemachines self-assigned this Sep 5, 2022
@tellthemachines tellthemachines added [Type] Bug An existing feature does not function as intended Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json labels Sep 5, 2022
@github-actions
Copy link

github-actions bot commented Sep 5, 2022

Size Change: +4.08 kB (0%)

Total Size: 1.25 MB

Filename Size Change
build/block-editor/index.min.js 162 kB +934 B (+1%)
build/block-editor/style-rtl.css 15.2 kB +46 B (0%)
build/block-editor/style.css 15.2 kB +49 B (0%)
build/block-library/blocks/audio/theme-rtl.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/audio/theme.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/avatar/style-rtl.css 84 B +25 B (+42%) 🚨
build/block-library/blocks/avatar/style.css 84 B +25 B (+42%) 🚨
build/block-library/blocks/button/editor-rtl.css 482 B +41 B (+9%) 🔍
build/block-library/blocks/button/editor.css 482 B +41 B (+9%) 🔍
build/block-library/blocks/button/style-rtl.css 523 B +18 B (+4%)
build/block-library/blocks/button/style.css 523 B +18 B (+4%)
build/block-library/blocks/buttons/editor-rtl.css 337 B +45 B (+15%) ⚠️
build/block-library/blocks/buttons/editor.css 337 B +45 B (+15%) ⚠️
build/block-library/blocks/buttons/style-rtl.css 332 B +57 B (+21%) 🚨
build/block-library/blocks/buttons/style.css 332 B +57 B (+21%) 🚨
build/block-library/blocks/categories/style-rtl.css 100 B +21 B (+27%) 🚨
build/block-library/blocks/categories/style.css 100 B +21 B (+27%) 🚨
build/block-library/blocks/cover/style-rtl.css 1.57 kB +11 B (+1%)
build/block-library/blocks/embed/theme-rtl.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/embed/theme.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/image/theme-rtl.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/image/theme.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/navigation/editor-rtl.css 1.99 kB +9 B (0%)
build/block-library/blocks/navigation/editor.css 2 kB +9 B (0%)
build/block-library/blocks/navigation/style-rtl.css 2.15 kB +117 B (+6%) 🔍
build/block-library/blocks/navigation/style.css 2.14 kB +115 B (+6%) 🔍
build/block-library/blocks/separator/style-rtl.css 234 B +1 B (0%)
build/block-library/blocks/separator/style.css 234 B +1 B (0%)
build/block-library/blocks/site-logo/editor-rtl.css 488 B +7 B (+1%)
build/block-library/blocks/site-logo/editor.css 488 B +7 B (+1%)
build/block-library/blocks/site-logo/style-rtl.css 203 B +11 B (+6%) 🔍
build/block-library/blocks/site-logo/style.css 203 B +11 B (+6%) 🔍
build/block-library/blocks/social-links/style-rtl.css 1.4 kB +9 B (+1%)
build/block-library/blocks/social-links/style.css 1.39 kB +9 B (+1%)
build/block-library/blocks/table/theme-rtl.css 190 B +15 B (+9%) 🔍
build/block-library/blocks/table/theme.css 190 B +15 B (+9%) 🔍
build/block-library/blocks/video/theme-rtl.css 126 B +16 B (+15%) ⚠️
build/block-library/blocks/video/theme.css 126 B +16 B (+15%) ⚠️
build/block-library/common-rtl.css 1.02 kB +12 B (+1%)
build/block-library/common.css 1.02 kB +12 B (+1%)
build/block-library/editor-rtl.css 11 kB +52 B (0%)
build/block-library/editor.css 11 kB +50 B (0%)
build/block-library/index.min.js 188 kB +204 B (0%)
build/block-library/style-rtl.css 12 kB +155 B (+1%)
build/block-library/style.css 12 kB +150 B (+1%)
build/block-library/theme-rtl.css 719 B +24 B (+3%)
build/block-library/theme.css 722 B +22 B (+3%)
build/blocks/index.min.js 49.6 kB +12 B (0%)
build/components/index.min.js 198 kB +458 B (0%)
build/components/style-rtl.css 11.5 kB -35 B (0%)
build/components/style.css 11.5 kB -36 B (0%)
build/compose/index.min.js 12 kB -3 B (0%)
build/date/index.min.js 32.1 kB +68 B (0%)
build/dom/index.min.js 4.7 kB +7 B (0%)
build/edit-navigation/style-rtl.css 3.99 kB +7 B (0%)
build/edit-navigation/style.css 4 kB +6 B (0%)
build/edit-post/index.min.js 30.7 kB +136 B (0%)
build/edit-post/style-rtl.css 6.94 kB +6 B (0%)
build/edit-post/style.css 6.94 kB +6 B (0%)
build/edit-site/index.min.js 58.5 kB +592 B (+1%)
build/edit-site/style-rtl.css 8.3 kB +100 B (+1%)
build/edit-site/style.css 8.28 kB +101 B (+1%)
build/edit-widgets/index.min.js 16.5 kB +15 B (0%)
build/edit-widgets/style-rtl.css 4.34 kB +7 B (0%)
build/edit-widgets/style.css 4.34 kB +6 B (0%)
build/editor/index.min.js 41.6 kB +36 B (0%)
build/format-library/index.min.js 6.75 kB -1 B (0%)
build/nux/index.min.js 2.05 kB -3 B (0%)
build/redux-routine/index.min.js 2.74 kB +1 B (0%)
build/widgets/index.min.js 7.19 kB -7 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.05 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 65 B
build/block-library/blocks/archives/style.css 65 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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 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 103 B
build/block-library/blocks/code/style.css 103 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 406 B
build/block-library/blocks/columns/style.css 406 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 187 B
build/block-library/blocks/comment-template/style.css 185 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 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 605 B
build/block-library/blocks/cover/editor.css 607 B
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 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 337 B
build/block-library/blocks/group/editor.css 337 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 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 876 B
build/block-library/blocks/image/editor.css 873 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 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 463 B
build/block-library/blocks/latest-posts/style.css 462 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 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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-submenu/view.min.js 423 B
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
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 363 B
build/block-library/blocks/page-list/editor.css 363 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 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 493 B
build/block-library/blocks/post-comments-form/style.css 493 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 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 507 B
build/block-library/blocks/post-featured-image/editor.css 505 B
build/block-library/blocks/post-featured-image/style-rtl.css 166 B
build/block-library/blocks/post-featured-image/style.css 166 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 282 B
build/block-library/blocks/post-template/style.css 282 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 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 103 B
build/block-library/blocks/preformatted/style.css 103 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 326 B
build/block-library/blocks/pullquote/style.css 325 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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 282 B
build/block-library/blocks/query-pagination/style.css 278 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 439 B
build/block-library/blocks/query/editor.css 439 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 396 B
build/block-library/blocks/search/style.css 393 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 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/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 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 84 B
build/block-library/blocks/site-title/editor.css 84 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/tag-cloud/style-rtl.css 239 B
build/block-library/blocks/tag-cloud/style.css 239 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
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/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-serialization-default-parser/index.min.js 1.1 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.06 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/edit-navigation/index.min.js 16 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/editor/style-rtl.css 3.66 kB
build/editor/style.css 3.65 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.81 kB
build/list-reusable-blocks/index.min.js 1.74 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 953 B
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 612 B
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.4 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 268 B
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

$block_rules .= '.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }';
$block_rules .= '.has-global-padding > .alignfull > :where([class*="wp-block-"]:not(.alignfull):not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
$block_rules .= '.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; }';
$block_rules .= '.has-global-padding > .alignfull > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
Copy link
Member

Choose a reason for hiding this comment

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

Shouldn't this also have :not(.alignwide) included as well? Since the .has-global-padding class is already applied to the parent block?

Currently wide width blocks inside a group block with global padding still get 2x the proper padding.

CleanShot 2022-09-05 at 20 34 47@2x

Copy link
Member

Choose a reason for hiding this comment

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

Seems like the remaining issue occurs when a wide width block is within a fullwidth block (that's not omitted from the above code).

Copy link
Member

Choose a reason for hiding this comment

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

It's especially noticeable when you add padding to the parent group block, regardless of constrained layout or not.

Editor:

CleanShot 2022-09-05 at 20 45 55@2x

Front-end:

CleanShot 2022-09-05 at 20 46 21@2x

You can try this snippet, with Twenty twenty Three to replicate.

Copy link
Member

Choose a reason for hiding this comment

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

Thanks for digging in on this — I know its a tricky one.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, that padding will be applied to any block inside the nested alignfull block that's not also alignfull; you can see it also gets applied to a regular width block:
Screen Shot 2022-09-06 at 5 48 20 pm

(the yellow Group blocks are outside the full width Group and the Media&Text ones inside it)

This is also complicated by the box-sizing property on the blocks that receive padding: some of them are set to border-box (e.g. Media&Text) and others to content-box (e.g. Paragraph, Image) so results vary depending on the block types.

I'm thinking we could target this extra padding rule only to children of alignfull blocks that don't have content width set, as they're the ones that really need that padding? Whereas in blocks with content width set it's more likely to break the alignment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ok I've tried ignoring children of alignfull blocks with content width.

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

This is testing pretty well for me @tellthemachines! With @richtabor's provided markup, when I switch the Media & Text block from wide alignment to full alignment, the nested full width alignment block no longer has extra padding applied 👍

Just left a couple of comments — now that the rules are fairly complex, it'd be good to try to add some inline comments explaining each rule, to aid future debugging. The only blocker I ran into was with an issue with the output in global styles, but looks like it should be a fairly simple fix 🤞

Comment on lines 609 to 612
'padding-right: 0; padding-left: 0; padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom) } .has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); } .has-global-padding :where(.has-global-padding) { padding-right: 0; padding-left: 0; } .has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); } .has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; } .has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left);.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0; }';
}

ruleset += '}';
Copy link
Contributor

Choose a reason for hiding this comment

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

This line appears to break global styles output for me. Can we split this into multiple lines so that it's easier to read / work out where we're concatenating } characters? (I think one of the rules is missing a closing brace, and the very final rule has an extra closing brace since the below ruleset += '}'; line will add a closing one)

image

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ooooh well spotted, yeah this needs to be more legible 😅

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done!

Comment on lines 822 to 824
$block_rules .= '.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; }';
$block_rules .= '.has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
$block_rules .= '.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0; }';
Copy link
Contributor

Choose a reason for hiding this comment

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

Not necessarily a blocker, but now that these rules are fairly complex, is it worth adding a comment before each line about what the rule does? The other rules in this function feel fairly self explanatory to me, but just thinking of our future selves if we want to update these rules at any point, so that we don't forget why each line exists.

@tellthemachines
Copy link
Contributor Author

Thanks for the review @andrewserong ! I included some inline comments on what those CSS rules do. Hopefully they're clear enough! I'll also be working on a dev note for this functionality next week, that will further document the rules and our assumptions about how they should work. Once the feature's in Core we should add that documentation to the handbook.

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Thanks @tellthemachines, those added comments are super helpful and make it much easier to read 👍

This appears to be testing well for me in the site editor as well as the post editor now. It might be worth getting another pair of eyes from @richtabor or others to confirm that the fix largely addresses the pain points. But, given the RC for the next Gutenberg release isn't until next Tuesday, we could always merge and follow-up separately with any required tweaks, too.

LGTM! 🎉

@tellthemachines
Copy link
Contributor Author

I'll go ahead and merge this; if anything's still off we can address it in a follow-up.

@tellthemachines tellthemachines merged commit 35f14cc into trunk Sep 9, 2022
@tellthemachines tellthemachines deleted the fix/root-padding-logic branch September 9, 2022 07:25
@github-actions github-actions bot added this to the Gutenberg 14.1 milestone Sep 9, 2022
@andrewserong andrewserong added the [Feature] Layout Layout block support, its UI controls, and style output. label Sep 29, 2022
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. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Root padding is doubled on child blocks
3 participants