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

Add custom CSS support to elements and block style variations #49396

Closed
wants to merge 18 commits into from

Conversation

carolinan
Copy link
Contributor

@carolinan carolinan commented Mar 28, 2023

What?

Adds custom CSS support to theme.json styles.elements and styles.blocks.blockname.variations.
Outputs the CSS from theme.json in the editors and the front.

-The theme.json schema is not updated in this PR because it already allowed CSS for these sections.

Why?

This is an enhancement that increases the flexibility of CSS in theme.json:
-Allows adding CSS to all headings at once (and other elements)
-Allows adding CSS to style variations. Example: Change the width of the separator "wide" block style variation.

Testing Instructions

Activate Twenty Twenty-Three

In theme.json, add some custom CSS to a variation and an element. Example:

	"styles": {
		"css": "body { background-color: yellow; }",
		"blocks": {
                        "core/separator": {
				"css": "border:10px solid purple; max-width:100px",
				"variations": {
					"default": {
						"css": "border:10px solid blue"
					},
					"wide": {
						"css": "border:10px solid red"
					}
				}
			},
			"core/button":{
				"variations": {
					"outline": {
						"css": "color:blue"
					}
				}
			}
		},
		"elements": {
			"button": {
				"css": "color:red"
			},
			"heading": {
				"css": "border:10px solid green"
			}
		}
	}

Do not forget to reset styles between the tests.

Body:

  • The body background should be yellow.
  • Going to Site Editor, Styles, color, background, and changing the color should NOT change the color.

Elements:

  • All headings should have a green border on the front and in the editors.
  • Going to Site Editor, Styles, blocks, heading, and entering border: none; into the CSS field should remove the border from the heading block.
  • Going to Site Editor, Styles, blocks, post title, and entering border: none; into the CSS field should remove the border from the post title block.

Add a button without a style variation:

  • All buttons should have red text color on the front and in the editors.
  • Going to Site Editor, Styles, color, buttons, text, and changing the color should NOT change the text color: The CSS should override this: To do: Add elements Custom CSS to the global CSS field?
  • Going to Site Editor, Styles, blocks, button, color, text, and changing the color should change the text color.
  • Going to Site Editor, Styles, blocks, button, and entering color: purple; into the CSS field should change the text color.
  • Selecting an individual button block and changing the text color in the color panel should update the text color.

Variations
Separator:

  • The default variation should have a 10x purple border
  • The wide variation should have a 10px red border
    The custom CSS field for the block should contain
    border:10px solid purple; max-width:100px
    not border:10px solid blue

The following entry in theme.json should be ignored:

			"variations": {
					"default": {
						"css": "border:10px solid blue"
					},

Button: Add a button with the outline style variation.

  • The button text and outline should both be blue.
  • Selecting this individual button block and changing the text color in the color panel should update the color.
  • Going to Site Editor > Styles > Block > Button > Variation > Outline > color > text and changing the text color should NOT update the color.

Screenshots or screencast

@carolinan carolinan added the [Type] Enhancement A suggestion for improvement. label Mar 28, 2023
@carolinan

This comment was marked as resolved.

@github-actions
Copy link

github-actions bot commented Mar 28, 2023

Size Change: -21.5 kB (-2%)

Total Size: 1.39 MB

Filename Size Change
build/a11y/index.min.js 955 B -27 B (-3%)
build/annotations/index.min.js 2.69 kB -72 B (-3%)
build/api-fetch/index.min.js 2.28 kB -49 B (-2%)
build/autop/index.min.js 2.1 kB -38 B (-2%)
build/blob/index.min.js 451 B -21 B (-4%)
build/block-directory/index.min.js 7.05 kB -128 B (-2%)
build/block-editor/index.min.js 193 kB -6.69 kB (-3%)
build/block-editor/style-rtl.css 15.1 kB +10 B (0%)
build/block-editor/style.css 15.1 kB +9 B (0%)
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB -27 B (-1%)
build/block-library/blocks/navigation/view.min.js 438 B -5 B (-1%)
build/block-library/index.min.js 200 kB -4.34 kB (-2%)
build/block-library/interactivity/runtime.min.js 2.69 kB +4 B (0%)
build/block-serialization-spec-parser/index.min.js 2.87 kB +39 B (+1%)
build/blocks/index.min.js 50.3 kB -663 B (-1%)
build/commands/index.min.js 14.9 kB -59 B (0%)
build/components/index.min.js 230 kB -1.63 kB (-1%)
build/compose/index.min.js 12.1 kB -351 B (-3%)
build/core-commands/index.min.js 1.74 kB -66 B (-4%)
build/core-data/index.min.js 15.4 kB -1.09 kB (-7%)
build/customize-widgets/index.min.js 12 kB -168 B (-1%)
build/data-controls/index.min.js 640 B -68 B (-10%) 👏
build/data/index.min.js 8.28 kB -378 B (-4%)
build/date/index.min.js 40.4 kB -32 B (0%)
build/deprecated/index.min.js 451 B -56 B (-11%) 👏
build/dom/index.min.js 4.63 kB -99 B (-2%)
build/edit-post/index.min.js 34.6 kB -634 B (-2%)
build/edit-site/index.min.js 64.5 kB -1.24 kB (-2%)
build/edit-widgets/index.min.js 17 kB -266 B (-2%)
build/editor/index.min.js 44.6 kB -1.1 kB (-2%)
build/element/index.min.js 4.8 kB -89 B (-2%)
build/format-library/index.min.js 7.57 kB -202 B (-3%)
build/hooks/index.min.js 1.55 kB -90 B (-6%)
build/i18n/index.min.js 3.58 kB -149 B (-4%)
build/keyboard-shortcuts/index.min.js 1.71 kB -77 B (-4%)
build/keycodes/index.min.js 1.84 kB -68 B (-4%)
build/list-reusable-blocks/index.min.js 2.13 kB -12 B (-1%)
build/media-utils/index.min.js 2.9 kB -69 B (-2%)
build/notices/index.min.js 875 B -88 B (-9%)
build/plugins/index.min.js 1.84 kB -10 B (-1%)
build/preferences-persistence/index.min.js 1.84 kB -381 B (-17%) 👏
build/preferences/index.min.js 1.24 kB -90 B (-7%)
build/primitives/index.min.js 941 B -3 B (0%)
build/redux-routine/index.min.js 2.7 kB -39 B (-1%)
build/reusable-blocks/index.min.js 2.21 kB -44 B (-2%)
build/rich-text/index.min.js 10.7 kB -347 B (-3%)
build/router/index.min.js 1.77 kB -6 B (0%)
build/server-side-render/index.min.js 2.02 kB -50 B (-2%)
build/shortcode/index.min.js 1.39 kB -28 B (-2%)
build/style-engine/index.min.js 1.42 kB -105 B (-7%)
build/token-list/index.min.js 582 B -62 B (-10%) 👏
build/url/index.min.js 3.57 kB -80 B (-2%)
build/vendors/react-dom.min.js 41.8 kB -13 B (0%)
build/viewport/index.min.js 1.04 kB -42 B (-4%)
build/widgets/index.min.js 7.16 kB -123 B (-2%)
build/wordcount/index.min.js 1.02 kB -36 B (-3%)
ℹ️ View Unchanged
Filename Size
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.23 kB
build/block-editor/content.css 4.23 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
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 91 B
build/block-library/blocks/avatar/style.css 91 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 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 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 409 B
build/block-library/blocks/columns/style.css 409 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.61 kB
build/block-library/blocks/cover/style.css 1.6 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 159 B
build/block-library/blocks/details/style.css 159 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 126 B
build/block-library/blocks/embed/theme.css 126 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/interactivity.min.js 395 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 375 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 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.53 kB
build/block-library/blocks/gallery/style.css 1.53 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 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 76 B
build/block-library/blocks/heading/style.css 76 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 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/interactivity.min.js 783 B
build/block-library/blocks/image/style-rtl.css 1.07 kB
build/block-library/blocks/image/style.css 1.07 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
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 507 B
build/block-library/blocks/media-text/style.css 505 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 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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.33 kB
build/block-library/blocks/navigation/editor.css 2.33 kB
build/block-library/blocks/navigation/interactivity.min.js 896 B
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 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 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/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 281 B
build/block-library/blocks/post-template/style.css 281 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 103 B
build/block-library/blocks/preformatted/style.css 103 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 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 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 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 132 B
build/block-library/blocks/read-more/style.css 132 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 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 434 B
build/block-library/blocks/search/style.css 432 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 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 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 203 B
build/block-library/blocks/site-logo/style.css 203 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 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/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 174 B
build/block-library/blocks/video/style.css 174 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.1 kB
build/block-library/common.css 1.1 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.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/interactivity/vendors.min.js 8.2 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 13.1 kB
build/block-library/style.css 13.1 kB
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/dom-ready/index.min.js 324 B
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/style-rtl.css 7.76 kB
build/edit-post/style.css 7.75 kB
build/edit-site/style-rtl.css 10.9 kB
build/edit-site/style.css 10.9 kB
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/escape-html/index.min.js 537 B
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/html-entities/index.min.js 448 B
build/is-shallow-equal/index.min.js 527 B
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 939 B
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react.min.js 4.02 kB
build/warning/index.min.js 268 B
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented Mar 28, 2023

Flaky tests detected in 25db93f.
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/5090482727
📝 Reported issues:

Copy link
Contributor

@tellthemachines tellthemachines 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 working on this @carolinan !

Going to Site Editor, Styles, color, buttons, text, and changing the color should NOT change the text color: The CSS should override this: To do: Add elements Custom CSS to the global CSS field?

I can't reproduce this on Empty theme but it might be due to stylesheet order as both the declarations have the exact same specificity:

Screenshot 2023-04-19 at 3 19 30 pm

(Having an element selector target the inner class of a specific block like .wp-block-button__link feels a bit off, though I suspect the reason is that our "buttons" aren't all actual button elements)

Were you planning on adding custom CSS fields for block style variations in the UI as a follow-up? If we have the possibility to set them from theme.json it would make sense for the UI to reflect that too.

@carolinan
Copy link
Contributor Author

carolinan commented Apr 19, 2023

Changing Styles> color> buttons> text should not override the theme.json Elements > button > CSS.
In the screenshot, isn't the custom CSS the red text color, and it is being applied? And the green preset is from the option?

That the CSS overrides this setting, is one of the reasons why we need the CSS field in the UI, so that users can remove the CSS.

I can work on the UI, yes, but I'd need some UX decisions first; perhaps the elements CSS should be in the global CSS panel.
I am not sure where else to present it without it being overwhelming.

@carolinan

This comment was marked as outdated.

@carolinan carolinan added the Needs Design Needs design efforts. label Apr 26, 2023
@carolinan carolinan changed the title Add custom CSS support to theme.json elements and variations Add custom CSS support to elements and block style variations Apr 26, 2023
@carolinan

This comment was marked as outdated.

@carolinan carolinan marked this pull request as draft April 26, 2023 07:48
@tellthemachines

This comment was marked as outdated.

@carolinan

This comment was marked as outdated.

@carolinan carolinan marked this pull request as ready for review May 8, 2023 08:35
Copy link
Contributor

@tellthemachines tellthemachines 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 persisting with this, it's working pretty well! Just a couple comments below and a thought:

I don't love how adding custom CSS to the default variation works, because there's no way of overriding it from the UI. For any non-default variation, the added CSS appears in the custom CSS box for that variation, and can be removed, but for the default variation the custom CSS can't be overridden from the block's custom CSS field.

I wonder if we could either wire up the custom CSS added in theme.json for the default style to appear (and be overridable from) the block's custom CSS, or if perhaps we should disable adding styles for the default variation in theme.json altogether?

// We need to add a ':not' selector to the selector to target the default variation.
$not_selector = '';
foreach ( static::$blocks_metadata[ $name ]['styleVariations'] as $not_style_variation_name => $node ) {
$not_selector .= ':not(.is-style-' . $not_style_variation_name . ')';
Copy link
Contributor

Choose a reason for hiding this comment

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

We could simplify this and remove the loop altogether by making the rule :not([class*="is-style-"])

if ( variation[ 1 ].css ) {
const variationSelector =
blockSelectors[ blockType.name ]
.styleVariationSelectors[ variation[ 0 ] ];
Copy link
Contributor

Choose a reason for hiding this comment

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

We should probably add a version of the "not" selector in here, otherwise styles applied to the default variation won't appear in the editor.

@carolinan
Copy link
Contributor Author

I don't understand what "wire up CSS" means 😆

@carolinan
Copy link
Contributor Author

If it wasn't for the separator block default variation, I think the default variation CSS could be removed, yes.
But users are still expecting this block's default variation to be styled differently:
#50674

@tellthemachines
Copy link
Contributor

I don't understand what "wire up CSS" means

Sorry! That wasn't very clear. I meant would it be possible connect the "default" style variation with the block's custom CSS input (the one outside of the variations), so that any custom CSS added to the default variation in theme.json appears in the input and can be overridden from there?

If it wasn't for the separator block default variation, I think the default variation CSS could be removed, yes.

Hmm, if that's the main issue, I think we could try a different solution for it. Maybe deprecating the "wide" variation if it's redundant? Or making it the default and adding a "narrow" variation instead? It doesn't feel right to structure the behaviour of the custom CSS API around a styling issue with a particular block 😅

@carolinan
Copy link
Contributor Author

I would like the wide to be deprecated and only the dots kept as a variation.

But the last time a style variation was deprecated it caused problems for developers because they had added their own CSS to the core styles, reusing the class names instead of creating their own.

Now, that would not only affect developers but also affect users directly, because they can customize the variations too., right?

@tellthemachines
Copy link
Contributor

But the last time a style variation was deprecated it caused problems for developers because they had added their own CSS to the core styles, reusing the class names instead of creating their own.

I'm thinking we'd have to deprecate in a way that preserves the classnames for existing uses of the style variation, so as not to break any websites out there.

Now, that would not only affect developers but also affect users directly, because they can customize the variations too., right?

Once this PR is merged we will have that problem, yeah. I guess we'd have to still show any variations with custom styles attached in the UI so they could be reset/removed.

@carolinan
Copy link
Contributor Author

carolinan commented May 25, 2023

If we go with "disable adding styles for the default variation in theme.json", how do we make that known for people editing theme.json? I don't think it is possible to use the schema to warn that it is invalid?

@tellthemachines
Copy link
Contributor

I don't think it is possible to use the schema to warn that it is invalid?

Yeah, that's what makes it hard, the default style can have any name. Plus it could be changed or removed via a filter.

Perhaps it's better to take the other approach, and try to at least make sure any additions to the default variation are editable.

@carolinan
Copy link
Contributor Author

carolinan commented May 26, 2023

When a style is selected and then reverted back to the default, the class is is-style-default, and that is why it can't be styled with the blocks own custom CSS field: the additional CSS class is not applied there.

Well, it can't be styled there unless we change that. :)

@tellthemachines
Copy link
Contributor

Well, it can't be styled there unless we change that. :)

True 😄 and there doesn't seem to otherwise be a good way forward here. I'm mostly concerned that theme authors can add "default" styles that are impossible to override in the UI.

@carolinan
Copy link
Contributor Author

What I am trying to do with the last 4 commits is ignore anything that is added to theme.json variations.default.css:

	"variations": {
					"default": {
						"css": "..."
					}
				}

Styling the default variation via theme.json blocks.blockname.css works, but there is a specificity issue.
is-style-default.is-style-default.block-class has a higher specificity than .block-class.
So a max-width:100px in the separator block custom CSS field will be ignored in the editor because there is a global block content width that has a higher specificity.
While if you select a block style variation, and then select the default variation again, the is-style-default class is added and now the width in the custom CSS has a higher specificity than the editor content width.
This can be tested with the example theme.json code from the PR description.
(It can be by-passed by adding !important to the custom CSS.)

Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

I think we might have dug ourselves into a really deep hole with the current implementation of default style variations 😅 I've been thinking about how to untangle this and there's no obvious way forward.

isDefault is a property that can be added to any style variation, and once the ability to set new variations in theme.json (as described in #49827) ships, a theme will be able to add and set as default a new variation for any block.

The problem is that there's a mismatch between how this works and the UI in the block settings: the variation set to isDefault is always named "Default" in the UI, and also, the "Default" variation appears selected if a block has no variation explicitly set (I'm equating a variation being "set" here with its classname being present on the block, which I think is a reasonable assumption to make)

This could potentially be less confusing if we always explicitly set the default variation for new blocks when they have a default variation configured. That would be something to explore separately from this PR though!

I guess the approach of adding the default style selector to all the non-variation specific block custom CSS will solve the problem in the short term, but we have to make sure to add the correct classname.

Another thing that would be nice is if we could get any styles added to the default variation from theme.json to show in value for custom CSS here, so we could disable them by emptying the input if needed. I'm not sure how doable that is though, because that input is already controlling the non-variation block custom CSS.

// Only use the class for the default style variation if the block has style variations.
if ( isset( static::$blocks_metadata[ $name ]['styleVariations'] ) ) {
// Add the block selector and the .is-style-default style variation class.
$selector = static::$blocks_metadata[ $name ]['selector'] . ', ' . static::$blocks_metadata[ $name ]['styleVariations']['default'];
Copy link
Contributor

Choose a reason for hiding this comment

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

The default variation isn't always named "default". This won't work for the Button block, for example, and we also don't have any way of enforcing the naming for third party blocks. The only way to make sure a style variation is default is by checking for the "isDefault" property.

@carolinan
Copy link
Contributor Author

carolinan commented May 29, 2023

Could we remove the "default" selection from the interface and replace it with a "reset" "no variation" or "unstyled" option?
I mean here:
Screenshot 2023-05-29 at 06 57 39

Or, not indicate that one of these options has to be selected.

And then in the interface, list all variations by their actual name and find a way to indicate which variation is set as the default:
Rounded (Default)

@carolinan
Copy link
Contributor Author

I mean that we could try to separate unstyled from default and not consider this to be a valid variation name:

"variations": {
					"default": {
						"css": "border:10px solid blue"
					},

@tellthemachines
Copy link
Contributor

Could we remove the "default" selection from the interface and replace it with a "reset" "no variation" or "unstyled" option?
And then in the interface, list all variations by their actual name and find a way to indicate which variation is set as the default:

I like these ideas, but it might be good to get design feedback on them. When adding style variations to the site editor, I initially had all the variations displaying and removed them after subsequent discussion, as it was found confusing. Perhaps it's a good time to revisit that discussion cc @WordPress/gutenberg-design

@ghost
Copy link

ghost commented Jul 5, 2023

Hey guys! I appreciate very much your efforts on Custom CSS, since the Global Custom CSS has been implemented.

If I was god, I would prioritize this request to be approved.

Sometimes it's good to get an outside look at our work for feedback, and I want to warn you that I read through the entire current discussion, and when I finished it, it sounded more like you were discussing deprecating styles instead of implementing custom CSS to elements and block style variations. 😂 The discussion ""got lost"" along the way, in the sense that it considered several different issues and not always blockers for the current PR. I suggest that you define the next steps that need to be taken, and to what extent one step really is making the other step impossible. I'm sure your caution will remain. The hard part is over, with the implementation proposed by @carolinan which is already done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Design Needs design efforts. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants