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

Navigation Block : try not using css variable for block gap support #37543

Merged
merged 10 commits into from
Jan 12, 2022

Conversation

glendaviesnz
Copy link
Contributor

@glendaviesnz glendaviesnz commented Dec 21, 2021

Description

Trying to refactor navigation block so gap is still supported when removal of CSS gap variable is merged

Because the elements that need gap applied are not the direct children of the block wrapper to which gap is applied after this refactor, this PR instead manually applies the value from the blockGap attribute to the relevant navigation item wrappers.

How has this been tested?

  • Add a navigation menu with several items, including some custom links
  • Check that it displays as expected in editor and front end
  • Apply some block spacing in the right block settings panel and make sure the adding spacing displays as expected in editor and front end
  • Check that disabling blockGap in theme.json behaves as expected and also setting a default blockGap value in theme.json

Screenshots

blockgap

@glendaviesnz glendaviesnz added the [Block] Navigation Affects the Navigation Block label Dec 21, 2021
@glendaviesnz glendaviesnz self-assigned this Dec 21, 2021
@glendaviesnz glendaviesnz changed the base branch from trunk to try/no-css-variable-block-gap December 21, 2021 04:06
@github-actions
Copy link

github-actions bot commented Dec 21, 2021

Size Change: +37 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-library/blocks/navigation/style-rtl.css 1.83 kB +9 B (0%)
build/block-library/blocks/navigation/style.css 1.82 kB +9 B (0%)
build/block-library/index.min.js 166 kB -3 B (0%)
build/block-library/style-rtl.css 10.8 kB +11 B (0%)
build/block-library/style.css 10.8 kB +11 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 140 kB
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 kB
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 65 B
build/block-library/blocks/archives/style.css 65 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 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 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 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.6 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 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 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.93 kB
build/block-library/blocks/navigation/editor.css 1.94 kB
build/block-library/blocks/navigation/view.min.js 2.82 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 401 B
build/block-library/blocks/page-list/editor.css 402 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 305 B
build/block-library/blocks/post-template/style.css 305 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 214 B
build/block-library/blocks/tag-cloud/style.css 215 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 908 B
build/block-library/common.css 905 B
build/block-library/editor-rtl.css 10 kB
build/block-library/editor.css 10 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 676 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/index.min.js 214 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 13.3 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.16 kB
build/edit-post/style.css 7.16 kB
build/edit-site/index.min.js 37.2 kB
build/edit-site/style-rtl.css 6.83 kB
build/edit-site/style.css 6.82 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 kB
build/editor/index.min.js 38.2 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.7 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@glendaviesnz glendaviesnz changed the title [WIP] Navigation Block : try not using css variable for block gap support Navigation Block : try not using css variable for block gap support Dec 22, 2021
@glendaviesnz
Copy link
Contributor Author

N.B. This approach doesn't currently work for sub-navigation links in mobile layout - they still get the theme default block gap applied instead of the custom block gap set on the block. There are probably a few other variations of the nav block that don't work. I won't spend any time trying to identify and fix these unless there is some agreement that this is a way forward.

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 exploring this approach @glendaviesnz!

There are probably a few other variations of the nav block that don't work. I won't spend any time trying to identify and fix these unless there is some agreement that this is a way forward.

I think another case is when a Navigation block chooses to list all pages, so the child of the Navigation block is a page list block. Its gap styling currently uses the CSS variable. But, I think for that block it might work to set its gap styling to inherit — then it should inherit the block gap setting of the parent Navigation block. I wonder this will work for some of the other edge cases? Here's a before / after of hacking in the inherit value in dev tools (apologise for the small screenshots, might need to expand / open in a new window to see):

Before After
image image

I like the approach of manually rendering the gap variable inline in the Navigation container, though, curious to hear what other folks think. If it winds up being viable, I imagine we'll then likely need to also handle grabbing the gap style for the block from the global styles settings, to support theme.json blockGap set at the block level. E.g. supporting the following:

@youknowriad youknowriad force-pushed the try/no-css-variable-block-gap branch from 87c99bf to 58c63eb Compare December 27, 2021 12:07
Base automatically changed from try/no-css-variable-block-gap to trunk December 28, 2021 07:12
@ramonjd ramonjd force-pushed the try/no-css-variable-block-gap-navigation-block branch from 254f368 to 8ef4efc Compare January 4, 2022 22:50
@ramonjd
Copy link
Member

ramonjd commented Jan 4, 2022

I think another case is when a Navigation block chooses to list all pages, so the child of the Navigation block is a page list block. Its gap styling currently uses the CSS variable. But, I think for that block it might work to set its gap styling to inherit — then it should inherit the block gap setting of the parent Navigation block.

I just tested using @andrewserong's suggestion and adding gap: inherit to the page list and submenu items does allow us to adjust the block spacing.

For example,

.wp-block-navigation .wp-block-page-list, // page lists
.wp-block-navigation .wp-block-navigation__submenu-container, // required in order for the submenu to inherit 
.wp-block-navigation .wp-block-navigation-submenu 
{
	gap: inherit;
}

Jan-05-2022 10-43-19

There is additional top padding, courtesy of the existing rules that still use --wp--style--block-gap,

// Apply top padding to nested submenus.
.wp-block-navigation__submenu-container {
	padding-top: var(--wp--style--block-gap, 2em);
}

The assumption is that we'd remove, or at least make less specific, the current gap rules that define gap: var(--wp--style--block-gap, 2em); for example, this one:

Maybe it's a good case for :where?

@ramonjd
Copy link
Member

ramonjd commented Jan 5, 2022

How should gap be inherited in sub menus? I've been playing around with removing all references to the CSS var and allowing inheritance.

  • should we keep the CSS var for the top padding for the submenu?
  • What about spacing between sub-menu items? Part of me expects block spacing to only affect the horizontal gap between main menu items

Screen Shot 2022-01-05 at 12 23 47 pm

play diff
     diff --git a/packages/block-library/src/navigation/style.scss b/packages/block-library/src/navigation/style.scss
index 26de41da03..3ad0e910c0 100644
--- a/packages/block-library/src/navigation/style.scss
+++ b/packages/block-library/src/navigation/style.scss
@@ -299,30 +299,39 @@ button.wp-block-navigation-item__content {
 	cursor: pointer;
 }
 
-
 /**
- * Margins
+ * Block spacing
  */
 
-// Menu items with no background.
-.wp-block-navigation,
 .wp-block-navigation .wp-block-page-list,
-.wp-block-navigation__container,
-.wp-block-navigation__responsive-container-content {
-	gap: var(--wp--style--block-gap, 2em);
+.wp-block-navigation .wp-block-navigation-submenu,
+.wp-block-navigation .wp-block-navigation__submenu-container {
+	gap: inherit;
 }
 
-// Menu items with background.
-// We use :where to keep specificity minimal, yet still scope it to only the navigation block.
-// That way if padding is set in theme.json, it still wins.
-// https://css-tricks.com/almanac/selectors/w/where/
-.wp-block-navigation:where(.has-background) {
-	&,
-	.wp-block-navigation .wp-block-page-list,
-	.wp-block-navigation__container {
-		gap: var(--wp--style--block-gap, 0.5em);
-	}
-}
+///**
+// * Margins
+// */
+//
+//// Menu items with no background.
+//.wp-block-navigation,
+//.wp-block-navigation .wp-block-page-list,
+//.wp-block-navigation__container,
+//.wp-block-navigation__responsive-container-content {
+//	gap: var(--wp--style--block-gap, 2em);
+//}
+//
+//// Menu items with background.
+//// We use :where to keep specificity minimal, yet still scope it to only the navigation block.
+//// That way if padding is set in theme.json, it still wins.
+//// https://css-tricks.com/almanac/selectors/w/where/
+//.wp-block-navigation:where(.has-background) {
+//	&,
+//	.wp-block-navigation .wp-block-page-list,
+//	.wp-block-navigation__container {
+//		gap: var(--wp--style--block-gap, 0.5em);
+//	}
+//}
 
 /**
  * Paddings
@@ -506,14 +515,14 @@ button.wp-block-navigation-item__content {
 			}
 
 			// Space unfolded items using gap and padding for submenus.
-			.wp-block-navigation__submenu-container,
-			.wp-block-navigation__container {
-				gap: var(--wp--style--block-gap, 2em);
-			}
+			//.wp-block-navigation__submenu-container,
+			//.wp-block-navigation__container {
+			//	gap: var(--wp--style--block-gap, 2em);
+			//}
 
 			// Apply top padding to nested submenus.
 			.wp-block-navigation__submenu-container {
-				padding-top: var(--wp--style--block-gap, 2em);
+				//padding-top: var(--wp--style--block-gap, 2em);
 			}
 
 			// A default padding is added to submenu items. It's not appropriate inside the modal.

@glendaviesnz
Copy link
Contributor Author

There is additional top padding, courtesy of the existing rules that still use --wp--style--block-gap,

@ramonjd, my understanding was that we just need to replace the instances where --wp--style--block-gap was being modified by the block attributes to set the actual block gap styles, whereas that top padding can't be modified at the block level at this stage, it is more like the theme default setting which I think --wp--style--block-gap was intended to be used for? I may be misunderstanding things though 🤔

@glendaviesnz
Copy link
Contributor Author

@talldan, @getdave - I think you both have spent a bit of time working on navigation block, so before we go any further with this PR, can you see any gotchas of taking this approach of manually setting the block styles gap value on the relevant wrapper and using inherit for it to be applied to relevant children? As background this change is needed because of this PR.

There is also a question above that would be good to get some input on in relation to which levels of menu the block gap setting should be applied to.

@ramonjd
Copy link
Member

ramonjd commented Jan 11, 2022

@ramonjd, my understanding was that we just need to replace the instances where --wp--style--block-gap was being modified by the block attributes to set the actual block gap styles, whereas that top padding can't be modified at the block level at this stage, it is more like the theme default setting which I think --wp--style--block-gap was intended to be used for? I may be misunderstanding things though 🤔

I think that's right. Sorry for the confusion. I only noticed that it was there and wanted to point out that it might contribute to whatever gap aesthetics we employ. For example, if we reduced the gap to 0 expecting spacing for all menu items – top-level and sub menus – to vanish, the sub menu would still have top padding courtesy of the blockGap value.

@getdave
Copy link
Contributor

getdave commented Jan 11, 2022

One main consideration is that in general we should avoid setting presentational attributes on the block's items. This is because these are saved to the CPT and should be reusable across Themes and therefore should not contain presentation styles.

Presentation should be stored on the parent Nav block instance and not on the inner blocks which are saved to the CPT.

@glendaviesnz glendaviesnz force-pushed the try/no-css-variable-block-gap-navigation-block branch from 7359f63 to 077a93b Compare January 11, 2022 21:25
@talldan
Copy link
Contributor

talldan commented Jan 12, 2022

@tellthemachines knows more than me about the styling aspects of the navigation block.

@getdave makes a good point, that ideally the value for the gap comes from the navigation block itself. If the inner blocks inherit the value that sounds good.

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

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

This tests well for me @glendaviesnz 🎉

Tested in FF, Safari and Chrome.

I can see the gap value in the flex layout rules changing accordingly.

In the Block Editor my nav menus look like

Screen Shot 2022-01-12 at 1 21 16 pm

In the frontend

Screen Shot 2022-01-12 at 1 20 54 pm

Mobile view
Screen Shot 2022-01-12 at 1 23 21 pm

With blockGap disabled in theme.json (removes all blockGap values)

Screen Shot 2022-01-12 at 1 26 13 pm

In the Site Editor, the blockGap controls also work as expected.

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 putting this together!

The gap inheritance is working fine for most child blocks; the one slightly off scenario is when Social Icons is a child of Navigation. Social Icons still uses --wp--style--block-gap, and when a gap value is set in Navigation, that variable is generated in the front end but not in the editor, so Social Icons shows the the default value in the editor, but the Navigation value in the front end.

Social Icons has its own spacing settings so it can always override whatever it inherits, but would be good to have editor and front end matching. This can probably be fixed in another PR though.

Re submenus, given they render as dropdowns, they shouldn't need to follow the same spacing rules as the main Nav elements.

@glendaviesnz glendaviesnz merged commit 80ffd8c into trunk Jan 12, 2022
@glendaviesnz glendaviesnz deleted the try/no-css-variable-block-gap-navigation-block branch January 12, 2022 20:22
@github-actions github-actions bot added this to the Gutenberg 12.5 milestone Jan 12, 2022
@glendaviesnz
Copy link
Contributor Author

the one slightly off scenario is when Social Icons is a child of Navigation.

@tellthemachines I have noted this issue on another issue that is looking at related layout issues with the Social block, but will create a new issue if @andrewserong thinks it would be better dealt with separately to that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants