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

Columns: Add padding support #35701

Merged
merged 3 commits into from
Nov 4, 2021
Merged

Columns: Add padding support #35701

merged 3 commits into from
Nov 4, 2021

Conversation

stacimc
Copy link
Contributor

@stacimc stacimc commented Oct 15, 2021

Part of #24874

Description

Opts into the padding block support for the Columns block (note that padding is already available for individual Column blocks).

I chose not to add padding to the default controls in the Dimensions panel, since it does not strike me as an especially commonly used tool, but it can be easily added.

There may be an argument that it could be added here as axial padding only; I've left padding for all individual sides, as it seems reasonably common to me that a user might want to control top & bottom padding separately.

How has this been tested?

Manually.

  • In the block editor, add a Columns block and verify that Padding is available in the Dimensions panel, but not by default.
  • Set padding values via theme.json
  • Set padding via Global Styles -> Blocks -> Columns -> Dimensions
  • Set padding via the Dimensions panel in the block editor
  • Try various combinations of padding and block spacing; as you change the padding, verify that the block spacing is not altered and vice versa
  • Try various combinations of padding on the Columns block and on individual Column blocks within it
  • Try adding background colors to the Columns block
    • Note the known issue described in the Notes/Todo section

Screenshots

Screen Shot 2021-10-15 at 2 45 28 PM

Here the Padding control has been added from the + menu

Screen Shot 2021-10-15 at 2 46 13 PM

Padding seen on the frontend.

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@stacimc stacimc added [Status] In Progress Tracking issues with work in progress [Block] Columns Affects the Columns Block labels Oct 15, 2021
@stacimc stacimc self-assigned this Oct 15, 2021
@andrewserong
Copy link
Contributor

andrewserong commented Oct 18, 2021

Thanks for digging into this one @stacimc!

There is an issue where padding applied via theme.json or Global Styles is ignored for the Columns block if a background color is applied. That's because this CSS rule adds some default padding to Columns with background colors:

It looks like there was a similar issue with Group block. The solution appeared to be to move the has-background rule to use lower specificity via :where in #34854. For the group block, the styling rule is included in the theme.scss file. So we could maybe add a similar theme.scss file to the Columns block, and then import it from packages/block-library/src/theme.scss around here for consistency?

@stacimc stacimc marked this pull request as ready for review October 18, 2021 21:27
@github-actions
Copy link

github-actions bot commented Oct 18, 2021

Size Change: +2.32 kB (0%)

Total Size: 1.07 MB

Filename Size Change
build/api-fetch/index.min.js 2.21 kB +1 B (0%)
build/block-editor/index.min.js 135 kB +123 B (0%)
build/block-library/blocks/columns/style-rtl.css 503 B +6 B (+1%)
build/block-library/blocks/columns/style.css 502 B +6 B (+1%)
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B -1 B (0%)
build/block-library/blocks/navigation/style-rtl.css 1.66 kB +15 B (+1%)
build/block-library/blocks/navigation/style.css 1.65 kB +11 B (+1%)
build/block-library/blocks/quote/theme-rtl.css 223 B +3 B (+1%)
build/block-library/blocks/quote/theme.css 226 B +4 B (+2%)
build/block-library/blocks/search/style-rtl.css 397 B +23 B (+6%) 🔍
build/block-library/blocks/search/style.css 398 B +23 B (+6%) 🔍
build/block-library/blocks/site-logo/editor-rtl.css 770 B +1 B (0%)
build/block-library/blocks/site-logo/editor.css 770 B +1 B (0%)
build/block-library/editor-rtl.css 9.65 kB +1 B (0%)
build/block-library/editor.css 9.65 kB +3 B (0%)
build/block-library/index.min.js 149 kB +1.32 kB (+1%)
build/block-library/style-rtl.css 10.3 kB +31 B (0%)
build/block-library/style.css 10.3 kB +30 B (0%)
build/block-library/theme-rtl.css 668 B +3 B (0%)
build/block-library/theme.css 673 B +4 B (+1%)
build/components/index.min.js 212 kB -26 B (0%)
build/core-data/index.min.js 12.4 kB +5 B (0%)
build/edit-navigation/index.min.js 15.8 kB +439 B (+3%)
build/edit-post/style-rtl.css 7.12 kB +1 B (0%)
build/edit-site/index.min.js 30 kB +7 B (0%)
build/editor/index.min.js 37.6 kB +111 B (0%)
build/format-library/index.min.js 5.99 kB +59 B (+1%)
build/rich-text/index.min.js 10.7 kB +115 B (+1%)
ℹ️ 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/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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.17 kB
build/block-library/blocks/cover/style.css 1.17 kB
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 568 B
build/block-library/blocks/navigation-link/editor.css 570 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.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/editor-rtl.css 1.71 kB
build/block-library/blocks/navigation/editor.css 1.71 kB
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 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 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/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/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/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-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/components/style-rtl.css 15.3 kB
build/components/style.css 15.3 kB
build/compose/index.min.js 10.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.46 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/index.min.js 29.4 kB
build/edit-post/style.css 7.12 kB
build/edit-site/style-rtl.css 5.56 kB
build/edit-site/style.css 5.56 kB
build/edit-widgets/index.min.js 15.8 kB
build/edit-widgets/style-rtl.css 4.12 kB
build/edit-widgets/style.css 4.13 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/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/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

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 nicely for me now in blocks-based themes @stacimc!

image

It's very cool being able to set consistent padding and block spacing with a background color set 👍

✅ Padding is available but not one of the default controls
✅ Setting a padding value by theme.json works correctly
✅ Setting a padding value by Global Styles works correctly
✅ Columns block-level padding doesn't affect padding of inner Column blocks nor the spacing between blocks
✅ Different combinations of background colors work as expected, and the fallback padding when a background color is present takes least priority (it is applied, but gets overridden by any global styles or styles set at the block level)
❓ I found one issue with the move to theme.scss (sorry for leading us astray, there!) — it turns out that moving to theme.scss results in a regression for themes that haven't explicitly opted in to the block styles. I left a comment, but I think if we move the rule back to style.scss, it should be fine.

Once the rule is moved back to style.scss, I think this PR will be good to land!

packages/block-library/src/columns/theme.scss Outdated Show resolved Hide resolved
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 @stacimc! This is testing well for me now, no regressions in TwentyTwenty and TwentyTwentyOne classic themes, and the padding still works correctly in TT1-Blocks (defined in theme.json, in global styles, at the block level, and if none of those are set, and a background color is selected, the &:where(.has-background) CSS rule takes priority 👍)

LGTM! 🎉

@glendaviesnz
Copy link
Contributor

glendaviesnz commented Oct 21, 2021

Tested well for me. The only thing I noticed is that with tt1-blocks you can't wind the top and bottom padding back to 0 with paragraphs in each column as these have a top and bottom margin:

TwentyTwentyOne:
padding-tt1

TwentyTwentyOne-Blocks:
padding-tt1-blocks

Probably not something we can do anything about though, as the nested column content could have any sort of css that might affect this padding on the outer columns parent - just mentioning in case it sparks any thoughts about ways to override, or other issues that might be encountered with margin settings on inner content.

@aaronrobertshaw
Copy link
Contributor

Probably not something we can do anything about though, as the nested column content could have any sort of css that might affect this padding on the outer columns parent - just mentioning in case it sparks any thoughts about ways to override, or other issues that might be encountered with margin settings on inner content.

I agree that it might not be possible to address this 100% of the time once themes and user styles come into the picture. At a quick glance though it appears those margins are coming from the reset.scss. It would be good if we could add sensible defaults when within the context of columns with custom padding applied.

My first thought was to add another :where rule, something like html :where(.editor-styles-wrapper .wp-block-columns[style*="padding"] ) but that would only cover padding applied via the block supports and not through theme.json.

Given the resets appear to be for specific elements e.g. p, ul, ol, h1-h6 etc. The theme.json side of things could be mitigated to a large degree by using the elements API to target those inner elements and tweak the margins.

Through efforts elsewhere to add custom colors block support etc, the need to be able to target specific selectors through the elements API was discussed briefly. It's still a potential option outlined in #33255. With an extended elements API, we'd be able to target the above list of elements only when they were the first or last child in a column.

Obviously, this isn't a solution for right now but it might be something to consider moving forward.

@stacimc
Copy link
Contributor Author

stacimc commented Oct 21, 2021

The only thing I noticed is that with tt1-blocks you can't wind the top and bottom padding back to 0 with paragraphs in each column as these have a top and bottom margin

It's tricky to figure out the right user experience here 🤔 I've added a separate background color to the individual Column blocks to make it even clearer: I have a black background on the Columns, white on each inner Column, and pink on the paragraphs. In all cases, padding is set to 0:

Screen Shot 2021-10-21 at 1 43 39 PM

In both cases you can see that there is, correctly, 0 padding on the Columns container itself. But there's extra space within the individual Column blocks, caused by margin applied to all of the paragraphs. This could be confusing to a user who expects this setting to eliminate all top and bottom spacing before/after their column content.

It's not 100% clear to me what to enforce here. I understand this could be confusing to a user, especially since you're not able to manually control the margin on Paragraph blocks. On the other hand I'm tempted to say that extra spacing is Column spacing, not Columns spacing. You'd get a similarly confusing experience if you were trying to set 0 padding on the Columns container, but had some existing padding applied to the Column block in your theme.json for example. (Obviously that's a little different because it's not a base style, but it could lead to the same confusion.)

I guess a bigger question for what 'padding' on the container means -- should it control padding around the container itself, or is it more useful for controlling the padding of all of the inner Column blocks at once? I was thinking of it as the former, but I could see why the latter would be useful. What do you think?

With an extended elements API, we'd be able to target the above list of elements only when they were the first or last child in a column.

Thanks for this! This would be cool, and we'd definitely want to do this when setting padding on an individual Column, if not also for Columns. For the container I could see it argued either way. Regardless, I'm inclined to wait until we can use something like this to override it consistently for styles set through block supports/theme.json etc. Does this seem like a blocker?

@andrewserong
Copy link
Contributor

Great discussion, everyone!

I guess a bigger question for what 'padding' on the container means -- should it control padding around the container itself, or is it more useful for controlling the padding of all of the inner Column blocks at once? I was thinking of it as the former, but I could see why the latter would be useful. What do you think?

Personally, I think it should control the padding around the container itself, for consistency with block spacing. The main thing I like about padding paired with block spacing is that we can now have consistent spacing altogether with a background colour, e.g:

image

I just had a play with the Group block, and it has the same kind of issue with a paragraph block inside it when you go to reduce the padding down to very small numbers (though 0 completely removes the paragraph's margin):

image

I think because of the consistency with the Group block's behaviour here, I'd lean toward us landing this PR and looking at how to deal with Paragraph margins (and the context within which they're set) separately.

@stacimc
Copy link
Contributor Author

stacimc commented Oct 27, 2021

Personally, I think it should control the padding around the container itself, for consistency with block spacing. The main thing I like about padding paired with block spacing is that we can now have consistent spacing altogether with a background colour

I agree -- consistency seems the best guide. I also think the background color/external padding controls working together the way you describe is very useful, and it's of course still possible to control individual Column padding.

I think because of the consistency with the Group block's behaviour here, I'd lean toward us landing this PR and looking at how to deal with Paragraph margins (and the context within which they're set) separately.

Thanks for further testing with the Group block @andrewserong! +1 to what you've said here. It sounds like there isn't objection to moving forward? I'll let this one sit to give others a chance to weigh in.

@andrewserong
Copy link
Contributor

It sounds like there isn't objection to moving forward? I'll let this one sit to give others a chance to weigh in.

Thanks for following up Staci, I certainly don't object! 😄 I think it'll be good to get this one in, but yes, good idea giving folks a chance to weigh in if there are any objections.

@stacimc stacimc removed the [Status] In Progress Tracking issues with work in progress label Nov 1, 2021
@@ -10,7 +10,7 @@
flex-wrap: nowrap;
}

&.has-background {
&:where(.has-background) {
Copy link
Member

Choose a reason for hiding this comment

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

Just checking something. When I set padding in my theme.json via styles

	"styles": {
		"spacing": {
			"padding": "55px",
			"blockGap": "66px"

		},
 ...

These styles override the body styles of padding: 55px. Block spacing works as expected.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good callout. This is correct as I understand it -- these styles will override top-level (body) styles from theme.json, but not theme.json styles for the Columns block specifically, or of course values from global styles/the block controls. I confirmed this is how the Group block behaves as well.

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

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

Nov-03-2021.09-36-57.mp4

I think this works well, especially in conjunction with spacing! I agree with folks that applying padding to the container is a fine way to start.

Thank you!!!

@stacimc stacimc merged commit feb915f into trunk Nov 4, 2021
@stacimc stacimc deleted the add/padding-support-to-columns branch November 4, 2021 23:17
@github-actions github-actions bot added this to the Gutenberg 11.9 milestone Nov 4, 2021
@andrewserong andrewserong added the [Type] Enhancement A suggestion for improvement. label Nov 5, 2021
@andrewserong andrewserong changed the title [Columns]: Add padding support Columns: Add padding support Nov 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Columns Affects the Columns Block [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants