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

Enable alpha on Block Inspector Color ToolsPanel #37731

Merged
merged 4 commits into from
Jan 20, 2022

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Jan 5, 2022

Resolves #18095

Description

This PR add alpha controls to Color Picker panels in the Block Inspector.

We're doing this by passing enableAlpha=true to the underlying ColorPicker component from the color tools panel.

Where text color alpha transparency goes below a minimum threshold (currently 1), we'll also show a warning about readability where the text is otherwise "readable" according to the colord library.

Changes to background color transparency are ignored due to the difficultly in accounting for multiple alpha layers or image backgrounds and so on.

See: #18095 (comment)

Jan-20-2022.13-28-31.mp4

Considerations

Here we're enabling alpha controls for all blocks and all colors.

Is the availability to adjust alpha something we'd want to enable at a block level, e.g., via color supports and/or for certain colors, e.g., background, text, link?

Or is it okay to leave it on as a permanent citizen of the color panel?

How has this been tested?

Insert any block that has color support, for example a group block!

Select a background color, or any color. Click on the custom color picker, then play with the alpha slider.

Screen Shot 2022-01-18 at 10 49 03 am

The colors in the editor should match the frontend.

Take note of the warning.
Screen Shot 2022-01-19 at 10 56 35 pm

The warning should show where only the text color has transparency AND the color panel does not show any contrast warnings otherwise.

Types of changes

Enabling an existing feature.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@github-actions
Copy link

github-actions bot commented Jan 5, 2022

Size Change: +146 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.min.js 141 kB +98 B (0%)
build/edit-site/index.min.js 37.7 kB +48 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/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.99 kB
build/block-library/blocks/navigation/editor.css 2 kB
build/block-library/blocks/navigation/style-rtl.css 1.85 kB
build/block-library/blocks/navigation/style.css 1.84 kB
build/block-library/blocks/navigation/view.min.js 2.81 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.1 kB
build/block-library/editor.css 10.1 kB
build/block-library/index.min.js 165 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.8 kB
build/block-library/style.css 10.8 kB
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.4 kB
build/components/index.min.js 215 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.15 kB
build/edit-post/style.css 7.14 kB
build/edit-site/style-rtl.css 6.85 kB
build/edit-site/style.css 6.84 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.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 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.75 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.58 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

@amustaque97 amustaque97 added [Type] Enhancement A suggestion for improvement. [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Jan 6, 2022
@ramonjd ramonjd marked this pull request as ready for review January 17, 2022 23:52
@ramonjd ramonjd requested a review from ellatrix as a code owner January 17, 2022 23:52
@ramonjd ramonjd requested review from jasmussen and aristath January 17, 2022 23:53
@ramonjd
Copy link
Member Author

ramonjd commented Jan 18, 2022

Testing on a few blocks

Screen Shot 2022-01-18 at 11 13 32 am

@ramonjd ramonjd self-assigned this Jan 18, 2022
@jasmussen
Copy link
Contributor

Took this one for a quick spin, and it works as intended. Before:
before

After:

after

Honestly, this seems fine to me. The picker is designed to manage the prominence of both the hue and alpha selectors, and it can easily survive being visible forever.

Are there any reasons why we would not want to surface alpha as an option? Are there any cases where changing the opacity of a color would actually not work? I can't think of any, can you @jameskoster?

Otherwise, this one seems fine to me! Nice work.

@aristath
Copy link
Member

Allowing alpha for backgrounds makes sense. However, I'm not so sure about the text & link colors. Using semi-transparent text would make the text a lot harder to read, and would be an a11y issue.
Granted, it's all about allowing users to make the choices they want, but at the same time we have to balance how much we're enabling bad choices.
I can imagine semi-transparent text being pretty when used in a gigantic header with a background image in a cover block for example, but that's an exception and not the norm. Text should not be allowed to be transparent IMO.

@jasmussen
Copy link
Contributor

However, I'm not so sure about the text & link colors. Using semi-transparent text would make the text a lot harder to read, and would be an a11y issue.
Granted, it's all about allowing users to make the choices they want, but at the same time we have to balance how much we're enabling bad choices.

Good thought. Do you think we could handle that with the same type of accessibility notice you receive if you choose badly contrasting colors? A semitransparent text color when blended into the background feels very comparable in that it's about comparing two colors for contrast.

If it's technically tricky to compare the contrast of semitransparent text on a background, we could just blanket output a warning as soon as the opacity isn't 100%. Someting like "Be careful with transparent text, contrast is likely going to be insufficient."

@aristath
Copy link
Member

If it's technically tricky to compare the contrast of semitransparent text on a background, we could just blanket output a warning as soon as the opacity isn't 100%. Someting like "Be careful with transparent text, contrast is likely going to be insufficient."

Comparing the contrast for semi-transparent text would be extremely difficult... Theoretically, if alpha = 0.6 then we'd mix the text-color with the background-color with a ratio of 60-40 to get a hex value for the text color, which can then be compared against a hex for the background. But if the background itself has a transparency - or is an image, then any computation will be invalid.
A blanket warning like the one described above would make sense if opacity is used for text/link 👍

@jameskoster
Copy link
Contributor

Yeah, text is the only thing I can think of that might be tricky. A blanket warning seems like a sensible idea.

@dennisheiden
Copy link

Comparing the contrast for semi-transparent text would be extremely difficult... Theoretically, if alpha = 0.6 then we'd mix the text-color with the background-color with a ratio of 60-40 to get a hex value for the text color, which can then be compared against a hex for the background. But if the background itself has a transparency - or is an image, then any computation will be invalid.
A blanket warning like the one described above would make sense if opacity is used for text/link 👍

Or you just check if a text block has a text color with an alpha lower than 1. You don't have to check against background's alphas for that to trigger an accessibility warning, because every text with an alpha can be considered as less readable than normal text.
At least in that way you can at least make people aware of the accessibility issue, otherwise they just create a style with alpha.

@ramonjd
Copy link
Member Author

ramonjd commented Jan 18, 2022

Thanks for the feedback, folks.

I lean towards offering the toolbox to allows users make their own decisions, so a blanket warning when the alpha for text moves beyond n threshold seems to strike a good balance.

I'll take a shot at it. 👍

Later, we still might want to look at building alpha support into block supports, so we can control where the alpha control appears (e.g., only for backgrounds).

In a block's block.json we could have something like (example only):

"supports": {
    "color": {
       "background" : {
            "opacity" : true,
       },
       "text" : true,
    }
}

Whether alpha/opacity/whatever is disabled or enabled) by default is another question. 😄

@ramonjd ramonjd force-pushed the add/color-picker-panel-alpha branch from dd7085d to 281effa Compare January 19, 2022 12:08
@@ -71,16 +83,19 @@ function ContrastChecker( {
const colordTextColor = colord( textColor || fallbackTextColor );
const hasTransparency =
colordBackgroundColor.alpha() !== 1 || colordTextColor.alpha() !== 1;
Copy link
Member Author

Choose a reason for hiding this comment

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

Should we reduce the minimum alpha threshold here where __experimentalEnableAlphaChecker === true? Say to 0.8, so the warning will only show when the transparency of either text or background falls below this?

@jasmussen
Copy link
Contributor

Took it for a quick spin and seeing this:
colors

It works well, although I think we should show this notice only for text, and not for the background, because even with a transparent background you can get yourself into trouble with the wrong background image.

How about this text: "Be careful with transparent text, contrast can often be insufficient."

On a separate note and not for this PR, I would like to update our notices across the board to be simpler. This is just an unfinished mockup at this point, but something along these lines:

Paragraph w  contrast notice

@ramonjd
Copy link
Member Author

ramonjd commented Jan 19, 2022

although I think we should show this notice only for text, and not for the background, because even with a transparent background you can get yourself into trouble with the wrong background image.

Good idea, thanks. This might reduce notice fatigue too. 😄

… color has transparency.

Adding tests.
Updating README.md to reflect the reality that colord does not check the contrast of colors with alpha transparency in our implementation.
only show the transparency warning where the text color alpha is < 1
ensure the readability/contrast warning takes precedence over the transparency warning
@ramonjd ramonjd force-pushed the add/color-picker-panel-alpha branch from 9f136d3 to 5f667f4 Compare January 20, 2022 02:37
@ramonjd
Copy link
Member Author

ramonjd commented Jan 20, 2022

although I think we should show this notice only for text, and not for the background, because even with a transparent background you can get yourself into trouble with the wrong background image.

I've updated the code and the screencast in the test description.

How about this text: "Be careful with transparent text, contrast can often be insufficient."

Removing the "for people" part would be good. It seems redundant.

To my ear, something along the lines of "Transparent text may be hard to read." rings better.

We don't mention contrast sufficiency elsewhere I guess because it's leaning towards the technical too much? 🤷

I dunno, I'm just shouting at the forest. 😄

For now I've left it at Transparent text colors may be hard for people to read. to keep in line with current copy.

Also, I noticed the contrast checker doesn't take link colors into account.

Jan-20-2022 13-42-34

I see there's an issue up already.

I think I have a way forward on this. I'll add another PR.

@glendaviesnz
Copy link
Contributor

This tested well for me. It will be interesting to see what this means over time for the likes of the Cover block explicit dimRatio setting - I suspect there might still be the need for some blocks to expose this option at a higher level still?

Is it likely to be changeable enough to warrant giving an __experimental prefix to enableAlphaChecker - given that this doesn't affect saved block content at all could we skip committing it as experimental?

@ramonjd
Copy link
Member Author

ramonjd commented Jan 20, 2022

Thanks for testing @glendaviesnz

It will be interesting to see what this means over time for the likes of the Cover block explicit dimRatio setting

The Cover Block is an interesting one - it explicitly allows background images and the opacity layer.

Though some sites out there do some rough calculations to guesstimate the readability of transparent backgrounds - see for example https://contrast-ratio.com/ which seems to be doing something similar to what was described in this comment - it's not accurate.

The color library we use appears to flat out ignore alpha for testing readability and contrast too. Throw in background images, RGBA, opacity and unlimited layers of semi-transparent, nested blocks and 😱

Ultimately, we could try to extend the colord library with a fudge and at least attempt to advise/warn users of potentially unreadable color mixes, but it runs the risk of become noisy.

Is it likely to be changeable enough to warrant giving an __experimental prefix to enableAlphaChecker - given that this doesn't affect saved block content at all could we skip committing it as experimental?

That's a good question. I added the __experimental prefix right at the beginning before I knew how I was going to tackle things, mainly as a bit of butt-covering manoeuvre.

I think I agree that we can ditch it.

@ramonjd ramonjd mentioned this pull request Jan 20, 2022
8 tasks
@jasmussen
Copy link
Contributor

Screenshot 2022-01-20 at 10 06 02

Looks good! Nice and simple.

@ramonjd
Copy link
Member Author

ramonjd commented Jan 20, 2022

I appreciate the input, everyone! 🙇

@ramonjd ramonjd merged commit 84b8887 into trunk Jan 20, 2022
@ramonjd ramonjd deleted the add/color-picker-panel-alpha branch January 20, 2022 22:27
@github-actions github-actions bot added this to the Gutenberg 12.5 milestone Jan 20, 2022
@uniquesolution
Copy link

I am not seeing this alpha option in block editor for group or other blocks that support color, using wordpress 5.9 RC3 and gutenberg 12.4.1, will this feature be available in the future release ? or I have to do some changes in theme.json to enable it ?

@ramonjd
Copy link
Member Author

ramonjd commented Jan 23, 2022

I am not seeing this alpha option in block editor for group or other blocks that support color, using wordpress 5.9 RC3 and gutenberg 12.4.1, will this feature be available in the future release ? or I have to do some changes in theme.json to enable it ?

HI @uniquesolution !

This change was merged a few days ago so, unless something catastrophic occurs like a worldwide internet failure or coffee shortages, it should be part of Gutenberg 12.5. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add background colour transparency to blocks that support background colour
8 participants