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

Closed
wants to merge 3 commits into 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

@youknowriad youknowriad added [Type] Enhancement A suggestion for improvement. [Feature] Themes Questions or issues with incorporating or styling blocks in a theme. [Feature] Full Site Editing labels Oct 25, 2021
@youknowriad youknowriad self-assigned this Oct 25, 2021
@MaggieCabrera
Copy link
Contributor

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

Choose a reason for hiding this comment

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

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

Choose a reason for hiding this comment

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

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 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 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

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

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

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

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

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

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

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

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
Copy link
Contributor Author

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

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

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

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 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

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 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! 😄

@MaggieCabrera
Copy link
Contributor

I've been testing this against the themes that we are working with and overall I see everything working as expected. The only exception is still the headers and I don't know if it's because I need to think of other way to handle them with this new implementation. Blockbase here running this PR and these changes to implement it on the theme:

Screenshot 2021-10-28 at 14 01 07

Without both PRs we had padding on the header:

Screenshot 2021-10-28 at 14 05 23

The problem here is that the header markup is like so (we are using flex layout):

<!-- wp:group {"className":"site-header","layout":{"type":"flex"},"style":{"spacing":{"padding":{"bottom":"80px"}}}} -->
<div class="wp-block-group site-header" style="padding-bottom:80px">
	<!-- wp:site-logo /-->
	<!-- wp:site-title /-->
	<!-- wp:site-tagline {"style":{"typography":{"fontSize":"var(--wp--custom--font-sizes--tiny)"}}} /-->
	<!-- wp:navigation {"className":"is-style-blockbase-navigation-improved-responsive","itemsJustification":"right","isResponsive":true,"__unstableLocation":"primary","__unstableSocialLinks":"social"} /-->
</div>
<!-- /wp:group -->

I'm thinking that the problem here is that we can't apply layout:inherit to the header template-part so that the padding is applied to it.

I can of course apply an explicit padding in the markup but that defeats the purpose of all this, doesn't it?

@jasmussen
Copy link
Contributor

What are next steps to enable this to land? Anything I/we can help with?

@youknowriad
Copy link
Contributor Author

I'm still seeking opinions and thoughts on the second aspect on that comment #35919 (comment)

@scruffian
Copy link
Contributor

Currently, if blocks are outside of the "layout: inherit" context then they will default to full width. If we introduce a site level padding then the default behaviour would change in this case. (I don't see this as a problem, just trying to summarize the situation!)

Full and wide alignments don't make any sense without "layout: inherit" being set, so it seems fine to connect them to the outerPadding property. The way I see it we should only have one outerPadding variable which would be part of the layout that "layout: inherit" blocks would be aware of - it would sit conceptually at the same level as the "{ layout: { content, wide }}" properties.

@ntsekouras
Copy link
Contributor

ntsekouras commented Oct 29, 2021

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.

I think that sounds good. I guess you think ignoring with a css ! important here, no? 🤔

Comment on lines +134 to +135
margin-left: calc( -1 * ${ outerPadding.left || 0 } ) !important;
margin-right: calc( -1 * ${ outerPadding.right || 0 } ) !important;
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
margin-left: calc( -1 * ${ outerPadding.left || 0 } ) !important;
margin-right: calc( -1 * ${ outerPadding.right || 0 } ) !important;
margin-left: calc( -1 * ${ outerPadding?.left || 0 } ) !important;
margin-right: calc( -1 * ${ outerPadding?.right || 0 } ) !important;

@youknowriad
Copy link
Contributor Author

Full and wide alignments don't make any sense without "layout: inherit" being set

Full and wide alignments do make sense without layout: inherit, you can define custom layouts with content sizes for any part of your template.

I think that sounds good. I guess you think ignoring with a css ! important here, no?

No, I mean, not applying it at all.

@scruffian
Copy link
Contributor

Full and wide alignments do make sense without layout: inherit, you can define custom layouts with content sizes for any part of your template.

OK, yes good point, but still the full and wide alignments only make sense when a layout is set, correct?

@youknowriad
Copy link
Contributor Author

full and wide alignments only make sense when a layout is set, correct?

yes, a "flow" layout

@noisysocks
Copy link
Member

@youknowriad: Should we merge this for 5.9 or punt?

@youknowriad
Copy link
Contributor Author

I'm still uncertain about this, I'm not entirely satisfied with the current solution as I don't want us to duplicate padding in two places. I have potentially an alternative on my mind but not sure I'll have enough time to solve it on time for Tuesday, maybe it's fine to solve this after alpha.

@youknowriad
Copy link
Contributor Author

I don't believe much in this PR, I prefer the alternative in #36214 personally so I'm closing this one.

@youknowriad youknowriad deleted the add/outer-padding-support branch November 25, 2021 14:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Themes Questions or issues with incorporating or styling blocks in a theme. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Consider a root-level site padding solution that still lets some items go full-width
7 participants