From cfe8ab9b2048fdb26f13e3889953be9c8f380c9a Mon Sep 17 00:00:00 2001 From: Isabel Brison Date: Wed, 21 Jun 2023 05:30:24 +0000 Subject: [PATCH] Editor: update layout classnames and specificity. Adds a compound layout classname and reduces layout spacing rule specificity. Props ramonopoly, andrewserong, poena. Fixes #58548. git-svn-id: https://develop.svn.wordpress.org/trunk@55956 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/block-supports/layout.php | 5 +++++ src/wp-includes/class-wp-theme-json.php | 8 ++++--- src/wp-includes/theme.json | 22 ++++++++++++++----- .../blocks/fixtures/core__column.server.html | 2 +- .../blocks/fixtures/core__columns.server.html | 6 ++--- .../core__columns__deprecated.server.html | 2 +- .../core__gallery-with-caption.server.html | 2 +- .../blocks/fixtures/core__gallery.server.html | 2 +- .../core__gallery__columns.server.html | 2 +- .../core__gallery__deprecated-1.server.html | 2 +- .../core__gallery__deprecated-2.server.html | 2 +- .../core__gallery__deprecated-3.server.html | 2 +- .../core__gallery__deprecated-4.server.html | 2 +- .../core__gallery__deprecated-5.server.html | 2 +- .../core__gallery__deprecated-6.server.html | 2 +- .../core__gallery__deprecated-7.server.html | 4 ++-- tests/phpunit/tests/block-supports/layout.php | 7 +++--- tests/phpunit/tests/media.php | 6 +++-- tests/phpunit/tests/theme/wpThemeJson.php | 14 +++++++----- 19 files changed, 59 insertions(+), 35 deletions(-) diff --git a/src/wp-includes/block-supports/layout.php b/src/wp-includes/block-supports/layout.php index 22fe6d7b7a..98b44079ba 100644 --- a/src/wp-includes/block-supports/layout.php +++ b/src/wp-includes/block-supports/layout.php @@ -312,6 +312,7 @@ function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false * Renders the layout config to the block wrapper. * * @since 5.8.0 + * @since 6.3.0 Adds compound class to layout wrapper for global spacing styles. * @access private * * @param string $block_content Rendered block content. @@ -474,6 +475,10 @@ function wp_render_layout_support_flag( $block_content, $block ) { } } + // Add combined layout and block classname for global styles to hook onto. + $block_name = explode( '/', $block['blockName'] ); + $class_names[] = 'wp-block-' . end( $block_name ) . '-' . $layout_classname; + $content_with_outer_classnames = ''; if ( ! empty( $outer_class_names ) ) { diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index 74f3971bf2..afff53f9da 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -1246,6 +1246,7 @@ class WP_Theme_JSON { * Gets the CSS layout rules for a particular block from theme.json layout definitions. * * @since 6.1.0 + * @since 6.3.0 Reduced specificity for layout margin rules. * * @param array $block_metadata Metadata about the block to get styles for. * @return string Layout styles for the block. @@ -1342,7 +1343,7 @@ class WP_Theme_JSON { $spacing_rule['selector'] ); } else { - $format = static::ROOT_BLOCK_SELECTOR === $selector ? '%s .%s%s' : '%s.%s%s'; + $format = static::ROOT_BLOCK_SELECTOR === $selector ? ':where(%s .%s) %s' : '%s-%s%s'; $layout_selector = sprintf( $format, $selector, @@ -2560,8 +2561,9 @@ class WP_Theme_JSON { $has_block_gap_support = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'blockGap' ) ) !== null; if ( $has_block_gap_support ) { $block_gap_value = static::get_property_value( $this->theme_json, array( 'styles', 'spacing', 'blockGap' ) ); - $css .= '.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }'; - $css .= ".wp-site-blocks > * + * { margin-block-start: $block_gap_value; }"; + $css .= ":where(.wp-site-blocks) > * { margin-block-start: $block_gap_value; margin-block-end: 0; }"; + $css .= ':where(.wp-site-blocks) > :first-child:first-child { margin-block-start: 0; }'; + $css .= ':where(.wp-site-blocks) > :last-child:last-child { margin-block-end: 0; }'; // For backwards compatibility, ensure the legacy block gap CSS variable is still available. $css .= "$selector { --wp--style--block-gap: $block_gap_value; }"; diff --git a/src/wp-includes/theme.json b/src/wp-includes/theme.json index af44799060..581bdb0b32 100644 --- a/src/wp-includes/theme.json +++ b/src/wp-includes/theme.json @@ -219,14 +219,19 @@ ], "spacingStyles": [ { - "selector": " > *", + "selector": " > :first-child:first-child", + "rules": { + "margin-block-start": "0" + } + }, + { + "selector": " > :last-child:last-child", "rules": { - "margin-block-start": "0", "margin-block-end": "0" } }, { - "selector": " > * + *", + "selector": " > *", "rules": { "margin-block-start": null, "margin-block-end": "0" @@ -279,14 +284,19 @@ ], "spacingStyles": [ { - "selector": " > *", + "selector": " > :first-child:first-child", + "rules": { + "margin-block-start": "0" + } + }, + { + "selector": " > :last-child:last-child", "rules": { - "margin-block-start": "0", "margin-block-end": "0" } }, { - "selector": " > * + *", + "selector": " > *", "rules": { "margin-block-start": null, "margin-block-end": "0" diff --git a/tests/phpunit/data/blocks/fixtures/core__column.server.html b/tests/phpunit/data/blocks/fixtures/core__column.server.html index a3624daaf0..d0b6ab4016 100644 --- a/tests/phpunit/data/blocks/fixtures/core__column.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__column.server.html @@ -1,5 +1,5 @@ -
+

Column One, Paragraph One

diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.server.html b/tests/phpunit/data/blocks/fixtures/core__columns.server.html index 1c144512d1..e35ab2763e 100644 --- a/tests/phpunit/data/blocks/fixtures/core__columns.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__columns.server.html @@ -1,7 +1,7 @@ -
+
-
+

Column One, Paragraph One

@@ -11,7 +11,7 @@
-
+

Column Two, Paragraph One

diff --git a/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html b/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html index 9d213ddcdf..c61aabf682 100644 --- a/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__columns__deprecated.server.html @@ -1,5 +1,5 @@ -
+

Column One, Paragraph One

diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery-with-caption.server.html b/tests/phpunit/data/blocks/fixtures/core__gallery-with-caption.server.html index 18e3f1d8c8..49912d63c4 100644 --- a/tests/phpunit/data/blocks/fixtures/core__gallery-with-caption.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__gallery-with-caption.server.html @@ -1,6 +1,6 @@