CSS 이미지 애니메이션 모듈 레벨 1

W3C 최초 공개 워킹드래프트,

이 문서에 대한 추가 정보
현재 버전:
https://www.w3.org/TR/2026/WD-css-image-animation-1-20260409/
최신 게시 버전:
https://www.w3.org/TR/css-image-animation-1/
에디터스 드래프트:
https://drafts.csswg.org/css-image-animation-1/
이전 버전:
변경 이력:
https://www.w3.org/standards/history/css-image-animation-1/
피드백:
CSSWG 이슈 저장소
에디터:
Florian Rivoal
이 명세에 대한 편집 제안:
GitHub 에디터

요약

이 CSS 모듈은 애니메이션 이미지의 렌더링을 제어할 수 있는 기능을 제안합니다.

CSS는 구조화된 문서의 렌더링을 (예: HTML 및 XML) 화면, 인쇄물 등에서 설명하는 언어입니다.

이 문서의 상태

이 절은 이 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 문서는 CSS 워킹 그룹에 의해 권고안 트랙을 사용한 최초 공개 워킹 드래프트로 발행되었습니다. 최초 공개 워킹 드래프트로의 발행은 W3C 및 그 회원들의 승인을 의미하지 않습니다.

이것은 초안 문서이며 언제든지 다른 문서에 의해 갱신, 대체되거나 폐지될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않습니다.

피드백은 제목에 명세 코드 “css-image-animation”을 포함하여, GitHub에 이슈를 등록하는 방식으로 보내 주세요 (권장). 예시: “[css-image-animation] …의견 요약…”. 모든 이슈와 댓글은 아카이브됩니다. 또는 (아카이브) 공개 메일링 리스트 www-style@w3.org 로 보낼 수 있습니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹의 산출물과 관련하여 제출된 공개 특허 목록을 유지하며, 그 페이지에서 특허 공개 방법에 대한 안내도 제공합니다. 누군가 실제로 특허에 대해 알고 있고 그 특허가 필수 청구항을 포함한다고 생각한다면 W3C 특허 정책 6절 에 따라 정보를 공개해야 합니다.

1. 소개

이 절은 비규범적입니다.

애니메이션 이미지는 ([GIF], [PNG], [WebP] 등에서 지원) 웹에서 널리 사용됩니다. 기본적으로 사용자 에이전트는 이러한 이미지를 자동 재생하며, 이는 사용자에게 당황스러울 수 있습니다. 특히 한 페이지에 여러 이미지가 있는 경우(예: 이미지 갤러리)에서는 더더욱 그러하며, WCAG 2.2 §  성공 기준 2.2.2 일시정지, 중지, 숨기기 를 위반하게 됩니다. 현재는 사이트 작성자가 이를 제어할 수 없습니다.

이로 인해 사용자가 이러한 애니메이션을 제어하고자 하는 요구가 생깁니다. 그러나 사용의 다양성 때문에, 다양한 사용 사례와 원하는 UI, 사용자 경험이 존재하므로, 이를 자동 기능 또는 선택 기능의 사용자 에이전트 설정만으로는 충분하지 않습니다.

최상의 사용자 경험을 제공하기 위해, 웹사이트는 애니메이션 이미지의 각기 다른 사용에 대해 각각 재생 경험을 제어해야 합니다.

이 명세는 작성자가 애니메이션을 제어하고, 이 제어나 관련 UI를 원하는 요소에 할당할 수 있도록 CSS 속성(image-animation) 및 의사 클래스(:animated-image) 를 제안합니다.

동기와 고려된 대안에 대해 더 탐구하고자 한다면, 별도로 유지되는 설명서발표자료 도 참고하세요.

이 명세는 사용자 에이전트가 사용자를 위해 이미지 애니메이션을 전체적으로 제어하는 설정, 예를 들면 모든 애니메이션 이미지정적 이미지로 전환하는 옵션 제공을 배제하지 않습니다.

2. 이미지 애니메이션 제어: image-animation 속성

이름: image-animation
값: normal | paused | stopped | running
초깃값: normal
적용 대상: 콘텐츠 이미지장식 이미지가 있는 요소
상속: yes
백분율: n/a
계산값: as specified
정규 순서: per grammar
애니메이션 타입: discrete

이 속성은 작성자가 애니메이션 이미지가 애니메이션 상태로 표시될지, 일시정지될지 제어할 수 있게 합니다.

콘텐츠 이미지장식 이미지 모두 이 속성의 영향을 받습니다. 한 요소에 여러 장식 이미지 (예: 여러 배경 이미지나 테두리 이미지)가 있거나, 하나의 콘텐츠 이미지와 하나 이상의 장식 이미지가 있을 경우, 해당 요소의 이 속성 계산값이 모두에 영향을 미칩니다.

참고: 따라서 한 요소의 장식 이미지는 일시정지하고 같은 요소의 콘텐츠 이미지는 애니메이션이 실행되도록 하거나, 그 반대로 하는 것은 불가능합니다.

비애니메이션 이미지의 경우, 이 속성의 값은 아무런 영향을 주지 않습니다. 이 속성은 비디오프로그래밍 이미지에는 영향을 주지 않습니다.

이 속성이 루트 요소에 적용되면, 배경 장식 이미지에 대한 효과가 캔버스 배경까지 전파됩니다.

참고: 레거시 이유로, background 속성은 루트 요소 뿐 아니라, HTML body 요소로부터도 전파됩니다. 하지만 image-animation 같은 최신 속성은 오직 루트 요소에만 전파됩니다. 이를 body 에 설정해도 전파되지 않으며, 그곳에 background가 설정되어 있어도 마찬가지입니다.

normal
애니메이션 이미지의 애니메이션은 이미지 포맷과 호스트 언어에 따라 정상적으로 실행됩니다.

또한, 동일한 애니메이션 이미지 (동일한 절대 URL, 동일한 이미지 데이터, image-animation 계산값이 normal) 은 그룹으로서 동일한 타임라인에 동기화되어 렌더링되어야 하며, 그 타임라인은 가장 오래전에 그룹에 추가된 시점에 시작합니다.

참고: 위의 요구조건은 [HTML]의 렌더 기대치에 기반하며, HTML § 15.4.2 Images 에 정의되어 있습니다. [HTML]이 일반적으로 문서를 특정 방식으로 렌더링하는 것을 요구하지 않으므로 이 동작을 규범적으로 요구하지는 않고, 이 명세가 이를 요구합니다.

stopped
애니메이션 이미지정적 이미지처럼 렌더링됩니다: 사용자 에이전트는 그 안의 어떤 애니메이션도 실행하면 안 됩니다. 만약 이미지에 커버 프레임이 있다면, 그걸 사용해야 하며, 아니라면 애니메이션의 초기 상태로 이미지를 표시해야 합니다.
paused
사용자 에이전트는 애니메이션 이미지에 포함된 애니메이션을 실행하지 않고, 이 값이 적용되는 시점에 표시 중이던 상태로 이미지를 유지하여, 사실상 애니메이션을 일시정지시킵니다.

이 값 적용 전에 애니메이션이 재생 중이 아니었다면, 동작은 stopped와 같습니다.

running
normal과 마찬가지로, 애니메이션 이미지의 애니메이션이 정상적으로 실행됩니다.

하지만, 애니메이션 타임라인은 요소 기준으로 범위가 한정됩니다: 한 요소의 콘텐츠 이미지장식 이미지 간에, 동일한 절대 URL, 이미지 데이터, image-animation 계산값이 running애니메이션 이미지끼리는 하나의 그룹으로 동일 타임라인에 동기화되어야 하며, 다른 요소와는 분리된 타임라인이어야 합니다.

계산값이 running일 때 요소에 이미지가 추가되면, 타임라인은 가장 오래전에 추가된 시점에 시작합니다.

요소가 이미지를 가진 채 생성되거나 이전에 display: none이었다가 보이게 되며, image-animation이 이미 running이었다면, 타임라인은 요소가 레이아웃에 포함될 때 시작합니다.

다른 값에서 running으로 전환된다면, 이 타임라인의 시작점은 전환 시점에 표시된 상태로부터 이어지도록 설정됩니다.

작성자는 prefers-reduced-motion 미디어 특성으로 표시된 사용자 선호에 따라 필수적이지 않은 이미지 애니메이션을 억제할 수 있습니다. 여기서는 장식 이미지정적이 되고, img 요소는 계속 애니메이션 상태를 유지합니다.
:root { /* 상속에 의해 문서 전체 전파 */
  image-animation: paused;
}
img {
  image-animation: normal;
}
한 HTML 페이지에 img 요소 여러 개가 있고, 동일 이미지(동일 절대 URL, 동일 이미지 데이터)를 표시하며, 모두 image-animation: normal 스타일이 적용되어 있다고 가정합니다.

이 중 한 요소의 image-animation 속성이 일시적으로 paused로 바뀌면, 해당 요소의 이미지만 애니메이션이 멈추고, 다른 이미지는 영향을 받지 않아 계속 애니메이션됩니다.

나중에 그 image-animation 속성이 running으로 바뀌면, 이 이미지는 다시 애니메이션을 시작하지만, 타 타임라인 위치와 관계 없이, 이제 동기화에서 벗어납니다.

더 나중에는, 해당 요소의 image-animation 속성이 normal로 변경됩니다. 그 시점에는, 다시 이 이미지의 애니메이션이 다른 인스턴스들과 동기화되어 렌더링됩니다.

image-animation 속성은 래스터 이미지 형식뿐만 아니라, 벡터 이미지(예: SVG([SVG2] 참고)) 에도 적용됩니다. 단, 이는 콘텐츠 이미지장식 이미지로 로드된 별개의 SVG 리소스일 때만 해당합니다. HTML 문서에 인라인된 svg 요소엔 해당되지 않습니다. (하지만 svg 요소에 설정하면 상속되어, SVG 내부에서 애니메이션 콘텐츠 이미지 (image 요소로 삽입) 에도 영향을 줍니다.)

3. 애니메이션 이미지 구분: :animated-image 의사 클래스

:animated-image 의사 클래스는 콘텐츠 이미지 요소 중 애니메이션 이미지가 로드된 요소를 나타냅니다. animated-image 의사 클래스가 일치하려면, 이미지는 단지 애니메이션이 가능한 형식이어야 하는 것뿐 아니라, 실제로 애니메이션 이미지여야 합니다.

콘텐츠 이미지를 나타내지 않는 요소에서는, animated-image 의사 클래스가 절대 일치하지 않습니다.

이 의사 클래스는 작성자가 일시정지된 이미지를 사용자가 재생할 수 있도록 하는 일부 사용자 인터페이스를 선택적으로 제공하는 데 사용할 수 있습니다.

이 단순한 예시에서는, 애니메이션이 가능한 이미지는 처음에 일시정지되며, 흐릿하고 회색으로 보이도록 필터가 적용됩니다. 이미지에 마우스를 올리거나(hover) 포커스하면, 필터가 제거되고 이미지가 재생되도록 허용됩니다.

img:animated-image {
  image-animation: paused;
  filter: grayscale(10%) contrast(50%) brightness(80%);
}
img:animated-image:hover,
img:animated-image:focus {
  filter: none;
  image-animation: running;
}
이미지의 애니메이션을 제어하는 UI를 구축하는 작성자는 키보드 사용자의 요구를 고려하는 것이 중요하며, 상호작용이 오로지 마우스 상호작용에만 의존하도록 만들지 말아야 합니다.
위 예시에서, 재생은 이미지에 마우스를 올릴 때뿐 아니라 포커스할 때도 트리거됩니다. 이를 완전히 기능하게 하려면, 애니메이션이 가능한 이미지를 포커스 가능하게 만들어야 합니다. 이는 다음과 같은 코드 조각으로 구현할 수 있습니다.
function setImageFocusability(event) {
  var img = event.target;
  if (img.matches(":animated-image") {
    img.tabIndex = 0;
  } else {
    img.removeAttribute("tabindex");
  }
}
document.querySelectorAll("img").forEach( (i) => {
  setImageFocusability({target: i });
  i.addEventListener('load', setImageFocusability);
  i.addEventListener('error', setImageFocusability);
});

:animated-image가 일치하는지는 이미지의 현재 재생 상태에도, image-animation 속성 값에도 영향을 받지 않습니다. 하지만 어떤 사용자 에이전트 설정이 전역적으로 이미지 애니메이션을 비활성화한 경우, 그렇지 않았다면 애니메이션이 가능했을 이미지조차도 정적 이미지로 간주되며, 일치하지 않습니다.

4. 용어

정적 이미지
단일 프레임이 최종 시청 경험으로 표시되도록 의도된 이미지입니다.

JPEG 이미지는 정적 이미지입니다.

애니메이션 이미지
여러 프레임이 최종 시청 경험의 일부로 순차적으로 표시되도록 의도된 이미지이며, 반복(loop)될 수도 있고 아닐 수도 있습니다.

애니메이션 PNG 이미지나, 애니메이션 [GIF] 이미지는 애니메이션 이미지입니다.

점진적 렌더링(progressive rendering) 또는 다중 패스 로딩(multi-pass loading)을 지원한다고 해서 이미지가 애니메이션으로 분류되는 것은 아닙니다.

콘텐츠 이미지
호스트 언어의 요소 중 정적 이미지 또는 애니메이션 이미지를 나타내는 요소이며, 비디오프로그래밍 방식 이미지는 제외합니다.

[HTML]img 요소(또는 picture 요소 안에 중첩된 경우 포함), [HTML]object 요소(이미지를 표현하는 경우), 또는 [SVG2]image 요소는 콘텐츠 이미지를 나타냅니다.

(그리고 오직 그 경우에만) 자신의 포스터 프레임을 표현하는 경우, HTML video 요소는 콘텐츠 이미지로 간주됩니다.

장식 이미지
CSS를 통해 문서 렌더링에 삽입되는 이미지로, 예: background-image 또는 border-image 같은 속성을 통해 삽입됩니다.
비디오

호스트 언어의 요소 중 움직이는 그림을 나타내는 요소로, 보통(반드시 그런 것은 아니지만) 소리를 동반하며, 보통(반드시 그런 것은 아니지만) 재생/일시정지/탐색/볼륨 제어/전체 화면 표시 등의 상호작용 컨트롤과 함께 제공되고, (반드시 그런 것은 아니지만) 캡션이나 자막을 동반할 수 있습니다.

참고: 개념적 관점에서, 그리고 오직 파일 형식만을 기준으로 보면, 비디오애니메이션 이미지는 상당히 겹치며, 원칙적으로 반드시 서로 구분될 수 있는 것은 아닙니다. 여기서의 구분은 문서에서 요소 선택으로 표현되는 작성자의 의도에 기반합니다.

[HTML]video 요소는 비디오를 나타냅니다.

사용자 에이전트가 두 사용 방식 모두를 지원한다고 가정하면, 같은 video/mp4 파일이라도 video 요소로 제시되면 비디오로 간주되고, CSS background-image로 사용되면 장식 이미지로 간주됩니다.
프로그래밍 방식 이미지
외부 리소스에서 로드되는 이미지가 아니라, 호스트 언어의 API를 통해 프로그래밍 방식으로 생성되는 이미지입니다.

[HTML]canvas 요소는 프로그래밍 방식 이미지를 나타냅니다.

커버 프레임
일부 애니메이션 이미지 형식은 이미지 제작자가 애니메이션이 실행되지 않을 때 표시할 정적 이미지를 지정할 수 있게 합니다. 이 문서에서는 이를 커버 프레임이라고 부르며, 애니메이션의 초기 상태와는 구별되게 애니메이션이 실행되지 않을 때 표시됩니다.

5. 접근성 고려사항

이 절은 비규범적입니다.

6. 개인정보 보호 고려사항

이 절은 비규범적입니다.

image-animation 속성은 이미지가 실제로 애니메이션 가능한지 여부에 대한 어떤 정보도 누설하지 않으면서, 교차 출처(cross origin) 이미지 애니메이션을 제어할 수 있게 합니다. 계산값은 이 정보에 따라 바뀌지 않습니다. running 값은 애니메이션 이미지정적 이미지에서 눈에 보이는 효과 차이가 있지만, 이러한 차이는 페이지 자체에서 관찰될 수 있는 것은 아닙니다.

하지만 :animated-image 의사 클래스는 콘텐츠 이미지애니메이션인지 정적인지 여부를 드러내는데, 이는 교차 출처 상황에서 페이지가 달리 알 수 없었던 정보입니다. 이를 CORS로 제한할 수도 있지만, 이 명세는 다음 이유로 그러한 제한을 두지 않기로 했습니다:

7. 보안 고려사항

이 절은 비규범적입니다.

이 명세가 새로운 보안 문제를 도입하는 것으로 알려진 바는 없습니다.

적합성

문서 규약

적합성 요구사항은 설명적 단언과 RFC 2119 용어를 결합하여 표현된다. 규범적인 부분에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 등의 핵심 단어는 RFC 2119에서 설명하는 대로 해석되어야 한다. 다만 읽기 편하게 하기 위해, 본 명세서에서 이 단어들은 모두 대문자로 표기되진 않는다.

명세서의 모든 본문 내용은 명시적으로 비규범(예시, 참고)으로 표시된 부분을 제외하면 모두 규범적이다. [RFC2119]

이 명세의 예시는 “for example”이라는 단어로 시작하거나, class="example"과 같이 규범적인 본문과 구분된다.

이것은 정보 제공 목적의 예시입니다.

설명 노트는 “Note”라는 단어로 시작하며, class="note"로 규범 본문과 구분됩니다.

Note, 이것은 참고 노트입니다.

주의(Advisement) 문단은 특별한 주의를 환기시키게 스타일링된 규범 섹션이며, <strong class="advisement">로 구분됩니다. 예시: UA는 접근 가능한 대안을 반드시 제공해야 한다.

적합성 클래스

이 명세의 적합성은 세 가지 적합성 클래스에 대해 정의된다:

스타일 시트
CSS 스타일 시트.
렌더러
UA는 스타일 시트의 의미를 해석하고 이를 활용하는 문서를 렌더링한다.
제작 도구
UA는 스타일 시트를 작성한다.

이 모듈에 정의된 문법을 사용하는 스타일 시트의 모든 구문이 일반 CSS 문법이나 이 모듈에서 정의된 각 기능의 개별 문법에 따라 유효하다면 해당 스타일 시트는 이 명세에 적합하다.

렌더러는 본 명세서를 통해 정의된 스타일 시트를 해석하고, 명세서에 정의된 모든 기능을 정확하게 파싱하여 문서를 그에 맞게 출력하면 이 명세에 적합하다. 만약 디바이스의 한계로 인해 UA가 문서를 제대로 출력할 수 없을 경우, UA가 비적합한 것으로 간주하지 않는다. (예: UA가 흑백 모니터에서 색상을 렌더링할 필요는 없다.)

제작 도구는 스타일 시트가 일반 CSS 문법/이 모듈 내 각 기능의 개별 문법에 맞게 구문이 올바르며, 이 모듈에 서술된 모든 적합성 요건도 충족하면 본 명세에 적합하다.

부분 구현

작성자가 하위 호환 파싱 규칙을 활용하여 폴백 값을 지정할 수 있도록, CSS 렌더러는 지원 불가 레벨의 at-규칙, 속성, 값, 키워드, 기타 문법 구조는 반드시 무효로 처리하고 (해당 시 무시) 해야 한다. 특히, UA는 미지원 구성요소만 무시하고 지원되는 값은 남기는 식으로 단일 다중-값 속성 선언을 부분 수용해서는 안 된다: 어느 값이든 무효(미지원 값은 반드시 무효임)라면, CSS는 전체 선언을 무시하도록 한다.

불안정·독점 기능의 구현

향후의 안정된 CSS 기능과 충돌을 피하기 위해, CSSWG는 우수 사례 를 따르며 불안정 기능 및 독점 확장의 구현을 권고한다.

비실험적 구현

명세가 Candidate Recommendation 단계에 이르면, 비실험적 구현이 가능해지며, 구현자는 명세에 따라 올바로 구현함을 증명할 수 있는 모든 CR-수준 기능을 접두사 없는(표준) 구현으로 릴리스해야 한다.

CSS의 상호 운용성을 수립 및 유지하기 위해, CSS 워킹 그룹은 비실험적 CSS 렌더러가 구현 보고서(및 필요시 해당 테스트케이스)를 제출할 것을 W3C에 요청한다. 이때 표준기능 비접두사 구현을 공개하기 전에 제출해야 한다. 제출된 테스트케이스는 CSS 워킹 그룹에서 검토 및 수정이 이뤄질 수 있다.

테스트케이스 및 구현보고서 제출 관련 자세한 정보는 CSS 워킹 그룹 홈페이지 https://www.w3.org/Style/CSS/Test/ 에서 확인할 수 있다. 문의사항은 public-css-testsuite@w3.org 메일링 리스트로 보내면 된다.

색인

이 명세에서 정의된 용어

참조 명세에서 정의된 용어

참고문헌

규범적 참고문헌

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2024년 3월 11일. CRD. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022년 1월 13일. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 2025년 11월 6일. WD. URL: https://www.w3.org/TR/css-display-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024년 3월 12일. WD. URL: https://www.w3.org/TR/css-values-4/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/

유익한 참고문헌

[GIF]
Graphics Interchange Format. 1990년 7월 31일. URL: https://www.w3.org/Graphics/GIF/spec-gif89a.txt
[IMAGE-ANIMATION-EXPLAINER]
Florian Rivoal; Lea Verou. CSS Image Animation Explainer. URL: https://drafts.csswg.org/css-image-animation-1/explainer
[IMAGE-ANIMATION-TALK]
Lea Verou; Florian Rivoal. We need to be able to control Image Animation on the Web Platform!. URL: https://github.com/webplatformco/project-image-animation/tree/main/image-animation-property
[MEDIAQUERIES-5]
Tab Atkins Jr.; et al. Media Queries Level 5. 2026년 2월 19일. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[PNG]
Chris Lilley; et al. Portable Network Graphics (PNG) Specification (Third Edition). 2025년 6월 24일. REC. URL: https://www.w3.org/TR/png-3/
[WCAG22]
Michael Cooper; et al. Web Content Accessibility Guidelines (WCAG) 2.2. 2024년 12월 12일. REC. URL: https://www.w3.org/TR/WCAG22/
[WebP]
J. Zern; P. Massimino; J. Alakuijala. WebP Image Format. 2024년 11월. Informational. URL: https://www.rfc-editor.org/rfc/rfc9649

속성 색인

이름 초깃값 적용 대상 상속 %단위 애니메이션 유형 정규 순서 계산값
image-animation normal | paused | stopped | running normal content images 및 장식 이미지가 있는 요소 yes n/a discrete per grammar as specified