색
어떤 색이 있고 각 색이 무슨 역할인지 정한다. 어떤 상태일 때 무엇을 쓰는지는 상태 문서에 있다.
색을 바꾸는 방법 두 가지
| 범위 | 방법 |
|---|---|
| 화면 전체 | 브랜드 프리셋 185색 에서 고른다. 명령 한 줄이 nui-theme.css 를 만든다. 라이브러리 CSS 뒤에 불러오면 끝난다 |
| 한 컴포넌트 | className 으로 직접 지정한다. 배경과 글자를 같은 자리에 쓰게 되므로 짝을 놓치기 어렵다 |
/* 1) 화면 전체 */
import "@nui-kit/react/styles/index.css";
import "./nui-theme.css";
/* 2) 한 컴포넌트 — !important 는 필요 없다 */
.my-tooltip {
background: #222;
color: #fff;
}:root 에서 덮어쓰는 방법도 같은 이유로 지원하지 않는다.역할별 색
className 으로 색을 맞출 때 아래 이름을 참조한다.
글자
글자로 쓸 수 있는 단계는 11번과 12번뿐이다. 9번과 10번은 채워진 배경 자리라 글자로 쓰면 대비가 3점대로 떨어진다. text-disabled 만 9번을 쓴다. 비활성 요소는 WCAG 대비 요구에서 빠지기 때문이다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-text-primary | var(--nui-color-gray-12) | 별칭 | |
| --nui-text-secondary | var(--nui-color-gray-11) | 별칭 | |
| --nui-text-disabled | var(--nui-color-gray-9) | 별칭 | |
| --nui-text-danger | var(--nui-color-danger-11) | 별칭 | |
| --nui-text-info | var(--nui-color-info-11) | 별칭 | |
| --nui-text-on-inverse | var(--nui-color-white) | 별칭 | |
| --nui-text-on-accent | var(--nui-color-white) | 별칭 |
면
면은 콘텐츠를 담는 것의 배경이다. 글자나 아이콘이 아니라 화면의 층을 만든다. 층의 순서는 깊이 문서에 있다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-layer-basement | var(--nui-color-gray-2) | 별칭 | |
| --nui-layer-default | var(--nui-color-gray-1) | 별칭 | |
| --nui-layer-floating | var(--nui-color-gray-1) | 별칭 | |
| --nui-layer-inverse | var(--nui-color-gray-12) | 별칭 | |
| --nui-layer-overlay | rgb(0 0 0 / 50%) | — | |
| --nui-surface-neutral-soft | var(--nui-color-gray-a3) | 별칭 | |
| --nui-surface-neutral-subtle | var(--nui-color-gray-a4) | 별칭 | |
| --nui-surface-toast-error | var(--nui-color-danger-12) | 별칭 |
선
선 색은 굵기가 아니라 등장 빈도로 나눈다. 고르는 기준과 두께는 모양과 선 문서에 있다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-border-form | var(--nui-color-gray-6) | 별칭 | |
| --nui-border-section | var(--nui-color-gray-a5) | 별칭 | |
| --nui-border-divider | var(--nui-color-gray-a3) | 별칭 | |
| --nui-border-brand | var(--nui-color-brand-7) | 별칭 | |
| --nui-border-brand-subtle | var(--nui-color-brand-6) | 별칭 |
액션
액션은 버튼 계열이다. 색이 아니라 역할이 이름이라 이 버튼이 삭제인지만 물으면 정해진다. 각 역할의 -fg 는 그 배경 위에서 대비 4.5 대 1 을 넘는 글자색이다. -hover 와 -active 는 같은 색조의 다음 단계다. 누르는 순간 색이 한 단계씩 진해지고, 그림자나 투명도로 표현하지 않는다. 정부 가이드라인(KRDS)의 상태 색 규칙이다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-action-neutral | var(--nui-color-gray-12) | 별칭 | |
| --nui-action-primary | var(--nui-color-brand-9) | 별칭 | |
| --nui-action-secondary | var(--nui-color-secondary-9) | 별칭 | |
| --nui-action-danger | var(--nui-color-danger-9) | 별칭 | |
| --nui-action-warning | var(--nui-color-warning-9) | 별칭 | |
| --nui-action-neutral-fg | var(--nui-color-gray-1) | 별칭 | |
| --nui-action-primary-fg | var(--nui-color-brand-contrast) | 별칭 | |
| --nui-action-secondary-fg | var(--nui-color-secondary-contrast) | 별칭 | |
| --nui-action-danger-fg | var(--nui-color-danger-contrast) | 별칭 | |
| --nui-action-warning-fg | var(--nui-color-warning-contrast) | 별칭 | |
| --nui-action-neutral-hover | color-mix( in oklab, var(--nui-color-gray-12), var(--nui-color-white) 14% ) | — | |
| --nui-action-neutral-active | color-mix( in oklab, var(--nui-color-gray-12), var(--nui-color-white) 26% ) | — | |
| --nui-action-primary-hover | var(--nui-color-brand-10) | 별칭 | |
| --nui-action-primary-active | color-mix( in oklab, var(--nui-color-brand-10), #000 12% ) | — | |
| --nui-action-secondary-hover | var(--nui-color-secondary-10) | 별칭 | |
| --nui-action-secondary-active | color-mix( in oklab, var(--nui-color-secondary-10), #000 12% ) | — | |
| --nui-action-danger-hover | var(--nui-color-danger-10) | 별칭 | |
| --nui-action-danger-active | color-mix( in oklab, var(--nui-color-danger-10), #000 12% ) | — | |
| --nui-action-warning-hover | var(--nui-color-warning-10) | 별칭 | |
| --nui-action-warning-active | color-mix( in oklab, var(--nui-color-warning-10), #000 12% ) | — | |
| --nui-action-bg-hover | var(--nui-color-gray-a4) | 별칭 | |
| --nui-action-bg-active | var(--nui-color-gray-a5) | 별칭 | |
| --nui-action-bg-disabled | var(--nui-color-gray-3) | 별칭 | |
| --nui-action-fg-disabled | var(--nui-color-gray-9) | 별칭 | |
| --nui-action-border-disabled | var(--nui-color-gray-6) | 별칭 | |
| --nui-action-fg-line-disabled | var(--nui-color-gray-9) | 별칭 |
action-warning 만 글자가 어둡다. 노랑 배경에 흰 글자는 대비가 크게 미달한다. 노랑을 어둡게 하면 갈색이 되어 주의의 의미를 잃으므로 배경을 밝게 두고 글자를 어둡게 했다.입력 컨트롤
입력 컨트롤 색은 Textfield 와 Select, Checkbox 처럼 값을 받는 것들이 공유한다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-control-text | var(--nui-color-gray-12) | 별칭 | |
| --nui-control-text-muted | var(--nui-color-gray-11) | 별칭 | |
| --nui-control-text-placeholder | var(--nui-color-gray-10) | 별칭 | |
| --nui-control-text-disabled | var(--nui-text-disabled) | 별칭 | |
| --nui-control-text-error | var(--nui-color-danger-11) | 별칭 | |
| --nui-control-icon | var(--nui-color-gray-10) | 별칭 | |
| --nui-control-icon-disabled | var(--nui-color-gray-9) | 별칭 | |
| --nui-control-icon-strong | var(--nui-color-gray-12) | 별칭 | |
| --nui-control-bg | var(--nui-layer-default) | 별칭 | |
| --nui-control-bg-disabled | var(--nui-color-gray-3) | 별칭 | |
| --nui-control-bg-readonly | var(--nui-color-gray-2) | 별칭 | |
| --nui-control-bg-subtle | var(--nui-color-gray-3) | 별칭 | |
| --nui-control-bg-hover | var(--nui-color-gray-a4) | 별칭 | |
| --nui-control-bg-active | var(--nui-color-gray-a5) | 별칭 | |
| --nui-control-border | var(--nui-color-gray-9) | 별칭 | |
| --nui-control-border-hover | var(--nui-color-gray-10) | 별칭 | |
| --nui-control-border-disabled | var(--nui-color-gray-8) | 별칭 | |
| --nui-control-border-error | var(--nui-color-danger-8) | 별칭 | |
| --nui-control-accent | var(--nui-color-brand-9) | 별칭 | |
| --nui-control-accent-soft | var(--nui-color-brand-3) | 별칭 | |
| --nui-control-accent-error | var(--nui-color-danger-9) | 별칭 | |
| --nui-control-selection-disabled | var(--nui-color-gray-8) | 별칭 | |
| --nui-control-track | var(--nui-color-gray-9) | 별칭 | |
| --nui-control-thumb | var(--nui-color-white) | 별칭 | |
| --nui-control-selection-text | var(--nui-color-brand-11) | 별칭 | |
| --nui-focus-color | var(--nui-color-brand-9) | 별칭 |
상태 표시
상태 표시는 알림이나 배지처럼 은은한 면으로 알릴 때 쓴다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-status-error-soft | var(--nui-color-danger-3) | 별칭 | |
| --nui-status-success-soft | var(--nui-color-success-3) | 별칭 | |
| --nui-status-warning-soft | var(--nui-color-warning-3) | 별칭 | |
| --nui-status-info-soft | var(--nui-color-info-3) | 별칭 |
12단계 팔레트
모든 색이 12단계를 갖고 단계마다 쓸 자리가 정해져 있다. 어느 색을 쓰든 입력 테두리는 9번, 채워진 배경도 9번, hover 는 10번이다. 테두리를 9번에 두는 이유는 배경과 3 대 1 이 넘어야 저시력 사용자에게도 보이기 때문이다.
| 단계 | 역할 | 쓰는 곳 |
|---|---|---|
| 1 · 2 | 배경 | 화면 바닥 · 은은한 표면 |
| 3 · 4 · 5 | 컴포넌트 배경 | 기본 · hover · 눌림 |
| 6 · 7 · 8 | 테두리 | 구분선 · 컨트롤 테두리 · 강조와 포커스 |
| 9 · 10 | solid 배경 | 브랜드 색이 가장 선명한 단계 · 그 hover |
| 11 · 12 | 글자 | 보조 텍스트 · 본문 텍스트 |
다크 테마
OS 가 다크면 아무 설정 없이 다크로 그려진다. 순서는 셋이다. data-theme="dark" 를 주면 그것이 이기고, 없으면 OS 설정을 따르고, data-theme="light" 를 주면 OS 가 다크여도 라이트를 유지한다.
바뀌는 것은 12단계 값뿐이다. action-primary 같은 역할 이름은 그대로라 컴포넌트 CSS 는 고칠 것이 없다. 예외는 셋 — 층(layer-*)은 "위가 밝다"를 지키려고 순서를 바꾸고, 토스트·툴팁 위 글자(text-on-inverse)는 표면이 밝아지므로 어두워지고, 에러 토스트 배경이 진해진다.
verify:a11y 가 두 테마를 다 잰다.팔레트 전량
컴포넌트는 팔레트를 직접 참조하지 않는다. 참조하면 브랜드 색을 바꿔도 그 컴포넌트만 옛 색으로 남는다.
| 토큰 | 값 | 비고 | |
|---|---|---|---|
| --nui-color-white | #fff | — | |
| --nui-color-brand-1 | #f9fefd | — | |
| --nui-color-brand-2 | #f2fbfa | — | |
| --nui-color-brand-3 | #def8f4 | — | |
| --nui-color-brand-4 | #c9f3ed | — | |
| --nui-color-brand-5 | #b3ebe3 | — | |
| --nui-color-brand-6 | #9cdfd5 | — | |
| --nui-color-brand-7 | #7ecec4 | — | |
| --nui-color-brand-8 | #4dbaad | — | |
| --nui-color-brand-9 | #01796f | — | |
| --nui-color-brand-10 | #006b61 | — | |
| --nui-color-brand-11 | #00776d | — | |
| --nui-color-brand-12 | #18423d | — | |
| --nui-color-brand-a4 | #00c7aa36 | — | |
| --nui-color-brand-a5 | #00bca24c | — | |
| --nui-color-brand-a6 | #00ad9363 | — | |
| --nui-color-brand-a7 | #009f8b81 | — | |
| --nui-color-secondary-1 | #fafdfd | — | |
| --nui-color-secondary-2 | #f4fbfa | — | |
| --nui-color-secondary-3 | #e6f5f2 | — | |
| --nui-color-secondary-4 | #d8eeeb | — | |
| --nui-color-secondary-5 | #cae7e2 | — | |
| --nui-color-secondary-6 | #bcded9 | — | |
| --nui-color-secondary-7 | #a9d1cb | — | |
| --nui-color-secondary-8 | #8cbfb7 | — | |
| --nui-color-secondary-9 | #33615b | — | |
| --nui-color-secondary-10 | #24524c | — | |
| --nui-color-secondary-11 | #406e68 | — | |
| --nui-color-secondary-12 | #172e2b | — | |
| --nui-color-secondary-a4 | #00907d27 | — | |
| --nui-color-secondary-a5 | #008c7435 | — | |
| --nui-color-secondary-a6 | #00826f43 | — | |
| --nui-color-secondary-a7 | #00776556 | — | |
| --nui-color-gray-1 | #fcfdfc | — | |
| --nui-color-gray-2 | #f8f9f8 | — | |
| --nui-color-gray-3 | #eff1ef | — | |
| --nui-color-gray-4 | #e7e9e7 | — | |
| --nui-color-gray-5 | #e0e1e0 | — | |
| --nui-color-gray-6 | #d8dad8 | — | |
| --nui-color-gray-7 | #cdcfcd | — | |
| --nui-color-gray-8 | #b9bcba | — | |
| --nui-color-gray-9 | #898d8a | — | |
| --nui-color-gray-10 | #7f8380 | — | |
| --nui-color-gray-11 | #616462 | — | |
| --nui-color-gray-12 | #1c201d | — | |
| --nui-color-gray-a3 | #00200010 | — | |
| --nui-color-gray-a4 | #00160018 | — | |
| --nui-color-gray-a5 | #0009001f | — | |
| --nui-color-gray-a6 | #000e0027 | — | |
| --nui-color-gray-a7 | #000b0032 | — | |
| --nui-color-danger-1 | #fffcfc | — | |
| --nui-color-danger-2 | #fff7f7 | — | |
| --nui-color-danger-3 | #feebe9 | — | |
| --nui-color-danger-4 | #ffdcd7 | — | |
| --nui-color-danger-5 | #ffcec8 | — | |
| --nui-color-danger-6 | #fdbeb7 | — | |
| --nui-color-danger-7 | #f5aaa3 | — | |
| --nui-color-danger-8 | #eb8f88 | — | |
| --nui-color-danger-9 | #ce2c31 | — | |
| --nui-color-danger-10 | #be1523 | — | |
| --nui-color-danger-11 | #ce2c31 | — | |
| --nui-color-danger-12 | #641818 | — | |
| --nui-color-danger-a4 | #ff200028 | — | |
| --nui-color-danger-a5 | #ff1c0037 | — | |
| --nui-color-danger-a6 | #f8190048 | — | |
| --nui-color-danger-a7 | #e414005c | — | |
| --nui-color-warning-1 | #fefdfb | — | |
| --nui-color-warning-2 | #fffaea | — | |
| --nui-color-warning-3 | #fff2c3 | — | |
| --nui-color-warning-4 | #ffe9a0 | — | |
| --nui-color-warning-5 | #ffde7f | — | |
| --nui-color-warning-6 | #fcd27a | — | |
| --nui-color-warning-7 | #e9c16e | — | |
| --nui-color-warning-8 | #d7a944 | — | |
| --nui-color-warning-9 | #ffca2f | — | |
| --nui-color-warning-10 | #fac137 | — | |
| --nui-color-warning-11 | #9b6f00 | — | |
| --nui-color-warning-12 | #463a20 | — | |
| --nui-color-warning-a5 | #ffbe0080 | — | |
| --nui-color-warning-a6 | #faa90085 | — | |
| --nui-color-warning-a7 | #d9920091 | — | |
| --nui-color-success-1 | #fbfefc | — | |
| --nui-color-success-2 | #f5fbf7 | — | |
| --nui-color-success-3 | #e7f6ed | — | |
| --nui-color-success-4 | #d9f0e2 | — | |
| --nui-color-success-5 | #c8e7d5 | — | |
| --nui-color-success-6 | #b3dcc4 | — | |
| --nui-color-success-7 | #97ccae | — | |
| --nui-color-success-8 | #6eb68f | — | |
| --nui-color-success-9 | #218358 | — | |
| --nui-color-success-10 | #06754b | — | |
| --nui-color-success-11 | #1a7f54 | — | |
| --nui-color-success-12 | #223a2d | — | |
| --nui-color-success-a5 | #00903d37 | — | |
| --nui-color-success-a6 | #008a3a4c | — | |
| --nui-color-success-a7 | #00823968 | — | |
| --nui-color-info-1 | #fbfdff | — | |
| --nui-color-info-2 | #f5f9fe | — | |
| --nui-color-info-3 | #eaf3fd | — | |
| --nui-color-info-4 | #dcecff | — | |
| --nui-color-info-5 | #cbe3fe | — | |
| --nui-color-info-6 | #b7d5f9 | — | |
| --nui-color-info-7 | #9dc4f1 | — | |
| --nui-color-info-8 | #78ade9 | — | |
| --nui-color-info-9 | #0d74ce | — | |
| --nui-color-info-10 | #0066bf | — | |
| --nui-color-info-11 | #0e75cf | — | |
| --nui-color-info-12 | #0d355c | — | |
| --nui-color-info-a5 | #0076fb34 | — | |
| --nui-color-info-a6 | #006bea48 | — | |
| --nui-color-info-a7 | #0066db62 | — | |
| --nui-color-brand-contrast | #ffffff | — | |
| --nui-color-secondary-contrast | #ffffff | — | |
| --nui-color-danger-contrast | #ffffff | — | |
| --nui-color-warning-contrast | #2b2009 | — | |
| --nui-color-success-contrast | #ffffff | — | |
| --nui-color-info-contrast | #ffffff | — |