CSS 색상 조정 모듈 레벨 1

W3C 후보 권고안 초안,

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2025/CRD-css-color-adjust-1-20250812/
최신 공개 버전:
https://www.w3.org/TR/css-color-adjust-1/
편집자 초안:
https://drafts.csswg.org/css-color-adjust-1/
이전 버전:
변경 내역:
https://www.w3.org/standards/history/css-color-adjust-1/
구현 보고서:
https://wpt.fyi/results/css/css-color-adjust?label=experimental&label=master&aligned
피드백:
CSSWG 이슈 저장소
명세 내 인라인
편집자:
Elika J. Etemad / fantasai (Apple)
(Microsoft)
(Google)
Tab Atkins Jr. (Google)
명세에 대한 편집 제안:
GitHub 편집자
테스트 스위트:
https://wpt.fyi/results/css/css-color-adjust/

요약

이 모듈은 사용자 에이전트가 "다크 모드", 명도/대비 조정, 또는 특정 색상 테마와 같은 사용자 선호도를 처리하기 위한 자동 색상 조정 모델과 제어 기능을 소개합니다.

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

이 문서의 상태

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

이 문서는 CSS 워킹 그룹권고안 트랙을 사용하여 후보 권고안 초안으로 발행했습니다. 후보 권고안으로 발행되었다고 해서 W3C 및 회원의 승인이나 지지를 의미하지는 않습니다. 후보 권고안 초안에는 이전 후보 권고안에서 변경된 내용이 통합되어 있으며, 워킹 그룹이 다음 후보 권고안 스냅샷에 포함할 계획입니다.

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

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

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

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 그룹 산출물과 관련하여 공개된 특허를 공개 목록으로 관리합니다; 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 특정 특허에 대해 실제로 알고 있고, 그 특허가 필수 청구항을 포함한다고 믿는 사람은 W3C 특허 정책 6조에 따라 정보를 공개해야 합니다.

1. 소개

이 명세서는 사용자 에이전트가 색상을 자동으로 조정하는 방법/시기를 제어하기 위한 세 가지 새로운 기능을 소개합니다:

prefers-color-scheme, prefers-contrast, forced-colors 미디어쿼리 [MEDIAQUERIES-5]와 함께, 이 모듈은 작성자와 사용자 간의 색상 테마 협상을 가능하게 합니다.

1.1. 값 정의

이 명세서는 CSS 속성 정의 규약[CSS2]에서 따르고, 값 정의 문법[CSS-VALUES-3]를 사용합니다. 이 명세서에서 정의되지 않은 값 타입은 CSS 값 및 단위 [CSS-VALUES-3]에서 정의됩니다. 다른 CSS 모듈과의 조합에 따라 이러한 값 타입의 정의가 확장될 수 있습니다.

특정 속성의 정의에 명시된 값 이외에도, 이 명세서에서 정의된 모든 속성은 CSS 전역 키워드도 속성 값으로 사용할 수 있습니다. 가독성을 위해 별도로 반복하지 않았습니다.

2. 선호 색상 테마

운영체제와 사용자 에이전트는 종종 사용자에게 사용자 인터페이스 요소의 선호 색상 테마를 선택할 수 있는 기능을 제공합니다. 이 색상 테마는 일반적으로 사용자 에이전트의 탐색 인터페이스와 폼 컨트롤, 스크롤바 등 페이지 내 인터페이스 요소의 렌더링에 반영됩니다.

UA는 또한 사용자가 자신이 보는 페이지의 색상 테마에 대한 선호를 표시할 수 있도록 허용할 수 있으며, 작성자가 해당 색상 선호에 페이지를 맞추도록 요청합니다. (이러한 선호를 반드시 표현해야 하는 것은 아니며, 사용자는 운영체제 인터페이스 색상에 대한 선호가 있더라도 이를 페이지에 강제 적용하길 원하지 않을 수 있습니다.)

가장 일반적인 색상 테마 선호는 다음과 같습니다:

라이트다크 색상 테마는 특정 색상 팔레트(예: 흑백)를 의미하는 것이 아니라 다양한 팔레트 범위를 나타냅니다. 특정 색상을 보장하려면 작성자가 직접 색상을 지정해야 합니다. 또한, 기본 또는 <system-color> 색상과 작성자 지정 색상을 조합한다고 해서 특정 대비 수준을 보장할 수 없습니다. 가독성을 확보하려면 전경색과 배경색을 함께 설정해야 할 수 있습니다. [WCAG21].

페이지가 사용자의 선호 색상 테마에 적응할 수 있도록, 사용자 에이전트는 prefers-color-scheme 미디어쿼리와 사용자의 선호 색상 테마를 일치시킵니다. [MEDIAQUERIES-5] 이를 보완하기 위해, 여기서 정의된 color-scheme 속성은 작성자가 UA가 제공하는 UI 및 페이지 내 색상에 대해 적절한 색상 테마를 지정할 수 있도록 합니다.

사용자 에이전트는 추가적인 색상 테마를 지원할 수도 있지만, CSS는 추가적인 색상 테마 협상을 지원하지 않습니다: 사용자 에이전트는 이러한 테마의 표준화를 추진해야 하며, prefers-color-schemecolor-scheme이 추가 값을 반영할 수 있도록 해야 합니다.

2.1. 선호 색상 테마 적용: color-scheme 속성

이름: color-scheme
값: normal | [ light | dark | <custom-ident> ]+ && only?
초기값: normal
적용 대상: 모든 요소 및 텍스트
상속 여부:
백분율: 해당 없음
계산값: 키워드 normal 또는 지정된 색상 테마 키워드의 순서 있는 목록
정식 순서: 문법에 따름
애니메이션 타입: 불연속(discrete)
테스트

prefers-color-scheme 미디어 특성은 작성자가 페이지의 색상을 사용자의 선호 색상 테마에 맞게 조정할 수 있도록 해주지만, 페이지의 많은 부분(폼 컨트롤, 스크롤바 등)은 작성자의 제어 범위 밖에 있습니다. color-scheme 속성은 요소가 어떤 색상 테마로 렌더링되는 것이 의도된지 표시할 수 있게 해줍니다. 이 값들은 사용자의 선호와 협상되어, 폼 컨트롤과 스크롤바의 기본 색상 등에도 영향을 미치는 사용된 색상 테마를 결정합니다. (§ 2.2 사용된 색상 테마의 효과 참고)

참고: 많은 페이지가 색상 테마 지원 이전에 작성되었기 때문에, 사용자 에이전트가 제어하는 요소에서 자동으로 색상을 조정하면 페이지 전체와의 대비가 읽기 어렵게 될 수 있으므로, 자동 적용할 수 없습니다.

호스트 언어는 페이지가 지원하는 색상 테마를 정의할 수 있으며, 이는 해당 페이지의 모든 요소에서 기본적으로 지원되는 색상 테마 목록입니다.

참고: [HTML]에서는 color-scheme meta 태그를 이용해 페이지가 지원하는 색상 테마를 설정할 수 있습니다.

값은 다음과 같이 정의됩니다:

normal

요소가 페이지가 지원하는 색상 테마를 지원함을 나타냅니다. 설정되어 있지 않으면 어떤 색상 테마도 지원하지 않음을 의미합니다.

light

요소가 라이트 색상 테마를 지원함을 나타냅니다.

dark

요소가 다크 색상 테마를 지원함을 나타냅니다.

only

해당 요소에 대해 사용자 에이전트가 색상 테마를 재정의하는 것을 금지합니다.

<custom-ident>

<custom-ident> 값은 의미가 없으며, 향후 호환성을 위해 존재합니다. 앞으로 추가될 색상 테마가 기존 color-scheme 선언을 무효화하지 않도록 하기 위함입니다. 사용자 에이전트는 <custom-ident> 값에 의미를 부여해서는 안 되며, 추가로 인식되는 색상 테마는 반드시 이 속성의 문법에 명시적으로 추가되어야 합니다.

참고: 혼란을 방지하기 위해, 튜토리얼 및 참고 문서에서는 <custom-ident>를 제외해야 합니다.

normal, light, dark, only 키워드는 이 속성에서 <custom-ident> 유효값이 아닙니다.

참고: 라이트다크 색상 테마는 특정 색상 팔레트가 아닙니다. 예를 들어, 강한 흑백 테마와 세피아(갈색) 배경의 어두운-탄색 테마 둘 다 라이트 색상 테마로 간주될 수 있습니다. 특정 전경 또는 배경색을 보장하려면 명시적으로 지정해야 합니다.

요소의 사용된 색상 테마 결정하기:
  1. 사용자의 선호 색상 테마가, prefers-color-scheme 미디어 특성으로 나타나고, 나열된 색상 테마 중에 있으며, 사용자 에이전트가 지원할 경우, 해당 요소의 사용된 색상 테마가 됩니다.

  2. 그렇지 않은 경우, 사용자가 자신의 선택한 색상 테마에 대해 재정의 선호를 표시했고, 해당 요소의 only 키워드가 color-scheme에 포함되어 있지 않다면, 사용자 에이전트는 사용자의 선호 색상 테마색상 테마를 재정의해야 합니다. § 2.3 색상 테마 재정의 참고.

  3. 그 외의 경우, 사용자 에이전트가 나열된 색상 테마 중 하나 이상을 지원하면, 사용된 색상 테마는 목록에서 첫 번째로 지원되는 색상 테마가 됩니다.

  4. 그 외의 경우, 사용된 색상 테마는 브라우저 기본값입니다. (normal과 동일)

참고: 사용자 에이전트는 특정 색상 테마를 지원할 필요가 없습니다. 따라서 color-scheme: dark처럼 단일 키워드만 사용하는 것은, 해당 색상 테마가 반드시 적용된다는 보장이 없습니다.

prefers-color-scheme 미디어 특성을 이용해 색상 테마에 맞춰 색상을 바꾸는 페이지는, 브라우저가 제어하는 UI(스크롤바, 입력 등)도 아래와 같이 간단한 글로벌 선언으로 맞출 수 있습니다:
:root {
  color-scheme: light dark;
}

만약 페이지가 오직 <system-color>만을 사용한다면, 위의 color-scheme 선언만으로도 작성자가 @media를 전혀 사용하지 않아도 사용자의 선호 색상 테마를 지원할 수 있습니다.

만약 페이지가 모든 색상 테마를 지원하기 어려운 경우(브랜딩이나 연출 목적 등), color-scheme을 통해 지원 가능한 색상 테마를 명시할 수 있으며, UI도 이에 맞춰집니다.

페이지의 색상 테마가 주로 밝다면, 아래와 같이 명시할 수 있습니다:

:root {
  color-scheme: light;
}

어두운 테마가 주라면, 아래처럼 명시하면 페이지가 더 일관되게 보일 수 있습니다:

:root {
  color-scheme: dark;
}

하지만, 물론 두 가지 테마 모두 지원하는 것이 더 좋습니다.

페이지가 여러 색상 테마를 지원할 수 있지만, 일부 구역은 특정 색상 테마로 렌더링해야 하는 경우가 있을 수 있습니다.

예를 들어, 스타일 가이드에서 라이트 또는 다크 테마로 다양한 UI 예시를 보여줄 수 있고, 각각의 테마를 명확히 나타내고 싶을 때 아래와 같이 설정할 수 있습니다:

:root {
  color-scheme: light dark;
}

.light-theme-example {
  color-scheme: light;
}

.dark-theme-example {
  color-scheme: dark;
}

.light-theme-example 또는 .dark-theme-example이 루트인 구역만 각각 라이트 또는 다크 테마로 적용되며, 나머지 페이지는 사용자의 선호를 존중합니다.

참고: color-scheme: light light처럼 키워드를 반복해도 유효하지만, 첫 번째 키워드의 효과를 넘어서 추가 효과는 없습니다.

2.2. 사용된 색상 테마의 효과

모든 요소에 대해, 사용자 에이전트는 아래 항목들을 사용된 색상 테마에 맞추어야 합니다:

루트 요소에서는, 사용된 색상 테마캔버스의 표면 색상과 뷰포트의 스크롤바에도 영향을 미쳐야 합니다.

예상되는 색상 대비를 유지하기 위해, 투명한 캔버스 위에 렌더링되는 임베디드 문서(예: HTML iframe 요소)의 경우, 해당 요소의 사용된 색상 테마와 임베디드 문서 루트 요소의 사용된 색상 테마가 일치하지 않으면, UA는 투명 캔버스 대신 임베디드 문서의 사용된 색상 테마에 맞는 불투명 캔버스 색상(Canvas 색상)을 사용해야 합니다. 이 규칙은 그래픽용으로 임베드되는 요소(예: img 요소로 SVG 문서를 포함하는 경우)에는 적용되지 않습니다.

참고: 위의 소규모 조정 목록 외에는, 사용자 에이전트가 일반적으로 페이지를 사용자의 선호 색상 테마에 맞게 추가로 조정하지 않습니다. 그 이유는 페이지를 의도치 않게 망칠 가능성이 매우 높기 때문입니다. 하지만 사용자가 특정 색상 선택(접근성 등)을 요구하는 경우에는 더 강력한 변경이 적용될 수 있습니다; § 3 강제 색상 팔레트 참고.

2.3. 색상 테마 재정의

사용자가 특정 색상 테마에 대해 재정의 선호를 표시했고, 작성자가 only 키워드를 사용하여 이를 금지하지 않았다면, 사용자 에이전트는 색상 테마를 재정의하여, 사용된 색상 테마를 사용자의 선호 색상 테마로 강제할 수 있습니다. 만약 해당 요소가 그 색상 테마를 지원하지 않으면, 사용자 에이전트는 밝기 반전 등으로 기타 색상을 이 선택된 색상 테마에 자동 조정하며, 페이지 가독성을 위한 색상 대비는 반드시 유지해야 합니다. 이 경우 UA는 대체 요소, 배경 이미지, 기타 외부 리소스의 색상도 적절하게 자동 조정할 수 있습니다.

참고: 이러한 자동 조정의 구체적인 내용은 UA별로 정의되며, UA마다 다를 수 있습니다. 하지만 모든 색상을 강제 색상 모드처럼 고정 팔레트로 강제하는 것은 아니며, 페이지의 모든 색상이 다크 또는 라이트 색상 테마에 맞게 강제하는 것이 목적입니다.

예를 들어, UA에 "다크룸" 모드가 있다면 모든 페이지를 다크 색상 테마로 강제할 수 있습니다.

이미 다크 색상 테마를 지원하고, color-scheme 속성이나 color-scheme meta name으로 이를 명시한 페이지의 경우, dark 값을 prefers-color-scheme 미디어쿼리로 보고하고, 다크 사용된 색상 테마를 선택하는 것 외에는 효과가 없습니다.

반면 명시적으로 다크 색상 테마를 지원하지 않고, color-scheme: only light로 자동 조정을 명시적으로 금지하지 않은 경우, 이 모드는 페이지의 색상을 강제로 원하는 다크 색상 테마에 맞게 자동 조정합니다.

3. 강제 색상 팔레트

강제 색상 모드는 색상 대비를 통해 텍스트의 가독성을 높이기 위한 접근성 기능입니다. 시력이 제한적인 사람들은 전경색과 배경색 사이에 특정 형태의 대비가 있을 때 콘텐츠를 더 편하게 읽을 수 있습니다.

운영체제는 윈도우의 고대비 흑백 테마, 고대비 백흑 테마와 같은 내장 색상 테마를 제공할 수 있습니다. 사용자는 저대비나 색상 대비 등 원하는 테마를 직접 커스터마이즈할 수도 있습니다.

강제 색상 모드에서는, 사용자 에이전트가 사용자가 선호하는 색상 팔레트를 페이지에 강제 적용하여, 작성자가 지정한 특정 속성의 색상을 재정의합니다. § 3.1 강제 색상 모드에 영향을 받는 속성 참고. 또한, 텍스트 아래에 "백플레이트"를 적용할 수도 있습니다 (예: ::selection 의사 요소에 배경을 페인팅하는 것과 유사) 이는 가독성을 위한 적절한 대비를 보장하기 위함입니다.

페이지가 강제 색상 모드에 적응할 수 있도록, 사용자 에이전트는 forced-colors 미디어쿼리와 일치시키며, CSS 시스템 색상으로 필요한 색상 팔레트를 제공해야 합니다 ([CSS-COLOR-4] 참고). 추가적으로, UA가 Lab 명도의 기준(L < 33%는 다크, L > 67%는 라이트)으로 Canvas 색상이 명확히 다크 또는 라이트임을 판단하면, prefers-color-scheme 미디어쿼리의 적절한 값을 일치시켜야 하며, color-scheme에 대한 사용자 선호도도 표현해야 합니다. 이를 통해 라이트/다크 색상 테마를 지원하는 페이지가 강제 색상 테마에 더 가깝게 자동 조정될 수 있습니다. 위의 다크/라이트 기준 사이의 동작은 UA별로 정의되며, light 또는 dark를 사용자의 선호 색상 테마로 가정할 수도 있습니다.

get emulated forced colors theme data가 "none"이 아니라면, 사용자 에이전트는 위의 운영체제 색상 테마를 건너뛰고, 에뮬레이션 강제 색상 테마 데이터에 따라 에뮬레이션 강제 색상 모드 팔레트강제 색상 모드가 활성화된 것처럼 동작해야 합니다.

3.1. 강제 색상 모드에 영향을 받는 속성

강제 색상 모드가 활성화되고, 요소의 forced-color-adjustauto(아래 참고)일 때, 해당 요소의 모든 속성의 <color> 구성요소가 사용자가 선호하는 색상 팔레트로 강제 조정됩니다.

구체적으로, 강제 색상 모드는 아래와 같은 색상 관련 속성(및 약어)에 적용됩니다. 아래는 작성 시점 기준의 색상 속성 목록이며, 앞으로 더 많은 속성이 추가될 수 있어 완전한 목록이 아닐 수 있습니다:

각 속성의 <color> 구성요소에 대해, 계산값시스템 색상이 아닌 색상인 경우, 사용값은 아래와 같이 시스템 색상으로 강제됩니다:

추가적으로:

UA는 더 나은 사용자 경험을 위해 이러한 강제 색상 모드 휴리스틱을 추가로 조정할 수 있습니다.

작성자는 color-mix()와 같은 기능을 강제 색상 모드에서도 사용할 수 있습니다. 이 경우 계산값은 평소와 동일하게 동작하지만, 사용값은 적절한 시스템 색상으로 오버라이드됩니다.
.example {
  color: color-mix(in srgb, CanvasText, Canvas);
}

color계산값CanvasTextCanvas 시스템 색상의 50:50 혼합값이 됩니다. 이 값은 하위 요소에 상속되고 computedStyleMap()과 같은 API로도 확인할 수 있습니다.

color사용값은 UA가 선택한 시스템 색상(예: CanvasText)이 됩니다.

3.2. 강제 색상 팔레트 해제: forced-color-adjust 속성

이름: forced-color-adjust
값: auto | none | preserve-parent-color
초기값: auto
적용 대상: 모든 요소 및 텍스트
상속 여부:
백분율: 해당 없음
계산값: 지정한 값 그대로
정식 순서: 문법에 따름
애니메이션 타입: 애니메이션 불가

forced-color-adjust 속성은 작성자가 특정 요소에 대해 강제 색상 모드 적용을 해제하여, 색상에 대한 완전한 제어권을 CSS로 복원할 수 있도록 해줍니다. 값의 의미는 다음과 같습니다:

auto

요소의 색상은 강제 색상 모드에서 UA에 의해 자동으로 조정됩니다.

none

요소의 색상은 강제 색상 모드에서 UA에 의해 자동으로 조정되지 않습니다.

작성자는 사용자의 색상 및 대비 요구에 맞게 직접 색상을 조정하고, 해당 요소에 대해 UA의 기본 조정을 변경해야 할 필요가 있을 때만 이 값을 사용해야 합니다.

preserve-parent-color

강제 색상 모드에서, color 속성이 부모로부터 상속받는 경우 (즉, cascaded value가 없거나, cascaded valuecurrentColorinherit 등의 부모로부터 상속되는 키워드인 경우), 해당 값은 부모의 color사용값으로 계산됩니다.

그 외의 측면에서는 none과 동일하게 동작합니다.

참고: 이 값은 외부 문서의 텍스트 색상을 SVG에 전달받아 일관성을 유지하고(강제 색상 모드의 조정과도 일치), SVG는 기본적으로 정확한 색상을 유지하도록 하기 위한 용도입니다. 강제 색상 모드는 일러스트레이션에는 일반적으로 유용하게 적용할 수 없습니다.

SVG 콘텐츠가 깨지지 않도록, UA는 아래와 같은 규칙을 UA 스타일시트에 추가해야 합니다:

@namespace "http://www.w3.org/2000/svg";
svg|svg { forced-color-adjust: preserve-parent-color; }
svg|foreignObject { forced-color-adjust: auto; }

UA는 루트 요소에 설정된 forced-color-adjust 값을 문서 뷰포트로 전달해야 하며(예: 캔버스 배경에 영향), forced-color-adjust는 HTML body에서는 전달되지 않습니다.

테스트

4. 성능 기반 색상 조정

대부분의 모니터에서는 작성자가 선택한 색상이 디바이스 성능에 큰 차이를 주지 않습니다; 흰색 배경이나 검은색 배경으로 문서를 표시하는 것이 거의 동일하게 쉽습니다.

그러나 일부 디바이스에는 이러한 가정이 성립하지 않는 제한이나 특성이 있습니다. 예를 들어, 프린터는 일반적으로 흰색 용지에 인쇄합니다; 흰색 배경의 문서는 배경을 그리는 데 잉크를 거의 쓰지 않지만, 검은색 배경의 문서는 배경색을 채우기 위해 많은 잉크를 소모합니다. 이는 인쇄 결과가 좋지 않고, 종이에 물리적 손상이 생길 수 있으며, 잉크 소모가 크게 늘어 비용이 증가합니다. 아주 작은 차이(예: 검은색 텍스트와 어두운 회색 텍스트)도 인쇄 시에는 차이가 큽니다. 검은색 잉크 하나만 쓰는 것과 시안/마젠타/노랑 잉크 혼합을 쓰는 것은 잉크 사용량과 해상도에 영향을 줍니다.

이 결과, 어떤 상황에서는 사용자 에이전트가 작성자가 지정한 스타일을 출력 장치와 사용자의 선호에 더 적합하게 자동 조정할 수 있습니다. 하지만 어떤 경우에는 문서에서 색상이 중요한 의미를 갖고 있을 수 있으므로, 작성자는 사용자 에이전트에 페이지의 색상 선택을 존중해 달라고 힌트를 줄 필요가 있습니다. 이 섹션에서는 이러한 자동 조정을 제어하는 속성을 정의합니다.

이름: print-color-adjust
값: economy | exact
초기값: economy
적용 대상: 모든 요소
상속 여부:
백분율: 해당 없음
계산값: 지정한 키워드
정식 순서: 문법에 따름
애니메이션 타입: 불연속
테스트

print-color-adjust 속성은 프린터 등에서 비용이 많이 들거나 권장되지 않는 색상/스타일 선택(예: 어두운 배경에 밝은 텍스트)에 대해 사용자 에이전트가 어떻게 처리해야 하는지 힌트를 제공합니다. 만약 사용자 에이전트가 이 부분의 표시를 사용자가 직접 제어할 수 있게 한다면, 사용자의 선호가 print-color-adjust의 힌트보다 우선적으로 존중되어야 합니다. 값의 의미는 다음과 같습니다:

economy
사용자 에이전트가 출력 장치에 알맞게 필요에 따라 스타일을 자동 조정해야 합니다.

예를 들어, 인쇄 시에는 배경을 무시하거나 텍스트 색상을 충분히 어둡게 조정하여 잉크 사용량을 최소화할 수 있습니다.

exact
이 값은 페이지가 지정한 요소에 색상과 스타일을 중요한 방식으로 사용하므로 사용자가 직접 요청하지 않는 한 자동 조정이나 변경을 하지 않아야 함을 나타냅니다.

예를 들어, 지도 웹사이트에서 인쇄용 길찾기 안내를 제공할 때, 각 단계에 흰색과 밝은 회색 배경을 교대로 적용해 "지브라 스트라이프"를 만들 수 있습니다. 이 배경이 모두 흰색으로 바뀌면 운전 중 빠르게 확인할 때 읽기 어려워질 수 있습니다.

UA는 루트 요소에 설정된 print-color-adjust 값을 문서 뷰포트로 전달해야 하며(예: 캔버스 배경에 영향), print-color-adjust는 HTML body에서는 전달되지 않습니다.

4.2. color-adjust 단축 속성

이름: color-adjust
값: <'print-color-adjust'>
초기값: 각 개별 속성 참조
적용 대상: 각 개별 속성 참조
상속 여부: 각 개별 속성 참조
백분율: 각 개별 속성 참조
계산값: 각 개별 속성 참조
애니메이션 타입: 각 개별 속성 참조
정식 순서: 문법에 따름

color-adjust 단축 속성은 작성자가 성능 기반 색상 조정 관련 속성을 한 번에 선언할 수 있게 해줍니다. (현재로서는 해당 속성이 print-color-adjust 하나뿐이지만, 앞으로 더 추가될 수 있습니다.)

color-adjust 단축 속성은 현재 더 이상 권장되지 않습니다. 작성자는 print-color-adjust와 같이 더 구체적인 속성을 사용하여 의도와 다른 상황에서 성능 기반 색상 조정을 실수로 초기화하는 것을 피해야 합니다.

테스트

5. 에뮬레이션

사용자 에이전트 자동화 및 애플리케이션 테스트 목적을 위해, 본 문서는 아래의 에뮬레이션을 정의합니다.

5.1. 강제 색상 모드 에뮬레이션

최상위 traversable에는 에뮬레이션 강제 색상 테마 데이터가 연관되어 있으며, 이는 ForcedColorsModeAutomationTheme을 나타내는 데이터입니다. 초기값은 "none"입니다.

enum ForcedColorsModeAutomationTheme {
  "none",
  "light",
  "dark"
};

에뮬레이션 강제 색상 테마 데이터 설정을 위해, navigable navigableemulatedThemeData가 주어질 때:

  1. emulatedThemeDataForcedColorsModeAutomationTheme임을 확인한다.

  2. traversablenavigable최상위 traversable로 설정한다.

  3. traversable이 null이 아니면:

    1. traversable에뮬레이션 강제 색상 테마 데이터emulatedThemeData로 설정한다.

    2. UA는 이를 스타일 재계산이 필요한 변경으로 간주해야 한다.

에뮬레이션 강제 색상 테마 데이터 가져오기를 위해, ForcedColorsModeAutomationTheme theme가 주어질 때:

  1. navigabletheme관련 글로벌 객체연관 Documentnode navigable로 설정한다.

  2. navigable이 null이면 null을 반환한다.

  3. traversablenavigable최상위 traversable로 설정한다.

  4. traversable이 null이면 null을 반환한다.

  5. traversable에뮬레이션 강제 색상 테마 데이터를 반환한다.

5.2. 강제 색상 모드 색상 팔레트

사용자 에이전트 자동화 및 애플리케이션 테스트 목적을 위해, 본 문서는 아래의 강제 색상 모드 에뮬레이션 색상 팔레트를 정의합니다.
"light"에 대한 시스템 색상 매핑
<system-color> 키워드
AccentColor #FFFFFF
AccentColorText #000000
ActiveText #00009F
ButtonBorder #000000
ButtonFace #FFFFFF
ButtonText #000000
Canvas #FFFFFF
CanvasText #000000
Field #FFFFFF
FieldText #000000
GrayText #600000
Highlight #37006E
HighlightText #FFFFFF
LinkText #00009F
Mark N/A - 이 시스템 색상 키워드는 조정되지 않습니다.
MarkText N/A - 이 시스템 색상 키워드는 조정되지 않습니다.
SelectedItem #37006E
SelectedItemText #FFFFFF
VisitedText #00009F
"dark"에 대한 시스템 색상 매핑
<system-color> 키워드
AccentColor #000000
AccentColorText #FFFFFF
ActiveText #FFFF00
ButtonBorder #000000
ButtonFace #000000
ButtonText #FFFFFF
Canvas #000000
CanvasText #FFFFFF
Field #000000
FieldText #FFFFFF
GrayText #3FF23F
Highlight #1AEBFF
HighlightText #000000
LinkText #FFFF00
Mark N/A - 이 시스템 색상 키워드는 조정되지 않습니다.
MarkText N/A - 이 시스템 색상 키워드는 조정되지 않습니다.
SelectedItem #1AEBFF
SelectedItemText #000000
VisitedText #FFFF00

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

색상 테마 또는 강제 색상 모드를 통해 사용자의 색상 선호를 적용하면, getComputedStyle()를 통해 페이지에 사용자의 색상 선호가 노출되어 지문 채집 위험 표면이 증가할 수 있습니다.

이를 회피하면 무시하기 어려운 단점이 발생합니다. 구체적으로:

이 주제에 대한 논의는 Issue 5710을 참고하세요.

7. 보안 고려사항

내장 문서가 타이밍 공격을 사용해 자신의 color-scheme이 외부 iframe과 일치하는지 여부를 판별할 수 있는 가능성이 있습니다.

8. 감사의 글

이 명세서는 Apple, Google, Microsoft의 다양한 색상 조정 기능 개발 노력과 www-style에서의 인쇄 조정 논의 없이는 불가능했을 것입니다. 특히 CSS 워킹 그룹은 아래 분들께 감사를 표합니다: Alison Maher, François Remy, イアンフェッ티

추가로 MSFT / Apple / Google 인물을 여기에 기재하세요.

9. 변경 사항

2022년 2월 10일 후보 권고안 스냅샷 이후 변경 사항:

후보 권고안 이전 변경 사항도 참고.

적합성

문서 규약

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

명세서의 모든 내용은 비규범적임을 명시한 섹션, 예시, 참고를 제외하고 규범적입니다. [RFC2119]

이 명세서의 예시들은 “예를 들어”로 소개되거나, class="example"와 같이 규범적 본문과 구분해 제공합니다:

이것은 정보 제공용 예시입니다.

정보 제공용 참고는 “참고”로 시작하며, class="note"와 같이 규범적 본문과 구분됩니다:

참고, 이것은 정보 제공용 참고입니다.

Advisement(경고)는 규범적 주의가 필요한 부분으로, <strong class="advisement">처럼 스타일을 통해 강조됩니다: UA는 접근 가능한 대안을 반드시 제공해야 합니다.

테스트

이 명세서 내용 관련 테스트는 이런 “테스트” 블록에 문서화될 수 있습니다. 이러한 블록은 모두 비규범적입니다.


적합성 클래스

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

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

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

렌더러가 이 명세서에 적합하려면, 스타일시트를 해당 명세서에 따라 해석하는 것과 더불어, 이 명세서에서 정의한 모든 기능을 올바르게 구문 분석하고 문서를 렌더링해야 합니다. 단, 디바이스의 한계로 인해 UA가 문서를 제대로 렌더링하지 못해도 비적합으로 간주하지 않습니다. (예: UA는 흑백 모니터에서 색상 렌더링을 할 필요는 없음.)

작성 도구가 이 명세서에 적합하려면, 스타일시트를 이 모듈의 문법 및 CSS의 일반 문법에 따라 올바르게 작성하고, 이 모듈에서 설명한 모든 스타일시트 적합성 요구사항을 준수해야 합니다.

부분 구현

작성자가 미래 호환 구문 분석 규칙을 활용해 폴백 값을 지정할 수 있도록, CSS 렌더러는 반드시 지원하지 않는 at-rule, 속성, 속성 값, 키워드, 기타 구문 요소를 무효로 취급해야 하며 (적절히 무시), 단일 다중 값 속성 선언에서 지원되지 않는 구성 값만 무시하고 지원되는 값만 적용해서는 안 됩니다: 값 중 하나라도 무효(지원하지 않는 값)라면 CSS는 전체 선언을 무시해야 합니다.

불안정 및 독점 기능 구현

향후 안정된 CSS 기능과의 충돌을 피하기 위해, CSSWG는 베스트 프랙티스를 따라 불안정한 기능 및 독점 확장을 구현할 것을 권장합니다.

비실험적 구현

명세서가 후보 권고안 단계에 도달하면, 비실험적 구현이 가능해지며, 구현자는 명세서에 따라 올바르게 구현된 CR 수준 기능에 대해 접두어 없는 구현을 공개해야 합니다.

CSS 구현 간 상호운용성을 확보 및 유지하기 위해, CSS 워킹 그룹은 비실험적 CSS 렌더러가 구현 보고서(필요시, 해당 구현에 사용된 테스트케이스 포함)를 W3C에 제출한 후에만 신규 기능을 접두어 없이 공개할 것을 요청합니다. W3C에 제출된 테스트케이스는 CSS 워킹 그룹에서 검토 및 수정이 가능합니다.

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

CR 종료 기준

이 명세서가 제안 권고안으로 진행되려면, 각 기능별로 최소 두 개의 독립적이고 상호운용 가능한 구현이 존재해야 합니다. 각 기능은 서로 다른 제품에서 구현될 수 있으며, 모든 기능을 단일 제품에서 모두 구현할 필요는 없습니다. 이 기준을 위해 용어를 아래와 같이 정의합니다:

독립적
각 구현은 서로 다른 주체가 개발해야 하며, 다른 구현에서 사용된 코드를 공유, 재사용, 파생할 수 없습니다. 명세 구현에 영향을 주지 않는 코드 영역은 예외입니다.
상호운용 가능
공식 CSS 테스트 스위트의 해당 테스트케이스(또는 웹 브라우저가 아닌 경우 동등한 테스트)를 통과해야 합니다. 모든 관련 테스트는 동등한 테스트가 작성되어야 하며, 해당 UA가 상호운용성을 주장하려면 이러한 UA가 동일 방식으로 동등한 테스트를 통과해야 합니다. 동등한 테스트는 공개적으로 제공되어야 합니다.
구현
다음을 만족하는 사용자 에이전트:
  1. 명세서를 구현함.
  2. 일반 대중에게 제공됨(출시 제품 또는 베타, 프리뷰, “나이트리 빌드” 등 공개 버전). 출시되지 않은 제품은 최소 한 달간 기능을 구현해 안정성을 입증해야 함.
  3. 실험적이지 않아야 함(테스트 통과만을 위해 특별히 설계된 버전은 정상적인 사용을 위한 것이 아니므로 인정되지 않음).

이 명세서는 최소 6개월간 후보 권고안 상태를 유지합니다.

색인

이 명세서에서 정의된 용어

참조로 정의된 용어

참고문헌

규범적 참고문헌

[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-COLOR-4]
Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. 2025년 4월 24일. CRD. URL: https://www.w3.org/TR/css-color-4/
[CSS-COLOR-5]
Chris Lilley; et al. CSS Color Module Level 5. 2025년 3월 18일. WD. URL: https://www.w3.org/TR/css-color-5/
[CSS-FONTS-4]
Chris Lilley. CSS Fonts Module Level 4. 2024년 2월 1일. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2025년 6월 27일. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SCROLLBARS-1]
Tantek Çelik; Rossen Atanassov; Florian Rivoal. CSS Scrollbars Styling Module Level 1. 2021년 12월 9일. CR. URL: https://www.w3.org/TR/css-scrollbars-1/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS Text Decoration Module Level 4. 2022년 5월 4일. WD. URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-UI-4]
Florian Rivoal. CSS Basic User Interface Module Level 4. 2021년 3월 16일. WD. URL: https://www.w3.org/TR/css-ui-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2024년 3월 22일. CRD. URL: https://www.w3.org/TR/css-values-3/
[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/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011년 6월 7일. REC. URL: https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021년 8월 26일. WD. URL: https://www.w3.org/TR/cssom-1/
[HTML]
Anne van Kesteren; et al. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[MEDIAQUERIES-5]
Dean Jackson; et al. Media Queries Level 5. 2021년 12월 18일. WD. URL: https://www.w3.org/TR/mediaqueries-5/
[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

비규범적 참고문헌

[CSS-CONDITIONAL-3]
Chris Lilley; David Baron; Elika Etemad. CSS Conditional Rules Module Level 3. 2024년 8월 15일. CRD. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-GAPS-1]
Kevin Babbitt. CSS Gap Decorations Module Level 1. 2025년 4월 17일. FPWD. URL: https://www.w3.org/TR/css-gaps-1/
[CSS-TYPED-OM-1]
Tab Atkins Jr.; François Remy. CSS Typed OM Level 1. 2024년 3월 21일. WD. URL: https://www.w3.org/TR/css-typed-om-1/
[FILL-STROKE-3]
Elika Etemad; Tab Atkins Jr.. CSS Fill and Stroke Module Level 3. 2017년 4월 13일. FPWD. URL: https://www.w3.org/TR/fill-stroke-3/
[FILTER-EFFECTS-1]
Dirk Schulze; Dean Jackson. Filter Effects Module Level 1. 2018년 12월 18일. WD. URL: https://www.w3.org/TR/filter-effects-1/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018년 10월 4일. CR. URL: https://www.w3.org/TR/SVG2/
[WCAG21]
Michael Cooper; et al. Web Content Accessibility Guidelines (WCAG) 2.1. 2025년 5월 6일. REC. URL: https://www.w3.org/TR/WCAG21/

속성 색인

이름 초기값 적용 대상 상속 % 비율 애니메이션 타입 정식 순서 계산값
color-adjust <'print-color-adjust'> 각 개별 속성 참조 각 개별 속성 참조 각 개별 속성 참조 각 개별 속성 참조 각 개별 속성 참조 문법에 따름 각 개별 속성 참조
color-scheme normal | [ light | dark | <custom-ident> ]+ && only? normal 모든 요소 및 텍스트 해당 없음 불연속 문법에 따름 키워드 normal 또는 지정된 색상 테마 키워드의 순서형 목록
forced-color-adjust auto | none | preserve-parent-color auto 모든 요소 및 텍스트 해당 없음 애니메이션 불가 문법에 따름 지정한 값 그대로
print-color-adjust economy | exact economy 모든 요소 해당 없음 불연속 문법에 따름 지정한 키워드

IDL 색인

enum ForcedColorsModeAutomationTheme {
  "none",
  "light",
  "dark"
};

이슈 색인

추가로 MSFT / Apple / Google 인물을 여기에 기재하세요.