-
Notifications
You must be signed in to change notification settings - Fork 2.7k
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
Make sure base global styles are loaded before block styles. #5892
Changes from 1 commit
b643d7a
83367d8
00dc2c3
48ce988
be210d6
aef490b
0a7045a
bef9311
9010293
6d050e0
ca1698e
1226e21
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -596,9 +596,11 @@ | |
add_filter( 'block_editor_settings_all', 'wp_add_editor_classic_theme_styles' ); | ||
|
||
// Global styles can be enqueued in both the header and the footer. See https://core.trac.wordpress.org/ticket/53494. | ||
add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' ); | ||
add_action( 'init', 'wp_enqueue_global_styles', 1 ); | ||
add_action( 'wp_footer', 'wp_enqueue_global_styles', 1 ); | ||
|
||
add_action( 'wp_enqueue_scripts', 'wp_add_global_styles_for_blocks' ); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doesn't this add the block-level global styles twice to the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh that's a good point, I'll have to test that scenario better. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just confirmed and there's no duplication of block-level global styles in the single stylesheet scenario. I removed it from where it was called inside |
||
|
||
// Global styles custom CSS. | ||
add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles_custom_css' ); | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed this to
init
as it seems to be the only way to get it to run before the core block styles are registeredThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @scruffian @ajlende @aristath as they may have the most experience with all the scenarios, IIRC.
I couldn't experiment/test this change because my wordpress-develop env wouldn't start up, so I'm trying to recall from memory / skimming through the code. There are two scenarios: the core blocks styles are loaded with a separate stylesheet or bundled as part of the block library.
As I understand it, the order of styles after this change would be
Single stylesheet
Before:
wp-block-library-css
global-styles-inline-css
(both top-level & block-level CSS)theme-style-css
After
global-styles-inline-css
(both top-level & block-level CSS)wp-block-library-css
theme-style-css
Separate stylesheets
Before:
wp-block-blockname-inline-css
(the block styles + the block-level CSS coming from global styles)wp-block-library-inline-css
global-styles-inline-css
(only top-level CSS)core-block-supports-inline-css
After:
global-styles-inline-css
(only top-level CSS)wp-block-blockname-inline-css
(the block styles + the block-level CSS coming from global styles)wp-block-library-inline-css
core-block-supports-inline-css
Is this the goal / what happens?
Notes:
global-styles-inline-css
stylesheet has a lot of block styles (tested with TwentyTwentyFour). I may be a bit rusty on how this all is supposed to work, but it sounds like a bug to me. I've found styles for.wp-block-calendar
,.wp-block-categories
,.wp-block-post-comments-form
,.wp-block-loginout
,.wp-block-post-terms
,.wp-block-query-title
,.wp-block-quote
,.wp-block-search
,.wp-block-separator
. Some of them do not have style rules, for example,.wp-block-separator {}
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The change LGTM. Of course "global" styles should always be loaded before "local" styles :)
Was just wondering (nitpick) if using
wp_enqueue_scripts
priority 1 would be sufficient. As we are enqueueing stylesheets using the appropriate hook would be better for "educational purposes" :)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for looking into this!
I tried and it didn't work, I think because
wp_enqueue_scripts
always runs afterinit
.@oandregal the separate stylesheets scenario you outline is correct; I'll need to double-check the single stylesheet but I think it's also right.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is incorrect, it lacks a bit of nuance. Styles is a very loaded domain, the same words mean different things to people. It's important to me that we all share the same context, and clarify what we mean.
This is how it works now:
My understanding is that we want to do this instead:
The top-level global styles should be: presets + some styles that are attached to the
body
+ (block style variations?).I mentioned above that I see still some "block styles" loaded in the "separate stylesheet" scenario (I understand this is a bug): with this change, they'll be enqueued in 1, and can create conflicts because they should be enqueued in 3.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeaaa, can see that too :)
In my mind "global styles" means styles that apply to all similar elements, for example blocks, or image blocks, or paragraph blocks, etc. "Local styles" means styles that apply to only one of many elements. For example only to one image block when there are 5 on the page, etc.
Thinking it would be great to add some explanations in comments at the top of all CSS files in an attempt to get everybody on the same page. Can also be added in docblocks where the CSS is outputted from JS or PHP.
Another idea might be to drop the "global" and "local" terms as inadequate and use something a bit more granular by specificity. Perhaps "Top level" "Level 1", "Level 2", etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reference, this is the documentation we have for styles (naming, how they work, etc.).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK I looked at this carefully and can confirm the following order of styles:
Single stylesheet
trunk
wp-block-library-css
is loaded as an external stylesheetwp-block-library-inline-css
global-styles-inline-css
containing base global styles followed by block-specific global stylescore-block-supports-inline-css
this PR
global-styles-inline-css
containing base global styles followed by block-specific global styleswp-block-library-css
is loaded as an external stylesheetwp-block-library-inline-css
core-block-supports-inline-css
Separate stylesheets
trunk
wp-block-[blockname]-inline-css
containing both the block library styles for that block and the block-specific global styleswp-block-library-inline-css
(sometimes this is replaced by a block library "common" external stylesheet, no idea why)global-styles-inline-css
containing only base global stylescore-block-supports-inline-css
this PR
global-styles-inline-css
containing only base global styleswp-block-library-inline-css
(sometimes this is replaced by a block library "common" external stylesheet, no idea why)core-block-supports-inline-css
So your assessment is essentially correct @oandregal.
I think the only suboptimal change in this PR is in the single stylesheet scenario, where block library CSS is now loaded after block-specific global styles. It should be the other way around, but ideally base global styles would also be added before block library styles. I'll look into splitting base and block-specific global styles into separate style tags as a workaround.
I'm probably missing something, but I don't see those styles appearing at all either on trunk or this PR branch. Tested by adding a Pullquote block to a page and checking that a line-height of
1.6
doesn't appear anywhere in the styles cascade.Those extra block styles added to
global-styles-inline-css
are coming from per-block custom css defined in the theme's theme.json, e.g. here. TT4 has a bunch of instances.Good point. You mean they should be enqueued after the block library styles, right? I'll look into it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, thanks for sharing. I think this is a bug: block styles should always be together. Why
styles.block/search.css
should be processed differently thanstyles.block/search.typography
?