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

Add outer padding support to the flow layout #35919

Open
wants to merge 3 commits into
base: trunk
Choose a base branch
from

Conversation

@youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Oct 25, 2021

closes #35607

While implementing the 2022 theme, it has been noticed that full width blocks should ignore the padding of the container block in order to expand to the whole window width.

A solution to this is to use negative margins for full aligned blocks, that said, the solution means that the layout should be aware of the applied padding. This PR solves this by adding a new "outerPadding" config to the "flow" layout.

Testing instructions

@MaggieCabrera
Copy link
Contributor

@MaggieCabrera MaggieCabrera commented Oct 25, 2021

This is the related issue for this PR: #35607

$style = "$selector > * {";
$style = "$selector {";
$style .= "--wp-style-layout-outer-padding: $outer_padding;";
$style .= 'padding: 0 var(--wp-style-layout-outer-padding);';
Copy link
Contributor Author

@youknowriad youknowriad Oct 25, 2021

For simplicity, the outerPadding property is assumed to represent the left/right paddings of the container block. We could potentially update it to support any kind of value but it would require a bit more code.

Copy link
Contributor

@jasmussen jasmussen Oct 25, 2021

I wonder what we can do here. The zero top padding is important for the TT2 patterns, sure, but i imagine in many cases, sites will want a little top and bottom padding:

Screenshot 2021-10-25 at 12 57 45

I'd definitely prefer to avoid gnarly first-child/last-child rules, so this is a head scratcher.

@jasmussen
Copy link
Contributor

@jasmussen jasmussen commented Oct 25, 2021

Wildly fast and impressive as usual. Question: where in theme.json do I add the "outerPadding" value?

(Edit: I tried adding it as settings.layout.outerPadding, but can't seem to get that to work)

@github-actions
Copy link

@github-actions github-actions bot commented Oct 25, 2021

Size Change: +2.38 kB (0%)

Total Size: 1.07 MB

Filename Size Change
build/block-editor/index.min.js 135 kB -187 B (0%)
build/block-library/blocks/cover/style-rtl.css 1.17 kB -2 B (0%)
build/block-library/blocks/cover/style.css 1.17 kB -2 B (0%)
build/block-library/blocks/navigation/editor-rtl.css 1.78 kB +71 B (+4%)
build/block-library/blocks/navigation/editor.css 1.78 kB +72 B (+4%)
build/block-library/blocks/navigation/style-rtl.css 1.71 kB +9 B (+1%)
build/block-library/blocks/navigation/style.css 1.7 kB +12 B (+1%)
build/block-library/editor-rtl.css 9.67 kB +64 B (+1%)
build/block-library/editor.css 9.67 kB +65 B (+1%)
build/block-library/index.min.js 151 kB +1.71 kB (+1%)
build/block-library/style-rtl.css 10.5 kB +9 B (0%)
build/block-library/style.css 10.5 kB +9 B (0%)
build/components/index.min.js 212 kB +240 B (0%)
build/components/style-rtl.css 15.4 kB +89 B (+1%)
build/components/style.css 15.4 kB +84 B (+1%)
build/edit-post/index.min.js 29.4 kB -24 B (0%)
build/edit-site/style-rtl.css 5.78 kB +72 B (+1%)
build/edit-site/style.css 5.78 kB +70 B (+1%)
build/editor/index.min.js 37.7 kB +20 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 13.9 kB
build/block-editor/style.css 13.9 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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 549 B
build/block-library/blocks/button/style.css 549 B
build/block-library/blocks/buttons/editor-rtl.css 309 B
build/block-library/blocks/buttons/editor.css 309 B
build/block-library/blocks/buttons/style-rtl.css 317 B
build/block-library/blocks/buttons/style.css 317 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/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 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 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 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 977 B
build/block-library/blocks/gallery/editor.css 982 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 502 B
build/block-library/blocks/image/style.css 505 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 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 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 493 B
build/block-library/blocks/media-text/style.css 490 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 488 B
build/block-library/blocks/navigation-link/editor.css 489 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/view.min.js 2.74 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 198 B
build/block-library/blocks/page-list/style.css 198 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 347 B
build/block-library/blocks/post-comments-form/style.css 347 B
build/block-library/blocks/post-comments/style-rtl.css 475 B
build/block-library/blocks/post-comments/style.css 475 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 396 B
build/block-library/blocks/post-featured-image/editor.css 397 B
build/block-library/blocks/post-featured-image/style-rtl.css 156 B
build/block-library/blocks/post-featured-image/style.css 156 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 391 B
build/block-library/blocks/post-template/style.css 392 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 60 B
build/block-library/blocks/post-title/style.css 60 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 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 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 262 B
build/block-library/blocks/query-pagination/editor.css 255 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 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 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 250 B
build/block-library/blocks/separator/style.css 250 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 770 B
build/block-library/blocks/site-logo/editor.css 770 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 824 B
build/block-library/blocks/social-links/editor.css 823 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 815 B
build/block-library/common.css 812 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 668 B
build/block-library/theme.css 673 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46 kB
build/compose/index.min.js 10.4 kB
build/core-data/index.min.js 12.4 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.44 kB
build/edit-navigation/index.min.js 15.8 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/style-rtl.css 7.12 kB
build/edit-post/style.css 7.12 kB
build/edit-site/index.min.js 30.7 kB
build/edit-widgets/index.min.js 16.3 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.18 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.21 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 5.99 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.72 kB
build/keycodes/index.min.js 1.3 kB
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.63 kB
build/reusable-blocks/index.min.js 2.19 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.7 kB
build/server-side-render/index.min.js 1.52 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.11 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 25, 2021

settings.layout.outerPadding that should be right. (see the linked 2022 PR), it does work for me 🤷‍♂️ but let me check again.

@jasmussen
Copy link
Contributor

@jasmussen jasmussen commented Oct 25, 2021

Yeah I'm not seeing the --wp-style-layout-outer-padding variable output. I'm probably doing something wrong, I'll keep digging. But just by glancing at the code, this was exactly what I had been hoping for.

@MaggieCabrera
Copy link
Contributor

@MaggieCabrera MaggieCabrera commented Oct 25, 2021

I'm testing this again with my alignments markup on emptytheme.

The first thing I see is that this requires the group blocks to have inherit layout. In the case of emptytheme the template parts for example are defined simply with

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

and no other group blocks inside, and there's no padding being applied to it. I suppose that's fine and it's easy to circumvent, I just wasn't expecting that.

Looking at the mobile version I see a little issue:

Trunk This PR
Screenshot 2021-10-25 at 12-27-50 Alignments – Skatepark Screenshot 2021-10-25 at 12-27-34 Alignments – Skatepark

When I debug this I see that for example something like:

<!-- wp:cover {"customOverlayColor":"#b65454","align":"full"} -->
<div class="wp-block-cover alignfull"><span aria-hidden="true" class="has-background-dim-100 wp-block-cover__gradient-background has-background-dim" style="background-color:#b65454"></span><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center","placeholder":"Write title…"} -->
<p class="has-text-align-center">Test cover block that is full width</p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:cover -->

Is failing like so:
Screenshot 2021-10-25 at 12 37 41

We've encountered this case before and solved it using width: unset; for these cases

@MaggieCabrera
Copy link
Contributor

@MaggieCabrera MaggieCabrera commented Oct 25, 2021

Yeah I'm not seeing the --wp-style-layout-outer-padding variable output. I'm probably doing something wrong, I'll keep digging. But just by glancing at the code, this was exactly what I had been hoping for.

		"layout": {
			"contentSize": "840px",
			"wideSize": "1100px",
			"outerPadding": "30px"
		}

Worked for me while testing with emptytheme. You need to look for the variable on the containers with inherit layout, it's not being applied to the root container.

@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 25, 2021

The first thing I see is that this requires the group blocks to have inherit layout.

If the group block doesn't have any layout (inherit or a specific one), the inner blocks won't have full width options available anyway.

@jasmussen
Copy link
Contributor

@jasmussen jasmussen commented Oct 25, 2021

You need to look for the variable on the containers with inherit layout, it's not being applied to the root container.

Thanks, I see it! Works well:

Screenshot 2021-10-25 at 12 43 43

This seems to make sense to me, and work as intended, but let me poke at it a bit more!

@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 25, 2021

For the "Cover" block, there's a "width: 100%" rule in the default styles there. I wonder why we have it and whether we can remove it or transform it to min-width. Theme authors shouldn't have to unset it on their own.

@MaggieCabrera
Copy link
Contributor

@MaggieCabrera MaggieCabrera commented Oct 25, 2021

For the "Cover" block, there's a "width: 100%" rule in the default styles there. I wonder why we have it and whether we can remove it or transform it to min-width. Theme authors shouldn't have to unset it on their own.

Yep, can confirm min-width would solve it for the cover block! I tested a bunch of other blocks that did fine on full width:

Screenshot 2021-10-25 at 12-52-06 Full width – Skatepark

@youknowriad youknowriad requested a review from ajitbohra as a code owner Oct 25, 2021
@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 25, 2021

I removed the width rule from the cover block. I didn't see any issue but yeah more testing would be good.

@MaggieCabrera
Copy link
Contributor

@MaggieCabrera MaggieCabrera commented Oct 25, 2021

I removed the width rule from the cover block. I didn't see any issue but yeah more testing would be good.

Agree, I looked for the reason we have it there and I couldn't find it, it's been years and the code has changed a bit, with display: flex; on the block I don't think we need it and I couldn't break it without the width value.

@jasmussen
Copy link
Contributor

@jasmussen jasmussen commented Oct 25, 2021

I like it.

  • When embracing inherited layout, you can essentially control which blocks get these rules. That's a nice and simple way to ensure a generic approach to this
  • With a single outer padding value, we can create an interface to adjust it in global styles, that same as "blockGap" will feel nice and intuitive to use
  • Without extra burden on themes, full wide blocks are truly full wide, and break beyond the site padding, as envisioned.
  • Groups, including wide and fullwide inside, they work as you'd expect, still with the "inherit" toggle.

It will need a bit of understanding of what the "inherit" toggle does, we might need to refine the help text a little bit, but I think this is a good thing overall.

The one thing I'm still scratching my head over is the top and bottom paddings. By zeroing them out we enable the patterns where topmost (or last) blocks can go all the way to the top, which for instance is needed in TT2. I'd love to avoid difficult first-child rules that add negative top margin to handle this, but at the same time it feels like we need a simple and intuitive way to allow top padding.

I'll think about this a bit more over lunch, but just as a quick option: can we allow axial controls in theme.json? I.e. TT2 can add:

"layout": {
	"contentSize": ...,
	"wideSize": ...,
	"outerPadding": "0 1.25rem"
},

that would enable the specific TT2 patterns to go all the way to the top, and handle any extra top padding inside its own header template part. But other themes could simply add this:

"layout": {
	"contentSize": ...,
	"wideSize": ...,
	"outerPadding": "1.25rem"
},

to have a uniform all the way around padding. This would allow them to have easy true fullwide images in their posts, but a simple padding all the way around.

I'll come back to this.

@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 25, 2021

I think the outerPadding format should be the exact same format used for the "padding" attribute when you specify a padding for a block. The layout should be smart enough to extract the left and right ones from there and apply them to the full widths.

@kjellr
Copy link
Contributor

@kjellr kjellr commented Oct 25, 2021

This is cool! It generally seems to work well, and I like having access to this as a variable.

A couple questions:


I'm also seeing one scenario that introduces some breakage: setting padding on a wide-width group block.

Screen Shot 2021-10-25 at 10 43 47 AM

<!-- wp:group {"align":"wide","style":{"spacing":{"padding":{"top":"50px","right":"50px","bottom":"50px","left":"50px"}}},"backgroundColor":"secondary","layout":{"inherit":true}} -->
<div class="wp-block-group alignwide has-secondary-background-color has-background" style="padding-top:50px;padding-right:50px;padding-bottom:50px;padding-left:50px"><!-- wp:paragraph -->
<p>Wide width</p>
<!-- /wp:paragraph -->

<!-- wp:group {"align":"full","backgroundColor":"foreground","textColor":"background"} -->
<div class="wp-block-group alignfull has-background-color has-foreground-background-color has-text-color has-background"><!-- wp:paragraph -->
<p>Full width</p>
<!-- /wp:paragraph --></div>
<!-- /wp:group --></div>
<!-- /wp:group -->

@youknowriad
Copy link
Contributor Author

@youknowriad youknowriad commented Oct 26, 2021

I updated the format of the outer padding to support any kind of padding (object with left, right, top, bottom keys like the padding attribute).

If a group block has a background color + alignfull, would it make sense to swap out the default padding value here with the new --wp-style-layout-outer-padding variable?

Maybe but this would require a number of things: update it for all blocks and not just "group", provide a fallback for classic themes, it might not be so simple.

Would this live alongside the current site padding control? Or replace it?

This is the only thing that make me concerned about this PR and whether it's the right approach. These two things (outerPadding and padding) are completely different things and in fact one has the potentially to override the other (thus your bug). We can't use padding at the moment because there's no way to "inherit" padding from theme.json like we do for "layout", that's why "outerPadding" is a property of the layout object.

Potential solution here is to introduce some kind of dependency between "layout" and "padding" block supports. Meaning if a block supports both padding and layout and the user chose to "inherit" layout, hide the "padding" control and ignore the value defined by the user there and inherit the one from theme.json instead. Maybe that's the right solution though I'd love more thoughts here, I'm not sure I feel confident making that decision on my one :) cc @mcsf @mtias @ntsekouras

@jasmussen
Copy link
Contributor

@jasmussen jasmussen commented Oct 26, 2021

I think the outerPadding format should be the exact same format used for the "padding" attribute when you specify a padding for a block.

That means I can explicitly define a top padding if I want to, correct? (If yes, sounds good!)

Edit: Welp, we posted at the same time. I consider my question answered then! 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

4 participants