Skip to content

Commit 5913b5b

Browse files
committed
feat(a11y): Improve accessibility with prefers-reduced-motion
1 parent 3f011ac commit 5913b5b

4 files changed

Lines changed: 49 additions & 21 deletions

File tree

app/components/ComboboxInput.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,11 @@ $inputHeight: 2.5rem;
295295
296296
&__chevron {
297297
pointer-events: none;
298-
transition: transform 0.3s ease;
299-
will-change: transform;
298+
299+
@media (prefers-reduced-motion: no-preference) {
300+
transition: transform 0.3s ease;
301+
will-change: transform;
302+
}
300303
301304
.combobox__header--open & {
302305
transform: translateY(-50%) rotate(-90deg);

app/components/Navigation.vue

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,13 @@ $navBreak: $responsive-large-tablet;
159159
z-index: 99;
160160
position: fixed;
161161
height: 4rem;
162-
transition: 360ms ease;
163-
transition-property: box-shadow, background-color;
164-
will-change: box-shadow, background-color;
165162
box-shadow: 0 0 0.5rem transparent;
163+
164+
@media (prefers-reduced-motion: no-preference) {
165+
transition: 360ms ease;
166+
transition-property: box-shadow, background-color;
167+
will-change: box-shadow, background-color;
168+
}
166169
167170
&--sticky {
168171
box-shadow: var(--shadow);
@@ -212,9 +215,12 @@ $navBreak: $responsive-large-tablet;
212215
left: 50%;
213216
transform: translateX(-50%);
214217
top: 80%;
215-
transition-property: top, transform, width;
216-
transition: 360ms ease;
217-
will-change: top, transform, width;
218+
219+
@media (prefers-reduced-motion: no-preference) {
220+
transition-property: top, transform, width;
221+
transition: 360ms ease;
222+
will-change: top, transform, width;
223+
}
218224
}
219225
220226
&__primary {
@@ -272,9 +278,12 @@ $navBreak: $responsive-large-tablet;
272278
color: var(--color-primary);
273279
border-top: 1px solid transparent;
274280
border-bottom: 1px solid transparent;
275-
will-change: color, border-color;
276-
transition-property: color, border-color;
277-
transition: 160ms ease;
281+
282+
@media (prefers-reduced-motion: no-preference) {
283+
will-change: color, border-color;
284+
transition-property: color, border-color;
285+
transition: 160ms ease;
286+
}
278287
279288
&:hover,
280289
&:focus {
@@ -290,9 +299,6 @@ $navBreak: $responsive-large-tablet;
290299
ul {
291300
opacity: 0;
292301
visibility: hidden;
293-
will-change: opacity, visibility;
294-
transition-property: opacity, visibility;
295-
transition: 160ms ease;
296302
position: absolute;
297303
top: 100%;
298304
margin: 0;
@@ -305,6 +311,12 @@ $navBreak: $responsive-large-tablet;
305311
gap: 0.5rem;
306312
font-size: var(--text-body);
307313
314+
@media (prefers-reduced-motion: no-preference) {
315+
will-change: opacity, visibility;
316+
transition-property: opacity, visibility;
317+
transition: 160ms ease;
318+
}
319+
308320
li {
309321
width: 100%;
310322
}
@@ -359,8 +371,12 @@ $navBreak: $responsive-large-tablet;
359371
border-radius: var(--border-radius-standard);
360372
opacity: 1;
361373
left: 0;
362-
transform: rotate(0deg);
363-
transition: 0.25s ease-in-out;
374+
375+
@media (prefers-reduced-motion: no-preference) {
376+
transform: rotate(0deg);
377+
transition: 0.25s ease-in-out;
378+
will-change: transform;
379+
}
364380
365381
@media (forced-colors: active) {
366382
background-color: ButtonText;
@@ -413,11 +429,14 @@ $navBreak: $responsive-large-tablet;
413429
min-width: 18rem;
414430
max-height: 24rem;
415431
list-style-type: none;
416-
transition-property: height, padding, border;
417-
transition: 260ms ease;
418-
will-change: height, padding, border;
419432
overflow: hidden;
420433
visibility: hidden;
434+
435+
@media (prefers-reduced-motion: no-preference) {
436+
transition-property: height, padding, border;
437+
transition: 260ms ease;
438+
will-change: height, padding, border;
439+
}
421440
422441
@media (forced-colors: active) {
423442
border: 1px solid transparent;

app/components/SiteFooter.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,15 @@ const socialLinks: { key: string; value: string }[] = [
108108
border-radius: 50%;
109109
background-color: var(--color-bg);
110110
border: 1px solid var(--color-primary);
111-
transition: all var(--standard-animation-timing) ease;
112111
padding: 0.375rem;
113112
color: var(--color-primary);
114113
width: 2.5rem;
115114
aspect-ratio: auto 1 / 1;
116115
outline-offset: 2px;
116+
117+
@media (prefers-reduced-motion: no-preference) {
118+
transition: all var(--standard-animation-timing) ease;
119+
}
117120
}
118121
119122
&-icon {

app/pages/links.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,10 @@ const links: { name: string, url: string, icon: string }[] = [
112112
position: relative;
113113
text-decoration: none;
114114
padding-inline: 4rem;
115-
transition: transform 280ms ease;
115+
116+
@media (prefers-reduced-motion: no-preference) {
117+
transition: transform 280ms ease;
118+
}
116119
117120
@media (forced-colors: active) {
118121
border: 1px solid transparent;

0 commit comments

Comments
 (0)