Skip to content

Commit 49dbac5

Browse files
committed
perf(material/checkbox): Optimize more expensive selectors
1 parent 7c57f82 commit 49dbac5

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/material/checkbox/_checkbox-common.scss

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,15 @@ $_fallback-size: 40px;
119119
border-color: transparent;
120120
}
121121

122-
.mdc-checkbox:hover .mdc-checkbox__native-control:not(:checked) ~ .mdc-checkbox__background,
123-
.mdc-checkbox:hover
122+
.mdc-checkbox:hover > .mdc-checkbox__native-control:not(:checked) ~ .mdc-checkbox__background,
123+
.mdc-checkbox:hover >
124124
.mdc-checkbox__native-control:not(:indeterminate) ~ .mdc-checkbox__background {
125125
@include token-utils.create-token-slot(border-color, unselected-hover-icon-color);
126126
background-color: transparent;
127127
}
128128

129-
.mdc-checkbox:hover .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,
130-
.mdc-checkbox:hover .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
129+
.mdc-checkbox:hover > .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,
130+
.mdc-checkbox:hover > .mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
131131
@include token-utils.create-token-slot(border-color, selected-hover-icon-color);
132132
@include token-utils.create-token-slot(background-color, selected-hover-icon-color);
133133
}
@@ -147,7 +147,7 @@ $_fallback-size: 40px;
147147

148148
// Needs extra specificity to override the focus, hover, active states.
149149
.mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive {
150-
.mdc-checkbox:hover .mdc-checkbox__native-control ~ .mdc-checkbox__background,
150+
.mdc-checkbox:hover > .mdc-checkbox__native-control ~ .mdc-checkbox__background,
151151
.mdc-checkbox .mdc-checkbox__native-control:focus ~ .mdc-checkbox__background,
152152
.mdc-checkbox__background {
153153
@include token-utils.create-token-slot(border-color, disabled-unselected-icon-color);
@@ -312,25 +312,25 @@ $_fallback-size: 40px;
312312
}
313313

314314
.mdc-checkbox__native-control:checked ~ .mdc-checkbox__background {
315-
.mdc-checkbox__checkmark {
315+
> .mdc-checkbox__checkmark {
316316
transition: opacity $_transition-duration * 2 $_enter-curve,
317317
transform $_transition-duration * 2 $_enter-curve;
318318
opacity: 1;
319319
}
320320

321-
.mdc-checkbox__mixedmark {
321+
> .mdc-checkbox__mixedmark {
322322
transform: scaleX(1) rotate(-45deg);
323323
}
324324
}
325325
.mdc-checkbox__native-control:indeterminate ~ .mdc-checkbox__background {
326-
.mdc-checkbox__checkmark {
326+
> .mdc-checkbox__checkmark {
327327
transform: rotate(45deg);
328328
opacity: 0;
329329
transition: opacity $_transition-duration $_exit-curve,
330330
transform $_transition-duration $_exit-curve;
331331
}
332332

333-
.mdc-checkbox__mixedmark {
333+
> .mdc-checkbox__mixedmark {
334334
transform: scaleX(1) rotate(0deg);
335335
opacity: 1;
336336
}
@@ -445,8 +445,14 @@ $_fallback-size: 40px;
445445

446446
// Conditionally disables the animations of the checkbox.
447447
@mixin checkbox-noop-animations() {
448-
&._mat-animation-noopable .mdc-checkbox {
449-
*, *::before {
448+
&._mat-animation-noopable > .mdc-checkbox {
449+
> .mat-mdc-checkbox-touch-target,
450+
> .mdc-checkbox__native-control,
451+
> .mdc-checkbox__ripple,
452+
> .mat-mdc-checkbox-ripple::before,
453+
> .mdc-checkbox__background,
454+
> .mdc-checkbox__background > .mdc-checkbox__checkmark,
455+
> .mdc-checkbox__background > .mdc-checkbox__mixedmark {
450456
transition: none !important;
451457
animation: none !important;
452458
}

0 commit comments

Comments
 (0)