Skip to Content
커스텀 CSSCSS 변수 레퍼런스

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-borderpadding은 그대로 살아 있어 이미지가 그 안쪽에 그려지고 --key-radius로 잘립니다. 테두리 없이 이미지만 보이게 하려면 [data-key-image-mode="replace"] { --key-border: none; --key-padding: 0 }처럼 직접 해제하세요.
  • overlay: 키 표면·텍스트·카운터가 그대로 그려지고 이미지가 그 위에 얹힙니다. 이미지는 키의 border-radius를 상속하고, 루트 overflowvisible이라 이동·회전·확대한 이미지가 키 밖으로 나갈 수 있습니다. 잘라내려면 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-clipfill 클립 영역<box>text, border-box
--counter-fill-positionfill 배경 위치<position>0% 0%, 4px 10px
--counter-fill-sizefill 배경 크기<bg-size>auto, 100px 80px
--counter-fill-repeatfill 반복 방식<repeat-style>no-repeat
--counter-text-fill-colorWebKit 텍스트 채움색<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. 전역 스타일이 먼저 적용됩니다.
  2. 클래스 선택자가 있으면 전역 스타일을 덮어씁니다.
  3. 더 구체적인 선택자가 우선합니다.
/* 우선순위: 1 (가장 낮음) */ [data-state='active'] { --key-bg: red; } /* 우선순위: 2 */ .blue[data-state='active'] { --key-bg: blue; } /* 우선순위: 3 (가장 높음) */ .blue.special[data-state='active'] { --key-bg: purple; }