mirror of
git://develop.git.wordpress.org/
synced 2025-03-14 17:09:47 +01:00
Editor: Allow theme.json to take precedence in setting the root level element's reset margin value.
Any margin added to the root element via `theme.json` is overwritten by a CSS reset margin value provided by the Gutenberg Plugin. This commit makes `theme.json` setting take precedence by generating the global styles body reset prior to processing the theme.json. Follow-up to [52049]. Props get_dave, hellofromTonya. Fixes #54550. git-svn-id: https://develop.svn.wordpress.org/trunk@52329 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
071e80695d
commit
f322c1ef3f
@ -355,9 +355,9 @@ class WP_Theme_JSON {
|
||||
*
|
||||
* @since 5.8.0
|
||||
*
|
||||
* @param array $theme_json A structure that follows the theme.json schema.
|
||||
* @param string $origin Optional. What source of data this object represents.
|
||||
* One of 'default', 'theme', or 'custom'. Default 'theme'.
|
||||
* @param array $theme_json A structure that follows the theme.json schema.
|
||||
* @param string $origin Optional. What source of data this object represents.
|
||||
* One of 'default', 'theme', or 'custom'. Default 'theme'.
|
||||
*/
|
||||
public function __construct( $theme_json = array(), $origin = 'theme' ) {
|
||||
if ( ! in_array( $origin, self::VALID_ORIGINS, true ) ) {
|
||||
@ -776,6 +776,18 @@ class WP_Theme_JSON {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset default browser margin on the root body element.
|
||||
* This is set on the root selector **before** generating the ruleset
|
||||
* from the `theme.json`. This is to ensure that if the `theme.json` declares
|
||||
* `margin` in its `spacing` declaration for the `body` element then these
|
||||
* user-generated values take precedence in the CSS cascade.
|
||||
* @link https://github.com/WordPress/gutenberg/issues/36147.
|
||||
*/
|
||||
if ( self::ROOT_BLOCK_SELECTOR === $selector ) {
|
||||
$block_rules .= 'body { margin: 0; }';
|
||||
}
|
||||
|
||||
// 2. Generate the rules that use the general selector.
|
||||
$block_rules .= self::to_ruleset( $selector, $declarations );
|
||||
|
||||
@ -786,7 +798,6 @@ class WP_Theme_JSON {
|
||||
}
|
||||
|
||||
if ( self::ROOT_BLOCK_SELECTOR === $selector ) {
|
||||
$block_rules .= 'body { margin: 0; }';
|
||||
$block_rules .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';
|
||||
$block_rules .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
|
||||
$block_rules .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
|
||||
|
@ -376,9 +376,9 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
)
|
||||
);
|
||||
|
||||
$expected = 'body{--wp--style--block-gap: 1em;}body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }.wp-block-columns{--wp--style--block-gap: 24px;}';
|
||||
$this->assertEquals( $expected, $theme_json->get_stylesheet() );
|
||||
$this->assertEquals( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) );
|
||||
$expected = 'body { margin: 0; }body{--wp--style--block-gap: 1em;}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }.wp-block-columns{--wp--style--block-gap: 24px;}';
|
||||
$this->assertSame( $expected, $theme_json->get_stylesheet() );
|
||||
$this->assertSame( $expected, $theme_json->get_stylesheet( array( 'styles' ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -506,13 +506,13 @@ class Tests_Theme_wpThemeJson extends WP_UnitTestCase {
|
||||
);
|
||||
|
||||
$variables = 'body{--wp--preset--color--grey: grey;--wp--preset--font-family--small: 14px;--wp--preset--font-family--big: 41px;}.wp-block-group{--wp--custom--base-font: 16;--wp--custom--line-height--small: 1.2;--wp--custom--line-height--medium: 1.4;--wp--custom--line-height--large: 1.8;}';
|
||||
$styles = 'body{color: var(--wp--preset--color--grey);}body { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }a{background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a{color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a{background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
|
||||
$styles = 'body { margin: 0; }body{color: var(--wp--preset--color--grey);}.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }a{background-color: #333;color: #111;}.wp-block-group{border-radius: 10px;padding: 24px;}.wp-block-group a{color: #111;}h1,h2,h3,h4,h5,h6{color: #123456;}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{background-color: #333;color: #111;font-size: 60px;}.wp-block-post-date{color: #123456;}.wp-block-post-date a{background-color: #777;color: #555;}.wp-block-image{border-top-left-radius: 10px;border-bottom-right-radius: 1em;margin-bottom: 30px;}';
|
||||
$presets = '.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-small-font-family{font-family: var(--wp--preset--font-family--small) !important;}.has-big-font-family{font-family: var(--wp--preset--font-family--big) !important;}';
|
||||
$all = $variables . $styles . $presets;
|
||||
$this->assertEquals( $all, $theme_json->get_stylesheet() );
|
||||
$this->assertEquals( $styles, $theme_json->get_stylesheet( array( 'styles' ) ) );
|
||||
$this->assertEquals( $presets, $theme_json->get_stylesheet( array( 'presets' ) ) );
|
||||
$this->assertEquals( $variables, $theme_json->get_stylesheet( array( 'variables' ) ) );
|
||||
$this->assertSame( $all, $theme_json->get_stylesheet() );
|
||||
$this->assertSame( $styles, $theme_json->get_stylesheet( array( 'styles' ) ) );
|
||||
$this->assertSame( $presets, $theme_json->get_stylesheet( array( 'presets' ) ) );
|
||||
$this->assertSame( $variables, $theme_json->get_stylesheet( array( 'variables' ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user