CSS 이징 함수 2단계

W3C 최초 공개 작업 초안,

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2024/WD-css-easing-2-20240829/
최신 공개 버전:
https://www.w3.org/TR/css-easing-2/
편집자 초안:
https://drafts.csswg.org/css-easing/
이력:
https://www.w3.org/standards/history/css-easing-2/
구현 보고서:
https://wpt.fyi/results/css/css-easing
피드백:
CSSWG 이슈 저장소
편집자:
(Mozilla)
(Apple Inc)
Tab Atkins Jr. (Google)
Chris Lilley (W3C)
이전 편집자:
Matt Rakow (Microsoft)
(Google)
(Google)
이 사양에 대한 편집 제안:
GitHub 편집자
참여:
IRC: #css (W3C의 IRC)
테스트:
web-platform-tests css/css-easing
테스트 스위트:
https://wpt.fyi/results/css/css-easing/

요약

이 CSS 모듈은 작성자가 어떤 값의 변화 속도를 제어하는 변환을 정의하는 방법을 설명합니다. 애니메이션에 적용하면, 이러한 변환을 통해 모멘텀과 같은 물리적 현상을 모방하거나 애니메이션이 로봇처럼 움직이도록 불연속적인 단계로 이동하게 만들 수 있습니다. 2단계에서는 사용자 정의 이징 곡선을 위한 더 정교한 함수들이 추가되었습니다.

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

이 문서의 상태

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

이 문서는 CSS 작업 그룹에서 최초 공개 작업 초안으로, 권고안 경로를 사용하여 발행되었습니다. 최초 공개 작업 초안으로 발행되었다고 해서 W3C와 그 구성원의 승인이나 지지를 의미하지는 않습니다.

이 문서는 초안이며 언제든지 다른 문서로 업데이트, 교체 또는 폐기될 수 있습니다. 진행 중인 작업이므로 이 문서를 인용하는 것은 적절하지 않습니다.

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

이 문서는 2023년 11월 3일 W3C 프로세스 문서에 따라 관리됩니다.

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

1. 소개

이 섹션은 규범적인 내용이 아닙니다.

어떤 값이 변화하는 속도를 제어하는 것이 바람직한 경우가 많습니다. 예를 들어, 요소가 움직이는 속도를 점차 증가시키면 해당 요소가 모멘텀을 얻는 것처럼 무게감을 줄 수 있습니다. 이는 직관적인 사용자 인터페이스 요소를 만들거나 물리적 실체처럼 동작하는 만화 소품을 설득력 있게 구현할 때 사용할 수 있습니다. 반대로, 애니메이션이 분할된 휠처럼 항상 특정 위치에 세그먼트가 나타나도록 명확한 단계로 앞으로 이동하는 것이 바람직할 때도 있습니다.

이와 같이 그라데이션 보간의 변화율을 제어하면 오목하거나 볼록한 표면을 암시하거나, 줄무늬 효과를 내는 등 다양한 시각적 효과를 만들 수 있습니다.

이징 함수는 입력 진행 값을 받아서 이에 대응하는 변환된 출력 진행 값을 만들어내는 방식으로 이러한 값을 변환할 수 있는 방법을 제공합니다.

ease-in 효과를 내는 이징 함수의 예시.
ease-in 효과를 내는 이징 함수의 예시.
입력 진행 값이 0.7일 때, 이징 함수는 값을 스케일링하여 출력 진행 값 0.52를 만듭니다.
이 이징 함수를 애니메이션에 적용하면 처음에는 느리게 진행되다가 점차 빠르게 진행됩니다.

1.1. 값 정의

이 명세서는 값 정의 구문[CSS-VALUES-3]에서 사용합니다. 이 명세서에서 정의되지 않은 값 타입은 CSS 값 및 단위 [CSS-VALUES-3]에서 정의됩니다. 다른 CSS 모듈과의 조합으로 이러한 값 타입의 정의가 확장될 수 있습니다.

2. 이징 함수

이징 함수입력 진행 값을 받아서 출력 진행 값을 생성합니다.

이징 함수는 반드시 순수 함수여야 하며, 동일한 입력값 세트에 대해 항상 동일한 출력 진행 값을 반환해야 합니다.

입력 진행 값은 [-∞, ∞] 범위의 실수입니다. 일반적으로 입력 진행 값은 [0, 1] 범위이지만, 이징 함수를 연쇄적으로 사용할 때는 그렇지 않을 수 있습니다.

이징 함수를 연쇄적으로 사용하는 예로는 Web Animations [WEB-ANIMATIONS]이 있습니다. 여기서는 애니메이션 효과에 지정된 이징 함수의 출력이 키프레임 효과의 키프레임에 지정된 이징 함수의 입력이 될 수 있습니다. 이 경우, 키프레임 효과의 이징 함수 입력 값이 [0, 1] 범위를 벗어날 수 있습니다.

출력 진행 값은 [-∞, ∞] 범위의 실수입니다.

일부 이징 함수 유형은 추가적으로 불리언 before flag 입력을 받기도 하며, 이는 이후에 정의됩니다.

이 명세는 네 가지 유형의 이징 함수를 정의하며, 그 정의는 아래에 이어집니다.

이징 함수를 지정하는 구문은 다음과 같습니다:

<easing-function> = linear | <linear-easing-function> | <cubic-bezier-easing-function> | <step-easing-function>
테스트

2.1. 선형 이징 함수: linear()

선형 이징 함수이징 함수로서, points 사이를 선형적으로 보간합니다.

선형 이징 함수points, list 형태의 선형 이징 포인트를 가집니다. 처음에는 새로운 빈 list입니다.

선형 이징 포인트struct로 다음을 가집니다:

input

숫자 또는 null

참고: 이 값은 선형 이징 함수를 생성하는 동안에만 null입니다.

output

숫자

2.1.1. 구문

선형 이징 함수의 구문은 다음과 같습니다:

<linear-easing-function> = linear(<linear-stop-list>)
<linear-stop-list> = [ <linear-stop> ]#
<linear-stop> = <number> && <linear-stop-length>?
<linear-stop-length> = <percentage>{1,2}
테스트

linear()선형 이징 함수로 파싱되며, 선형 이징 함수를 생성하는 과정에서 <linear-stop-list>list 형태의 <linear-stop>들로 전달됩니다.

2.1.2. 파싱

선형 이징 함수를 생성하려면 list 형태의 <linear-stop> stopList가 주어졌을 때, 다음을 수행합니다. 이 알고리즘은 선형 이징 함수 또는 실패를 반환합니다.

  1. function을 새로운 선형 이징 함수로 설정합니다.

  2. largestInput을 음의 무한대로 설정합니다.

  3. stopListitem이 두 개 미만이면 실패를 반환합니다.

  4. stop에 대해 stopList에서 반복합니다:

    1. point를 새로운 선형 이징 포인트로 생성하고, outputstop<number> 값으로 설정합니다.

    2. Append pointfunctionpoints에 추가합니다.

    3. stop<linear-stop-length>가 있으면:

      1. pointinput을 다음 중 더 큰 값으로 설정합니다: stop<linear-stop-length>의 첫 번째 <percentage> 값, 또는 largestInput.

      2. largestInputpointinput으로 설정합니다.

      3. stop<linear-stop-length>에 두 번째 <percentage>가 있으면:

        1. extraPoint를 새로운 선형 이징 포인트로 생성하고, outputstop<number> 값으로 설정합니다.

        2. Append extraPointfunctionpoints에 추가합니다.

        3. extraPointinput을 다음 중 더 큰 값으로 설정합니다: stop<linear-stop-length>의 두 번째 <percentage> 값, 또는 largestInput.

        4. largestInputextraPointinput으로 설정합니다.

    4. 그렇지 않고 stopitem 중 첫 번째이면:

      1. pointinput을 0으로 설정합니다.

      2. largestInput을 0으로 설정합니다.

    5. 그렇지 않고 stopitem 중 마지막이면, pointinput을 1 또는 largestInput 중 더 큰 값으로 설정합니다.

  5. functionitem들 중 input이 null인 연속 구간에 대해, input 값을 가장 가까운 앞뒤 points 중 null이 아닌 input 값 사이를 선형 보간하여 할당합니다.

  6. function을 반환합니다.

2.1.3. 직렬화

linear()의 직렬화에는 각 포인트의 입력값이 포함되며, 입력값은 이전 포인트의 입력값보다 작아지는 일이 없습니다.

예시:

linear easing function (linearEasingFunction)의 직렬화된 계산 값을 얻으려면 아래를 수행합니다. 반환값은 문자열입니다.

  1. output을 "linear("로 설정합니다.

  2. pointlinearEasingFunctionpoints에서 반복합니다:

    1. pointitem 중 첫 번째가 아니라면, output에 ", "를 추가합니다.

    2. pointoutput의 계산된 값을 <number>output에 추가합니다.

    3. output에 " "를 추가합니다.

    4. pointinput의 계산된 값을 <percentage>output에 추가합니다.

  3. output에 ")"를 추가합니다.

  4. output을 반환합니다.

2.1.4. 선형 이징 함수의 출력

선형 이징 출력 진행값 계산을 위해 linear easing function linearEasingFunctioninput progress value inputProgress가 주어졌을 때, 다음을 수행합니다. 반환값은 output progress value입니다.

  1. pointslinearEasingFunctionpoints를 할당합니다.

  2. pointAIndexpoints에서 iteminputinputProgress 이하인 마지막 인덱스로 설정합니다. 일치하는 값이 없으면 0으로 설정합니다.

  3. pointAIndexpoints size - 1과 같다면, pointAIndex를 1 감소시킵니다.

    참고: 이렇게 하면 비교할 "다음" 포인트가 항상 존재합니다.

  4. pointApoints[pointAIndex]를 할당합니다.

  5. pointBpoints[pointAIndex + 1]을 할당합니다.

  6. pointAinputpointBinput과 같다면, pointBoutput을 반환합니다.

  7. progressFromPointAinputProgress에서 pointAinput을 뺀 값을 할당합니다.

  8. pointInputRangepointBinput에서 pointAinput을 뺀 값을 할당합니다.

  9. progressBetweenPointsprogressFromPointApointInputRange로 나눈 값을 할당합니다.

  10. pointOutputRangepointBoutput에서 pointAoutput을 뺀 값을 할당합니다.

  11. outputFromLastPointprogressBetweenPointspointOutputRange와 곱한 값을 할당합니다.

  12. pointAoutputoutputFromLastPoint를 더한 값을 반환합니다.

테스트

2.1.5. 예시

linear()는 여러 포인트들 사이를 선형적으로 보간하는 이징 함수를 정의할 수 있습니다.

예를 들어, linear(0, 0.25, 1)은 0에서 0.25, 그리고 1까지 선형적으로 이동하는 이징 함수를 만듭니다:

linear(0, 0.25, 1)을 그래프에 나타낸 예시
기본적으로 "input"이 명시되지 않은 항목들 사이 값은 균등하게 분배됩니다. 입력값은 <percentage>로 지정할 수 있습니다.

예를 들어, linear(0, 0.25 75%, 1)은 다음과 같은 이징 함수를 생성합니다. 전체 시간의 75%를 0에서 .25로, 마지막 25%를 .25에서 1로 변화합니다:

linear(0, 0.25 75%, 1)을 그래프에 나타낸 예시. 세 개의 포인트가 있다. 첫 번째는 0,0. 두 번째는 0.75,0.25. 세 번째는 1,1.
하나의 출력에 두 개의 입력값이 지정되면, 동일한 출력값을 가진 두 포인트가 생성됩니다.

예를 들어, linear(0, 0.25 25% 75%, 1)linear(0, 0.25 25%, 0.25 75%, 1)과 동등하며, 다음과 같은 이징 함수를 만듭니다:

linear(0, 0.25 75%, 1)을 그래프에 나타낸 예시. 네 개의 포인트가 있다. 첫 번째는 0,0. 두 번째는 0.25,0.25. 세 번째는 0.75,0.25. 네 번째는 1,1.
입력이 제공된 범위를 벗어나면, 가장 가까운 두 포인트의 궤적이 계속 이어집니다.

예를 들어, 아래는 이전 함수의 암시적 값들입니다:

linear(0, 0.25 75%, 1)을 그래프에 나타낸 예시. 네 개의 포인트가 있다. 첫 번째는 0,0. 두 번째는 0.25,0.25. 세 번째는 0.75,0.25. 네 번째는 1,1. 그래프의 끝은 가장 가까운 두 선의 각도로 연장된다.
linear()의 대표적인 사용 예는 많은 포인트를 지정하여 곡선 효과를 내는 것입니다.

예를 들어, linear()를 사용해서 재사용 가능한 "bounce" 이징 함수를 만들 수 있습니다:

:root {
  --bounce: linear(
    /* 시작부터 1차 바운스까지 */
    0, 0.063, 0.25, 0.563, 1 36.4%,
    /* 1차 바운스부터 2차 바운스까지 */
    0.812, 0.75, 0.813, 1 72.7%,
    /* 2차 바운스부터 3차 바운스까지 */
    0.953, 0.938, 0.953, 1 90.9%,
    /* 3차 바운스부터 끝까지 */
    0.984, 1 100% 100%
  );
}

.example {
  animation-timing-function: var(--bounce);
}

정의 끝에 1 100% 100%로 두 개의 최종 포인트를 만들어, 입력이 1보다 크더라도 항상 출력값이 1이 됩니다.

거친 bounce 이징의 그래프.

더 느린 애니메이션에서는 더 부드러운 결과를 위해 포인트를 더 많이 추가할 수 있습니다.

2.2. 선형 이징 키워드: linear

linear 키워드는 정체 선형 이징 함수를 생성하며, 출력 진행 값이 모든 입력에 대해 입력 진행 값과 동일합니다.

이는 linear(0, 1)과 동일한 결과를 냅니다.

참고: 이것은 선형 이징 함수를 생성하지만, linear 키워드 사용 시에는 항상 linear로 직렬화됩니다. 반면 함수형 linear(0, 1)linear(0 0%, 1 100%)로 직렬화됩니다. 이 규칙은 직렬화에 정의되어 있습니다.

2.3. 큐빅 베지어 이징 함수: ease, ease-in, ease-out, ease-in-out, cubic-bezier()

큐빅 베지어 이징 함수는 네 개의 실수로 정의되는 이징 함수의 한 종류이며, 이 네 개의 값은 큐빅 베지어 곡선의 두 제어점 P1P2를 지정합니다. 곡선의 시작점 P0와 끝점 P3는 각각 (0, 0)과 (1, 1)으로 고정되어 있습니다. P1P2x 좌표는 [0, 1] 범위로 제한됩니다.

이징 함수로 사용되는 큐빅 베지어 곡선.
이징 함수로 사용되는 큐빅 베지어 곡선.
곡선의 형태는 제어점 P1P2의 위치에 의해 결정됩니다.
입력 진행 값은 곡선의 x 값 역할을 하며, y 값은 출력 진행 값이 됩니다.

큐빅 베지어 이징 함수의 구문은 다음과 같습니다 ([CSS-VALUES-3]의 표기법 사용):

<cubic-bezier-easing-function> = ease | ease-in | ease-out | ease-in-out | cubic-bezier(<number [0,1]>, <number>, <number [0,1]>, <number>)

각 값의 의미는 아래와 같습니다:

ease

cubic-bezier(0.25, 0.1, 0.25, 1)과 동일합니다.

ease-in

cubic-bezier(0.42, 0, 1, 1)과 동일합니다.

ease-out

cubic-bezier(0, 0, 0.58, 1)과 동일합니다.

ease-in-out

cubic-bezier(0.42, 0, 0.58, 1)과 동일합니다.

cubic-bezier(<number [0,1]>, <number>, <number [0,1]>, <number>)

큐빅 베지어 이징 함수를 지정합니다. 네 개의 수는 곡선의 P1, P2를 (x1, y1, x2, y2)로 지정합니다. 두 x 값이 [0, 1] 범위에 있지 않으면 정의는 무효입니다.

위에 나열된 키워드 값의 이징 함수는 아래 그림에서 확인할 수 있습니다.

키워드 값이 생산하는 이징 함수들.
각 큐빅 베지어 이징 함수 키워드 값이 생산하는 이징 함수.

2.3.1. 큐빅 베지어 이징 함수의 출력

입력 진행 값에서 출력 진행 값으로의 매핑은 주어진 x 값(input progress value)에 대한 대응 y 값(output progress value)을 결정하는 방식으로 수행됩니다. 이 곡선의 계산은 [FUND-COMP-GRAPHICS] 등 다양한 문헌에서 다룹니다.

input progress value가 [0, 1] 범위를 벗어나면, 가장 가까운 끝점의 접선 방향으로 곡선이 무한히 연장됩니다. 방법은 다음과 같습니다:

테스트

2.4. 스텝 이징 함수: step-start, step-end, steps()

스텝 이징 함수는 입력 시간을 지정한 개수의 동일 길이 구간으로 나누는 이징 함수의 한 종류입니다. steps 개수와 step position으로 정의됩니다. 구문은 다음과 같습니다:

<step-easing-function> = step-start | step-end | steps(<integer> , <step-position>?)

<step-position> = jump-start | jump-end | jump-none | jump-both | start | end

테스트

각 값의 의미는 아래와 같습니다:

step-start

steps(1, start)로 계산됩니다.

step-end

steps(1, end)로 계산됩니다.

스텝 이징 키워드 예시.
스텝 이징 함수 키워드 값 예시.
steps(<integer>, <step-position>?)

첫 번째 매개변수는 함수의 구간 수를 지정합니다. 0보다 큰 양의 정수여야 하며, 두 번째 매개변수가 jump-none인 경우에는 1보다 큰 양의 정수여야 합니다.

두 번째 매개변수(선택사항)는 step position을 다음 값 중 하나로 지정합니다:

jump-start

첫 번째 상승이 input progress value 0에서 발생합니다.

jump-end

마지막 상승이 input progress value 1에서 발생합니다.

jump-none

모든 상승은 (0, 1) 범위 내에서 발생합니다.

jump-both

첫 번째 상승은 input progress value 0에서, 마지막 상승은 input progress value 1에서 발생합니다.

start

jump-start와 동일하게 동작합니다.

end

jump-end와 동일하게 동작합니다.

두 번째 매개변수를 생략하면 end 값이 기본 적용됩니다.

아래 그림은 각 값의 동작을 보여줍니다:

스텝 이징 함수 예시.
스텝 이징 함수 예시.

2.4.1. 스텝 이징 함수의 출력

스텝이 발생하는 정확한 지점에서 함수 결과는 개념적으로 스텝의 상단입니다. 그러나 before flagstep easing function의 입력값으로 true로 전달되면, 결과는 해당 지점에서 스텝의 하단이 됩니다.

before flag가 이 함수의 동작에 어떻게 영향을 주는지에 대한 예시로, step easing functionstep positionstart이고, 양의 delay와 backwards fill이 있는 애니메이션을 생각해봅시다.

예를 들어, CSS 애니메이션에서:

animation: moveRight 5s 1s steps(5, start);

delay 단계에서는 input progress value가 0이지만, before flag가 애니메이션이 아직 interval에 도달하지 않았음을 나타내면, 이징 함수는 output progress value로 0, 즉 첫 번째 스텝의 하단을 반환합니다.

애니메이션 interval이 시작되는 정확한 순간에 input progress value는 여전히 0이지만, before flag가 설정되지 않으므로 함수의 결과는 첫 번째 스텝의 상단이 됩니다.

output progress value를 계산할 때, step position startjump-start와 동일하게 간주됩니다. 마찬가지로 endjump-end와 동일하게 간주됩니다. 따라서 아래 알고리즘에서는 startend를 명시적으로 참조하지 않습니다.

참고: 사용자 에이전트는 직렬화 목적(see § 2.5 직렬화)에서 jump-startstart를 구분해야 합니다.

output progress valueinput progress valuebefore flag를 아래와 같이 계산합니다:

  1. current stepfloor(input progress value × steps) 로 계산합니다.

  2. step position 속성이 다음 중 하나라면:

    current step을 1 증가시킵니다.

  3. 다음 두 조건이 모두 true라면:

    current step을 1 감소시킵니다.

  4. input progress value ≥ 0 이고 current step < 0이면, current step을 0으로 합니다.

  5. step position에 따라 jumps를 다음과 같이 계산합니다:

    jump-start 또는 jump-end

    steps

    jump-none

    steps - 1

    jump-both

    steps + 1

  6. input progress value ≤ 1 이고 current step > jumps이면, current stepjumps로 합니다.

    이 절차의 4, 6단계는 input progress value가 [0, 1] 범위일 때, 스텝 이징 함수가 그 범위를 벗어난 output progress value를 생성하지 않도록 보장합니다.

    예를 들어, 수학적으로는 step positionjump-start인 스텝 이징 함수가 input progress value가 1일 때 1을 넘어서는 결과를 만들어낼 수 있지만, 직관적으로 그러한 이징 함수를 앞으로 채우는 애니메이션에 적용하면, 애니메이션이 앞으로 채워질 때 output progress value가 1이 되기를 기대합니다.

    비슷하게, step positionjump-end인 스텝 이징 함수도 애니메이션 delay 단계에서 같은 상황이 발생합니다.

  7. output progress valuecurrent step / jumps입니다.

테스트

2.5. 직렬화

이징 함수는 [CSSOM]에 정의된 공통 직렬화 패턴을 사용하며, 다음의 추가 요구 사항이 있습니다:

테스트

프라이버시 고려사항

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

이 명세는 웹 플랫폼에 새로운 기능을 직접 도입하는 것이 아니라, 다른 명세에서 참조할 수 있는 공통 정의를 제공합니다.

보안 고려사항

이 명세에서 정의된 기능을 참조하는 명세는, 이징 함수가 일반적으로 input progress value [0,1] 범위의 값을 받아 output progress value [0, 1] 범위의 값을 생성하지만, 항상 그런 것은 아니라는 점을 고려해야 합니다. 이징 함수의 응용에서는 입력과 출력이 이 범위 바깥일 때의 동작을 정의하여 새로운 보안 고려사항이 발생하지 않도록 해야 합니다.

3. 변경 사항

3.1. 1단계 이후 추가사항

4. 감사의 글

이 명세는 L. David Baron, Dean Jackson, David Hyatt, Chris Marrin이 편집한 CSS Transitions 명세를 기반으로 하였습니다. 편집자들은 Douglas Stockwell, Steve Block, Tab Atkins, Rachel Nabors, Martin Pitt, 그리고 Animation at Work 슬랙 커뮤니티의 피드백과 기여에도 감사를 표합니다.

적합성

문서 규칙

적합성 요구사항은 설명적 단언과 RFC 2119 용어의 조합으로 표현됩니다. 규범적 부분에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 등의 키워드는 RFC 2119에서 설명된 대로 해석해야 합니다. 하지만 읽기 쉽게 하기 위해 이 명세에서는 해당 단어를 모두 대문자로 표기하지 않습니다.

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

이 명세의 예시는 “예를 들어”라는 말로 시작하거나 class="example"로 구분되어 제시됩니다, 예시:

이것은 안내용 예시입니다.

안내용 노트는 “참고”로 시작하며 class="note"로 구분됩니다, 예시:

참고, 이것은 안내용 노트입니다.

권고 사항은 특별히 눈에 띄게 스타일링된 규범 섹션으로, <strong class="advisement">로 구분됩니다, 예시: UA는 반드시 접근 가능한 대안을 제공해야 합니다.

테스트

이 명세의 내용과 관련된 테스트는 이런 “테스트” 블록에 기록될 수 있습니다. 해당 블록은 비규범적입니다.


적합성 클래스

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

스타일 시트
CSS 스타일 시트.
렌더러
UA는 스타일 시트의 의미를 해석하고, 그것을 사용하는 문서를 렌더링합니다.
저작 도구
UA는 스타일 시트를 작성합니다.

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

렌더러가 이 명세에 적합하려면, 스타일 시트를 관련 명세에서 정의한 대로 해석할 뿐만 아니라, 이 명세에서 정의된 모든 기능을 올바르게 파싱하고 문서를 그에 맞게 렌더링해야 합니다. 단, 장치의 한계로 인해 UA가 문서를 올바르게 렌더링하지 못하는 경우, UA는 비적합한 것이 아닙니다. (예: UA는 흑백 모니터에서 색상을 렌더링할 필요가 없습니다.)

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

부분 구현

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

불안정 및 독점 기능 구현

향후 안정적인 CSS 기능과의 충돌을 피하기 위해, CSSWG는 최선의 구현 관행을 따라 불안정한 기능 및 독점 확장을 구현할 것을 권장합니다.

비실험적 구현

명세가 후보 권고 단계에 도달하면, 비실험적 구현이 가능하며, 구현자는 명세에 따라 올바르게 구현되었음을 입증할 수 있는 CR 단계 기능을 접두사 없이 공개해야 합니다.

CSS의 상호운용성을 확립하고 유지하기 위해, CSS 작업 그룹은 비실험적 CSS 렌더러가 W3C에 구현 보고서(필요하다면 해당 구현 보고서에 사용된 테스트케이스도 함께)를 제출한 후 CSS 기능의 접두사 없는 구현을 공개할 것을 요청합니다. W3C에 제출된 테스트케이스는 CSS 작업 그룹의 검토와 수정 대상이 됩니다.

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

색인

이 명세서에서 정의된 용어

참조로 정의된 용어

참고자료

규범적 참고자료

[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 값 및 단위 모듈 3단계. 2024년 3월 22일. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 값 및 단위 모듈 4단계. 2024년 3월 12일. WD. URL: https://www.w3.org/TR/css-values-4/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 표준. Living Standard. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. RFC에서 요구 수준을 표시하는 키워드. 1997년 3월. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119

참고용 참고자료

[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS 오브젝트 모델 (CSSOM). 2021년 8월 26일. WD. URL: https://www.w3.org/TR/cssom-1/
[FUND-COMP-GRAPHICS]
Peter Shirley; Michael Ashikhmin; Steve Marschner. 컴퓨터 그래픽스의 기초. 2009.
[WEB-ANIMATIONS]
Brian Birtles; et al. 웹 애니메이션. 2023년 6월 5일. WD. URL: https://www.w3.org/TR/web-animations-1/