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

Add link color support to Nav block to allow for override of Theme JSON styles #41199

Closed
wants to merge 5 commits into from

Conversation

getdave
Copy link
Contributor

@getdave getdave commented May 20, 2022

What?

Fixes #41146 by adding linkColor support to the Nav block thereby ensuring that Nav block specific link color styles can take precedence over inherited Theme JSON styles.

Why?

In #41146 (comment) we learnt that the Theme JSON styles coming from link color styles on the enclosing Group block (the one wrapping the Nav block) were taking precedence over the user selected text color styles on the Nav block.

This is correct (if unintuative) behaviour as CSS cascade means the link selector from the Global Styles will target the <a> of the Nav block. That overrides the text color set on the Nav block.

This is becayse textColor !== linkColor.

We need to provide a way for the Nav block to overide linkColor styles cascading from Theme JSON.

How?

This PR:

  • manually (not via block supports) adds linkColor and customLinkColor support to the Navigation block.
  • ensures the values of the above are passed via context and consumed by
    • Navigation Submenu block
    • Navigation Link block
  • adds appropriate classes to the aforesaid blocks
  • ensures that CSS rules and specificity is adjust to ensure that the link color is inherited from the appropriate parent on to the appropriate element.

The above requires jumping through many hoops and thus why there are so many file changes.

Alternatives considered

Initially this PR targetted the existing textColor on the Nav block and ensured that took precedence on any styles cascading from Global Styles. However as @scruffian pointed out that is counterintuitive as link and text color are not the same thing.

One concern here is that for a while Nav block consumers have probably seen the Text color control as equivalent to "the color of the links in the Nav". However in the future we may have text items in a Nav which are not links and so we need to start to differentiate them.

Testing Instructions

  • Add a Nav block and some items.
  • Wrap the Nav in a Group and set a link color on that group.
  • See that by default the Nav inherits the link color set on the Group
  • Save and check the front end also respects the above.
  • Now set a specific Link Color on the Nav block which is different to that on the Nav block.
  • See that this color is respected.
  • Save and check the front end also respects the above.
  • Now set an Overlay and submenu link color on the Nav block. Make sure this distinct from the previous color and the one on the Group block.
  • Check this renders correctly in Editor and front end.
  • Remove the link color from the Nav block, whilst retaining the submenu link color. Again check things inherit correctly.
  • Try other variations of the above to ensure CSS cascades correctly.
  • Check the overlay also obeys these rules.

🤔 We should also test that adding styles from Theme JSON that specifically target the Nav block are still respected.

Screenshots or screencast

Screen.Capture.on.2022-05-20.at.12-42-47.mp4

@getdave getdave added [Type] Regression Related to a regression in the latest release [Block] Navigation Affects the Navigation Block CSS Styling Related to editor and front end styles, CSS-specific issues. labels May 20, 2022
@getdave getdave requested review from draganescu and scruffian May 20, 2022 11:40
@getdave getdave self-assigned this May 20, 2022
@getdave getdave marked this pull request as ready for review May 20, 2022 11:44
@getdave getdave requested a review from tellthemachines as a code owner May 20, 2022 11:44
@getdave getdave requested a review from MaggieCabrera May 20, 2022 11:45
@github-actions
Copy link

github-actions bot commented May 20, 2022

Size Change: +639 B (0%)

Total Size: 1.24 MB

Filename Size Change
build/block-editor/index.min.js 150 kB +4 B (0%)
build/block-library/blocks/navigation/style-rtl.css 1.97 kB +26 B (+1%)
build/block-library/blocks/navigation/style.css 1.96 kB +25 B (+1%)
build/block-library/index.min.js 181 kB +440 B (0%)
build/block-library/style-rtl.css 11.6 kB +22 B (0%)
build/block-library/style.css 11.6 kB +20 B (0%)
build/components/index.min.js 227 kB +2 B (0%)
build/core-data/index.min.js 14.6 kB +68 B (0%)
build/edit-site/index.min.js 47.9 kB +32 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.51 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/style-rtl.css 14.5 kB
build/block-editor/style.css 14.5 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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 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 445 B
build/block-library/blocks/button/editor.css 445 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 103 B
build/block-library/blocks/code/style.css 103 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 406 B
build/block-library/blocks/columns/style.css 406 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 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/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 95 B
build/block-library/blocks/comments/editor.css 95 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.53 kB
build/block-library/blocks/cover/style.css 1.53 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 353 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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 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 333 B
build/block-library/blocks/group/editor.css 333 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 76 B
build/block-library/blocks/heading/style.css 76 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 738 B
build/block-library/blocks/image/editor.css 737 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 395 B
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 363 B
build/block-library/blocks/page-list/editor.css 363 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 260 B
build/block-library/blocks/paragraph/style.css 260 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 69 B
build/block-library/blocks/post-comments-form/editor.css 69 B
build/block-library/blocks/post-comments-form/style-rtl.css 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 628 B
build/block-library/blocks/post-comments/style.css 628 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 323 B
build/block-library/blocks/post-template/style.css 323 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 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 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 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 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 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 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 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 561 B
build/block-library/blocks/video/editor.css 563 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 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.3 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47.1 kB
build/components/style-rtl.css 14.5 kB
build/components/style.css 14.5 kB
build/compose/index.min.js 11.7 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.98 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.69 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 4.05 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 30.4 kB
build/edit-post/style-rtl.css 7.08 kB
build/edit-post/style.css 7.08 kB
build/edit-site/style-rtl.css 7.73 kB
build/edit-site/style.css 7.71 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.4 kB
build/editor/index.min.js 38.5 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.7 kB
build/element/index.min.js 4.3 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.1 kB
build/nux/style-rtl.css 744 B
build/nux/style.css 741 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.2 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@scruffian
Copy link
Contributor

I'm not sure about this approach. It seems to me that the behaviour in the editor is the correct behaviour. In CSS if I set a link color in an element then to override it I need to set a different link color in the child - setting a text color in the child won't be enough.

I think what we need to do is to make it possible to set a link color in the nav block, rather than a text color. This is a bit confusing though as I'm not sure its possible to have text in a navigation block which isn't a link, although one day it probably will be.

@getdave
Copy link
Contributor Author

getdave commented May 20, 2022

I'm not sure about this approach. It seems to me that the behaviour in the editor is the correct behaviour. In CSS if I set a link color in an element then to override it I need to set a different link color in the child - setting a text color in the child won't be enough.

I think what we need to do is to make it possible to set a link color in the nav block, rather than a text color. This is a bit confusing though as I'm not sure its possible to have text in a navigation block which isn't a link, although one day it probably will be.

Yeh you're right. It's the link color not the text color that's overwriting the block specific styles. Ok let's add linkcolor support to the Nav block.

@getdave getdave changed the title Fix Nav block text color specificity to override Theme JSON styles Add link color support to Nav block to allow for override of Theme JSON styles May 20, 2022
@getdave
Copy link
Contributor Author

getdave commented May 20, 2022

@scruffian I added linkColor support to the Nav block and adjusted the CSS selector to has-link-color.

@getdave
Copy link
Contributor Author

getdave commented May 20, 2022

@scruffian I've noticed the CSS specificity is different in the editor on the Global Styles selector due to it being prepended with .editor-styles-wrapper. That's causing the inherit behaviour to be off on the front end.

@@ -41,8 +41,6 @@ $navigation-icon-size: 24px;
}

// Menu item link.
// By adding low specificity, we enable compatibility with link colors set in theme.json,
// but still allow them to be overridden by user-set colors.
.wp-block-navigation-item__content {
color: inherit;
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we should remove this line. .wp-block-navigation-item__content is a class that is used on a link. This line forces links to inherit their color from their parent which is against the pattern of CSS.

@scruffian
Copy link
Contributor

Sorry, I'm not sure the approach here is the right one. The elements API expects the link color to be stored in a very specific attribute:

$link_color = _wp_array_get( $block['attrs'], array( 'style', 'elements', 'link', 'color', 'text' ), null );

If we do this then we won't need to write any custom code to apply the colors, as the library should take care of that for us.

@getdave
Copy link
Contributor Author

getdave commented May 23, 2022

If we do this then we won't need to write any custom code to apply the colors, as the library should take care of that for us.

I'm pretty sure the Nav block doesn't follow "the rules" here. All the stuff for text and background color is custom coded. I think this is because the colours aren't intended for the Nav block itself but rather to be inherited by the child blocks.

I can try uses the standard approach you suggest but I deliberately avoided this and followed the patterns that have already been established in the block (e.g. textColor).

@getdave
Copy link
Contributor Author

getdave commented May 23, 2022

Some more research reveals that the need for custom colors for the Submenu and Overlay is probably the reason why we have a custom colors implementation here.

If I add support for linkColor using the "standards" way via block.json

"supports": {
    "color": {
        "link": true
    }
}

...then I get x2 color controls:

Screen Shot 2022-05-23 at 09 18 24

In the longer term we may need a wider refactor of how Submenu and Overlay colors are handled. For now though in order to fix this bug I think building on the existing custom implementation would be fine.

@getdave
Copy link
Contributor Author

getdave commented May 23, 2022

Other options:

Separate Submenu & Overlay colors panel

We can use standard block supports for the text, link and background colors.

Then we can have a dedicated panel for the "custom" color controls for Submenu and Overlay.

Screen Shot 2022-05-23 at 09 31 45

@scruffian
Copy link
Contributor

Ok, this one is going to get complicated. My suggestion is:

  • Ship this (or something like it) to fix the bug
  • Look into what an ideal solution might look like...

Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

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

I believe this is a good opportunity to not patch to fix. If I am not mistaken we'd be introducing things that we'll need to remove later.

We already have a system in place and we should try to improve that one for this specific use case:

  • properties set on parents should be inherited by children, unless children override them

As far as I understand the global styles system supports this just fine, but the navigation block has a custom implementation. Maybe it's time to remove that and make sure we fit into what the platform currently offers? Probably at the time the global styles system did not offer us a way to implement what we wanted, or whatever was the reason.

I understand that refactoring is a big undertaking and the bug is now, but fixing will require us to support temporary solutions and remove them later, they're not even experimental. Also, I believe the fix now refactor later should only apply to core on critical bugs. Is this color inheritance on one block a critical bug?

@@ -43,10 +43,14 @@
"usesContext": [
"textColor",
"customTextColor",
"linkColor",
"customLinlColor",
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
"customLinlColor",
"customLinkColor",

@getdave
Copy link
Contributor Author

getdave commented May 23, 2022

Thanks for your review @draganescu . It's much appreciated.

I believe this is a good opportunity to not patch to fix. If I am not mistaken we'd be introducing things that we'll need to remove later.

You are correct. The question is, how much are we really compounding the problem vs being able to move quickly to patch a fix.

As far as I understand the global styles system supports this just fine, but the navigation block has a custom implementation.
Probably at the time the global styles system did not offer us a way to implement what we wanted, or whatever was the reason.

Global Styles has block supports for color which supports text, link and background. However there is no way to add custom colors AFAIK.

The Nav block has a custom implementation for these things because we need to support custom color setitngs for overlay and submenu as per #41199 (comment).

I understand that refactoring is a big undertaking and the bug is now, but fixing will require us to support temporary solutions and remove them later, they're not even experimental. Also, I believe the fix now refactor later should only apply to core on critical bugs. Is this color inheritance on one block a critical bug?

I think we owe it to the original reporters and our Themes community to check on the impact of this bug. If it's something that can be "managed" we can go straight to the refactor. If it's critical then we'll need to patch and then refactor.

I would also prefer not to compound the existing tech debt 👍

@getdave
Copy link
Contributor Author

getdave commented Jul 1, 2022

Closing this one as I have a new plan. I will raise a PR shortly.

@getdave getdave closed this Jul 1, 2022
@scruffian scruffian deleted the fix/nav-block-text-color-specificity branch July 27, 2022 22:09
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 CSS Styling Related to editor and front end styles, CSS-specific issues. [Type] Regression Related to a regression in the latest release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Navigation block: text color not appearing in the editor
3 participants