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 block supports: move block support defaults to gutenberg_render_background_support and revert gutenberg_get_background_support_styles #59889

Merged
merged 13 commits into from
Mar 21, 2024

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Mar 15, 2024

What and how?

This PR:

  1. moves block supports defaults logic (back) to gutenberg_render_background_support on the PHP side, and to the background hook (from style engine).
  2. reverts gutenberg_get_background_support_styles as it's only calling the style engine, and moving the style engine call to the theme json class.

The consequences are:

  1. Block supports receive specific default value logic only (setting "cover" for "background-size" etc)

Context:

Important

Changes in this PR only affect the frontend. Harmonizing the site editor with these changes is happening over in #60008

Why?

To isolate specific property mutations to block supports.

When adding backgrounds to blocks in the editor, e.g., Group block, having defaults allows users to see the scaled image immediately as the containing element might be too small or large for the source image.

For site backgrounds in global styles, these defaults may not make sense, especially if theme devs deliberately leave them out in theme.json.

As for reverting gutenberg_get_background_support_styles, it's code that's not longer required. It hasn't been in Gutenberg for long and is not in WordPress Core. Let's re-add it as we need it, which might be soon.

Testing Instructions

Test the changes on a published post in the frontend.

  1. When adding a background image to theme JSON (example theme.json below), the default background size should not be set.
  2. For Group blocks, the default value should be "cover" UNLESS the supports.background.backgroundSize is set to another defaults, e.g., "contain", in which case it'll be "contain"

Example theme.json

{
	"$schema": "../../schemas/json/theme.json",
	"version": 2,
	"settings": {
		"appearanceTools": true,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true
		}
	},
	"styles": {
		"color": {
			"background": "tomato"
		},
		"background": {
			"backgroundImage": "url('https://i0.wp.com/wordpress.org/files/2023/12/sotw-dotorg-drawer.png?w=1807&ssl=1')"
		}
	}
}

Screenshots or screencast

2024-03-20.11.05.10.mp4

@ramonjd ramonjd added the [Status] In Progress Tracking issues with work in progress label Mar 15, 2024
@ramonjd ramonjd self-assigned this Mar 15, 2024
Copy link

github-actions bot commented Mar 15, 2024

Size Change: -114 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-editor/index.min.js 253 kB -114 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.43 kB
build/block-editor/content.css 4.43 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 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 126 B
build/block-library/blocks/audio/theme.css 126 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 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 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.69 kB
build/block-library/blocks/cover/style.css 1.68 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 322 B
build/block-library/blocks/embed/editor.css 322 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 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 327 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 324 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 227 B
build/block-library/blocks/form-input/editor.css 227 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 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 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 471 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 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 647 B
build/block-library/blocks/group/editor.css 647 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 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 878 B
build/block-library/blocks/image/editor.css 878 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view.min.js 1.54 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 306 B
build/block-library/blocks/media-text/editor.css 305 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 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 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.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.02 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 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-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 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 342 B
build/block-library/blocks/post-featured-image/style.css 342 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 354 B
build/block-library/blocks/pullquote/style.css 354 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/view.min.js 958 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 629 B
build/block-library/blocks/search/style.css 628 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 478 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 229 B
build/block-library/blocks/separator/style.css 229 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 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 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.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 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 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 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 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 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/index.min.js 218 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 693 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.8 kB
build/commands/index.min.js 15.6 kB
build/commands/style-rtl.css 935 B
build/commands/style.css 930 B
build/components/index.min.js 224 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.9 kB
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.8 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.98 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 558 B
build/edit-post/classic.css 558 B
build/edit-post/index.min.js 24.2 kB
build/edit-post/style-rtl.css 5.58 kB
build/edit-post/style.css 5.57 kB
build/edit-site/index.min.js 218 kB
build/edit-site/style-rtl.css 15 kB
build/edit-site/style.css 15 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.16 kB
build/editor/index.min.js 64 kB
build/editor/style-rtl.css 5.36 kB
build/editor/style.css 5.35 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.1 kB
build/format-library/style-rtl.css 492 B
build/format-library/style.css 490 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.15 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 849 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 2 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 742 B
build/patterns/index.min.js 5.73 kB
build/patterns/style-rtl.css 553 B
build/patterns/style.css 552 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.05 kB
build/preferences/index.min.js 2.81 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 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.39 kB
build/style-engine/index.min.js 2.03 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.72 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@andrewserong
Copy link
Contributor

Thanks for opening the PR! In #59454 (comment), I was imagining that defaulting to auto would only happen in global styles when dealing with the root background image, rather than switching the default altogether when using the block support at the individual block level. I think cover works pretty well as a default on the Group block, for example, since it's a similar behaviour to the Cover block, but when dealing with site-wide background images, we might want a different default value.

So, what I was wondering is if instead of altering the default output of the block support, if we can achieve it (possibly in #59454) via what the UI controls set when we add a background image, rather than altering the implicit value in the block support's output. I.e. if onSelectMedia could use some param or something to also set background size when setting an image?

What do you think?

@ramonjd
Copy link
Member Author

ramonjd commented Mar 17, 2024

So, what I was wondering is if instead of altering the default output of the block support, if we can achieve it (possibly in #59454) via what the UI controls set when we add a background image, rather than altering the implicit value in the block support's output.

Thanks for the thoughts 🙇🏻

I'll have a play around.

We'd also need to consider how the backend operates.

I'm thinking root theme.json styles should behave similarly to global styles in the editor, i.e., defaulting to "auto". However, we'd default to "cover" when "styles.blocks['core/group']` backgrounds are (eventually enabled and) set.

Given that, I'm thinking maybe we could do a blanket default of "auto" and then pass a param to dictate alt behaviour, e.g., "cover".

It might be useful use "blockName" as a flag, or some generic flag, or something. I'll experiment 👍🏻

I.e. if onSelectMedia could use some param or something to also set background size when setting an image?

Good idea. This might work. I'll also try using blockName in case, in the future, we want different behaviour for different blocks.

@andrewserong
Copy link
Contributor

andrewserong commented Mar 17, 2024

Thanks for digging in! I suppose one of the questions in terms of default values might be: "If I were writing a 3rd party block and wanted to opt in to the support, what would I expect the default size to be?"

It might be useful use "blockName" as a flag, or some generic flag, or something. I'll experiment 👍🏻

Not sure if it helps or is a good idea, but the layout support allows a default value in block.json for setting a layout type, so we might be able to do something similar with a default background size?

@ramonjd
Copy link
Member Author

ramonjd commented Mar 17, 2024

the layout support allows a default value in block.json for setting a layout type, so we might be able to do something similar with a default background size?

Excellent! I like this.

@ramonjd
Copy link
Member Author

ramonjd commented Mar 18, 2024

Actually, testing this out again today I'm not convinced that the style engine needs to be at all opinionated about background size, or any, values.

If we coerce, it probably should be in the block supports themselves.

@ramonjd ramonjd changed the title Block supports: background size defaults to "auto" Background block supports: move size defaults to hooks and block.json, revert to "auto" for global styles Mar 19, 2024
@ramonjd ramonjd requested a review from andrewserong March 19, 2024 02:12
@ramonjd ramonjd added [Type] Enhancement A suggestion for improvement. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Mar 19, 2024
@ramonjd ramonjd force-pushed the update/default-background-size-auto branch from 49208b0 to f2bf6be Compare March 19, 2024 02:17
@ramonjd ramonjd marked this pull request as ready for review March 19, 2024 02:17
Copy link

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copy link
Member Author

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

@andrewserong

I might have gone a bit far 😄

The intention was to:

Whenever you get free time to validate the approach, I'd be very grateful!

lib/block-supports/background.php Outdated Show resolved Hide resolved
schemas/json/block.json Outdated Show resolved Hide resolved
packages/style-engine/src/styles/background/index.ts Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js 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 for the ping and for digging in deep here, Ramon! This PR does a bit of a refactor at the same time as updating behaviour, so if it gets tricky to wrangle, we could potentially split it further into smaller PRs? I've left a few comments about the refactor parts, but my main thoughts were regarding the switch of the default to auto.

One potential blocker to switching out the default for blocks to auto is that the background image/size block supports have been out in the wild for a while now, and I see there are at least a couple of plugins that use backgroundSize: true and so might be depending on cover being the default 🤔

Here's a search in the plugin directory with Autogrid and Good Slider opting in to backgroundImage and backgroundSize — while it doesn't look like they have installs, it could be a signal of potentially wider use of the block support.

So, in terms of backwards compatibility, would it be worth exploring the idea that backgroundSize being set to true defaults to cover, but that we can also set the default to auto? If so, how might this look for when we get to site wide background images in global styles?

I'm imagining that once this PR lands, we want to be in a situation that's something like the following:

  • If a user adds an image to a Group block in post content, it'll get cover size by default
  • If a user adds an image to all Group blocks in global styles, they'll also get cover size by default
  • If a user adds a site-wide image in global styles, then it'll get auto size by default

If so, it sounds like auto might be the exception rather than the default used in most cases? What do you think?

docs/reference-guides/block-api/block-supports.md Outdated Show resolved Hide resolved
lib/block-supports/background.php Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/block-editor/src/hooks/background.js Outdated Show resolved Hide resolved
packages/style-engine/src/styles/background/index.ts Outdated Show resolved Hide resolved
packages/style-engine/src/styles/background/index.ts Outdated Show resolved Hide resolved
@ramonjd
Copy link
Member Author

ramonjd commented Mar 19, 2024

Thanks a lot for testing this PR!

One potential blocker to switching out the default for blocks to auto is that the background image/size block supports have been out in the wild for a while now, and I see there are at least a couple of plugins that use backgroundSize: true and so might be depending on cover being the default

Oh yeah. I was enchanted by the seductive temptations of progress.

In this case, I think it's okay to leave the "cover" value as a default for blocks and remove the block.json-related shizzle.

It will hopefully make this all easier to review as well.

Would that be reasonable?

I'm imagining that once this PR lands, we want to be in a situation that's something like the following:

If a user adds an image to a Group block in post content, it'll get cover size by default
If a user adds an image to all Group blocks in global styles, they'll also get cover size by default
If a user adds a site-wide image in global styles, then it'll get auto size by default

If so, it sounds like auto might be the exception rather than the default used in most cases? What do you think?

This is the way I understand it too. Block background size styles (individual and global) default to "cover", and theme.json top-level backgrounds default to "auto".

In fact, we probably needn't set "auto" at all - it's the default whenever one sets a background-image anyway if I'm not mistaken. 😄

So really, the question we're trying to answer is "should html backgrounds (site-wide) have a default other than 'cover'", at least when it comes to theme.json. Probably "yes" given your findings in #59454 (review)?

@andrewserong
Copy link
Contributor

Nice one, thanks for distilling the discussion.

Block background size styles (individual and global) default to "cover", and theme.json top-level backgrounds default to "auto".

Yes, I think that sounds ideal to me 👍

So really, the question we're trying to answer is "should html backgrounds (site-wide) have a default other than 'cover'", at least when it comes to theme.json. Probably "yes" given your findings in #59454 (review)?

That's my feeling, too. Most blocks are in a limited area visually where cover works nicely, but site-wide styles feel like they need a different default, and auto sounds like the best fit so far.

Let me know when you're ready for another review, and I'll give this another spin!

@ramonjd
Copy link
Member Author

ramonjd commented Mar 19, 2024

I think I have this working so I'm going to split this PR tomorrow:

  1. Backend block support and other PHP changes
  2. Using useBlockProps instead of style engine to output defaults

👍🏻 Thanks again @andrewserong for the helpful reviews.

@ramonjd ramonjd changed the title Background block supports: move size defaults to hooks and block.json, revert to "auto" for global styles Background block supports: revert to "auto" for global styles Mar 19, 2024
$background_styles['backgroundPosition'] = 'center';
}
}

return gutenberg_style_engine_get_styles( array( 'background' => $background_styles ) );
Copy link
Contributor

Choose a reason for hiding this comment

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

It looks like all this function does now is call gutenberg_style_engine_get_styles. Is it still worth keeping this function in? If we're not planning to add any other features to this function, then I think we could likely safely remove it since it hasn't been in Gutenberg very long. If we're thinking we might add more features to it as part of the background image UI in global styles, then please ignore this comment 😄

Copy link
Contributor

Choose a reason for hiding this comment

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

then please ignore this comment

I just remembered that we'll likely still want a shared function for future functionality like retrieving an image based on a theme url, or potentially a featured image, so there's at least a couple of examples of potential uses for the function in the future 😄

Copy link
Member Author

Choose a reason for hiding this comment

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

Very good point - I left it in because we might want some hackery for global styles as well.

I was hoping to know for sure when we flip the switch on block global styles in theme.json.

One other thing: the style engine handles both "backgroundImage": "url(...)" and "backgroundImage": { "url": "http://..." }

But you're right. Apart from that it's not doing anything.

I'm happy to cull it here, or keep it until we're sure we don't need it. 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

Whichever way you want to go with it! I think it all depends on what abstract makes sense to a consumer. Calling "in" to a block support function from global styles, even if it only does one other thing isn't necessarily bad, as it helps abstract things a little, so conceptually I don't mind it.

Copy link
Member Author

@ramonjd ramonjd Mar 20, 2024

Choose a reason for hiding this comment

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

One other thing: the style engine handles both "backgroundImage": "url(...)" and "backgroundImage": { "url": "http://..." }

This is the only advantage as far as I can see.

Removing the function just means that theme.json users will have to use "backgroundImage": "url(...)" for now, and the block support/theme.json models won't be the same for the backgroundImage property.

I don't think that's so bad, and we can always reinstate when things are more concrete.

Copy link
Member Author

Choose a reason for hiding this comment

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

So I reverted it.

Now we're nearly back to the state before:

😄

@ramonjd ramonjd force-pushed the update/default-background-size-auto branch from 662b3ec to 7ab18c8 Compare March 20, 2024 05:15
@ramonjd ramonjd changed the title Background block supports: move block support defaults to gutenberg_render_background_support Background block supports: move block support defaults to gutenberg_render_background_support and revert gutenberg_get_background_support_styles Mar 20, 2024
@ramonjd ramonjd force-pushed the update/default-background-size-auto branch from 5350ab5 to e17df6e Compare March 20, 2024 23:24
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 for all the back-and-forth! Testing well:

✅ Defaults for the background image are being output as on trunk at the block level
✅ Root global styles backgroundImage supports both a string value and object with url value

LGTM! ✨

@ramonjd ramonjd merged commit d374e97 into trunk Mar 21, 2024
57 checks passed
@ramonjd ramonjd deleted the update/default-background-size-auto branch March 21, 2024 00:15
@github-actions github-actions bot added this to the Gutenberg 18.0 milestone Mar 21, 2024
carstingaxion pushed a commit to carstingaxion/gutenberg that referenced this pull request Mar 27, 2024
…ender_background_support and revert gutenberg_get_background_support_styles (WordPress#59889)

* Move block support defaults to gutenberg_render_background_support and revert gutenberg_get_background_support_styles
* Revert JS changes, moving them to a new PR WordPress#60008
* background-size auto is the same as no background-size
* Using style engine in theme json class to generate background styles because background image can be a string or an object.



Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
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 [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants