[mdc-icon-button] Icon button does not set colors based on theme values properly
See original GitHub issueBug report
Icon button does not set colors based on theme values properly. Default color doesn’t change based on theme color palette and disabled color is always set to text-disabled-on-light
which is not the best option for a dark theme (screenshot attached).
Steps to reproduce
- Create a custom dark theme:
For example:
@use "@material/theme" with (
// Background
$background: #212121,
// Primary
$primary: #3d74ff,
$on-primary: #000,
// Secondary
$secondary: #00b8c7,
$on-secondary: #000,
// Surface
$surface: #212121,
$on-surface: #fff,
// Status
$error: #d91e18,
$on-error: #fff
);
- Take a look at mdc-icon-button default and disabled states.
- Default color remains full black and disabled color is too dark which makes the component not properly visible for users.
Actual behavior
Colors are not updated based on theme color palette.
Expected behavior
Colors should be set based on theme color palette.
Screenshots
Possible solution
- I noticed this part of the base mixins: https://github.com/material-components/material-components-web/blob/master/packages/mdc-icon-button/_mixins.scss#L194
That should probably be updated to use the
text-disabled-on-light
ortext-disabled-on-dark
depending on the component’s base color. - Regarding the base color i think https://github.com/material-components/material-components-web/blob/master/packages/mdc-icon-button/_mixins.scss#L178 should be changed to use the theme color so it will be updated based on the theme color palette properly.
The above comments are just suggestions based on my understanding of the component implementation but i’m not fully aware of the standard and guidelines defined for this components so please ignore this if it doesn’t apply.
Workaround
Currently i’m using these styles to achieve what i wanted in case it adds some info to the bug:
@use "@material/theme" as mdc-theme;
@use "@material/icon-button/mixins" as mdc-icon-button-mixins;
@mixin base_ () {
@include mdc-icon-button-mixins.ink-color(mdc-theme.$on-surface);
}
@mixin disabled_ () {
$text-disabled-color: if(mdc-theme.contrast-tone(mdc-theme.$surface) == "dark", text-disabled-on-light, text-disabled-on-dark);
@include mdc-icon-button-mixins.disabled-ink-color($text-disabled-color);
}
Issue Analytics
- State:
- Created 4 years ago
- Reactions:1
- Comments:5 (2 by maintainers)
Top Results From Across the Web
Buttons - Material Design
Buttons allow users to take actions with a single tap. ... mdc-button__label element is required in order for the trailing icon to be...
Read more >Icon Buttons - Material Components for the Web
The icon button can be used to toggle between an on and off icon. To style an icon button as an icon button...
Read more >Material Design icon button doesn't work properly
How to use the new Material Design Icon themes: Outlined, Rounded, Two-Tone and Sharp? 1 · How should I change the color of...
Read more >Material Theming with MDC: Color - Medium
Material Theming is a way to customize Material Components to align with your brand. A Material theme includes color, typography and shape ...
Read more >material/fab - Floating action buttons - npm
The Material Components for the web floating action button component. ... Note: IE 11 will not center the icon properly if there is...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
We definitely think this could be addressed. Adding it to our backlog to investigate
Is this still issue still expected to be fixed? I discovered the same issue today, but noticed this issue had been reported back in 2020.