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

Background image: Add backgroundSize and repeat features #57005

Merged
merged 12 commits into from
Dec 22, 2023

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented Dec 13, 2023

What?

Part of: #54336

Explore adding a backgroundSize and backgroundRepeat set of controls for use with the background image block support. For the Group block, this allows users to set the background image to "Cover" (default), "Contain", or a custom size, which exposes repeating backgrounds automatically.

After some exploration, background repeat is included alongside backgroundSize as users will nearly always need to interact with background size when adjusting background repeat, so it's simpler and easier to keep them combined rather than separate.

Why?

  • Allow users to have repeating backgrounds, with control of the background image's size for repeating.
  • Allow users to have contained background images, that fills one dimension and repeat along the other.

How?

  • Add a backgroundSize property and set of controls to the background block support
  • Within these controls include a toggle for toggling repeating backgrounds on and off
  • Opt the Group block in to this property (but have it hidden by default)
  • Treat no value (undefined) as cover, with options for contain and custom sizes
  • An empty string (switching to "Fixed") will default the output to the equivalent of auto, allowing repeating backgrounds
  • Add a toggle for toggling repeat on and off. For the contain option, default to centering the background position. Note: background position controls will be explored in a separate PR.
  • Note: global styles support is not included in this PR, as the background image support will need separate work for global styles.

To-do

  • Rename Fixed to Repeat, make clicking the toggle set the size to auto
  • Add controls to adjust the background size (so you can make it smaller or larger)
  • Ensure the controls are hidden when they should be
  • Hide these controls by default?
  • Add background repeat toggle
  • Rename Size to Fixed as the toggle option
  • Add centre positioning by default for the contained option
  • In the label and dropdown, rename to Size

Testing Instructions

  1. With TT4 theme active, add a Group block to a post, page, or template
  2. Give the Group block a background image in the inspector controls
  3. Click the ellipsis button to expose the background size controls
  4. Have a play with the different options and try out setting a custom size value, and resetting values
  5. How does it feel to use?

Screenshots or screencast

Screenshot

image

Screengrab

2023-12-21.09.52.04.mp4
@andrewserong andrewserong added [Block] Group Affects the Group Block [Type] Experimental Experimental feature or API. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Dec 13, 2023
@andrewserong andrewserong self-assigned this Dec 13, 2023
Copy link

github-actions bot commented Dec 13, 2023

This pull request has changed or added PHP files. Please confirm whether these changes need to be synced to WordPress Core, and therefore featured in the next release of WordPress.

If so, it is recommended to create a new Trac ticket and submit a pull request to the WordPress Core Github repository soon after this pull request is merged.

If you're unsure, you can always ask for help in the #core-editor channel in WordPress Slack.

Thank you! ❤️

View changed files
❔ lib/compat/wordpress-6.5/kses.php
❔ lib/block-supports/background.php
❔ lib/class-wp-theme-json-gutenberg.php
❔ lib/load.php
Copy link

github-actions bot commented Dec 13, 2023

Size Change: +832 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-editor/index.min.js 245 kB +585 B (0%)
build/block-library/index.min.js 214 kB +116 B (0%)
build/blocks/index.min.js 51.3 kB +37 B (0%)
build/components/index.min.js 257 kB +16 B (0%)
build/style-engine/index.min.js 2.06 kB +78 B (+4%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 590 B
build/block-directory/index.min.js 7.25 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.29 kB
build/block-editor/content.css 4.28 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.2 kB
build/block-editor/style.css 15.2 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 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 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/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.75 kB
build/block-library/blocks/gallery/style.css 1.75 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 654 B
build/block-library/blocks/group/editor.css 654 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 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.61 kB
build/block-library/blocks/image/style.css 1.6 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 2.02 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 505 B
build/block-library/blocks/media-text/style.css 503 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 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 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/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.04 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 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 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/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 345 B
build/block-library/blocks/post-featured-image/style.css 345 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 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 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 647 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 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 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 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 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.49 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 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 399 B
build/block-library/blocks/table/editor.css 399 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 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/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.73 kB
build/core-data/index.min.js 72.7 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.94 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 31.6 kB
build/edit-post/style-rtl.css 7.16 kB
build/edit-post/style.css 7.15 kB
build/edit-site/index.min.js 194 kB
build/edit-site/style-rtl.css 14.7 kB
build/edit-site/style.css 14.7 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.71 kB
build/edit-widgets/style.css 4.71 kB
build/editor/index.min.js 55 kB
build/editor/style-rtl.css 4.38 kB
build/editor/style.css 4.38 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/file.min.js 442 B
build/interactivity/image.min.js 2.15 kB
build/interactivity/index.min.js 12.5 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 791 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.49 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 5.27 kB
build/patterns/style-rtl.css 564 B
build/patterns/style.css 564 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 994 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.74 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.5 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

Copy link

github-actions bot commented Dec 13, 2023

Flaky tests detected in 10ac7f8.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/7283848450
📝 Reported issues:

@andrewserong andrewserong force-pushed the try/add-background-size-block-support branch from 2c7861b to 8d59e4e Compare December 18, 2023 01:10
@andrewserong andrewserong added the Needs Design Feedback Needs general design feedback. label Dec 18, 2023
@andrewserong andrewserong changed the title Background image block support: Add backgroundSize feature and controls Dec 18, 2023
@andrewserong andrewserong changed the title Background image block support: Add backgroundSize feature with implicit repeating backgrounds Dec 18, 2023
@andrewserong
Copy link
Contributor Author

Okay, I think this PR is ready for early feedback on how it feels to use and what the controls might look like. This PR adds options for cover (default), contain, and custom sizes for background images, which allows repeating background images with control over the size of that background image.

I'm curious if folks think if we also need a toggle for control over repeat at this stage? I.e. on / off / x / y options, or if it's decent enough to start out with implicitly having repeating backgrounds whenever the size is not cover 🤔

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.

Working excellently for me so far.

Should we be able to toggle "repeat" off? (i.e. options for repeat of "off", "x", "y", and "both"?)

I think it would be useful to be able to toggle repeat on and off for starters, something that would play well with background-position if it's ever implemented.

packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
value !== 'cover' &&
value !== 'contain' ? (
<UnitControl
size={ '__unstable-large' }
Copy link
Member

Choose a reason for hiding this comment

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

Definitely a 'later' thing, but do you reckon it'd be useful follow up to have width and height controls? E.g., be able to produce values like background-size: 50px 100px;

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes — I was imagining in follow-ups we could introduce a split control. I imagine in most cases folks will want to only use a single size value so that the image's proportions are maintained.

packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
@andrewserong
Copy link
Contributor Author

Thanks for taking this for a spin @ramonjd! 🙇

I think it would be useful to be able to toggle repeat on and off for starters, something that would play well with background-position if it's ever implemented.

Totally. If / when this PR looks viable, I was imagining doing background-position as the next control to implement 👍

The main challenge I've had so far is trying to work out where the toggle might appear / how it would look! This PR seems to work pretty well using a ToggleGroupControl for the different sizes. I wasn't too sure how the repeat toggle should work or look. Some questions / ideas:

  • Do we have it as a boolean toggle that defaults to on?
  • Is it displayed when you activate backgroundSize, or is it its own control in the ToolsPanel menu?
  • Is starting with a boolean toggle good enough, or do we want control over x and y repeat at the outset?

Very happy for any and all ideas, and I can see about hacking them in 😄

@ramonjd
Copy link
Member

ramonjd commented Dec 19, 2023

Do we have it as a boolean toggle that defaults to on?
Is it displayed when you activate backgroundSize, or is it its own control in the ToolsPanel menu?

That was my first thought, though someone more qualified might have a better idea 😄

But then I remembered background-repeat is not tied in any way to size and can stand on its own. So maybe it's own control?

If folks don't like the idea of a toggle control, then perhaps something like text decoration could work, with "reset" and "repeat" buttons, e.g.,

Screenshot 2023-12-19 at 10 38 43 am

Is starting with a boolean toggle good enough, or do we want control over x and y repeat at the outset?

Good question 🤔 Without going into the details, a boolean sounds easier assuming it doesn't present any backwards compat complications should x and y become a thing later? Or could it work similar to axial spacing, e.g., toggle between 1 and 2 inputs?

@andrewserong andrewserong force-pushed the try/add-background-size-block-support branch from fe1421f to 53e38e3 Compare December 19, 2023 00:27
@andrewserong
Copy link
Contributor Author

Thanks for the thoughts, Ramon, much appreciated! I'll have a go putting it in as a single toggle, and then we can have a play with it and see how it feels to use 🙂

@SaxonF
Copy link
Contributor

SaxonF commented Dec 19, 2023

Nice work @andrewserong . A couple suggestions:

  • "Size" could be "Fixed" to align with width/height setting
  • "Image is contained within the block." to "Resize image to fit without cropping"
  • Contain is centre positioned by default
  • "Background size" to "Size"
  • Add repeat tool that uses toggle that's disabled by default "Repeat image"

Once we get around to adding position we might want to condense controls.

@andrewserong
Copy link
Contributor Author

Nice one, thanks Saxon! 🙇

@ramonjd
Copy link
Member

ramonjd commented Dec 22, 2023

I think we have a good foundation to build upon.

Would be good to follow this PR up with folks' design suggestions. Might make the PR reviews easier too.

🚢

@andrewserong
Copy link
Contributor Author

Thanks for the feedback and ideas, folks! 🙇

Seems pretty safe to add this, though, as it's a non-default ellipsis tool.
This seems okay for now

Since there's no apparent blockers and this feature is hidden by default, I'll merge this in with its current form, and will look into a redesign / follow-ups early next year when we tackle the background position controls.

Would be good to follow this PR up with folks' design suggestions. Might make the PR reviews easier too.

Yes — I reckon it'll be easier to review in follow-ups once the feature is already in place, as then we're just looking at the UI rather than all the other pieces of the support 👍

There's a bit of an awkwardness in that you can clear the background image, but still have the repeating/size properties. Not sure if we should clear that also, mainly because it does nothing unless there's a background image.

It'd be a pretty simple follow-up to clear out the other controls when resetting the background image, so we can totally do that. One (potential) reason to keep them a little separate is so that a user can clear out / reset / swap out images with ease while they're working on something without losing their other settings. The use case there is a user cycling through different images and playing around different options where it might be jarring if you accidentally cleared everything out when removing an image. I don't feel strongly either way, though 😄

@jameskoster I really like the design you are showing here.

Same, that looks great! It also recognises that once you have an image set, you're probably going to want to access all the available controls in one place. I'd love to have a go at implementing that in the new year — this PR already saves the attributes in the right place, so we should be able to safely refactor how we're presenting the tools without affecting any of the saved data.

One question in looking at those designs: what triggers the two different popovers? (The replace dropdown versus the popover with the background image and other controls). Is the whole item no longer a single button, but technically two different buttons, with the text and circle on the left opening the main popover, and the icon on the right opening the replace action? We might need to take care there with keyboard controls and how we navigate in and out of those different dropdowns/popovers, as we're effectively changing how the button is interacted with between its empty and active states (going from a single button to a split set of two buttons) 🤔

Feel free to share any further info or ideas either here or in #54336, and I'll dig in next year!

@andrewserong andrewserong merged commit 071082c into trunk Dec 22, 2023
55 of 56 checks passed
@andrewserong andrewserong deleted the try/add-background-size-block-support branch December 22, 2023 00:26
@github-actions github-actions bot added this to the Gutenberg 17.4 milestone Dec 22, 2023
@andrewserong andrewserong added [Type] Enhancement A suggestion for improvement. Needs PHP backport Needs PHP backport to Core and removed [Type] Experimental Experimental feature or API. labels Dec 22, 2023
@jameskoster
Copy link
Contributor

One question in looking at those designs: what triggers the two different popovers?

I suppose it would function a bit like the rows in List View, where you can click a row to select but the ellipsis icon is also interactive:

Screenshot 2023-12-22 at 13 11 54

I think this pattern could have practical uses elsewhere, e.g.: #41866

But I recognise it may be finicky to implement. Putting those controls in the popover could work too.

@andrewserong
Copy link
Contributor Author

@getdave getdave added the Backported to WP Core Pull request that has been successfully merged into WP Core label Jan 19, 2024
@paaljoachim
Copy link
Contributor

A client noticed that the focus on the background image in a stack was from the top going downward.
She thought it strange that the focus of the image was not in the center.

@getdave
Copy link
Contributor

getdave commented Jan 22, 2024

Updated on PHP Sync Tracking Issue for WP 6.5 to denote complete. Thank you for working on this.

@fabiankaegy fabiankaegy added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Jan 22, 2024
@andrewserong
Copy link
Contributor Author

A client noticed that the focus on the background image in a stack was from the top going downward.
She thought it strange that the focus of the image was not in the center.

Thanks Paal — this feature added in background size, but not background position controls. For now, if folks need control over background position, they may be better off using the Cover block. My plan is to add in background position control, too, but that feature might not be ready in time for WP 6.5.

@andrewserong
Copy link
Contributor Author

Draft dev note:


Background image block support additional features for size, repeat, and position

In WordPress 6.5 the background image block support receives new controls related to the size of the background image: size, repeat, and position.

For blocks that use the background image block support (currently the Group block is the only core block to use this support), these optional controls can now be displayed. They are hidden by default behind the tools panel menu in the Background controls in the inspector sidebar.

How to add background size support to a theme

There are two ways to add support for backgroundSize and the related size, repeat and position controls to a block theme. The simplest is to opt in to the appearanceTools setting, which automatically enables a number of design tools (read more in the developer handbook).

For themes that wish to have more granular control over which UI tools are enabled, the backgroundSize support can be opted into by setting settings.background.backgroundSize to true in theme.json. For example:

{
	"settings": {
		"background": {
			"backgroundImage": true,
			"backgroundSize": true

Note that as of WP 6.4 and WP 6.5, the backgroundImage, backgroundSize and related supports are only available at the individual block level, and not in global styles or at the site root. These features will be explored in subsequent releases, with progress tracked in this Github issue: #54336.

@andrewserong andrewserong added has dev note when dev note is done (for upcoming WordPress release) and removed Needs Dev Note Requires a developer note for a major WordPress release cycle labels Feb 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backported to WP Core Pull request that has been successfully merged into WP Core [Block] Group Affects the Group Block [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi has dev note when dev note is done (for upcoming WordPress release) Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.
8 participants