커스터마이징

만질 수 있는 자리는 40다. CSS 변수를 덮어쓰면 된다.

!important 가 필요 없다

라이브러리 CSS 는 전부 @layer nui.* 안에 있다. Cascade 는 상세도보다 레이어를 먼저 보므로 레이어 밖 선언이 항상 이긴다. 상세도를 아무리 올려도 라이브러리 쪽이 진다.

origin  →  importance  →  @layer  →  specificity(상세도)
                          ↑
                  상세도보다 먼저 본다
/* 이것으로 충분하다 */
.my-button { border-radius: 0; }

/* 라이브러리 쪽은 상세도를 아무리 올려도 진다 */
@layer nui.components {
  html body .nui-button.nui-button--small { border-radius: 4px; }
}
!important 를 쓰면 오히려 자기 규칙끼리 부딪힌다. .my-button!important 를 걸면 .my-button:hover 의 값이 먹지 않는다.

어디를 만지나

바꾸고 싶은 것방법범위
화면 전체 색브랜드 프리셋 185색 에서 고른다화면 전체
한 컴포넌트의 색className 으로 지정한다그 요소만
치수 · 모양 · 선 두께컴포넌트별 변수 40그 컴포넌트 전부

이름을 읽는 법

이름은 컴포넌트, 옵션, 요소, 속성 순서로 붙는다. 읽으면 문장이 된다.

--nui-button--lg-height        버튼 · large 옵션 · 높이
--nui-button--radius           버튼 · 둥글기 (옵션 없음)
--nui-button--border-width     버튼 · 테두리 두께 (옵션 없음)
--nui-datepicker--day-size     달력 · 날짜 · 크기 (요소 있음)

전체 목록

이 표는 컴포넌트 SCSS 에서 자동 생성한다.

컴포넌트변수기본값비고
Accordion--nui-accordion--border-widthvar(--nui-border-width-1) · 4자리를 함께 움직인다
--nui-accordion--gapvar(--nui-space-3)
--nui-accordion--radiusvar(--nui-radius-2_5)
Button · IconButton · ButtonLink--nui-button--border-widthvar(--nui-border-width-1)
--nui-button--lg-heightvar(--nui-size-field)크기 large
--nui-button--lg-padding-xvar(--nui-space-6)크기 large
--nui-button--md-heightvar(--nui-size-control-xl)크기 medium (기본)
--nui-button--md-padding-xvar(--nui-space-6)크기 medium (기본)
--nui-button--min-width7.5rem
--nui-button--radiusvar(--nui-radius-1_5)
--nui-button--round-radiusvar(--nui-radius-full)크기 round
--nui-button--sm-heightvar(--nui-size-control-lg)크기 small
--nui-button--sm-padding-xvar(--nui-space-4)크기 small
Checkbox · Radio · Switch--nui-selector--border-widthvar(--nui-border-width-1)
--nui-selector--sizevar(--nui-size-selector) · 2자리를 함께 움직인다
Datepicker 계열--nui-datepicker--border-widthvar(--nui-border-width-1) · 3자리를 함께 움직인다
--nui-datepicker--day-button-sizevar(--nui-size-control-md)
--nui-datepicker--day-radiusvar(--nui-radius-1_5)
--nui-datepicker--day-sizevar(--nui-size-control-option)
--nui-datepicker--dropdown-radiusvar(--nui-radius-3)
Popup 계열--nui-popup--border-widthvar(--nui-border-width-1) · 3자리를 함께 움직인다
--nui-popup--lg-widthmin(100%, 40rem)크기 large
--nui-popup--md-widthmin(100%, 30rem)크기 medium (기본)
--nui-popup--radiusvar(--nui-radius-3)
--nui-popup--sm-widthmin(100%, 22.5rem)크기 small
Select · MultiSelect--nui-select--border-widthvar(--nui-border-width-1) · 3자리를 함께 움직인다
--nui-select--heightvar(--nui-size-field)
--nui-select--radiusvar(--nui-radius-1_5)
Switch--nui-switch--heightvar(--nui-size-switch-track-h) · 2자리를 함께 움직인다
--nui-switch--widthvar(--nui-size-switch-track-w) · 2자리를 함께 움직인다
Textarea--nui-textarea--border-widthvar(--nui-border-width-1)
--nui-textarea--min-heightcalc(var(--nui-size-field) * 2)
--nui-textarea--radiusvar(--nui-radius-1_5)
Textfield · Search · Password--nui-textfield--border-widthvar(--nui-border-width-1)
--nui-textfield--heightvar(--nui-size-field)
--nui-textfield--radiusvar(--nui-radius-1_5)
Toast--nui-toast--radiusvar(--nui-radius-2)
--nui-toast--widthmin(100%, 26.25rem)
Tooltip--nui-tooltip--max-widthmin(17.5rem, calc(100vw - 2rem))
--nui-tooltip--radiusvar(--nui-radius-1_5)
/* 전역으로 — 모든 버튼 */
:root {
  --nui-button--radius: 0;
  --nui-button--lg-height: 3.75rem;
  --nui-button--border-width: 2px;
}

/* 부분적으로 — 상속되므로 하위에만 적용된다 */
.compact-form {
  --nui-textfield--height: 2.5rem;
  --nui-select--height: 2.5rem;
}

막아둔 것

무엇대신
컴포넌트별 색배경과 글자는 짝이라 한쪽만 바꾸면 대비가 깨지는데 화면에 드러나지 않는다className 또는 브랜드 프리셋
포커스 링 두께얇아지면 키보드로 조작하는 사용자만 영향을 받는다
바깥 여백 · 배치margin · position · z-index 는 부모가 소유한다감싸는 요소에서 className 으로
--nui-_ 로 시작하는 변수는 내부 배선이다. variant 가 값을 갈아끼우는 수단이라 덮어쓰면 variant 가 무력화된다. 공개 API 가 아니라 예고 없이 바뀐다.

필요한 자리가 있으면 알려달라

변수를 새로 여는 것은 호환을 깨지 않는다. 열어둔 것을 닫으면 쓰는 쪽 코드가 깨지므로 적게 열고 시작했다. 나중에 추가하는 비용은 크지 않다.