diff --git a/radio/lib/_radio.scss b/radio/lib/_radio.scss
index 8bd26d323f2..65785377956 100644
--- a/radio/lib/_radio.scss
+++ b/radio/lib/_radio.scss
@@ -62,7 +62,7 @@ $_md-sys-motion: tokens.md-sys-motion-values();
-webkit-tap-highlight-color: transparent;
}
- :host([checked]) {
+ .checked {
@include ripple.theme(
(
hover-color: var(--_selected-hover-state-layer-color),
@@ -108,11 +108,11 @@ $_md-sys-motion: tokens.md-sys-motion-values();
transition: opacity 50ms linear;
}
- :host([checked]) .icon {
+ .checked .icon {
fill: var(--_selected-icon-color);
}
- :host([checked]) .inner.circle {
+ .checked .inner.circle {
animation: inner-circle-grow 300ms
map.get($_md-sys-motion, easing-emphasized-decelerate);
opacity: 1;
@@ -150,19 +150,19 @@ $_md-sys-motion: tokens.md-sys-motion-values();
opacity: var(--_disabled-unselected-icon-opacity);
}
- :host([checked]:hover) .icon {
+ :host(:hover) .checked .icon {
fill: var(--_selected-hover-icon-color);
}
- :host([checked]:focus-within) .icon {
+ :host(:focus-within) .checked .icon {
fill: var(--_selected-focus-icon-color);
}
- :host([checked]:active) .icon {
+ :host(:active) .checked .icon {
fill: var(--_selected-pressed-icon-color);
}
- :host([checked][disabled]) .icon {
+ :host([disabled]) .checked .icon {
fill: var(--_disabled-selected-icon-color);
opacity: var(--_disabled-selected-icon-opacity);
}
diff --git a/radio/lib/radio.ts b/radio/lib/radio.ts
index 0ed21a85544..c3020825d58 100644
--- a/radio/lib/radio.ts
+++ b/radio/lib/radio.ts
@@ -9,6 +9,7 @@ import '../../ripple/ripple.js';
import {html, isServer, LitElement, nothing} from 'lit';
import {property, query} from 'lit/decorators.js';
+import {classMap} from 'lit/directives/class-map.js';
import {ARIAMixinStrict} from '../../internal/aria/aria.js';
import {requestUpdateOnAriaChange} from '../../internal/aria/delegate.js';
@@ -115,29 +116,32 @@ export class Radio extends LitElement {
}
protected override render() {
+ const classes = {checked: this.checked};
// Needed for closure conformance
const {ariaLabel} = this as ARIAMixinStrict;
return html`
-