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 Block: Add custom gutter widths #27661

Closed
wants to merge 4 commits into from

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Dec 11, 2020

Fixes: #10730

Description

Adds the ability to set custom gutter widths for a columns block via a new attribute and inline style.

No new UI control will be added until the new sidebar controls and component system is available.

How has this been tested?

Manually.

Testing Instructions

  1. Create a new post adding a columns block
    (it can help make the gutters more obvious if you add inner group blocks with a background color)
  2. Checkout this PR and edit the post
  3. Select the columns block and confirm no gutter size controls present in sidebar
  4. Switch to code editor view and add a gutterSize attribute to the columns block along with a matching inline style. e.g. --columns-block-gutter-size: 0px; or simply copy and paste in the block code below:
<!-- wp:columns {"gutterSize":2,"backgroundColor":"primary"} -->
<div class="wp-block-columns has-primary-background-color has-background" style="--columns-block-gutter-size:2px"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:group {"backgroundColor":"accent"} -->
<div class="wp-block-group has-accent-background-color has-background"><div class="wp-block-group__inner-container"></div></div>
<!-- /wp:group --></div>
<!-- /wp:column -->

<!-- wp:column -->
<div class="wp-block-column"><!-- wp:group {"backgroundColor":"accent"} -->
<div class="wp-block-group has-accent-background-color has-background"><div class="wp-block-group__inner-container"></div></div>
<!-- /wp:group --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
  1. Confirm the column gutters update appropriately within the editor and on the frontend after saving
  2. Add nested columns and add differing gutter sizes or paste in code from this example block content
  3. Confirm the nested columns have different gutter widths

Screenshots

Screen Shot 2020-12-23 at 7 40 32 pm

Types of changes

New feature.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • 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.

@aaronrobertshaw aaronrobertshaw added [Type] Enhancement A suggestion for improvement. [Block] Columns Affects the Columns Block labels Dec 11, 2020
@aaronrobertshaw aaronrobertshaw self-assigned this Dec 11, 2020
@github-actions
Copy link

github-actions bot commented Dec 11, 2020

Size Change: -15 B (0%)

Total Size: 1.28 MB

Filename Size Change
build/a11y/index.js 1.14 kB -1 B (0%)
build/annotations/index.js 3.81 kB +2 B (0%)
build/api-fetch/index.js 3.42 kB -3 B (0%)
build/block-directory/index.js 8.71 kB -10 B (0%)
build/block-editor/index.js 128 kB +149 B (0%)
build/block-editor/style-rtl.css 11.2 kB -20 B (0%)
build/block-editor/style.css 11.2 kB -23 B (0%)
build/block-library/editor-rtl.css 9.09 kB +18 B (0%)
build/block-library/editor.css 9.09 kB +16 B (0%)
build/block-library/index.js 150 kB +953 B (+1%)
build/block-library/style-rtl.css 8.51 kB +135 B (+2%)
build/block-library/style.css 8.51 kB +135 B (+2%)
build/block-serialization-default-parser/index.js 1.88 kB +4 B (0%)
build/blocks/index.js 48.1 kB -9 B (0%)
build/components/index.js 170 kB -626 B (0%)
build/components/style-rtl.css 15.4 kB -1 B (0%)
build/components/style.css 15.4 kB -1 B (0%)
build/compose/index.js 11 kB +371 B (+3%)
build/core-data/index.js 15.2 kB -171 B (-1%)
build/data-controls/index.js 829 B +2 B (0%)
build/data/index.js 8.98 kB -1 B (0%)
build/deprecated/index.js 768 B -1 B (0%)
build/edit-navigation/index.js 11.1 kB -1 B (0%)
build/edit-post/index.js 306 kB -11 B (0%)
build/edit-post/style-rtl.css 6.47 kB -20 B (0%)
build/edit-post/style.css 6.45 kB -16 B (0%)
build/edit-site/index.js 24.3 kB -415 B (-2%)
build/edit-site/style-rtl.css 3.91 kB -25 B (-1%)
build/edit-site/style.css 3.91 kB -23 B (-1%)
build/edit-widgets/index.js 26.3 kB +31 B (0%)
build/edit-widgets/style-rtl.css 3.1 kB -26 B (-1%)
build/edit-widgets/style.css 3.1 kB -25 B (-1%)
build/editor/index.js 42.6 kB -663 B (-2%)
build/element/index.js 4.63 kB -4 B (0%)
build/format-library/index.js 6.75 kB +16 B (0%)
build/html-entities/index.js 622 B -1 B (0%)
build/i18n/index.js 3.57 kB +2 B (0%)
build/is-shallow-equal/index.js 698 B +1 B (0%)
build/keyboard-shortcuts/index.js 2.54 kB -5 B (0%)
build/notices/index.js 1.86 kB +3 B (0%)
build/plugins/index.js 2.54 kB -2 B (0%)
build/primitives/index.js 1.43 kB +1 B (0%)
build/priority-queue/index.js 789 B -1 B (0%)
build/reusable-blocks/index.js 2.92 kB -6 B (0%)
build/rich-text/index.js 13.5 kB +84 B (+1%)
build/server-side-render/index.js 2.77 kB +5 B (0%)
build/token-list/index.js 1.27 kB -2 B (0%)
build/url/index.js 3.01 kB +172 B (+6%) 🔍
build/viewport/index.js 1.86 kB -1 B (0%)
build/wordcount/index.js 1.22 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-library/blocks/archives/editor-rtl.css 120 B 0 B
build/block-library/blocks/archives/editor.css 119 B 0 B
build/block-library/blocks/audio/editor-rtl.css 118 B 0 B
build/block-library/blocks/audio/editor.css 118 B 0 B
build/block-library/blocks/audio/style-rtl.css 152 B 0 B
build/block-library/blocks/audio/style.css 152 B 0 B
build/block-library/blocks/block/editor-rtl.css 211 B 0 B
build/block-library/blocks/block/editor.css 211 B 0 B
build/block-library/blocks/button/editor-rtl.css 513 B 0 B
build/block-library/blocks/button/editor.css 513 B 0 B
build/block-library/blocks/button/style-rtl.css 488 B 0 B
build/block-library/blocks/button/style.css 488 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 275 B 0 B
build/block-library/blocks/buttons/editor.css 275 B 0 B
build/block-library/blocks/buttons/style-rtl.css 346 B 0 B
build/block-library/blocks/buttons/style.css 346 B 0 B
build/block-library/blocks/calendar/style-rtl.css 249 B 0 B
build/block-library/blocks/calendar/style.css 249 B 0 B
build/block-library/blocks/categories/editor-rtl.css 135 B 0 B
build/block-library/blocks/categories/editor.css 135 B 0 B
build/block-library/blocks/categories/style-rtl.css 132 B 0 B
build/block-library/blocks/categories/style.css 132 B 0 B
build/block-library/blocks/code/style-rtl.css 141 B 0 B
build/block-library/blocks/code/style.css 141 B 0 B
build/block-library/blocks/columns/editor-rtl.css 260 B 0 B
build/block-library/blocks/columns/editor.css 261 B 0 B
build/block-library/blocks/columns/style-rtl.css 500 B 0 B
build/block-library/blocks/columns/style.css 498 B 0 B
build/block-library/blocks/cover/editor-rtl.css 440 B 0 B
build/block-library/blocks/cover/editor.css 438 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.27 kB 0 B
build/block-library/blocks/cover/style.css 1.27 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 529 B 0 B
build/block-library/blocks/embed/editor.css 529 B 0 B
build/block-library/blocks/embed/style-rtl.css 419 B 0 B
build/block-library/blocks/embed/style.css 419 B 0 B
build/block-library/blocks/file/editor-rtl.css 246 B 0 B
build/block-library/blocks/file/editor.css 245 B 0 B
build/block-library/blocks/file/style-rtl.css 288 B 0 B
build/block-library/blocks/file/style.css 289 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.49 kB 0 B
build/block-library/blocks/freeform/editor.css 2.49 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 692 B 0 B
build/block-library/blocks/gallery/editor.css 693 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.11 kB 0 B
build/block-library/blocks/gallery/style.css 1.11 kB 0 B
build/block-library/blocks/group/editor-rtl.css 364 B 0 B
build/block-library/blocks/group/editor.css 364 B 0 B
build/block-library/blocks/group/style-rtl.css 117 B 0 B
build/block-library/blocks/group/style.css 117 B 0 B
build/block-library/blocks/heading/editor-rtl.css 174 B 0 B
build/block-library/blocks/heading/editor.css 174 B 0 B
build/block-library/blocks/heading/style-rtl.css 137 B 0 B
build/block-library/blocks/heading/style.css 137 B 0 B
build/block-library/blocks/html/editor-rtl.css 324 B 0 B
build/block-library/blocks/html/editor.css 325 B 0 B
build/block-library/blocks/image/editor-rtl.css 738 B 0 B
build/block-library/blocks/image/editor.css 737 B 0 B
build/block-library/blocks/image/style-rtl.css 510 B 0 B
build/block-library/blocks/image/style.css 511 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 201 B 0 B
build/block-library/blocks/latest-comments/editor.css 200 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 315 B 0 B
build/block-library/blocks/latest-comments/style.css 315 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 183 B 0 B
build/block-library/blocks/latest-posts/editor.css 183 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 568 B 0 B
build/block-library/blocks/latest-posts/style.css 567 B 0 B
build/block-library/blocks/list/editor-rtl.css 129 B 0 B
build/block-library/blocks/list/editor.css 129 B 0 B
build/block-library/blocks/list/style-rtl.css 127 B 0 B
build/block-library/blocks/list/style.css 127 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 240 B 0 B
build/block-library/blocks/media-text/editor.css 240 B 0 B
build/block-library/blocks/media-text/style-rtl.css 579 B 0 B
build/block-library/blocks/media-text/style.css 577 B 0 B
build/block-library/blocks/more/editor-rtl.css 479 B 0 B
build/block-library/blocks/more/editor.css 479 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 438 B 0 B
build/block-library/blocks/navigation-link/editor.css 440 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 747 B 0 B
build/block-library/blocks/navigation-link/style.css 745 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.31 kB 0 B
build/block-library/blocks/navigation/editor.css 1.31 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 205 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 440 B 0 B
build/block-library/blocks/nextpage/editor.css 440 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 161 B 0 B
build/block-library/blocks/paragraph/editor.css 161 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 279 B 0 B
build/block-library/blocks/paragraph/style.css 279 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 255 B 0 B
build/block-library/blocks/post-author/editor.css 255 B 0 B
build/block-library/blocks/post-author/style-rtl.css 229 B 0 B
build/block-library/blocks/post-author/style.css 230 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 293 B 0 B
build/block-library/blocks/post-comments-form/style.css 293 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 187 B 0 B
build/block-library/blocks/post-content/editor.css 187 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 134 B 0 B
build/block-library/blocks/post-excerpt/editor.css 134 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 387 B 0 B
build/block-library/blocks/post-featured-image/editor.css 386 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 149 B 0 B
build/block-library/blocks/post-featured-image/style.css 149 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 119 B 0 B
build/block-library/blocks/preformatted/style.css 119 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 231 B 0 B
build/block-library/blocks/pullquote/editor.css 231 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 359 B 0 B
build/block-library/blocks/pullquote/style.css 359 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 142 B 0 B
build/block-library/blocks/query-loop/editor.css 141 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 361 B 0 B
build/block-library/blocks/query-loop/style.css 363 B 0 B
build/block-library/blocks/query/editor-rtl.css 210 B 0 B
build/block-library/blocks/query/editor.css 210 B 0 B
build/block-library/blocks/quote/editor-rtl.css 121 B 0 B
build/block-library/blocks/quote/editor.css 121 B 0 B
build/block-library/blocks/quote/style-rtl.css 215 B 0 B
build/block-library/blocks/quote/style.css 214 B 0 B
build/block-library/blocks/rss/editor-rtl.css 245 B 0 B
build/block-library/blocks/rss/editor.css 246 B 0 B
build/block-library/blocks/rss/style-rtl.css 329 B 0 B
build/block-library/blocks/rss/style.css 328 B 0 B
build/block-library/blocks/search/editor-rtl.css 213 B 0 B
build/block-library/blocks/search/editor.css 213 B 0 B
build/block-library/blocks/search/style-rtl.css 384 B 0 B
build/block-library/blocks/search/style.css 386 B 0 B
build/block-library/blocks/separator/editor-rtl.css 151 B 0 B
build/block-library/blocks/separator/editor.css 151 B 0 B
build/block-library/blocks/separator/style-rtl.css 281 B 0 B
build/block-library/blocks/separator/style.css 281 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 547 B 0 B
build/block-library/blocks/shortcode/editor.css 547 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 251 B 0 B
build/block-library/blocks/site-logo/editor.css 251 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 166 B 0 B
build/block-library/blocks/site-logo/style.css 166 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 211 B 0 B
build/block-library/blocks/social-link/editor.css 211 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 749 B 0 B
build/block-library/blocks/social-links/editor.css 749 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB 0 B
build/block-library/blocks/social-links/style.css 1.37 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 321 B 0 B
build/block-library/blocks/spacer/editor.css 321 B 0 B
build/block-library/blocks/spacer/style-rtl.css 107 B 0 B
build/block-library/blocks/spacer/style.css 107 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 148 B 0 B
build/block-library/blocks/subhead/editor.css 148 B 0 B
build/block-library/blocks/subhead/style-rtl.css 134 B 0 B
build/block-library/blocks/subhead/style.css 134 B 0 B
build/block-library/blocks/table/editor-rtl.css 530 B 0 B
build/block-library/blocks/table/editor.css 530 B 0 B
build/block-library/blocks/table/style-rtl.css 433 B 0 B
build/block-library/blocks/table/style.css 433 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 162 B 0 B
build/block-library/blocks/tag-cloud/editor.css 162 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 145 B 0 B
build/block-library/blocks/tag-cloud/style.css 145 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 644 B 0 B
build/block-library/blocks/template-part/editor.css 645 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 146 B 0 B
build/block-library/blocks/text-columns/editor.css 146 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 209 B 0 B
build/block-library/blocks/text-columns/style.css 209 B 0 B
build/block-library/blocks/verse/editor-rtl.css 118 B 0 B
build/block-library/blocks/verse/editor.css 118 B 0 B
build/block-library/blocks/verse/style-rtl.css 137 B 0 B
build/block-library/blocks/verse/style.css 137 B 0 B
build/block-library/blocks/video/editor-rtl.css 547 B 0 B
build/block-library/blocks/video/editor.css 548 B 0 B
build/block-library/blocks/video/style-rtl.css 241 B 0 B
build/block-library/blocks/video/style.css 241 B 0 B
build/block-library/common-rtl.css 940 B 0 B
build/block-library/common.css 937 B 0 B
build/block-library/theme-rtl.css 789 B 0 B
build/block-library/theme.css 790 B 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/date/index.js 31.8 kB 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/editor/editor-styles-rtl.css 476 B 0 B
build/editor/editor-styles.css 478 B 0 B
build/editor/style-rtl.css 3.84 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.27 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.1 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.32 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/warning/index.js 1.14 kB 0 B

compressed-size-action

@glendaviesnz
Copy link
Contributor

glendaviesnz commented Dec 15, 2020

This tested well for me. My only question is with nested column blocks where parent gutter setting flows through to any child columns block that hasn't explicitly specified a gutter. Once a child explicitly sets the gutter size it does override the parent setting. This seems reasonable to me, but just wondering if it is the expected behaviour, or if it will confuse users at all when nesting columns?

@aaronrobertshaw
Copy link
Contributor Author

This tested well for me. My only question is with nested column blocks where parent gutter setting flows through to any child columns block that hasn't explicitly specified a gutter.

That is the nature of CSS, I don't think our users would have the same perspective though. I can see benefits either way. The UI doesn't really inform the user that the setting would cascade. In this case it might be better to require the gutter sizes to be explicitly set on the nested columns.

I've made that change, let me know whether you think it's an improvement.

@glendaviesnz
Copy link
Contributor

To me this is now works more how you would expect, ie. changes a columns gutter only affects that columns block and not all the children ... but will be interesting to see what others think.

@stacimc
Copy link
Contributor

stacimc commented Dec 22, 2020

+1 for the setting not automatically applying to nested columns; I also think that feels more natural/how I would expect those settings to work as a user. This tested well for me.

Until the new sidebar controls and system lands, it is preferred to avoid adding any new UI controls to the sidebar.
@apeatling apeatling self-requested a review January 6, 2021 18:44
Copy link
Contributor

@apeatling apeatling left a comment

Choose a reason for hiding this comment

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

Switch to code editor view and add a gutterSize attribute to the columns block along with a matching inline style. e.g. --columns-block-gutter-size: 0px;

What exactly should this look like in the code view? It's not clear.

@aaronrobertshaw
Copy link
Contributor Author

What exactly should this look like in the code view? It's not clear.

Sorry about that. I'll update the test instructions with an explicit code example. The linked gist from step 6 also contains example block code with the attribute and inline style set.

<!-- wp:columns {"gutterSize":2,"align":"wide"} -->
<div class="wp-block-columns alignwide" style="--columns-block-gutter-size:2px"><!-- wp:column -->

@apeatling apeatling self-requested a review January 7, 2021 18:43
Copy link
Contributor

@apeatling apeatling left a comment

Choose a reason for hiding this comment

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

Thanks for the code snippet. This worked well for me. 👍

@aaronrobertshaw
Copy link
Contributor Author

A new iteration of the block supports mechanism is under way (#28913).

Those efforts aim to provide a means to target which inner elements get the block support style applied to them. With that functionality, the columns block could opt into a new spacing > margins block support feature and apply those styles to the inner columns.

The current approach in this PR is relatively clean but does not offer the ability to set the gutter sizes via theme.json. I'll revisit this once the new iteration of block supports lands.

@aaronrobertshaw
Copy link
Contributor Author

Closing this PR. In some environments kses will strip out CSS custom properties from the saved post content. This means when the block is loaded again in the editor is will be deemed invalid.

The new approach to applying block support styles to inner blocks is likely to be the best path forward for this. That is, once margins are added to the current spacing block support.

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.

Columns Block Gutter Size Option
4 participants