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

Block spacing: add axial gap block support #35454

Closed
wants to merge 9 commits into from

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Oct 8, 2021

Description

Gap support for blocks was introduced in #33991.

It added a CSS var, --wp--style--block-gap, to store the value.

This PR splits gap support values into row and column values, and refactors the value of --wp--style--block-gap to employ shorthand syntax: -wp--style--block-gap: 99px 1px;.

To house row and columns values, we're adding two CSS vars in addition to --wp--style--block-gap:

--wp--style--block-row-gap
--wp--style--block-column-gap

More CSS vars? Well, yes.

Splitting values means we can specify gap values for individual properties, offering us more control over vertical and horizontal spacing, and allows us to align other spacing definitions, such as margin, to the gap values –

margin-left: var(--wp--style--block-column-gap, 2em);

– see for example the Columns Block styles.scss.

The persistence of --wp--style--block-gap seems tautological, yet, aside from retaining backwards compatibility, it grants us convenient access to the gap shorthand value.

Fixes #34529
Stealing ideas from #35301
Related #34546

Nov-09-2021.12-22-04.mp4

How has this been tested?

Test scenarios:

  • Before opting-in to blockGap support on your theme, check that the defaults work. Insert a column block with 3 columns. In desktop, make sure the columns after the first child have margin-left: var(--wp--style--block-column-gap, 2em);
  • Ensure that blocks that use one of the variables for margins, paddings or otherwise work as expected:
    • Columns
    • Navigation
    • Button
  • Changes to --wp--style--block-gap should updates values in --wp--style--block-[row|column]-gap and vice versa.
  • Update navigation/block.json blockGap support to "blockGap": [ "vertical", "horizontal" ], to test axial gap support.
    • When the row and gap values and units are the same, the --wp--style--block-gap CSS var should be a single value, e.g., 101px
    • When the row and gap values are different, or they use different units, the --wp--style--block-gap CSS var should use shorthand syntax value, e.g., 101px 101%
  • A theme that uses --wp--style--block-gap to determine spacing should not be impacted when axial controls are turned on.
  • Paste a block in the editor with existing blockGap values (See Example block code below )and make sure that block gap value is filled in the supports control in the sidebar.
Example block code
<!-- wp:columns {"style":{"spacing":{"blockGap":"169px"}}} -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>1</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->

<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>2</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->

<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>3</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->

Run the unit tests:

npm run test-unit-php /var/www/html/wp-content/plugins/gutenberg/phpunit/block-supports/spacing-test.php

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

@ramonjd ramonjd added [Type] Technical Prototype Offers a technical exploration into an idea as an example of what's possible [Status] In Progress Tracking issues with work in progress labels Oct 8, 2021
@ramonjd ramonjd self-assigned this Oct 8, 2021
@github-actions
Copy link

github-actions bot commented Oct 8, 2021

Size Change: +299 B (0%)

Total Size: 1.11 MB

Filename Size Change
build/block-editor/default-editor-styles-rtl.css 390 B +12 B (+3%)
build/block-editor/default-editor-styles.css 390 B +12 B (+3%)
build/block-editor/index.min.js 140 kB +187 B (0%)
build/block-library/blocks/button/style-rtl.css 565 B +5 B (+1%)
build/block-library/blocks/button/style.css 565 B +5 B (+1%)
build/block-library/blocks/columns/editor-rtl.css 211 B +1 B (0%)
build/block-library/blocks/columns/editor.css 209 B +1 B (0%)
build/block-library/blocks/columns/style-rtl.css 505 B +2 B (0%)
build/block-library/blocks/columns/style.css 504 B +2 B (0%)
build/block-library/blocks/navigation/style-rtl.css 1.68 kB +5 B (0%)
build/block-library/blocks/navigation/style.css 1.67 kB +4 B (0%)
build/block-library/editor-rtl.css 10 kB +1 B (0%)
build/block-library/editor.css 10 kB +1 B (0%)
build/block-library/index.min.js 162 kB +9 B (0%)
build/block-library/style-rtl.css 10.7 kB +10 B (0%)
build/block-library/style.css 10.7 kB +10 B (0%)
build/blocks/index.min.js 46.3 kB +23 B (0%)
build/edit-post/style-rtl.css 7.1 kB +3 B (0%)
build/edit-post/style.css 7.09 kB +3 B (0%)
build/edit-site/index.min.js 35.5 kB +3 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/style-rtl.css 14.4 kB
build/block-editor/style.css 14.4 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/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 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 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 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 966 B
build/block-library/blocks/gallery/editor.css 970 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 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/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 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/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.91 kB
build/block-library/blocks/navigation/editor.css 1.91 kB
build/block-library/blocks/navigation/view.min.js 2.79 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 172 B
build/block-library/blocks/page-list/style.css 172 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 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 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 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 80 B
build/block-library/blocks/post-title/style.css 80 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 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 273 B
build/block-library/blocks/query-pagination/style.css 269 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 245 B
build/block-library/blocks/separator/style.css 245 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 772 B
build/block-library/blocks/site-logo/editor.css 772 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 670 B
build/block-library/blocks/social-links/editor.css 669 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 569 B
build/block-library/blocks/video/editor.css 570 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 857 B
build/block-library/common.css 856 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/components/index.min.js 215 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 10.9 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 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.6 kB
build/edit-site/style-rtl.css 6.57 kB
build/edit-site/style.css 6.57 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 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 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 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

lib/theme.json Outdated Show resolved Hide resolved
@ramonjd ramonjd force-pushed the try/add-split-axial-gap-block-support branch from d085c08 to ce855fd Compare November 8, 2021 04:16
@ramonjd ramonjd force-pushed the try/add-split-axial-gap-block-support branch from 0d12eb2 to 97406be Compare November 8, 2021 04:39
@ramonjd ramonjd changed the title [WIP] Try/add split axial gap block support Block spacing: add axial gap block support Nov 9, 2021
@ramonjd ramonjd added [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Type] Enhancement A suggestion for improvement. and removed [Type] Technical Prototype Offers a technical exploration into an idea as an example of what's possible labels Nov 9, 2021
@ramonjd ramonjd force-pushed the try/add-split-axial-gap-block-support branch from 97406be to d1b3072 Compare November 9, 2021 02:12
@ramonjd ramonjd marked this pull request as ready for review November 9, 2021 02:14
@ramonjd ramonjd requested a review from stacimc November 9, 2021 02:24
@ramonjd ramonjd force-pushed the try/add-split-axial-gap-block-support branch from d1b3072 to 1162aba Compare November 10, 2021 20:57
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 so much for picking up this exploration @ramonjd! Axial controls for blockGap are pretty challenging to reason about, but I like the way you've taken the grouped value and are using it to sync to the separate column / row values, it feels like a pragmatic step forward 👍

This is testing pretty well for me on the Buttons block, opting it in to the vertical and horizontal controls:

Something I noticed when running TwentyTwentyTwo theme is that it sets in its global styles the spacing of 1.5rem in its theme.json which gets rendered out on the server to --wp--style--block-gap as a single CSS variable. I think this means that we might need additional logic in WP_Theme_JSON_Gutenberg for rendering out the body spacing variables (I think this is where it's set), to also generate the other two variables when a string value is set?

image

I imagine this would be similar logic to what you've included for the inline variable rendering for individual blocks?

Without it, the spacing between paragraphs, for example, doesn't get applied because it can't find the row variable:

I was also wondering if it'd be worth storing the value of the variable as a single value when the row/column values are the same (E.g. 1rem instead of 1rem 1rem)?

But overall, I'm pretty excited about the progress you're making here — it demonstrates that it'll be possible to use axial controls while also not being totally locked to CSS gap as margin can still use the individual row-gap value on its own 👍

And it could be pretty cool to see what sorts of patterns the axial gap might enable in WP 6.0 — perhaps a tile-based Query Loop pattern that is tucked in closely horizontally, but has a larger vertical gap between blog post cards?

Happy to do more testing next week! 😃

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2021

I'm very grateful for review @andrewserong 🙇

Without it, the spacing between paragraphs, for example, doesn't get applied because it can't find the row variable:

Great find, and thanks for the advice. I'll take a look at this.

I was also wondering if it'd be worth storing the value of the variable as a single value when the row/column values are the same (E.g. 1rem instead of 1rem 1rem)?

It would look nicer, and probably be less confusing. 😄 Is there any benefit otherwise?

@andrewserong
Copy link
Contributor

It would look nicer, and probably be less confusing. 😄 Is there any benefit otherwise?

It might just improve neatness. Originally, when I first looked at the PR I thought we might need the single value instead of storing both values in the variable for cases where the CSS variable is used on a margin property (e.g. margin-top or margin-bottom in the layout block support). However, since you've updated the block support to use the row gap individual value instead, that doesn't appear to be an issue. So, I think it's probably just for neatness 🙂

In terms of the API we're effectively creating via the CSS variables, I suppose for other blocks that might want to opt-in to block gap support, the idea here is that if you're using the main CSS variable, then you should expect it to behave like the CSS gap attribute. However, if you're using the separate row/column values, then you can be free to use the value in other properties as you like?

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2021

In terms of the API we're effectively creating via the CSS variables, I suppose for other blocks that might want to opt-in to block gap support, the idea here is that if you're using the main CSS variable, then you should expect it to behave like the CSS gap attribute. However, if you're using the separate row/column values, then you can be free to use the value in other properties as you like?

Makes sense. I was genuinely asking in case I'd missed something. 😆

Not a difficult change to make, and I think it would also be good to maintain the current CSS gap behaviour as well.

Thanks!

@ramonjd ramonjd force-pushed the try/add-split-axial-gap-block-support branch 2 times, most recently from 9b597b9 to 542bb75 Compare November 22, 2021 00:55
@ramonjd
Copy link
Member Author

ramonjd commented Nov 22, 2021

Something I noticed when running TwentyTwentyTwo theme is that it sets in its global styles the spacing of 1.5rem in its theme.json which gets rendered out on the server to --wp--style--block-gap as a single CSS variable. I think this means that we might need additional logic in WP_Theme_JSON_Gutenberg for rendering out the body spacing variables (I think this is where it's set), to also generate the other two variables when a string value is set?

If I understand correctly, we need to automatically set the new CSS vars --wp--style--block-[row|column]-gap where a theme defines --wp--style--block-gap so that any underlying CSS that relies on the individual variables (--wp--style--block-[row|column]-gap ) will pick up the value.

So if a particular theme sets :

		"spacing": {
			"blockGap": "2em" // or "blockGap": "1.5rem 2em"
		},

We'd need to also set the following:

body {
      ...
	--wp--style--block-gap: 2em; // or 1.5rem 2em if --wp--style--block-gap sets both
        --wp--style--block-row-gap: 2em; // or 1.5rem if --wp--style--block-gap sets both
        --wp--style--block-column-gap: 2rem;
}

I'm just trying to work out where the best place in include this logic and how.

Looking at WP_Theme_JSON_Gutenberg and where the styles are generated from the properties, there don't seem to any other special cases and I don't want to start a precedent for custom logic in that particular class.

Maybe a series of parser methods external to that class. Not sure yet.

🤞 @oandregal will have some advice. :)

I'm just making notes for now.

I'll think about this and come back with something a little more nuanced.

Thank you!

@ramonjd
Copy link
Member Author

ramonjd commented Dec 8, 2021

Looking at WP_Theme_JSON_Gutenberg and where the styles are generated from the properties, there don't seem to any other special cases and I don't want to start a precedent for custom logic in that particular class.

Maybe a series of parser methods external to that class. Not sure yet.

After a very cursory glance, maybe we could implement something along the lines of PRESETS_METADATA, with a collection of bootstrapping instructions for styles[$property] for example.

Just an example, I have no idea which properties would be appropriate. Still learning and looking.

const STYLES_METADATA = array(
    array(
      'path' => array( 'spacing', 'blockGap' ),
      'css_vars' => array( '--wp--style--block-row-gap', '--wp--style--block-column-gap' ),
      'value_func' => 'gutenberg_render_blockgap_style',
   ),
);

ramonjd and others added 9 commits December 10, 2021 09:17
updating php unit tests
adding axial tests
replacing block usages of block gap var with equivalent axial var

Update packages/block-library/src/button/style.scss

Co-authored-by: Andrew Serong <14988353+andrewserong@users.noreply.github.com>
…e columns gap value.

Where the row and column values are the same, use a single value instead of shorthand in the block-gap CSS var.
@ramonjd
Copy link
Member Author

ramonjd commented Dec 10, 2021

Looking at WP_Theme_JSON_Gutenberg and where the styles are generated from the properties, there don't seem to any other special cases and I don't want to start a precedent for custom logic in that particular class.

Maybe a series of parser methods external to that class. Not sure yet.

I'm trying some things over at WordPress/wordpress-develop#2038

Still early days and lots of questions. When I gather my notes and thoughts, I'll probably write up an issue to get feedback on them. 🙇

@oandregal
Copy link
Member

oandregal commented Dec 10, 2021

Hey, haven't been able to dig deep into this PR and WordPress/wordpress-develop#2038 My main question is whether this is targeted for WordPress 5.9 or 6.0?

If it's 6.0 we need to do a few things: 1) do not port it to wordpress-develop just yet, and 2) we can't modify code that lives in lib/compat/wordpress-5.9, instead we need to figure out what code needs to live in lib/compat/wordpress-6.0 (I can help figuring out this before this ships). Related conversation at #36909 (comment)

If it's 5.9, I can spend some time digging into this and help fitting it into the current codebase.

@ramonjd
Copy link
Member Author

ramonjd commented Dec 12, 2021

Thanks for your thoughts @oandregal !

haven't been able to dig deep into this PR and WordPress/wordpress-develop#2038 My main question is whether this is targeted for WordPress 5.9 or 6.0?

That's a good question.

There is at least one bug that might benefit from a solution around axial gap support.

I'm not sure about the severity, and therefore the need to target 5.9 or not. It appears to be something that might raise eyebrows if we do not fix it.

In that issue, @youknowriad also proposed a way to resolve a conflict between theme.json and block-level block spacing settings.

I'd imagine the code for that idea would similarly need to find a home.

If it's 6.0 we need to do a few things: 1) do not port it to wordpress-develop just yet, and 2) we can't modify code that lives in lib/compat/wordpress-5.9, instead we need to figure out what code needs to live in lib/compat/wordpress-6.0 (I can help figuring out this before this ships).
If it's 5.9, I can spend some time digging into this and help fitting it into the current codebase.

Thanks very much! I'd love your advice on how to do this.

For this PR specifically, assuming the concept behind it sound, I was thinking it would helpful to be able to filter style properties after we add them to the $declarations collection. Maybe in compute_style_properties 🤷

@youknowriad
Copy link
Contributor

The solution to this bug #36521 means the removal of the CSS variables (at least for everything but the root level of theme.json) which would definitely impact this PR. We should probably focus on that related issue first before introducing new CSS variables which would suffer from the same issues.

@ramonjd
Copy link
Member Author

ramonjd commented Jan 5, 2022

Closing this as we're not using CSS vars for block gap styles. See #37360

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Status] In Progress Tracking issues with work in progress [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Design Tools: Enhance Block Gap control to support axial configuration
4 participants