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 aaronrobertshaw force-pushed the try/prefix-styles-with-root branch from 0ba0494 to c5b2fa5 Compare May 17, 2024 01:08
@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

@aaronrobertshaw aaronrobertshaw May 23, 2024

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

@aaronrobertshaw aaronrobertshaw added the Needs Dev Note Requires a developer note for a major WordPress release cycle label May 29, 2024
@aaronrobertshaw aaronrobertshaw mentioned this pull request May 29, 2024
49 tasks
carstingaxion pushed a commit to carstingaxion/gutenberg that referenced this pull request Jun 4, 2024
…61638)

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>
Co-authored-by: kevin940726 <kevin940726@git.wordpress.org>
@aaronrobertshaw
Copy link
Contributor

aaronrobertshaw commented Jun 6, 2024

Dev Note: WordPress 6.6 CSS Specificity

One of the goals of WordPress 6.6 is to simplify the process for theme authors to override core styles while also maintaining support for Global Styles.

Historically, high CSS specificity in core styles has made customization challenging and unpredictable, often requiring complex CSS rules to achieve desired outcomes. Development of the new section styles feature also highlighted a need for uniform CSS specificity to support nesting such styles, facilitating the creation of sophisticated, layered designs.

Uniform 0-1-0 Specificity

WordPress 6.6 introduces several changes aimed at broadly reducing CSS specificity and making it more uniform. These changes generally fall into two categories:

  1. Core Block Styles
  2. Theme.json / Global Styles:

Where adjustments to CSS specificity were required, they were achieved by wrapping the existing selector within :root :where(...).

Core Block Styles

The choice of 0-1-0 specificity greatly reduced the changes required to existing core block styles as blocks targeting their default .wp-block-<name> class already have the desired specificity.

Any blocks with Global Styles support using higher specificity selectors had those selectors wrapped in :root :where(...). This also applied to Block Styles (aka block style variations) and their default styles e.g. .wp-block-image.is-style-rounded img was updated to :root :where(.wp-block-image.is-style-rounded img).

Theme.json / Global Styles:

All block styles, including block style variation styles, output by Theme.json and Global Styles are now limited to 0-1-0 specificity. Layout styles, e.g. constrained, flex, flow etc., have also been limited however depending on the specific layout type and definition the final specificity varies slightly from 0-1-0 so they apply correctly.

Usage

The alignment of 0-1-0 specificity for Global Styles to default block selectors, e.g. .wp-block-<name>, greatly reduces the need for updates. It's recommended for theme and block authors to double-check their designs if they rely on custom CSS using more complex selectors.

Custom Blocks

Authors of custom blocks that opt into global styles and apply default styling via a selector with greater than 0-1-0 specificity, should update those selectors wrapping them in :root :where().

An example could be a custom list block that opts into padding block support but defines default padding via:

ul.wp-block-custom-list {
    padding: 0;
}

Without adjusting the specificity of this rule, any customizations of the block type's padding in Global Styles would be overridden. Wrapping the selector in :root :where() here would allow the style load order to determine which rule takes precedence.

// Block's stylesheet
:root :where(ul.wp-block-custom-list) { // This is a contrived example and could simply be `.wp-block-custom-list`
    padding: 0;
}

// Global Styles - Loaded after the block styles
:root :where(.wp-block-custom-list) {
    padding: 1em;
}

Block Styles (aka Block Style Variations)

Theme authors customizing Block Styles for a core block will need to limit their style's specificity so the block style continues to be configurable via Global Styles.

For example, take a theme that tweaks the border radius for the Image block's "rounded" block style:

.wp-block-image.is-style-rounded img {
    border-radius: 2em;
}

Without adjustment, this style would override any customizations made to the Rounded block style within Global Styles.

In this case, the theme can tweak its rounded image style to the following:

//. Theme style
:root :where(.wp-block-image.is-style-rounded img) {
    border-radius: 2em;
}

// Global Styles - Loaded after the block styles
:root :where(.wp-block-image.is-style-rounded img) {
    border-radius: 4px;
}

Zero-Specificity, CSS Layers, and The Future

Reducing all core styles to zero specificity was explored before settling on 0-1-0 specificity. Zero specificity unfortunately wasn't robust in the face of common reset stylesheets and required more widespread changes.

CSS Layers were also evaluated but fell short due to not being able to enforce all styles belonged to a layer. This will change in the future at which point a combination of CSS Layers and zero-specificity can be revisited to further the benefits gained in this initial reduction of CSS specificity.

More history and context can be found in this detailed discussion.

Useful Links

@aaronrobertshaw aaronrobertshaw added has dev note when dev note is done (for upcoming WordPress release) and removed Needs Dev Note Requires a developer note for a major WordPress release cycle labels Jun 6, 2024
justintadlock added a commit to x3p0-dev/x3p0-ideas that referenced this pull request Jun 9, 2024
Addition of `:root` specificity in Core/Gutenberg seems to be overwriting this. See: WordPress/gutenberg#61638
@aaronrobertshaw aaronrobertshaw added Backported to WP Core Pull request that has been successfully merged into WP Core and removed Needs PHP backport Needs PHP backport to Core labels Jun 12, 2024
patil-vipul pushed a commit to patil-vipul/gutenberg that referenced this pull request Jun 17, 2024
…61638)

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>
Co-authored-by: kevin940726 <kevin940726@git.wordpress.org>
@justintadlock
Copy link
Contributor

The majority of themes and custom blocks should not require any updates.

I'd be very careful saying this in the Dev Note. So far, I've seen quite a few reports from people building themes where these changes have altered their designs in various ways. I'd say that every theme and block author should check their designs. It doesn't have to be OMG, the sky is falling, but it should be proactive in telling them that the reality is that this can and will affect designs where custom CSS comes into play.

@aaronrobertshaw
Copy link
Contributor

Thanks for the feedback @justintadlock, appreciate it 👍

While numerous deep dives into the directory showed a majority of themes and plugins shouldn't need an update, that doesn't mean the amount needing tweaks is insignificant. It wasn't my intention to suggest otherwise or create a false sense of security so I've updated that sentence with the following.

The alignment of 0-1-0 specificity for Global Styles to default block selectors, e.g. .wp-block-<name>, greatly reduces the need for updates. It's recommended for theme and block authors to double-check their designs if they rely on custom CSS using more complex selectors.

I hope that strikes a better balance 🤞

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backported to WP Core Pull request that has been successfully merged into WP Core 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 has dev note when dev note is done (for upcoming WordPress release) [Type] Bug An existing feature does not function as intended
Projects
No open projects
Status: Done
Development

Successfully merging this pull request may close these issues.

6 participants