CSS 트랜지션 레벨 2

W3C 최초 공개 작업 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2023/WD-css-transitions-2-20230905/
최신 게시 버전:
https://www.w3.org/TR/css-transitions-2/
에디터스 드래프트:
https://drafts.csswg.org/css-transitions-2/
히스토리:
https://www.w3.org/standards/history/css-transitions-2
피드백:
CSSWG 이슈 저장소
모든 레벨의 Bugzilla 버그
명세 내 인라인
에디터:
L. David Baron (Google)
(초청 전문가)
이 명세에 대한 편집 제안:
GitHub 에디터

요약

CSS 트랜지션은 CSS 값의 속성 변경이 지정된 시간 동안 부드럽게 진행될 수 있도록 합니다.

CSS는 구조화된 문서(HTML, XML 등)의 렌더링을 화면, 종이 등에서 기술하는 언어입니다.

이 문서의 상태

이 섹션은 문서가 출판될 당시의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인 https://www.w3.org/TR/에서 확인할 수 있습니다.

이 문서는 CSS 워킹 그룹에서 최초 공개 작업 초안으로 권고 트랙을 사용하여 발행되었습니다. 최초 공개 작업 초안으로 발행된 것은 W3C 및 회원들의 승인 또는 지지를 의미하지 않습니다.

이 문서는 초안이며 언제든지 업데이트되거나 대체되거나 폐기될 수 있습니다. 진행 중인 작업 외의 용도로 이 문서를 인용하는 것은 부적절합니다.

피드백은 GitHub에 이슈를 등록하여 보내주세요(권장). 제목에 명세 코드 "css-transitions"을 포함하여 다음과 같이 남겨주세요: “[css-transitions] …의견 요약…”. 모든 이슈와 코멘트는 아카이브됩니다. 또는, 피드백은 (아카이브됨) 공개 메일링 리스트 www-style@w3.org로 보낼 수 있습니다.

이 문서는 2023년 6월 12일 W3C 프로세스 문서의 적용을 받습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹의 산출물과 관련해 공개된 특허 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 개별적으로 특허의 존재를 알고 있고 해당 특허가 필수 청구항을 포함한다고 판단하는 경우, W3C 특허 정책 6항에 따라 정보를 공개해야 합니다.

1. 델타 명세

이 문서는 델타 명세로, 현재는 CSS Transitions Level 1 [CSS-TRANSITIONS-1]과의 차이점만 포함하고 있습니다. Level 1 명세가 완성에 가까워지면, 여기의 추가사항과 병합되어 완전한 레벨 2 명세가 될 예정입니다.

2. 트랜지션

2.1. transition-property 속성

CSS Transitions § 2.1 The transition-property Property의 텍스트를 삽입하고 다음 단락을 백포트하세요.

transition-property 속성은 단축 속성과 all 키워드를 지정할 수 있지만, 각각의 트랜지션 가능 장황 서브 속성마다 개별 트랜지션이 생성됩니다. 트랜지션의 확장된 트랜지션 속성명은 트랜지션이 생성된 장황 서브 속성의 이름입니다 (예: border-left-width).

transitionable의 정의 인스턴스가 Level 1에서 포팅되면 업데이트하세요.

CSS Transitions Level 2에서는, 주어진 속성의 변경 전 스타일변경 후 스타일을 비교할 때, 속성 값이 다음 조건을 만족하면 트랜지션 가능입니다:

  1. 애니메이션 타입애니메이션 불가 또는 불연속이 아닌 경우, 또는
  2. transition-behaviorallow-discrete이고, 애니메이션 타입불연속인 경우.

참고: 불연속 애니메이션 타입 값을 트랜지션하면, 50% 진행 시 값이 전환됩니다.

2.2. transition-duration 속성

transition-duration 속성은 트랜지션과 연결된 반복 시간을 지정합니다(애니메이션 효과).

2.3. transition-timing-function 속성

transition-timing-function 속성은 트랜지션과 연결된 타이밍 함수를 지정합니다(애니메이션 효과, Web Animations § 4.10 시간 변환 참고).

참고: CSS 애니메이션과 달리, CSS 트랜지션의 타이밍 함수는 개별 키프레임이 아니라 애니메이션 효과에 적용됩니다. 이를 통해 변환된 진행률 계산 시 반전 단축 계수에 반영할 수 있습니다.

2.4. transition-delay 속성

transition-delay 속성은 트랜지션과 연결된 시작 지연을 지정합니다(애니메이션 효과).

2.5. transition-behavior 속성

transition-behavior 속성은 불연속 속성에 대해 트랜지션이 시작될지 여부를 지정합니다.

이름: transition-behavior
값: <transition-behavior-value>#
초깃값: normal
적용 대상: 모든 요소
상속: 아니오
백분율: 해당 없음
계산된 값: 지정된 대로
정식 순서: 문법에 따라
애니메이션 타입: 애니메이션 불가

transition-behavior 지정 문법은 다음과 같습니다:

<transition-behavior-value> = normal | allow-discrete

normal이 지정되면, 불연속 속성에 대해 트랜지션이 시작되지 않고, 인터폴레이션 가능한 속성에만 적용됩니다. allow-discrete가 지정되면, 불연속 속성과 인터폴레이션 가능한 속성 모두에 트랜지션이 시작됩니다.

2.6. transition 단축 속성

transition 단축 속성의 항목 지정 문법은 다음과 같습니다:

<single-transition> = [ none | <single-transition-property> ] || <time> || <easing-function> || <time> || <transition-behavior-value>

3. 트랜지션 시작

owning element는 트랜지션의 transition-property 속성이 적용되어 애니메이션이 생성된 요소 또는 의사 요소를 의미합니다. 트랜지션은 owning element와 연결이 끊길 수 있으며, 이 경우 owning element가 없습니다.

실행 중인 트랜지션 집합에는 owning element가 있는 트랜지션만 포함됩니다.

구현에서 트랜지션 취소가 요구될 때, 해당 트랜지션을 owning element와 분리하고, 애니메이션 취소 절차를 실행해야 합니다.

Level 1 명세에서 명확히 정의되진 않았지만, 취소가 필요하다고 명시된 요소가 더 이상 연결되어 있지 않은 경우 외에도, 구현체는 취소가 필요한 요소가 더 이상 렌더링 중이 아닌 경우 실행 중인 트랜지션도 취소하고, 해당 트랜지션을 완료된 트랜지션 집합에서 제거해야 합니다.

cancel() 메서드를 CSSTransition 객체(실행 중인 트랜지션을 나타냄)에서 호출해도 해당 트랜지션이 owning element와 분리되지는 않습니다.

3.1. 중단된 트랜지션의 빠른 반전

트랜지션과 연관된 반전 단축 계수반전-조정 시작 값은 올바른 반전 동작을 위해 트랜지션 자체에 연결되어 있으며, 예를 들어 애니메이션 효과에는 연결되지 않습니다. 따라서, 트랜지션은 반전된 트랜지션을 생성할 때에도 동일한 값을 사용하며, 트랜지션과 연결된 애니메이션 효과가 Web Animations API [WEB-ANIMATIONS]로 업데이트되거나 대체되더라도 변하지 않습니다.

3.2. 현재 트랜지션 세대

각 최상위 브라우징 컨텍스트에는 현재 트랜지션 세대가 연결되어 있으며, 이는 각 스타일 변경 이벤트 발생 시 증가합니다.

새로운 트랜지션이 생성될 때마다, 이미 증가된 현재 트랜지션 세대의 값을 해당 트랜지션의 트랜지션 세대로 저장합니다.

3.3. 변경 전 스타일 정의: @starting-style 규칙

이 명세의 Level 1에서는, 트랜지션은 스타일 변경 이벤트 도중에만 시작할 수 있으며, 이전 스타일 변경 이벤트에서 정의된 변경 전 스타일이 존재하는 요소에만 적용됩니다. 즉, 이전 스타일 변경 이벤트에서 렌더링되지 않았던 요소에는 트랜지션이 시작될 수 없습니다 (CSS Transitions § 3 트랜지션 시작 참고).

때때로 새로 삽입된 요소나 렌더링되지 않음에서 렌더링됨으로 변경되는 요소에도 트랜지션을 시작하는 것이 합리적입니다. 이를 위해 이 명세에서는 @starting-style을 도입합니다.

@starting-style 규칙은 그룹화 규칙입니다. 내부의 스타일 규칙들은 이전 스타일 변경 이벤트에서 해당 요소의 변경 전 스타일이 정의되지 않은 경우, 트랜지션의 시작점이 되는 스타일을 지정합니다.

참고: @starting-style 규칙은 계산된 스타일 갱신 동안 이전 스타일 변경 이벤트에 렌더링되지 않았거나 DOM에 없었던 일부 요소에만 적용됩니다.

요소의 시작 스타일변경 후 스타일@starting-style 규칙을 추가 적용한 것입니다. 주어진 스타일 변경 이벤트에 대해 요소에 변경 전 스타일이 없다면, 변경 전 스타일 대신 시작 스타일변경 후 스타일과 비교하여 트랜지션을 시작합니다 (CSS Transitions § 3 트랜지션 시작 참고).

@starting-style 내부의 규칙은 다른 그룹화 스타일 규칙과 마찬가지로 캐스케이드되며, 새로운 순서를 도입하지 않습니다. 즉, @starting-style 내부 규칙이 외부 규칙보다 반드시 우선하지는 않습니다.

@starting-style 내부의 스타일 규칙은 변경 후 스타일에는 적용되지 않습니다. 따라서, @starting-style에서 일치하는 규칙이 있으면, 해당 요소에 변경 전 스타일이 없어도 트랜지션이 발생할 수 있습니다.

시작 스타일은 부모의 변경 후 스타일로부터 변경 후 스타일과 동일하게 상속됩니다.

h1 요소의 background-color는 처음 렌더링될 때 투명에서 초록색으로 트랜지션시킬 수 있습니다:

h1 {
  transition: background-color 1.5s;
  background-color: green;
}
@starting-style {
  h1 {
    background-color: transparent;
  }
}

조건부 규칙은 CSS 중첩(Nesting)과 함께 사용할 수 있습니다:

h1 {
  transition: background-color 1.5s;
  background-color: green;
  @starting-style {
    background-color: transparent;
  }
}
요소의 opacity는 요소가 display: none으로 변경될 때 또는 그 반대일 때 트랜지션할 수 있습니다:
#target {
  transition-property: opacity, display;
  transition-duration: 0.5s;
  display: block;
  opacity: 1;
  @starting-style {
    opacity: 0;
  }
}
#target.hidden {
  display: none;
  opacity: 0;
}

display가 트랜지션되어 opacity 트랜지션이 먼저 발생한 뒤 display:block에서 display:none으로 전환됩니다.

opacity: 0@starting-style 규칙에 지정하면, 해당 요소가 트리에 삽입되거나 hidden 클래스가 displaynone에서 block으로 전환할 때, 대상 요소에 변경 전 스타일이 없는 경우 opacity가 0에서 1로 트랜지션됩니다.

opacity: 0#target.hidden 규칙에 지정하면 opacity1에서 0으로 트랜지션됩니다(hidden 클래스 추가 시).

전역 이름 정의 at-rule(@keyframes, @font-face, @layer 등)은 @starting-style 내부에 포함될 수 있으며, 이 경우 @starting-style 외부에 있을 때와 동일하게 동작합니다.

3.3.1. CSSStartingStyleRule 인터페이스

CSSStartingStyleRule 인터페이스는 @starting-style 규칙을 나타냅니다.

[Exposed=Window]
interface CSSStartingStyleRule : CSSGroupingRule {
};

4. 트랜지션 적용

4.1. 애니메이션 합성 순서

이 명세에서 정의된 마크업으로 생성된 애니메이션은 ‘CSS Transition’ 애니메이션 클래스를 가집니다.

CSS 트랜지션은 CSS 애니메이션 및 특정 애니메이션 클래스가 없는 애니메이션보다 더 빠른 합성 순서를 갖습니다.

CSS 트랜지션 집합 내에서 두 애니메이션 AB는 다음과 같이 합성 순서(앞에서 뒤로)로 정렬됩니다:

  1. AB 모두 owning element가 없는 경우, 글로벌 애니메이션 리스트에서 상대적인 위치로 정렬합니다.

  2. 한쪽만 owning element가 있는 경우, owning element있는 애니메이션을 먼저 정렬합니다.

  3. owning element가 서로 다른 경우, AB는 각 owning elements트리 순서로 정렬합니다. 의사 요소에 대해서는 다음과 같은 정렬 순서를 따릅니다:

    • 요소

    • ::marker

    • ::before

    • 이 목록에 명시되지 않은 기타 의사 요소는 각 선택자를 구성하는 유니코드 코드포인트 오름차순으로 정렬

    • ::after

    • 요소 자식

  4. AB가 서로 다른 트랜지션 세대 값을 가지는 경우, 각 트랜지션 세대의 오름차순으로 정렬합니다.

  5. 그 외에는, AB를 각 트랜지션의 확장된 트랜지션 속성명을 구성하는 유니코드 코드포인트의 오름차순으로 정렬합니다 (즉, 대소문자 변환 없이 ‘-moz-column-width’가 ‘column-width’보다 먼저 정렬됨).

이 명세에서 정의된 마크업으로 생성된 트랜지션은 생성 시 글로벌 애니메이션 리스트추가되지 않습니다. 대신, 트랜지션이 대기(play state: idle) 상태를 벗어날 때, owning element와의 연결이 끊긴 첫 순간에 글로벌 애니메이션 리스트에 추가됩니다. owning element와 연결이 끊겼으나 여전히 대기 상태인 트랜지션은 합성 순서가 정의되어 있지 않습니다.

참고, 이 동작은 트랜지션이 owning element와의 연결이 끊기면 항상 대기(play state: idle) 상태로 진입(또는 유지)된다는 사실에 기반합니다.

4.2. 애니메이션 캐스케이드 레벨

애니메이션 클래스가 ‘CSS Transition’인 애니메이션 중 owning element가 있는 애니메이션은 CSS 캐스케이드의 ‘트랜지션 선언’ 레벨에 적용됩니다. 이 명세에서 정의된 마크업으로 생성된 그 외 모든 애니메이션(owning element가 더 이상 없는 애니메이션 포함)은 캐스케이드의 ‘애니메이션 선언’ 레벨에 적용됩니다. (Web Animations § 5.4.5 합성 결과 적용 참고.)

5. 트랜지션 이벤트

5.1. 이벤트 디스패치

참고, 이 내용은 CSS Transitions Level 1 [CSS-TRANSITIONS-1]보다 더 일반적인 이벤트 디스패치 설명입니다. 왜냐하면 Web Animations API [WEB-ANIMATIONS]를 통해 애니메이션 탐색(seek)이나 반전(reverse) 가능성을 고려해야 하기 때문입니다. 또한 Web Animations API를 사용하면 트랜지션 효과를 반복 등 트랜지션에서 일반적으로 사용하지 않는 속성을 가진 완전히 다른 효과로 대체할 수도 있으므로, 이 섹션은 Web Animations 모델의 전체 복잡성을 반영하는 일반 정의를 제공합니다.

트랜지션 이벤트의 target은 트랜지션의 owning element입니다. owning element가 없으면 트랜지션 이벤트는 디스패치되지 않습니다 (단, Web Animations에서 정의된 애니메이션 재생 이벤트는 해당 CSSTransition 객체에서 여전히 디스패치됩니다).

중복 이벤트 발생을 방지하기 위해, 디스패치할 이벤트 집합은 트랜지션의 이전 phase와 현재 상태를 비교하여 결정됩니다.

트랜지션의 transition phase는 최초에는 ‘idle’이며, 매 애니메이션 프레임마다 아래 조건 중 첫 번째로 일치하는 것에 따라 업데이트됩니다:

트랜지션에 연결된 효과(associated effect)가 없는 경우,
트랜지션 phase는 아래 조건 중 첫 번째로 일치하는 것에 따라 결정됩니다:
트랜지션의 미해결(unresolved) 현재 시간(current time)이 있는 경우,
트랜지션 phase는 ‘idle’입니다.
트랜지션의 현재 시간(current time) < 0인 경우,
트랜지션 phase는 ‘before’입니다.
그 외의 경우,
트랜지션 phase는 ‘after’입니다.
트랜지션에 대기 중인 재생 작업(pending play task) 또는 대기 중인 일시 중지 작업(pending pause task)이 있고 이전 phase가 ‘idle’ 또는 ‘pending’인 경우,
트랜지션 phase는 ‘pending’입니다.
그 외의 경우,
트랜지션 phase는 해당 효과의 phase입니다.

각 이벤트의 elapsedTime 계산에는 다음 정의를 사용합니다:

위 식에서 start delay, active duration, current iteration, iteration start, iteration duration은 트랜지션의 연결된 효과의 해당 속성을 의미합니다.

새로운 애니메이션 프레임이 설정될 때마다, 디스패치할 이벤트는 이전 및 현재 transition phase를 아래와 같이 비교하여 결정합니다:

변화 디스패치되는 이벤트 경과 시간 (ms)
idle → pending 또는 before transitionrun interval start
idle → active ٭ transitionrun interval start
transitionstart
idle → after ٭ transitionrun interval start
transitionstart
transitionend interval end
pending 또는 before → active transitionstart interval start
pending 또는 before → after ٭ transitionstart interval start
transitionend interval end
active → after transitionend interval end
active → before transitionend interval start
after → active transitionstart interval end
after → before ٭ transitionstart interval end
transitionend interval start
idle이 아니고 after도 아닌 상태 → idle transitioncancel 애니메이션이 취소되는 순간의 active time (fill mode: both로 계산됨)

٭ 여러 이벤트가 나열된 상태 변화의 경우, 모든 이벤트는 나열된 순서대로 즉시 연속적으로 디스패치됩니다.

위 표 및 절차에서 정의된 경과 시간(elapsed time)은 밀리초 단위이므로, elapsedTime 멤버에 초 단위 값을 할당하려면 1,000으로 나누어야 합니다. (TransitionEvent 객체의 elapsedTime에 할당될 값)

위 상태 전이 차트는, 일시 정지되거나 무한 실행되는 트랜지션을 제외하면 다음 불변성이 보장됨을 의미합니다:

일반적인 이벤트 시퀀스는 다음과 같습니다:

6. DOM 인터페이스

6.1. CSSTransition 인터페이스

[Exposed=Window]
interface CSSTransition : Animation {
  readonly attribute CSSOMString transitionProperty;
};
transitionProperty, 타입 CSSOMString, 읽기 전용

이 트랜지션의 확장된 트랜지션 속성명입니다.

6.2. 대기 중인 스타일 변경에 대한 요구사항

여러 작업이 요소의 계산된 값에 영향을 줄 수 있습니다. 사용자 에이전트는 최적화를 위해 이러한 값의 재계산을 필요할 때까지 연기할 수 있습니다. 그러나 이 명세서에 정의된 프로그래밍 인터페이스의 모든 작업과, 이 명세서에서 정의된 객체를 반환할 수 있는 Web Animations [WEB-ANIMATIONS]에 정의된 작업은 모든 대기 중인 계산값 변경을 완전히 처리한 결과와 일치하는 결과를 반드시 생성해야 합니다.

예를 들어 아래 코드 조각에서, elemopacity 속성의 지정 값이 업데이트될 때, 사용자 에이전트는 opacity 속성의 계산 값을 재계산하는 것을 연기할 수 있습니다.

이 작업이 처음 발생하면, getComputedStyle(elt) 호출 후 반환 결과의 opacity 속성에 접근하면 사용자 에이전트가 opacity 값을 재계산합니다.

그 후 opacity 속성을 두 번째로 업데이트한 뒤, getAnimations() 메서드를 elem에 호출합니다. 이 메서드는 Web Animations에서 정의되며, 이 명세서에서 정의된 CSSTransition 객체를 반환할 수 있습니다. 따라서 이 절의 요구에 따라, 사용자 에이전트는 대기 중인 스타일 변경을 적용해 opacity 속성에 대해 새로운 CSSTransition 을 생성한 후 결과를 반환해야 합니다.

elem.style.transition = 'opacity 100s';
elem.style.opacity = '0';
window.getComputedStyle(elem).opacity; // 0
elem.style.opacity = '1';
elem.getAnimations()[0].transitionProperty // 'opacity'

7. 프라이버시 고려사항

이 명세서에 대해 새롭게 보고된 프라이버시 고려사항은 없습니다.

8. 보안 고려사항

이 명세서에 대해 새롭게 보고된 보안 고려사항은 없습니다.

9. 변경 사항

9.1. Level 1 이후 최초 공개 작업 초안의 변경 사항

10. 이전 레벨에서 자주 제기된 이슈

이 이슈들은 이전 레벨의 명세에서 자주 보고된 이슈입니다.

더 강력한 타이밍 함수 문법은 개발자들이 자주 요청하는 기능입니다. 예시: 2013 메시지 또는 2015 토론 참고.

개발자들은 트랜지션을 강제로 시작시키기 위해 스타일 플러시(style flush)를 자주 트리거해야 합니다. 이런 요구 없이 트랜지션을 시작할 수 있는 API가 있으면 좋겠습니다. 예시: 2011 제안 참고.

11. 이전 레벨에서 연기된 명세 이슈

이 이슈들은 이전 레벨에 있었지만, 이 레벨에서도 중요하지 않을 수 있습니다.

transition-property 속성에 대해 keypath 문법을 궁극적으로 지원할 수도 있습니다. keypath 문법은 속성의 구성 요소마다 서로 다른 트랜지션을 지정할 수 있게 해줍니다. 예를 들어 그림자 블러와 그림자 색상에 서로 다른 트랜지션을 적용할 수 있습니다.

적합성

문서 규칙

적합성 요구사항은 설명적 진술과 RFC 2119 용어의 조합으로 표현됩니다. “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 등은 이 문서의 규범적 부분에서 RFC 2119에서 설명된 대로 해석해야 합니다. 단, 가독성을 위해 이 명세서에서는 항상 대문자로 표기하지 않습니다.

이 명세서의 모든 텍스트는 명시적으로 비규범적임, 예시, 또는 참고로 표시된 섹션을 제외하고는 규범적입니다. [RFC2119]

이 명세서의 예시는 “예를 들어(for example)”로 시작하거나, class="example"와 같이 규범적 텍스트와 구분되어 있습니다:

이것은 정보성 예시입니다.

정보성 참고는 “참고”로 시작하며 class="note"와 같이 규범적 텍스트와 구분됩니다:

참고, 이것은 정보성 참고입니다.

권고(advisement)는 규범적 섹션으로 특별한 주의를 환기하도록 스타일링되며, <strong class="advisement">와 같이 다른 규범적 텍스트와 구분됩니다: UA는 반드시 접근 가능한 대안을 제공해야 합니다.

적합성 클래스

이 명세서에 대한 적합성은 세 가지 적합성 클래스로 정의됩니다:

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

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

렌더러는 스타일 시트를 적합하게 해석할 뿐만 아니라, 이 명세서에서 정의된 모든 기능을 올바르게 파싱하고 문서를 렌더링해야 이 명세서에 적합합니다. 단, 디바이스의 한계로 인해 UA가 문서를 올바르게 렌더링할 수 없는 경우, UA가 비적합하다고 간주하지 않습니다. (예: UA는 흑백 모니터에서 컬러 렌더링을 요구하지 않음)

저작 도구는 이 모듈의 일반 CSS 문법과 각 기능별 개별 문법에 따라 문법적으로 올바른 스타일 시트를 작성하고, 이 모듈에서 설명한 스타일 시트의 모든 적합성 요구사항을 충족하면 이 명세서에 적합합니다.

부분 구현

저자가 미래 호환 파싱 규칙을 활용해 폴백 값을 지정할 수 있도록, CSS 렌더러는 사용 가능한 수준의 지원이 없는 at-rule, 속성, 속성 값, 키워드, 기타 문법 구조를 반드시 무효(적절히 무시)로 처리해야 합니다. 특히, UA는 지원하지 않는 구성 값만 선택적으로 무시하고 지원되는 값만 처리하면 안 됩니다. 다중 값 속성 선언에서 하나의 값이라도 무효(지원하지 않으면 반드시 무효로 간주함)로 판단되면, CSS는 전체 선언을 무시해야 합니다.

불안정 및 독점 기능 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 모범 사례를 따라 불안정 기능 및 독점 확장 CSS 구현을 권장합니다.

비실험적 구현

명세서가 후보 권고(Candidate Recommendation) 단계에 도달하면, 비실험적 구현이 가능하며, 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 CR 수준 기능에 대해 unprefixed 구현을 출시해야 합니다.

CSS 구현 간 상호운용성을 확립 및 유지하기 위해, CSS 워킹 그룹은 비실험적 CSS 렌더러가 어떤 CSS 기능의 unprefixed 구현을 출시하기 전에 구현 보고서(및 필요한 경우 해당 테스트케이스)를 W3C에 제출할 것을 요청합니다. W3C에 제출된 테스트케이스는 CSS 워킹 그룹에서 검토 및 수정될 수 있습니다.

테스트케이스 및 구현 보고서 제출에 대한 추가 정보는 CSS 워킹 그룹 웹사이트 https://www.w3.org/Style/CSS/Test/에서 확인할 수 있습니다. 질문은 public-css-testsuite@w3.org 메일링 리스트로 문의하세요.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[CSS-ANIMATIONS-1]
David Baron; 외. CSS Animations Level 1. 2023년 3월 2일. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2023년 2월 14일. CR. 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-EASING-1]
Brian Birtles; Dean Jackson; Matt Rakow. CSS Easing Functions Level 1. 2023년 2월 13일. CR. URL: https://www.w3.org/TR/css-easing-1/
[CSS-FONTS-5]
Myles Maxfield; Chris Lilley. CSS Fonts Module Level 5. 2021년 12월 21일. WD. URL: https://www.w3.org/TR/css-fonts-5/
[CSS-TRANSITIONS-1]
David Baron; 외. CSS Transitions. 2018년 10월 11일. WD. URL: https://www.w3.org/TR/css-transitions-1/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2023년 4월 6일. WD. URL: https://www.w3.org/TR/css-values-4/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021년 8월 26일. WD. URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; 외. 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
[WEB-ANIMATIONS]
Brian Birtles; 외. Web Animations. 2023년 6월 5일. WD. URL: https://www.w3.org/TR/web-animations-1/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

정보성 참고문헌

[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS Color Module Level 4. 2022년 11월 1일. CR. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023년 3월 30일. CR. URL: https://www.w3.org/TR/css-display-3/
[WEB-ANIMATIONS-2]
Brian Birtles; Robert Flack. Web Animations Level 2. 2023년 2월 21일. WD. URL: https://www.w3.org/TR/web-animations-2/

속성 색인

이름 초깃값 적용 대상 상속 백분율 애니메이션 타입 정식 순서 계산된 값
transition-behavior <transition-behavior-value># normal all elements no N/A not animatable per grammar as specified

IDL 색인

[Exposed=Window]
interface CSSStartingStyleRule : CSSGroupingRule {
};

[Exposed=Window]
interface CSSTransition : Animation {
  readonly attribute CSSOMString transitionProperty;
};

이슈 색인

CSS Transitions § 2.1 The transition-property Property의 텍스트를 삽입하고 다음 단락을 백포트하세요.
Level 1에서 포팅되면 transitionable의 정의 인스턴스를 업데이트하세요.

더 강력한 타이밍 함수 문법은 개발자들이 자주 요청하는 기능입니다. 예시: 2013 메시지 또는 2015 토론 참고.

개발자들은 트랜지션을 강제로 시작시키기 위해 스타일 플러시(style flush)를 자주 트리거해야 합니다. 이런 요구 없이 트랜지션을 시작할 수 있는 API가 있으면 좋겠습니다. 예시: 2011 제안 참고.

transition-property 속성에 대해 keypath 문법을 궁극적으로 지원할 수도 있습니다. keypath 문법은 속성의 구성 요소마다 서로 다른 트랜지션을 지정할 수 있게 해줍니다. 예를 들어 그림자 블러와 그림자 색상에 서로 다른 트랜지션을 적용할 수 있습니다.