prefers-reduced-motion 존중하기
prefers-reduced-motion 미디어 쿼리를 감지하고, 움직임을 줄여 달라고 요청한 사용자를 위해 애니메이션을 비활성화하거나 줄입니다.
prefers-reduced-motion 존중하기은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
prefers-reduced-motion 미디어 기능
일부 사용자는 사용자 인터페이스의 움직임으로 메스꺼움, 어지럼증 또는 발작을 경험합니다. 이러한 사용자는 OS에서 동작 줄이기를 설정합니다. prefers-reduced-motion 미디어 기능은 이 설정을 감지하므로 CSS가 그에 맞게 대응할 수 있습니다.
CSS에서 동작 줄이기 감지하기
반대 조건의 쿼리로 애니메이션을 감싸십시오. 기본적으로 애니메이션을 적용한 다음, 동작이 적은 것을 선호하는 사용자에게는 애니메이션을 재정의하거나 비활성화합니다.
/* Apply animation by default */
.spinner {
animation: spin 1s linear infinite;
}
/* Disable for users who want less motion */
@media (prefers-reduced-motion: reduce) {
.spinner {
animation: none;
}
}'줄이기'는 '없음'이 아닙니다
prefers-reduced-motion: reduce는 동작을 전혀 사용하지 않는다는 뜻이 아닙니다. 일부 동작은 중요한 사용자 인터페이스 상태 변화를 전달합니다. 애니메이션을 완전히 제거하는 대신 속도를 늦추거나 크로스페이드처럼 단순화하시기 바랍니다.
@media (prefers-reduced-motion: reduce) {
.modal {
/* Replace scale + fade with just fade */
animation: fadeOnly 0.1s linear;
}
@keyframes fadeOnly {
from { opacity: 0; }
to { opacity: 1; }
}
}궁극적인 방법: 모든 애니메이션 비활성화
동작 줄이기를 선호하는 사용자를 위해 모든 전환과 애니메이션을 전역적으로 비활성화하는 방식이 일반적으로 사용됩니다. 모든 애니메이션을 개별적으로 조정하지 않았더라도 안전한 기본 설정이 될 수 있습니다.
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}JavaScript에서 동작 줄이기 감지하기
matchMedia API를 사용해 JavaScript에서 설정을 감지할 수 있습니다. 캔버스 애니메이션, JavaScript로 제어하는 움직임 또는 동영상 자동 재생을 제어할 때 유용합니다.
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)');
if (prefersReduced.matches) {
// skip gsap or canvas animations
} else {
startAnimation();
}
// React to preference changes:
prefersReduced.addEventListener('change', (e) => {
if (e.matches) stopAnimations();
else startAnimations();
});스크롤 동작과 자동 재생
동작 줄이기를 선호하는 사용자를 위해 부드러운 스크롤도 비활성화하십시오: scroll-behavior: auto. 동영상 자동 재생을 중지합니다. 콘텐츠를 번쩍이거나 점멸시키지 마십시오.
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
}
// In JS:
if (!prefersReduced.matches) {
element.scrollIntoView({ behavior: 'smooth' });
} else {
element.scrollIntoView(); // instant
}WCAG 2.3.3 — 상호작용으로 인한 애니메이션
WCAG 2.3.3(Level AAA)은 사용자 상호작용으로 실행되는 움직임을 비활성화할 수 있어야 한다고 요구합니다. prefers-reduced-motion을 준수하면 이 기준을 충족하고 전정 장애가 있는 사용자의 접근성을 향상할 수 있습니다.
동작 줄이기 테스트하기
Chrome DevTools에서 렌더링 패널을 여십시오(점 3개 메뉴 → 도구 더보기 → 렌더링). 그런 다음 'Emulate CSS media feature prefers-reduced-motion'을 전환합니다. 출시 전에 이 모드에서 사용자 인터페이스를 테스트하시기 바랍니다.
실습: 안전한 애니메이션 패턴
동작에 안전한 애니메이션은 기본적으로 적용되며, 전역적으로 쉽게 비활성화할 수 있도록 감싸서 작성합니다.
@keyframes slideIn {
from { opacity: 0; transform: translateX(-16px); }
to { opacity: 1; transform: translateX(0); }
}
@media (prefers-reduced-motion: no-preference) {
.alert {
animation: slideIn 0.3s ease;
}
}포커스 애니메이션은 유지해야 합니다
포커스 표시기(어떤 요소에 포커스가 있는지 보여 주는 테두리)는 동작 줄이기를 선호하는 사용자에게도 제거해서는 안 됩니다. 포커스 표시는 키보드 탐색에 필수적이며 일반적으로 전정 기관을 자극하는 요인이 아니기 때문입니다.
라이브러리와 prefers-reduced-motion
널리 사용되는 애니메이션 라이브러리(Framer Motion, GSAP, Anime.js)는 동작 줄이기를 기본적으로 지원합니다. Framer Motion의 useReducedMotion() 훅을 사용하면 React에서 복잡한 애니메이션을 조건부로 쉽게 비활성화할 수 있습니다.
빠른 확인
사용자가 사용자 인터페이스에서 동작을 적게 보려는 설정을 감지하는 CSS 미디어 기능은 무엇인가요?
복습: prefers-reduced-motion
일부 사용자는 전정 및 신경학적 건강상의 이유로 동작이 적은 환경이 필요합니다. @media (prefers-reduced-motion: reduce)를 사용해 애니메이션을 비활성화하거나 단순화합니다. JS에서는 matchMedia로 감지합니다. 궁극적인 방법은 전역적으로 animation/transition-duration을 0.01ms로 설정하는 것입니다. WCAG 2.3.3에서도 이를 권장합니다. DevTools 렌더링 패널에서 테스트하시기 바랍니다.
자주 묻는 질문
“prefers-reduced-motion 존중하기” 강의는 무료인가요?
네 — “prefers-reduced-motion 존중하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“prefers-reduced-motion 존중하기”에서 뭘 배우나요?
prefers-reduced-motion 미디어 쿼리를 감지하고, 움직임을 줄여 달라고 요청한 사용자를 위해 애니메이션을 비활성화하거나 줄입니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Frontend Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“prefers-reduced-motion 존중하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- CSS 사용자 지정 속성: 선언과 업데이트
- 트랜지션: 속성, 지속 시간, 타이밍
- @keyframes 애니메이션
- prefers-reduced-motion 존중하기