Copyright © 2025 the Contributors to the Design Tokens Resolver Module 2025.10 Specification, published by the Design Tokens Community Group under the W3C Community Final Specification Agreement (FSA). A human-readable summary is available.
본 문서는 디자인 토큰의 색상 값과 불투명도에 대한 기술 사양을 설명합니다.
본 명세는 Design Tokens Community Group에 의해 발행되었습니다. 이는 W3C 표준이 아니며, W3C 표준화 트랙에도 포함되어 있지 않습니다. W3C Community Final Specification Agreement (FSA)에 따라 적용되는 다른 조건들이 있음을 참고해 주십시오. W3C 커뮤니티 및 비즈니스 그룹에 대해 더 알아보세요.
이 절은 본 문서가 발행된 시점에서의 상태를 설명합니다. 이후 다른 문서가 본 문서를 대체할 수 있습니다. 현재의 W3C 커뮤니티 그룹 보고서와 최신 개정본 목록은 https://www.w3.org/community/reports/에서 확인하실 수 있습니다.
본 문서는 DTCG에 의해 Candidate Recommendation 으로 발행되었으며, 이는 W3C 프로세스에서 제공하는 정의를 따릅니다. 이 초안에 대해 기여하는 경우, 커뮤니티 기여자 라이선스 계약 (CLA)을 적용 받으며, W3C 커뮤니티 그룹 프로세스에 명시된 조건을 따릅니다.
비록 W3C 권고안은 아니지만, 이 분류는 광범위한 합의 과정 이후 본 명세가 실제 구현을 위한 것임을 명확히 하기 위한 것입니다.
이 명세는 안정적이라고 간주됩니다. 향후 업데이트는 상위 명세에서 제공될 예정입니다.
이 명세에 대한 토론은 GitHub Issues에서 진행되는 것이 권장됩니다.
비규범적인 것으로 표시된 섹션들뿐만 아니라, 본 명세의 모든 작성 지침, 다이어그램, 예제, 참고 사항들도 비규범적입니다. 그 외 본 명세의 모든 내용은 규범적입니다.
이 문서에서 MAY, MUST, MUST NOT 와 같은 키워드는 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로 해석되며, 오직 이 키워드들이 모두 대문자로 나타날 때만 적용됩니다.
색상 토큰은 다양한 색상 공간에서 색을 표현하는 데 사용할 수 있습니다. 토큰에 표현된 색상은 변환 도구를 통해 다른 색상 공간으로 변환될 수 있습니다.
일반적으로 이 모듈은 개념과 용어 참조를 위해 CSS Color Module Level 4를 참고합니다. CSS Color Module Level 4는 W3C Working Draft이며 최종 명세가 아닙니다. 변경될 수 있으며, 모든 브라우저나 플랫폼에서 구현되지 않을 수 있습니다.
이 절에서는 명세에서 사용하는 용어의 개요와, 이것이 색상 과학 및 색채학과 어떻게 연결되는지 설명합니다.
색상 공간
색상 공간이란 색의 특정한 조직 방식을 의미하며, 물리적 또는 디지털 환경 모두에서 색을 재현하는 데 도움이 됩니다. 색상 공간은 표현되고 다뤄질 수 있는 색의 범위를 정의합니다.
색상 모델
색상 모델은 특정 색상 공간 내에서 색을 수학적으로 표현하는 방식입니다. 일반적으로 구성 요소를 이용하여 색을 숫자 값으로 어떻게 표현할 것인지 정의합니다.
색역(gamut)
색역은 특정 색상 공간 내에서 표현할 수 있는 모든 색의 전체 범위입니다. 해당 공간의 색상 재현 한계를 정의합니다.
구성 요소(Component)
구성 요소란 특정 색상 공간에서 색상을 정의하는 단일 값입니다. 예를 들어, RGB 색상 공간에서는 red, green, blue가 각각 구성 요소입니다.
색상(Hue)
색상(Hue)은 색이 빨강, 초록, 파랑 등으로 분류될 수 있게 하는 속성입니다. 많은 색상 공간에서 색상은 색상환(color wheel) 위의 각도로 표현됩니다. 색상 공간에 따라 색상의 위치가 다를 수 있습니다.
채도(Saturation)
채도란 한 색상의 밝기를 기준으로 얼마나 많은 색감이 있는지(얼마나 선명한지)를 나타냅니다. 이는 색상이 얼마나 회색을 포함하는지 설명합니다. 완전히 채도가 높은 색상은 회색을 포함하지 않으며, 채도가 낮아질수록 더 회색빛에 가까워집니다. 채도는 크로마(Chroma)와 명도(Lightness) 모두와 밀접하게 연관되며, 특히 HSL 또는 HSV와 같은 모델에서 그러합니다. 색상은 채도가 매우 높더라도, 명도에 따라 밝게 혹은 어둡게 보일 수 있습니다.
명도(Lightness)
명도는 색의 밝게 보이는 정도, 즉 얼마나 밝거나 어두운지에 대한 것입니다.
크로마(Chroma)
크로마는 비슷하게 조명된 흰색에 비해 색이 얼마나 생생한지(색감이 얼마나 강한지)를 나타냅니다. 색이 얼마나 순수하거나 강렬하게 보이는지를 측정합니다. CIE LCH 색상 모델(Lightness, Chroma, Hue)에서는 크로마가 명도와 독립적이며, 색상이 뉴트럴 그레이(무채색)에서 얼마나 떨어져 있는지를 나타냅니다.
알파(Alpha)
알파는 색상의 투명도를 나타내는 구성 요소입니다. 최소값(일반적으로 0)은 완전히 투명함을, 최대값(일반적으로 1)은 완전히 불투명함을 의미합니다.
색상을 나타냅니다.
색상 토큰의 경우, $type 속성은 문자열 color로 설정되어야 합니다 MUST.
그 다음 $value 속성을 사용해 색상의 세부 정보를 지정할 수 있습니다. $value 객체에는 다음 속성이 포함됩니다:
colorSpace (필수): 색상 공간 또는 색상 모델을 지정하는 문자열. 지원되는 색상 공간은 아래의 지원되는 색상 공간 섹션을 참조하세요.components (필수): 색상의 구성 요소를 나타내는 배열. 구성 요소의 개수는 색상 공간에 따라
달라집니다. 배열의 각 요소는 MUST 다음 중 하나여야 합니다:alpha (선택): 색상의 알파 값을 나타내는 숫자. 값은 0에서
1 사이이며, 0은 완전 투명, 1은 완전 불투명입니다. 생략된 경우, 색상의 알파 값은 1(완전 불투명)으로
가정되어야 합니다 MUST.
hex (선택): 색상의 폴백 값을 나타내는 문자열. 폴백 색상은 제공된 알파 값과의 충돌을 피하기 위해 6자리 CSS HEX 색상 표기 형식으로 포맷되어야 합니다 MUST.일부 색상 공간에서 색을 지정할 때, 0 값은 모호할 수 있습니다. 예를 들어 HSL 색상 공간에서 색상(Hue)이 0인 색은 빨강을 의미합니다. 단일 색인
hsl(0, 0, 50)은 빨강으로 렌더링되지는 않지만, 다른 색과 보간할 때 완전히 탈채된 빨강으로 취급될 수 있습니다. 따라서 특정 색상 공간에서는
0만으로 해당 구성 요소의 값이 없음을 나타내기에 충분하지 않습니다.
CSS Color
Module Level 4는 구성 요소가 누락되었거나 적용되지 않음을 나타내기 위해 none 키워드를 도입했습니다. 예를
들어 HSL 색상 공간에서 none
키워드는 색상에 각도 값이 없음을 나타내는 데 사용할 수 있습니다. 색상의 hue 값이 none인 경우는 hue 각도가 0인 경우와
다르게 렌더링될 수 있으며 MAY, 보간 시 다른 결과를 낳을 수 있습니다.
none 키워드는 구성 요소가 적용되지 않거나 지정되지 않았음을 나타내기 위해 components
배열에서 사용할 수 있습니다 MAY.
다음 예시처럼 Hue를 0으로 지정한 경우와 비교해 보십시오:
두 예시는 모두 흰색으로 렌더링되지만, 첫 번째 예시는 hue가 적용되지 않음을 더 명확하게 표현합니다. 이는 색상 간 보간이나 색상 혼합 시 중요하며,
0 또는 none 구성 요소를 사용하는 경우 서로 다른 결과를 낳을 수 있습니다.
colorSpace 속성에 대해 다음 값들이 지원됩니다. components
배열은 색상 공간에 따라 달라집니다.
| 색상 공간 | 키 | 값 | |
|---|---|---|---|
| sRGB | "srgb" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| sRGB linear | "srgb-linear" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| HSL | "hsl" |
Hue | [0 - 360) |
| Saturation | [0 - 100] | ||
| Lightness | [0 - 100] | ||
| HWB | "hwb" |
Hue | [0 - 360) |
| Whiteness | [0 - 100] | ||
| Blackness | [0 - 100] | ||
| CIELAB | "lab" |
Lightness | [0 - 100] |
| A | [-Infinity - Infinity]* | ||
| B | [-Infinity - Infinity]* | ||
| LCH | "lch" |
Lightness | [0 - 100] |
| Chroma | [0 - Infinity]** | ||
| Hue | [0 - 360) | ||
| OKLAB | "oklab" |
Lightness | [0 - 1] |
| A | [-Infinity - Infinity]† | ||
| B | [-Infinity - Infinity]† | ||
| OKLCH | "oklch" |
Lightness | [0 - 1] |
| Chroma | [0 - Infinity]‡ | ||
| Hue | [0 - 360) | ||
| Display P3 | "display-p3" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| A98 RGB | "a98-rgb" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| ProPhoto RGB | "prophoto-rgb" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| Rec 2020 | "rec2020" |
Red | [0 - 1] |
| Green | [0 - 1] | ||
| Blue | [0 - 1] | ||
| XYZ-D65 | "xyz-d65" |
X | [0 - 1] |
| Y | [0 - 1] | ||
| Z | [0 - 1] | ||
| XYZ-D50 | "xyz-d50" |
X | [0 - 1] |
| Y | [0 - 1] | ||
| Z | [0 - 1] | ||
sRGB는 CSS Color Module 4 이전에 모든 CSS 색상의 표준 색상 공간이었습니다. 웹에서 가장 널리 사용되는 색상 공간이며, 대부분의 디자인 도구의 기본 색상 공간입니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.sRGB 색상 공간에 대한 자세한 정보는 Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB를 참조하세요.
sRGB linear는 sRGB의 선형화된 버전입니다. 일부 디자인 도구에서 선형 색상 공간에서 색을 표현하는 데 사용됩니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.sRGB linear 색상 공간에 대한 자세한 정보는 Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB를 참조하세요.
HSL은 sRGB의 극좌표 변환인 색상 모델이며, CSS Color Level 3 초기부터 지원되었습니다.
[Hue, Saturation, Lightness]
0 이상 360 미만의 숫자.
0에서
100 사이의 숫자.
0에서 100 사이의 숫자.
HSL 색상 공간에 대한 자세한 정보는 HSL: light vs saturation를 참조하세요.
또 다른 sRGB의 극좌표 변환인 색상 모델입니다.
[Hue, Whiteness, Blackness]
0 이상 360 미만의 숫자.0에서 100 사이의 숫자.0에서 100 사이의 숫자.HWB 색상 공간에 대한 자세한 정보는 HWB — A More Intuitive Hue-Based Color Model을 참조하세요.
CIELAB는 지각적으로 균일하도록 설계된 색상 공간입니다.
[L, A, B]
0에서 100 사이의 숫자.A와 B는 이론적으로 제한이 없지만 실제로는 -160에서 160을 넘지 않습니다.
CIELAB 색상 공간에 대한 자세한 정보는 ISO/CIE 11664-4:2019(E): Colorimetry — Part 4: CIE 1976 L*a*b* colour space를 참조하세요.
LCH는 CIELAB의 원통형 표현입니다.
[L, C, Hue]
0에서 100 사이의 숫자.0 이상 360 미만의 숫자.C의 최소값은 0로, 중립색(회색)을 의미하며, 최대값은 이론적으로 제한이 없지만 실제로는 230을 넘지 않습니다.
LCH 색상 공간에 대한 자세한 정보는 CSS Color Module Level 4의 CIELAB 및 LCH 섹션을 참조하세요.
OKLAB는 CIELAB보다 더 정확하도록 설계된 지각적으로 균일한 색상 공간입니다.
[L, A, B]
0에서 1 사이의 숫자.CIELAB와 마찬가지로 A와 B는 이론적으로 제한이 없지만 실제로는 -0.5에서 0.5를 넘지 않습니다.
OKLAB 색상 공간에 대한 자세한 정보는 OKLAB: A Perceptually Uniform Color Space를 참조하세요.
OKLCH는 OKLAB의 원통형 색상 모델입니다.
[L, Chroma, Hue]
0에서 1 사이의 숫자.0 이상 360 미만의 숫자.LCH와 마찬가지로 Chroma의 최소값은 0로 중립색(회색)을 의미하며, 최대값은 이론적으로 제한이 없지만 실제로는 0.5를 넘지 않습니다.
OKLCH 색상 공간에 대한 자세한 정보는 OKLAB: A Perceptually Uniform Color Space를 참조하세요.
Display P3는 넓은 색상 색역(gamut)을 가진 디스플레이에서 사용되도록 설계된 색상 공간입니다. 디지털 시네마에서 사용되는 P3 색상 공간을 기반으로 합니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.Display P3 색상 공간에 대한 자세한 정보는 Display P3의 정의를 참조하세요.
A98 RGB는 넓은 색역을 가진 디스플레이에서 사용되도록 설계된 색상 공간입니다. Adobe RGB 색상 공간을 기반으로 합니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.A98 색상 공간에 대해 더 알아보려면 위키백과의 Adobe RGB 색상 공간 문서를 참조하세요.
ProPhoto RGB는 넓은 색역을 가진 디스플레이에서 사용되도록 설계된 색상 공간입니다. ProPhoto RGB 색상 공간을 기반으로 합니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.ProPhoto RGB 색상 공간에 대한 자세한 정보는 Design and Optimization of the ProPhoto RGB Color Encodings 를 참조하세요.
Rec 2020은 넓은 색역을 가진 디스플레이에서 사용되도록 설계된 색상 공간입니다. Rec 2020 색상 공간을 기반으로 합니다.
[Red, Green, Blue]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.Rec 2020 색상 공간에 대한 자세한 정보는 Recommendation ITU-R BT.2020-2: Parameter values for ultra-high definition television systems for production and international programme exchange 를 참조하세요.
XYZ-D65는 인간의 눈으로 지각 가능한 모든 색을 표현할 수 있도록 설계된 색상 공간입니다. 모든 다른 공간은 XYZ로 변환 가능하므로 근본적인 색상 공간입니다. D65 조명체를 사용하는 CIE 1931 색상 공간을 기반으로 합니다. XYZ는 디자인 도구에서 흔히 사용되지는 않지만, 색상 변환에 유용합니다.
[X, Y, Z]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.XYZ-D65 색상 공간에 대한 자세한 정보는 Colorimetry, Fourth Edition. CIE 015:2018를 참조하세요.
XYZ-D50은 XYZ-D65와 유사하지만 D50 조명체를 사용합니다.
[X, Y, Z]
0에서 1 사이의 숫자.0에서 1 사이의 숫자.0에서 1 사이의 숫자.XYZ-D50 색상 공간에 대한 자세한 정보는 Colorimetry, Fourth Edition. CIE 015:2018를 참조하세요.
본 명세의 향후 버전은 디자인 도구에서의 채택 및 지원에 따라 추가 색상 공간 지원을 포함할 수 있습니다.
이 절은 비규범적입니다.
색역 매핑은 한 색상 공간에서 다른 색상 공간으로 색을 변환하는 과정입니다.
원본 색상 공간이 목표 색상 공간보다 더 넓은 색역을 가질 때 색역 매핑이 필요합니다. 이는 Display-P3 같은 광색역 공간에서 sRGB 같은 더 작은 색역 공간으로 색을 변환할 때 발생할 수 있습니다. 색역 매핑은 일부 색이 정확히 표현될 수 없더라도 목표 색상 공간에서 색이 정확하게 표현되도록 합니다.
색을 변환할 때 변환 도구는 사용 사례에 가장 적합한 색역 매핑 알고리즘을 사용할 수 있습니다 MAY. 예를 들어 목표가 색의 시각적 외형을 유지하는 것이라면 지각적(perceptual) 색역 매핑 알고리즘을 사용할 수 있습니다. 목표가 정확한 색상 값 보존이라면 채도(saturation) 또는 상대 색도(colorimetric) 색역 매핑 알고리즘을 사용할 수 있습니다.
토큰 작성자는 선택한 색역 매핑 알고리즘이 목표 색상 공간에서 색의 외형에 큰 영향을 줄 수 있음을 알아야 합니다. 색상 공간 간 변환이 필요하다면 변환 도구의 출력이 색을 정확하고 일관되게 표현하는지 검증하는 것이 중요합니다.
이 절은 비규범적입니다.
많은 경우 색은 새로운 색을 만들기 위해 보간 또는 혼합됩니다. 예를 들어 그라디언트를 만들 때 색은 두 개 이상의 기준 색 사이에서 자주 보간됩니다.
보간은 다양한 색상 공간에서 수행될 수 있고, 선택된 색상 공간에 따라 결과 색의 외형이 달라질 수 있습니다. 변환 도구는 색상 공간과 원하는 효과에 따라 서로 다른 보간 방법을 사용할 수 있습니다 MAY. 작성자는 색상 공간별 보간의 영향도를 이해하고 디자인 요구 사항을 충족하도록 보간된 색을 검증해야 합니다.
이 절은 비규범적입니다.
이 명세에서 계속 참조할 디자인 토큰의 주요 카테고리는 3가지입니다.
Base 토큰은 가장 낮은 수준의 토큰입니다.
디자인 토큰의 값은 다른 토큰에 대한 참조(reference)가 될 수 있습니다 MAY. 동일한 값은 여러 이름(별칭)을 가질 수 있습니다 MAY.
컴포넌트별 토큰은 컴포넌트 수준에서 디자인 결정을 제공하며 토큰 아키텍처의 관심사 분리를 개선합니다.
디자인 토큰(특히 색상 타입 토큰)의 명명 방식은 다양합니다. 가장 많이 구현되는 것으로 보이는 두 가지, 즉 서술형(descriptive)과 숫자형(numerical)을 확인했습니다.
Base 토큰의 경우 각 버전에서 다음과 같이 표현될 수 있습니다 MAY:
서술형 이름은 잔디(grass)나 수박(watermelon)처럼 사람이 상호작용하는 실체적 대상과 연결되기 때문에 더 감성적이고 친숙할 수 있습니다.
| 장점(Pros) | 단점(Cons) |
|---|---|
| 일부 사람들에게 더 직관적일 수 있으며, 브랜드 색과 제품 색을 구분하는 데 활용 가능 | 색상의 단계(예: 더 밝은지 더 어두운지, 서로 잘 짝을 이루는지)를 파악하기 더 어려움 |
| 이름이 비영어권 사용자에게 쉽게 인식되지 않을 수 있어 다국어 팀에는 적합하지 않을 수 있음 |
숫자형 토큰은 종종 색이 어떻게 진행되는지 구분하기 위해 스케일을 따릅니다. 예를 들어 정렬된 스케일을 사용할 때 color.blue.500이
기본 색이 되고, 가장 밝은 값은 color.blue.100, 가장 어두운 값은 color.blue.900이 될 수
있으며, 그 사이 값은 100 단위로 증가합니다. 향후 두 색 사이에 새 색을 추가해야 할 확장성을 위해 1, 2, 3, 4 같은 순차 숫자는 사용하지 않기를
권장합니다.
숫자형 토큰 이름은 필요 시 더 세밀한 구분을 가능하게 합니다. 예를 들어 뉴트럴 팔레트(회색 등)를 만들 때 가장 밝은 값에서는 25 단위로 증가하고 이후에는 100 단위로 증가하도록 할 수 있습니다.
숫자형 토큰은 경계형 스케일을 통해서도 명명될 수 있습니다. 이러한 토큰은 해당 토큰에 사용된 실제 색의 구분 값(예: HSL의 lightness 값)을 활용해 명도 변화를 나타냅니다.
토큰 이름은 도구에 의해 생성될 수도 있으며 MAY, 사용자가 기본 이름을 지정하고 도구가 기저 값의 변화에 따라 스케일 숫자를 덧붙입니다.
| 장점(Pros) | 단점(Cons) |
|---|---|
| 색 대비를 위한 서로 다른 토큰 간 매핑이 용이. 예: 100-400 토큰은 500-900 토큰과 짝지어 접근성 있는 색 조합 생성 | 기억하기 어렵고 토큰 간 차이가 직관적으로 드러나지 않음 |
| 경계형 스케일을 사용할 경우 토큰 이름이 기저 값에 대한 힌트를 줄 수 있음 |
Alias 토큰의 경우 이름 내에서 카테고리 + 속성을 우선해 비슷한 의도를 가진 토큰을 그룹화할 것을 권장합니다. 예를 들어 모든 배경 색상
Alias 토큰은 color.background.XXX로 시작할 가능성이 높습니다.
약어 사용은 피하는 것을 권장합니다. 예: “bg” 대신 “background” 사용으로 가독성 향상.
Alias 토큰은 다음과 같이 표현될 수 있습니다:
색상 Alias 토큰은 다음처럼 개념별로 묶을 수도 있습니다:
컴포넌트별 이름은 지원하는 컴포넌트로 시작해야 하며 컴포넌트 코드 인근에 위치하는 것이 좋습니다. 이들은 일반적으로 Alias 토큰을 참조하며 컴포넌트 간 스타일을 일관되게 유지하면서도 관심사 분리를 유지하는 데 도움이 됩니다.
이 명세에는 등재된 이슈가 없습니다.
Referenced in: