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

Fix invisible start button chevron in forced color mode [merged into wrong base branch] #2275

Merged

Conversation

36degrees
Copy link
Contributor

@36degrees 36degrees commented Jul 15, 2021

When forced color mode was introduced in Chrome 89, the default user agent styles for SVGs were set to forced-color-adjust: none in line with the CSS Color Adjustment specification at the time. Unfortunately, this means that using currentColor for stroke and fill in SVGs no longer works as expected in forced color mode.

As per the comment in Chromium bug #1164162:

This is the result of one of the recent spec changes. The spec was updated to force colors at used value time rather than computed value time, which means elements that have "forced-color-adjust: none" set (like svg elements) will inherit their non-forced color values, resulting in a different currentcolor used for stroke and fill in this case than you would get if forcing was done at computed value time.

See spec issue resolution for more details: w3c/csswg-drafts#4915

It looks like this has since been flagged as an issue with the CSS working group and the spec has been updated to resolve it but it’s going to take a while before that change is reflected in browsers.

In the meantime, we can explicitly set forced-color-adjust: auto on the chevron SVG in order for it to correctly inherit the color from the parent. This mimics the fix for the OGL logo in the footer made in 850c0b7 (#2273).

Start link buttons

Theme Before After
Black b before b after
White w before w after
# 1 1 before 1 after
# 2 2 before 2 after

Start Buttons

Theme Before After
Black b before b after
White w before w after
# 1 1 before 1 after
# 2 2 before 2 after

Once Chromium has been updated so that the default UA styles for SVGs use the new forced-color-adjust: preserve-parent-color keyword, and traffic to older versions has dropped off, we can then consider removing this.

@govuk-design-system-ci govuk-design-system-ci temporarily deployed to govuk-frontend-pr-2275 July 15, 2021 14:17 Inactive
@govuk-design-system-ci govuk-design-system-ci temporarily deployed to govuk-frontend-pr-2275 July 15, 2021 14:20 Inactive
When forced color mode was introduced in Chrome 89, the default user agent styles for SVGs were set to `forced-color-adjust: none` in line with the CSS Color Adjustment specification at the time [1]. Unfortunately, this means that using currentColor for stroke and fill in SVGs no longer works as expected in forced color mode.

As per the comment in Chromium bug #1164162 [2]:

> This is the result of one of the recent spec changes. The spec was updated to force colors at used value time rather than computed value time, which means elements that have "forced-color-adjust: none" set (like svg elements) will inherit their non-forced color values, resulting in a different currentcolor used for stroke and fill in this case than you would get if forcing was done at computed value time.
>
> See spec issue resolution for more details: w3c/csswg-drafts#4915

It looks like this has since been flagged as an issue with the CSS working group [3] and the spec has been updated to resolve it [4] but it’s going to take a while before that change is reflected in browsers.

In the meantime, we can explicitly set `forced-color-adjust: auto` on the chevron SVG in order for it to correctly inherit the color from the parent [5]. This mimics the fix for the OGL logo in the footer made in 850c0b7.

Once Chromium has been updated so that the default UA styles for SVGs use the new `forced-color-adjust: preserve-parent-color` keyword, and traffic to older versions has dropped off, we can then consider removing this.

[1]: https://www.w3.org/TR/2021/WD-css-color-adjust-1-20210520/#forced-color-adjust-prop
[2]: https://bugs.chromium.org/p/chromium/issues/detail?id=1164162#c4
[3]: w3c/csswg-drafts#6310
[4]: https://www.w3.org/TR/2021/WD-css-color-adjust-1-20210616/#forced-color-adjust-prop
[5]: w3c/csswg-drafts#6310 (comment)
@36degrees 36degrees force-pushed the start-button-chevron-forced-color-mode branch from a8129e9 to 40f9d99 Compare July 15, 2021 14:28
@36degrees 36degrees changed the base branch from main to start-button-example July 15, 2021 14:28
@govuk-design-system-ci govuk-design-system-ci temporarily deployed to govuk-frontend-pr-2275 July 15, 2021 14:28 Inactive
Copy link
Member

@lfdebrux lfdebrux left a comment

Choose a reason for hiding this comment

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

LGTM 👍

@36degrees 36degrees added this to the [NEXT] milestone Jul 16, 2021
@36degrees 36degrees merged commit 84f4cf4 into start-button-example Jul 16, 2021
@36degrees 36degrees deleted the start-button-chevron-forced-color-mode branch July 16, 2021 09:44
@36degrees
Copy link
Contributor Author

Forgot this branch was targeting start-button-example 🤦🏻

@36degrees 36degrees removed this from the [NEXT] milestone Jul 16, 2021
@36degrees 36degrees changed the title Fix invisible start button chevron in forced color mode Fix invisible start button chevron in forced color mode [merged into wrong base branch] Jul 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants