커스터마이징
만질 수 있는 자리는 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 달력 · 날짜 · 크기 (요소 있음)- 옵션이 컴포넌트 이름 바로 뒤에 온다. large 버튼을 통째로 손볼 때 한자리에 모이기 때문이다
- 옵션 이름은 큰 것부터
lg·md·sm이고 기본은md다 - 크기 옵션마다 이름을 나눈다. 하나로 덮으면 세 크기가 전부 같아진다
- 없는 옵션은 이름에 넣지 않는다. 테두리 두께는 컴포넌트당 하나다
전체 목록
이 표는 컴포넌트 SCSS 에서 자동 생성한다.
| 컴포넌트 | 변수 | 기본값 | 비고 |
|---|---|---|---|
| Accordion | --nui-accordion--border-width | var(--nui-border-width-1) | — · 4자리를 함께 움직인다 |
| --nui-accordion--gap | var(--nui-space-3) | — | |
| --nui-accordion--radius | var(--nui-radius-2_5) | — | |
| Button · IconButton · ButtonLink | --nui-button--border-width | var(--nui-border-width-1) | — |
| --nui-button--lg-height | var(--nui-size-field) | 크기 large | |
| --nui-button--lg-padding-x | var(--nui-space-6) | 크기 large | |
| --nui-button--md-height | var(--nui-size-control-xl) | 크기 medium (기본) | |
| --nui-button--md-padding-x | var(--nui-space-6) | 크기 medium (기본) | |
| --nui-button--min-width | 7.5rem | — | |
| --nui-button--radius | var(--nui-radius-1_5) | — | |
| --nui-button--round-radius | var(--nui-radius-full) | 크기 round | |
| --nui-button--sm-height | var(--nui-size-control-lg) | 크기 small | |
| --nui-button--sm-padding-x | var(--nui-space-4) | 크기 small | |
| Checkbox · Radio · Switch | --nui-selector--border-width | var(--nui-border-width-1) | — |
| --nui-selector--size | var(--nui-size-selector) | — · 2자리를 함께 움직인다 | |
| Datepicker 계열 | --nui-datepicker--border-width | var(--nui-border-width-1) | — · 3자리를 함께 움직인다 |
| --nui-datepicker--day-button-size | var(--nui-size-control-md) | — | |
| --nui-datepicker--day-radius | var(--nui-radius-1_5) | — | |
| --nui-datepicker--day-size | var(--nui-size-control-option) | — | |
| --nui-datepicker--dropdown-radius | var(--nui-radius-3) | — | |
| Popup 계열 | --nui-popup--border-width | var(--nui-border-width-1) | — · 3자리를 함께 움직인다 |
| --nui-popup--lg-width | min(100%, 40rem) | 크기 large | |
| --nui-popup--md-width | min(100%, 30rem) | 크기 medium (기본) | |
| --nui-popup--radius | var(--nui-radius-3) | — | |
| --nui-popup--sm-width | min(100%, 22.5rem) | 크기 small | |
| Select · MultiSelect | --nui-select--border-width | var(--nui-border-width-1) | — · 3자리를 함께 움직인다 |
| --nui-select--height | var(--nui-size-field) | — | |
| --nui-select--radius | var(--nui-radius-1_5) | — | |
| Switch | --nui-switch--height | var(--nui-size-switch-track-h) | — · 2자리를 함께 움직인다 |
| --nui-switch--width | var(--nui-size-switch-track-w) | — · 2자리를 함께 움직인다 | |
| Textarea | --nui-textarea--border-width | var(--nui-border-width-1) | — |
| --nui-textarea--min-height | calc(var(--nui-size-field) * 2) | — | |
| --nui-textarea--radius | var(--nui-radius-1_5) | — | |
| Textfield · Search · Password | --nui-textfield--border-width | var(--nui-border-width-1) | — |
| --nui-textfield--height | var(--nui-size-field) | — | |
| --nui-textfield--radius | var(--nui-radius-1_5) | — | |
| Toast | --nui-toast--radius | var(--nui-radius-2) | — |
| --nui-toast--width | min(100%, 26.25rem) | — | |
| Tooltip | --nui-tooltip--max-width | min(17.5rem, calc(100vw - 2rem)) | — |
| --nui-tooltip--radius | var(--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 가 아니라 예고 없이 바뀐다.필요한 자리가 있으면 알려달라
변수를 새로 여는 것은 호환을 깨지 않는다. 열어둔 것을 닫으면 쓰는 쪽 코드가 깨지므로 적게 열고 시작했다. 나중에 추가하는 비용은 크지 않다.