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

Styles: try wrapping with :root to fix reset styles #61638

Merged
merged 32 commits into from
May 28, 2024

Conversation

ellatrix
Copy link
Member

@ellatrix ellatrix commented May 14, 2024

What?

In order to apply global styles after any theme reset styles, e.g. ol, ul { ... }, increase the specificity slightly, while keeping CSS overall specificity levelling and specificity decreases.

To do: figure out where else exactly we need :root, I'm not super familiar with this code.

Note: Block style variations and their selectors will be handled via a separate follow-up as they haven't yet had their specificity reduction merged in Gutenberg (see #61032).

Why?

To make sure reset styles not wrapped in :where do not break anything.

Why :root and not html or body? Because :root has the same specificity of attributes and would catch all kinds of reset styles including those with attributes (example).

How?

Wrapping all our specificity normalised/levelled rules in :root, so that they run after these reset styles.

Testing Instructions

The only unit tests we have are covering the generation of styles rather than their application, so we'll have to rely on some manual testing or adding new tests. Any help here is appreciated! :)

Manual Testing

  • Activate emptytheme
  • Add all blocks to a post or page in both editors, ensure they display correctly and block library styles are applied
  • Switch to the switch editor and apply global styles for each block, check these all take affect both in the editor and frontend
  • Test various classic themes making sure the blocks get all the correct styles on the frontend or in the editors

Testing Instructions for Keyboard

Screenshots or screencast

@ellatrix ellatrix added Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json CSS Styling Related to editor and front end styles, CSS-specific issues. labels May 14, 2024
Copy link

github-actions bot commented May 14, 2024

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/class-wp-theme-json-gutenberg.php
❔ lib/theme.json
❔ phpunit/class-wp-theme-json-test.php

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 the PR!

In terms of specificity, :root is exactly the same as a classname, so this change effectively undoes the reduction in #60106. I think that if that's what we want to do, reverting #60106 is a better solution as it will keep the simpler, more semantic classname selector.

The other thing to bear in mind is that, if we revert the global styles specificity, we'll need to revert #60228 too, because the reduction in the layout selectors was dependent on the global styles one.

I don't have enough context on why this change is needed, so a fuller description on this PR, or link to an issue, would be much appreciated!

Copy link

github-actions bot commented May 14, 2024

Size Change: -1.22 kB (-0.07%)

Total Size: 1.74 MB

Filename Size Change
build/block-editor/index.min.js 260 kB +31 B (+0.01%)
build/block-editor/style-rtl.css 15.5 kB +14 B (+0.09%)
build/block-editor/style.css 15.5 kB +16 B (+0.1%)
build/block-library/blocks/audio/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/audio/theme.css 126 B -7 B (-5.26%)
build/block-library/blocks/button/editor-rtl.css 307 B -108 B (-26.02%) 🎉
build/block-library/blocks/button/editor.css 307 B -107 B (-25.85%) 🎉
build/block-library/blocks/button/style-rtl.css 539 B -88 B (-14.04%) 👏
build/block-library/blocks/button/style.css 539 B -87 B (-13.9%) 👏
build/block-library/blocks/cover/style-rtl.css 1.67 kB -31 B (-1.82%)
build/block-library/blocks/cover/style.css 1.66 kB -31 B (-1.83%)
build/block-library/blocks/embed/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/embed/theme.css 126 B -7 B (-5.26%)
build/block-library/blocks/gallery/editor-rtl.css 962 B +6 B (+0.63%)
build/block-library/blocks/gallery/editor.css 965 B +5 B (+0.52%)
build/block-library/blocks/image/style-rtl.css 1.52 kB -77 B (-4.82%)
build/block-library/blocks/image/style.css 1.52 kB -75 B (-4.71%)
build/block-library/blocks/image/theme-rtl.css 137 B +4 B (+3.01%)
build/block-library/blocks/image/theme.css 137 B +4 B (+3.01%)
build/block-library/blocks/latest-posts/editor-rtl.css 207 B -6 B (-2.82%)
build/block-library/blocks/latest-posts/editor.css 206 B -6 B (-2.83%)
build/block-library/blocks/latest-posts/style-rtl.css 513 B +19 B (+3.85%)
build/block-library/blocks/latest-posts/style.css 513 B +19 B (+3.85%)
build/block-library/blocks/list/style-rtl.css 102 B +14 B (+15.91%) ⚠️
build/block-library/blocks/list/style.css 102 B +14 B (+15.91%) ⚠️
build/block-library/blocks/paragraph/style-rtl.css 341 B +6 B (+1.79%)
build/block-library/blocks/paragraph/style.css 341 B +6 B (+1.79%)
build/block-library/blocks/pullquote/style-rtl.css 344 B -10 B (-2.82%)
build/block-library/blocks/pullquote/style.css 343 B -10 B (-2.83%)
build/block-library/blocks/pullquote/theme-rtl.css 168 B -6 B (-3.45%)
build/block-library/blocks/pullquote/theme.css 168 B -6 B (-3.45%)
build/block-library/blocks/quote/theme-rtl.css 223 B -10 B (-4.29%)
build/block-library/blocks/quote/theme.css 226 B -9 B (-3.83%)
build/block-library/blocks/separator/editor-rtl.css 99 B -47 B (-32.19%) 🎉
build/block-library/blocks/separator/editor.css 99 B -47 B (-32.19%) 🎉
build/block-library/blocks/separator/style-rtl.css 243 B +4 B (+1.67%)
build/block-library/blocks/separator/style.css 243 B +4 B (+1.67%)
build/block-library/blocks/site-logo/style-rtl.css 218 B +14 B (+6.86%) 🔍
build/block-library/blocks/site-logo/style.css 218 B +14 B (+6.86%) 🔍
build/block-library/blocks/site-title/editor-rtl.css 124 B +8 B (+6.9%) 🔍
build/block-library/blocks/site-title/editor.css 124 B +8 B (+6.9%) 🔍
build/block-library/blocks/site-title/style-rtl.css 70 B +13 B (+22.81%) 🚨
build/block-library/blocks/site-title/style.css 70 B +13 B (+22.81%) 🚨
build/block-library/blocks/social-link/editor-rtl.css 335 B +11 B (+3.4%)
build/block-library/blocks/social-link/editor.css 335 B +11 B (+3.4%)
build/block-library/blocks/social-links/editor-rtl.css 683 B +7 B (+1.04%)
build/block-library/blocks/social-links/editor.css 681 B +6 B (+0.89%)
build/block-library/blocks/social-links/style-rtl.css 1.51 kB +15 B (+1%)
build/block-library/blocks/social-links/style.css 1.51 kB +15 B (+1%)
build/block-library/blocks/table/theme-rtl.css 146 B -6 B (-3.95%)
build/block-library/blocks/table/theme.css 146 B -6 B (-3.95%)
build/block-library/blocks/tag-cloud/style-rtl.css 265 B +14 B (+5.58%) 🔍
build/block-library/blocks/tag-cloud/style.css 266 B +13 B (+5.14%) 🔍
build/block-library/blocks/template-part/theme-rtl.css 112 B +5 B (+4.67%) 🔍
build/block-library/blocks/template-part/theme.css 112 B +5 B (+4.67%) 🔍
build/block-library/blocks/video/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/video/theme.css 126 B -7 B (-5.26%)
build/block-library/editor-rtl.css 12.1 kB -105 B (-0.86%)
build/block-library/editor.css 12.1 kB -102 B (-0.83%)
build/block-library/style-rtl.css 14.6 kB -176 B (-1.19%)
build/block-library/style.css 14.6 kB -172 B (-1.16%)
build/block-library/theme-rtl.css 703 B -4 B (-0.57%)
build/block-library/theme.css 706 B -7 B (-0.98%)
build/edit-site/index.min.js 213 kB -178 B (-0.08%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.27 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.29 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.58 kB
build/block-editor/content.css 4.57 kB
build/block-editor/default-editor-styles-rtl.css 395 B
build/block-editor/default-editor-styles.css 395 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/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 277 B
build/block-library/blocks/block/editor.css 277 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 671 B
build/block-library/blocks/cover/editor.css 674 B
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 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 312 B
build/block-library/blocks/embed/editor.css 312 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 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/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 403 B
build/block-library/blocks/group/editor.css 403 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 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 891 B
build/block-library/blocks/image/editor.css 891 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/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 193 B
build/block-library/blocks/navigation-link/style.css 192 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.03 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/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 734 B
build/block-library/blocks/post-featured-image/editor.css 732 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 397 B
build/block-library/blocks/post-template/style.css 396 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/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/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 101 B
build/block-library/blocks/rss/editor.css 101 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 690 B
build/block-library/blocks/search/style.css 689 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/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 805 B
build/block-library/blocks/site-logo/editor.css 805 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/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/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 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/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/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-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.2 kB
build/commands/style-rtl.css 953 B
build/commands/style.css 951 B
build/components/index.min.js 222 kB
build/components/style-rtl.css 12 kB
build/components/style.css 12 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.71 kB
build/core-data/index.min.js 72.5 kB
build/customize-widgets/index.min.js 10.9 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 9.01 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 578 B
build/edit-post/classic.css 578 B
build/edit-post/index.min.js 14.7 kB
build/edit-post/style-rtl.css 2.68 kB
build/edit-post/style.css 2.68 kB
build/edit-site/style-rtl.css 12.2 kB
build/edit-site/style.css 12.2 kB
build/edit-widgets/index.min.js 17.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 92.6 kB
build/editor/style-rtl.css 8.61 kB
build/editor/style.css 8.61 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.09 kB
build/format-library/style-rtl.css 493 B
build/format-library/style.css 492 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/debug.min.js 16.4 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13.2 kB
build/interactivity/navigation.min.js 1.17 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 2.81 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 851 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 1.58 kB
build/nux/style-rtl.css 748 B
build/nux/style.css 744 B
build/patterns/index.min.js 6.51 kB
build/patterns/style-rtl.css 595 B
build/patterns/style.css 595 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 719 B
build/preferences/style.css 721 B
build/primitives/index.min.js 831 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 629 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.72 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.97 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.02 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.74 kB
build/vendors/react-dom.min.js 42.8 kB
build/vendors/react-jsx-runtime.min.js 554 B
build/vendors/react.min.js 2.65 kB
build/viewport/index.min.js 964 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.13 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

@ellatrix
Copy link
Member Author

We don't want to undo any reduction in specificity, we just want to put it at a level that is the same or higher as the reset styles. We don't want to revert global styles specificity reduction.

I don't have enough context on why this change is needed, so a fuller description on this PR, or link to an issue, would be much appreciated!

I'm not sure how much fuller I can make it, but I'll try. When there are reset styles at the element specify level, they will overrule any zero specificity global styles?

@ellatrix ellatrix added the [Type] Bug An existing feature does not function as intended label May 14, 2024
@aaronrobertshaw
Copy link
Contributor

My understanding of the proposal is that:

  • All generated styles still need to have the same specificity
  • A revert of #60106 would result in varied selector specificity (see button block)
  • This PR would only bump the uniform specificity to a degree that prevents reset styles from overriding block styles

So if that's correct, I don't think a revert is required but there might be some additional tweaks required for the block library styles for core blocks.

This does still provide a general reduction in specificity, unfortunately, not to zero as we would in an ideal world starting from scratch.

Copy link

github-actions bot commented May 14, 2024

Flaky tests detected in f1b413f.
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/9221646544
📝 Reported issues:

@ellatrix ellatrix marked this pull request as ready for review May 14, 2024 07:25
Copy link

github-actions bot commented May 14, 2024

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: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: aaronrobertshaw <aaronrobertshaw@git.wordpress.org>
Co-authored-by: tellthemachines <isabel_brison@git.wordpress.org>
Co-authored-by: talldan <talldanwp@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.

@@ -1,9 +1,7 @@
// Same as the group block styles.
:where(.wp-block-template-part) {
&.has-background {
Copy link
Member Author

Choose a reason for hiding this comment

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

It seems we previously did have some specificity left here. We should make sure it tests well now.

// Adding `figure` to the selector increases the specificity above the global
// styles specificity, which is levelled at 0-1-0. We should figure out why
// `figure` is needed.
:root :where(figure.wp-block-gallery) {
Copy link
Member Author

Choose a reason for hiding this comment

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

I just added :root as a precaution here to make sure this overrides any reset styles.

@aaronrobertshaw
Copy link
Contributor

I've rebased this one to address the CSS linting error regarding order.

On the choice to use :root over html or body, this does also provide the benefit of the vast majority of blocks not needing to reduce their general block style specificity. That is, if they don't specify a custom selector and rely on the default block class (.wp-block-*), styles targeting that can remain unchanged.

@aaronrobertshaw
Copy link
Contributor

aaronrobertshaw commented May 17, 2024

The restoration of 0-1-0 specificity for the margin styles within theme.scss files means they'll override some of the layout support styles which were also reduced to zero e.g. :where(.is-layout-constrained) > *

cc/ @tellthemachines and @andrewserong for your expertise on what other layout styles may also need updating

Also, I have the following list of recent PRs around reducing specificity. Are there others I've missed?

@aaronrobertshaw
Copy link
Contributor

I've pushed a commit that I think might be the minimum set of changes required to make layout styles work and maintain some more consistent specificity.

To be honest, I had a really hard time working out what should and should not be updated for the layout style selectors. Especially, when running into bugs that turned out to also be on trunk (#61849, #61846 etc)

Moving forward I think we definitely need some test coverage to ensure the correct layout styles are being applied when and where they should. These would also serve as internal documentation for anyone needing to change some aspect of our layout supports.

It's also worth noting here that this PR is being discussed in regards to what CSS specificity we should settle on for WP 6.6.

@aaronrobertshaw
Copy link
Contributor

After some discussion, and taking into account the limited time before the 6.6 beta, the option to use a :root prefix seems the safest bet and appears to have majority support.

This PR should be ready to be refined, reviewed, etc with a view to landing as soon as possible.

@@ -2,6 +2,6 @@
@include caption-style-theme();
}

:where(.wp-block-embed) {
.wp-block-embed {
Copy link
Contributor

@talldan talldan May 23, 2024

Choose a reason for hiding this comment

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

Should the .wp-block-embed figcaption rule at the top of this file have lowered specificity?

Rather than adding :root to each individual rule or removing :where, I thought it might be better to do something like this:

:root {
    :where(.wp-block-embed) {
        // ...
    }
}

This way everything is consistent.

I realize it's the same specificity as just a classname, but it makes it easier for anyone modifying the css to maintain the same specificity.

In the future if we ever need to implement layers, we can replace the :root with @layer name, or if we want to reduce specificity to zero we remove the :root {} wrapper.

Copy link
Contributor

Choose a reason for hiding this comment

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

Should the .wp-block-embed figcaption rule at the top of this file have lowered specificity?

I'd say so. A rough rule could be "anything that is configurable via global styles should be".

At a glance that mixin touches color and font-size rules and captions are now a configurable element in Global Styles.

Rather than adding :root to each individual rule or removing :where, I thought it might be better to do something like this:

Sounds good to me. I'm still working through the impacts this PR will have on #61032 and haven't gone through all the block styles yet.

My understanding is this PR has only tweaked what was changed in the original zero-specificity PRs which has proven to be somewhat incomplete. There was some discussion that we needed a complete audit of all the block styles once everything settled.

Copy link
Contributor

Choose a reason for hiding this comment

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

One possible issue with the suggested approach to nesting :root and :where like that is it might encourage people to think they can still just nest the next selector within the :where when they really have to define the entire selector or make the nested selector chain another :where() e.g.

:root {
    :where(.wp-block-button) {
        // ...
        &:where(> .wp-block-button__link) {
            // ...
        }
    }
    :where(.wp-block-button > .wp-block-button__link) {
        // ...
    }
}

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, it gets a bit much doesn't it. 😬

Copy link
Contributor

Choose a reason for hiding this comment

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

:root {
:where(.wp-block-embed) {
// ...
}
}

I had a look at this suggestion, but it becomes convoluted with some of the more complex selectors, so probably best to keep it simple right now.

@aaronrobertshaw
Copy link
Contributor

I've updated the button block styles in 5a6a6f6. It's worth noting that the styles relating to fallback border display have been removed.

Since #61556 landed, we have access to the merged global styles data in the editor settings. A follow-up is planned to update the border panel in the editor to leverage this data and apply fallbacks only when required.

An alternative, looking to move the fallback border styles into the lib/theme.json custom css for the button block proved unsuccessful. These styles would need to sit between the core's theme.json styles and any by the theme or user. Addressing the border UX through the UI is a better solution and also means we can ship less CSS for each block that has these fallback styles.

@aaronrobertshaw
Copy link
Contributor

It appears the Separator block's global styles aren't working with themes that define more than just a single background color for the block in theme.json, including TT4. This is the current behaviour on trunk so I'm not 100% sure if there has been a regression or it was intended this way for some reason. Improving this can be added to the list of follow-ups.

To progress this PR the Separator block's styles were updated in 2f70fdd, just note the odd behaviour when testing.

@aaronrobertshaw
Copy link
Contributor

I've made further tweaks for the Social Links, Table, and Tag Cloud blocks. These block style variation style updates need another good test but that will have to wait until tomorrow.

@aaronrobertshaw
Copy link
Contributor

I'm wondering if I might have jumped the gun in 66cb8f3 & 362d2ae.

The changes in those commits allow global styles padding for the blocks to take precedence over the default .has-background styles for the list and paragraph blocks.

Imagine the following scenario:

  • Theme defines padding styles for the paragraph block within theme.json
  • A post has a paragraph block with a background color set (results in .has-background class being applied)
  • Currently, the theme.json padding wouldn't be applied as the p.has-background selector has higher specificity
  • If the commits above land, then the padding applied on the paragraph block would change
  • If the theme also enqueued its own stylesheet that further customized the p.has-background styles, they'd still take effect

Searching WP Directory I only found one theme that touched on padding styles for the paragraph block (the example below). So this is definitely an edge case.

It appears some themes have gotten around the p.has-background style by defining custom CSS within the paragraph block's theme.json styles. For example by:

	"core/paragraph": {
		"css": ".has-background {padding: 20px 30px;}"
	},

Given the spirit of this PR is to reduce risk of broken styles for WP6.6, I'm happy to revert these .has-background tweaks. They could be an easy tweak and follow-up post-6.6. What do you think?

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.

Overall this appears to be testing well for me, and thanks for the detailed notes in #61638 (comment) @aaronrobertshaw. It seems to me that the overall reduction of global styles is a very complex problem, and I like the pragmatic direction of this PR in that it preserves many of the recent improvements, while adding an additional levelling of styles to find a pragmatic path forward for 6.6. In my testing so far, the layout styles appear to be working well for me, and I haven't encountered any conflicts so far in the flow, constrained, flex, and grid layout types.

Also, some of the changes here appear to resolve some subtle issues for older classic themes that depended on the wp-block-styles rules such as the margin reset on the image block.

I'm wondering if I might have jumped the gun in 66cb8f3 & 362d2ae.

Is the main concern that by making that change, global styles rules might unintentionally override individual paragraph blocks that have set a background color? I'm a little on the fence about this one, as I'd imagine if someone has set the list or paragraph blocks to have a particular value in global styles they might actually want it to override that default .has-background padding — my assumption is that that rule was a bit of a pleasing visual reset rather than a desired end state.

They could be an easy tweak and follow-up post-6.6. What do you think?

That sounds very reasonable to me, and if we find that it is an issue for folks during the beta period, there could be an argument for attempting to get the follow-up in sooner.

@aaronrobertshaw
Copy link
Contributor

Greatly appreciate the thoughtful review @andrewserong 🙇

I like the pragmatic direction of this PR in that it preserves many of the recent improvements, while adding an additional levelling of styles to find a pragmatic path forward for 6.6

Agreed, the consensus coming from recent discussions definitely seems to have settled on a workable approach for WP6.6.

Also, some of the changes here appear to resolve some subtle issues for older classic themes that depended on the wp-block-styles rules such as the margin reset on the image block.

💯 These subtle issues have proven tricky to surface or predict generally. Another reason why minimising our specificity changes for this release is the safer bet.

I'd imagine if someone has set the list or paragraph blocks to have a particular value in global styles they might actually want it to override that default .has-background padding — my assumption is that that rule was a bit of a pleasing visual reset rather than a desired end state.

This was my thinking too. I viewed the tweaks as more "fixes" than "changes".

That said, it's a minor edge case that probably doesn't warrant changing now if we don't have to. Giving it a long run in Gutenberg post-6.6 along with some more advanced warning might smooth that transition.

Another possibility to consider is a user tinkering in Global Styles with the paragraph block padding values. If they left styles there that weren't taking effect due to .has-background, those suddenly appearing might be more breaking than carefully crafted values set by the theme author in theme.json.

I've reverted those .has-background commits in this PR and will spin up a follow-up for them shortly.

@aaronrobertshaw
Copy link
Contributor

Separate follow-up for the .has-background tweaks is available in #61999

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.

Just gave this a re-test, and it's still looking really good to me (tested in block themes and in Twenty Seventeen as a classic theme that uses wp-block-styles), with layout styles working where I'd expect them to. Thanks for the detailed follow-ups and considerations here.

I found a couple of small issues in editor styles for a couple of blocks (I've left two comments). Since it only affects the editor, do you think it'd be worth fixing them up in follow-ups? I'm aware this is already a fairly big PR, so I wondered if it'd be easier to address separately (but still for 6.6) since the impact is only within the editor.

Overall the changes here appear to be logical and pragmatic to me, the issues I ran into appear to be to do with the challenges of making changes to fairly brittle styling in some of the core blocks. Typically, I'd lean toward approaching the styling changes for each of these blocks in their own PRs, but given time constraints for the 6.6 feature freeze, in this case, I'm supportive of the idea of going with this PR, and then fixing up issues in subsequent PRs if that works for everyone.

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 updates to the latest posts and separator blocks @aaronrobertshaw, that's resolved those issues for me!

This PR's looking in pretty good shape to me. Given the complexity involved and that in manual testing we believe that things are pretty much working nicely, I think this is in a good place to land, and we can continue to refine things in follow-ups if need be. At this stage, I think merging this larger PR is the pragmatic way to go to ensure the changes can make it in for 6.6, and we still have the Beta period to thorough test the changes and address any points of friction.

LGTM! 🚀

@aaronrobertshaw aaronrobertshaw added the Needs PHP backport Needs PHP backport to Core label May 28, 2024
@aaronrobertshaw
Copy link
Contributor

Appreciate your time and attention to detail on this one @andrewserong 🙇

I'll look to get this merged then address any follow-ups as required.

A draft backport PR is available in WordPress/wordpress-develop#6633. It might be easiest to close the currently pending backport for the old zero-specificity changes (WordPress/wordpress-develop#6522) then proceed with the current draft.

@aaronrobertshaw
Copy link
Contributor

The failed Compressed Size / Check job is only due to the recent stale types issue and unrelated to this PR. I'll go ahead and merge this to save the rebase and re-waiting on e2s, unblocking follow-up work on section styles.

@aaronrobertshaw aaronrobertshaw merged commit bf3c611 into trunk May 28, 2024
66 of 67 checks passed
@aaronrobertshaw aaronrobertshaw deleted the try/prefix-styles-with-root branch May 28, 2024 05:20
@github-actions github-actions bot added this to the Gutenberg 18.5 milestone May 28, 2024
@tellthemachines
Copy link
Contributor

(belatedly) gave this a test and all seems to be working as expected!

A draft backport PR is available in WordPress/wordpress-develop#6633. It might be easiest to close the currently pending backport for the old zero-specificity changes (WordPress/wordpress-develop#6522) then proceed with the current draft.

That sounds sensible, I went ahead and closed my PR.

@aaronrobertshaw
Copy link
Contributor

Backport is ready for review over in WordPress/wordpress-develop#6633

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CSS Styling Related to editor and front end styles, CSS-specific issues. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json Needs Dev Note Requires a developer note for a major WordPress release cycle Needs PHP backport Needs PHP backport to Core [Type] Bug An existing feature does not function as intended
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

5 participants