CSS 변수 레퍼런스
DM Note에서 스타일링에 사용할 수 있는 모든 CSS 변수를 정리했습니다.
키 스타일 변수
키 요소에 적용되는 CSS 변수입니다. [data-state="inactive"] 또는 [data-state="active"] 선택자와 함께 사용합니다.
| 변수 | 설명 | 타입 | 예시 |
|---|---|---|---|
--key-radius | 키 모서리의 둥근 정도 | <length> | 8px, 50% |
--key-bg | 키 배경색과 저장된 배경 이미지 해제 | <color> | #ff2b80 |
--key-bg-image | 키의 배경 이미지 | <image> | linear-gradient(90deg, #f0f, #0ff) |
--key-border | 키 테두리와 저장된 보더 링 해제 | <border> | 2px solid #fff, none |
--key-border-image | 저장된 보더 링의 이미지 교체 | <image> | linear-gradient(90deg, #f0f, #0ff) |
--key-padding | 키 내부 여백 | <length> | 0px, 3px |
--key-text-color | 키 텍스트 색상 | <color> | #ffffff |
--key-text-image | 저장된 텍스트 페인트의 이미지 교체 | <image> | linear-gradient(0deg, #f0f, #0ff) |
--key-text-position | 텍스트 페인트 박스 위치 | <position> | 0% 0% |
--key-text-size | 텍스트 페인트 박스 크기 | <bg-size> | auto, 100% 100% |
--key-text-repeat | 텍스트 페인트 반복 방식 | <repeat-style> | no-repeat |
--key-shadow | 대기 및 공통 폴백 그림자 | <shadow> | 0 4px 10px rgba(0,0,0,.28), none |
--key-active-shadow | 입력 상태 그림자 | <shadow> | 0 3px 8px rgba(0,0,0,.32), none |
--key-offset-x | 활성 상태에서 X축 이동량 | <length> | 0px, 2px |
--key-offset-y | 활성 상태에서 Y축 이동량 | <length> | 4px |
--key-image-fit | 저장된 이미지의 맞춤 방식 교체 | <object-fit> | cover, contain |
--key-image-transform | 저장된 이미지 변환(이동·회전·크기) 교체 | <transform> | rotate(15deg) scale(1.2) |
--key-image-z | 이미지 레이어 z-index | <integer> | 0, 3 |
인라인 스타일 우선이 꺼져 있으면 속성 패널의 색·그라데이션·보더·글꼴·
그림자는 낮은 우선순위의 기본값으로만 적용됩니다. --key-bg를 지정하면 저장된
배경 그라데이션이 자동으로 사라지고, --key-border를 지정하면 저장된
그라데이션 보더 링과 링 여백이 함께 사라집니다. 테두리를 지정하지 않은 요소의
기본 테두리도 위에서 아래로 옅어지는 1px 그라데이션 링이라 같은 방식으로
대체됩니다. 링은 자식 요소라 키에 일반 border 규칙을 걸면 루트 테두리만
바뀌므로, 링까지 지우려면 --key-border로 해제하거나 [data-key-element] > [data-gradient-border-ring]을 숨기세요. 사용자 그라데이션은
--key-bg-image나 표준 background 속성으로 지정할 수 있습니다.
--key-text-color(또는 라벨에 거는 일반 color 규칙)를 지정하면 저장된
텍스트 그라데이션이 사라집니다. 사용자 텍스트 그라데이션은
--key-text-image와 --key-text-color: transparent를 함께 지정합니다. 글리프
채움을 비워야 그라데이션이 보이므로, 저장된 그라데이션이 없는 키에서
--key-text-image만 지정하면 불투명한 글자 색에 가려집니다.
이미지 레이어
속성 패널에서 지정한 이미지는 키 루트의 자식 img[data-key-image-layer]로
링 여백(padding) 안쪽에 절대 배치됩니다. 루트에는 data-key-image와 함께
배치 모드 data-key-image-mode="replace|overlay"가 붙습니다.
replace(기본): 앱 기본 배경·테두리·그림자와 텍스트가 숨겨지고 이미지가 표면이 됩니다. 사용자 CSS의--key-border나padding은 그대로 살아 있어 이미지가 그 안쪽에 그려지고--key-radius로 잘립니다. 테두리 없이 이미지만 보이게 하려면[data-key-image-mode="replace"] { --key-border: none; --key-padding: 0 }처럼 직접 해제하세요.overlay: 키 표면·텍스트·카운터가 그대로 그려지고 이미지가 그 위에 얹힙니다. 이미지는 키의border-radius를 상속하고, 루트overflow가visible이라 이동·회전·확대한 이미지가 키 밖으로 나갈 수 있습니다. 잘라내려면overflow: hidden을 지정하세요.
저장된 맞춤·변환·z 순서는 --key-image-fit, --key-image-transform,
--key-image-z로 덮어씁니다. 인라인 스타일 우선을 켜면 이 셋이 인라인 선언으로
승격되어 --key-image-* 변수가 적용되지 않습니다. 이 모드에서는 object-fit·
transform·z-index를 !important로 직접 덮어쓰세요.
사용 예시
[data-state='inactive'] {
--key-radius: 8px;
--key-bg: #2a2a2a;
--key-border: 2px solid #444;
--key-text-color: #888;
}
[data-state='active'] {
--key-radius: 8px;
--key-bg: #ff2b80;
--key-border: 2px solid #ff2b80;
--key-text-color: #fff;
--key-offset-x: 0px;
--key-offset-y: 4px;
}카운터 스타일 변수
카운터 요소에 적용되는 CSS 변수입니다. .counter[data-counter-state="..."] 선택자와 함께 사용합니다.
| 변수 | 설명 | 타입 | 예시 |
|---|---|---|---|
--counter-color | 텍스트 색상과 저장된 fill 해제 | <color> | #ffffff |
--counter-fill-image | 텍스트 fill 이미지 | <image> | linear-gradient(90deg, #f0f, #0ff) |
--counter-fill-clip | fill 클립 영역 | <box> | text, border-box |
--counter-fill-position | fill 배경 위치 | <position> | 0% 0%, 4px 10px |
--counter-fill-size | fill 배경 크기 | <bg-size> | auto, 100px 80px |
--counter-fill-repeat | fill 반복 방식 | <repeat-style> | no-repeat |
--counter-text-fill-color | WebKit 텍스트 채움색 | <color> | transparent, currentcolor |
--counter-color만 지정해도 앱에 저장된 카운터 fill 그라데이션은 자동으로
해제됩니다. 앱에서 만든 그라데이션은 글자 잉크 박스에 맞춰 깔리며, 배치를 직접
잡으려면 --counter-fill-position과 --counter-fill-size를 지정합니다. CSS로
새 fill 그라데이션을 만들 때는 다음 세 변수를 함께 사용합니다.
.counter {
--counter-fill-image: linear-gradient(90deg, #f0f, #0ff);
--counter-fill-clip: text;
--counter-text-fill-color: transparent;
}사용 예시
.counter[data-counter-state='inactive'] {
--counter-color: #666;
}
.counter[data-counter-state='active'] {
--counter-color: #ff2b80;
}그래프 스타일 변수
그래프 요소에 적용되는 CSS 변수입니다.
그래프의 인라인 스타일 우선을 끄면 아래 변수로 외형을 제어할 수 있습니다.
테두리를 지정하지 않은 그래프는 키와 같은 기본 1px 그라데이션 링을 그리며
--graph-border가 링과 링 여백을 함께 해제합니다.
| 변수 | 설명 | 타입 | 예시 |
|---|---|---|---|
--graph-bg | 그래프 배경 | <color> | rgba(17, 17, 20, 0.85) |
--graph-border | 그래프 테두리와 저장된 보더 링 해제 | <border> | 1px solid #7dd3fc, none |
--graph-border-image | 저장된 보더 링의 이미지 교체 | <image> | linear-gradient(90deg, #f0f, #0ff) |
--graph-padding | 그래프 내부 여백 | <length> | 0px, 3px |
--graph-radius | 그래프 라운딩 | <length> | 10px |
--graph-color | 라인/바 색상 | <color> | #86efac |
사용 예시
.kps-graph {
--graph-bg: rgba(7, 10, 18, 0.72);
--graph-border: 1px solid rgba(125, 211, 252, 0.55);
--graph-radius: 12px;
--graph-color: #7dd3fc;
}노브 스타일 변수
노브의 인라인 스타일 우선을 끄면 아래 변수를 사용할 수 있습니다. 노브에
지정한 클래스는 위치 래퍼에 있으므로 일반 속성을 직접 지정할 때는
.노브클래스 [data-knob-element] 선택자를 사용하세요. 테두리를 지정하지 않은
노브는 키와 같은 기본 1px 그라데이션 링을 그리며 --knob-border가 링과
링 여백을 함께 해제합니다.
| 변수 | 설명 | 타입 | 예시 |
|---|---|---|---|
--knob-bg | 노브 배경 | <color> | #222 |
--knob-border | 노브 테두리와 저장된 보더 링 해제 | <border> | 2px solid #fff, none |
--knob-border-image | 저장된 보더 링의 이미지 교체 | <image> | linear-gradient(90deg, #f0f, #0ff) |
--knob-padding | 노브 내부 여백 | <length> | 0px, 3px |
--knob-radius | 노브 모서리 | <length> | 50%, 8px |
--knob-shadow | 노브 그림자 | <shadow> | 0 4px 10px rgba(0,0,0,.3) |
--knob-active-shadow | 회전 중 그림자 | <shadow> | 0 3px 8px rgba(0,0,0,.32) |
--knob-indicator | 중앙 회전 표시 색상 | <color> | #fff |
.volume-knob {
--knob-bg: #17171b;
--knob-border: none;
--knob-indicator: #ff2b80;
}선택자 레퍼런스
키 선택자
| 선택자 | 설명 |
|---|---|
[data-state="inactive"] | 비활성 상태의 모든 키 |
[data-state="active"] | 활성 상태의 모든 키 |
[data-state="inactive"], [data-state="active"] | 모든 상태의 모든 키 |
.클래스명[data-state="active"] | 특정 클래스를 가진 키의 활성 상태 |
카운터 선택자
| 선택자 | 설명 |
|---|---|
.counter | 모든 카운터 |
.counter[data-counter-state="inactive"] | 비활성 상태의 카운터 |
.counter[data-counter-state="active"] | 활성 상태의 카운터 |
.클래스명 .counter[data-counter-state="active"] | 특정 클래스를 가진 키의 카운터 |
그래프 선택자
| 선택자 | 설명 |
|---|---|
.그래프클래스명 | 특정 그래프 컨테이너 스타일링 |
.그래프클래스명 svg | 라인 그래프 SVG(선/채움) 스타일링 |
.그래프클래스명 > div | 그래프 내부 플롯 영역(라인/바 공통) |
.그래프클래스명 > div > div | 바 그래프 막대 개별 스타일링 (bar 모드) |
노브 선택자
| 선택자 | 설명 |
|---|---|
[data-knob-element] | 모든 노브 표면 |
[data-knob-state="inactive"] | 입력 대기 중인 노브 표면 |
[data-knob-state="active"] | 입력 중인 노브 표면 |
.노브클래스 [data-knob-element] | 특정 클래스의 노브 표면 |
[data-knob-indicator] | 노브 중앙 회전 표시 |
표준 CSS 속성
인라인 스타일 우선이 꺼진 요소에는 다음과 같은 표준 외형 속성을 직접 사용할
수 있습니다. 위치는 앱이 관리하므로 키·그래프·노브 이동에는
--key-offset-x/--key-offset-y를 사용하세요.
자주 사용되는 속성
[data-state='active'] {
/* 그림자 효과 */
box-shadow: 0px 0px 8px #ff2b80;
/* 텍스트 그림자 */
text-shadow: 0px 0px 4px #ff2b80;
/* 트랜지션 */
transition: all 0.1s ease-in-out;
/* 폰트 스타일 */
font-size: 24px;
font-weight: 700;
font-family: 'Roboto', sans-serif;
/* 필터 */
filter: brightness(1.2);
}주의사항
!important 사용
요소의 인라인 스타일 우선을 켠 경우에만 일반 선언보다 인라인 값이 우선합니다.
이 모드까지 강제로 덮어쓸 때는 실제 렌더 CSS 속성 자체에 !important를 사용해야
합니다. 폴백 커스텀 속성에 붙여도 인라인 속성 선언보다 우선할 수 없습니다:
[data-state='active'] {
background: #ff2b80 !important;
box-shadow: 0px 0px 8px #ff2b80 !important;
}border: none !important는 루트 테두리만 지웁니다. 그라데이션 보더 링(앱 기본
링과 저장된 링)은 자식 요소라 !important가 필요 없는 테두리 변수로 해제하거나
링을 직접 숨기세요:
.my-key {
--key-border: none;
}
/* 또는 */
.my-key [data-gradient-border-ring] {
display: none;
}브라우저 호환성
DM Note는 Windows의 WebView2와 macOS의 WKWebView에서 동작합니다. 운영체제별 WebView가 지원하는 최신 CSS 기능을 사용할 수 있습니다:
- CSS Variables (Custom Properties) ✅
- CSS Grid / Flexbox ✅
- CSS Animations / Transitions ✅
- CSS Filters ✅
- backdrop-filter ✅
- mix-blend-mode ✅
단, 오버레이의 배경이 투명(transparent) 상태일 때는 backdrop-filter가
동작하지 않습니다.
상속과 우선순위
- 전역 스타일이 먼저 적용됩니다.
- 클래스 선택자가 있으면 전역 스타일을 덮어씁니다.
- 더 구체적인 선택자가 우선합니다.
/* 우선순위: 1 (가장 낮음) */
[data-state='active'] {
--key-bg: red;
}
/* 우선순위: 2 */
.blue[data-state='active'] {
--key-bg: blue;
}
/* 우선순위: 3 (가장 높음) */
.blue.special[data-state='active'] {
--key-bg: purple;
}