CSSCSS 기초강의 10개 중 9번째난이도 기초

CSS 변수 — 색상과 값을 한 곳에서 관리하기

발행 읽는 시간 약 2 분

  • CSS
  • 변수
  • Custom Properties
  • 다크모드
  • :root

강의 소개

CSS Custom Properties(변수)를 활용해 색상, 간격, 폰트 크기를 체계적으로 관리하고 다크 모드 전환의 기초까지 배웁니다.

색상을 10군데에 써뒀는데 바꾸려니…#

CSS
button { background-color: #0070f3; }
a { color: #0070f3; }
.highlight { border-color: #0070f3; }
/* ... */

브랜드 색상을 바꾸려면 10군데를 다 찾아서 바꿔야 합니다. 하나라도 놓치면 일관성이 깨집니다.

CSS 변수(Custom Properties) 로 이 문제를 해결합니다.


CSS 변수 기본 사용법#

CSS
/* 변수 선언: :root에 두면 전체 페이지에서 사용 가능 */
:root {
  --color-primary: #0070f3;
  --color-text: #333333;
  --color-bg: #ffffff;
  --spacing-sm: 8px;
  --spacing-md: 16px;
  --spacing-lg: 24px;
  --radius: 8px;
}

/* 변수 사용: var(--변수명) */
button {
  background-color: var(--color-primary);
  padding: var(--spacing-sm) var(--spacing-md);
  border-radius: var(--radius);
}

a {
  color: var(--color-primary);
}

변수 이름은 반드시 --로 시작합니다. :root는 HTML 문서 전체를 나타내는 최상위 선택자입니다.


변수의 장점#

1. 한 곳에서 전체 변경#

CSS
:root {
  --color-primary: #e94560;   /* 파란색 → 빨간색으로 한 번에 교체 */
}

이것만 바꾸면 버튼, 링크, 테두리 등 이 변수를 쓰는 모든 곳이 한꺼번에 바뀝니다.

2. 기본값 지정#

CSS
color: var(--color-accent, #ff6b6b);   /* 변수가 없으면 #ff6b6b 사용 */

3. 계산에 활용#

CSS
:root {
  --base-size: 16px;
}

h1 {
  font-size: calc(var(--base-size) * 2.5);   /* 40px */
}

실전 디자인 토큰 시스템#

CSS
:root {
  /* === 색상 === */
  --color-primary: #0070f3;
  --color-primary-hover: #0051cc;
  --color-secondary: #7928ca;
  --color-success: #0cce6b;
  --color-warning: #f5a623;
  --color-danger: #e00;

  /* === 텍스트 색상 === */
  --color-text: #111111;
  --color-text-secondary: #666666;
  --color-text-muted: #999999;

  /* === 배경 색상 === */
  --color-bg: #ffffff;
  --color-bg-subtle: #f9fafb;
  --color-border: #e5e7eb;

  /* === 간격 === */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-6: 24px;
  --space-8: 32px;

  /* === 폰트 크기 === */
  --text-sm: 0.875rem;    /* 14px */
  --text-base: 1rem;      /* 16px */
  --text-lg: 1.125rem;    /* 18px */
  --text-xl: 1.25rem;     /* 20px */
  --text-2xl: 1.5rem;     /* 24px */

  /* === 기타 === */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-full: 9999px;
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.1);
  --shadow-md: 0 4px 12px rgba(0,0,0,0.15);
}

다크 모드 맛보기#

CSS 변수를 활용하면 다크 모드를 비교적 쉽게 구현할 수 있습니다.

CSS
:root {
  --color-bg: #ffffff;
  --color-text: #111111;
  --color-border: #e5e7eb;
}

/* 시스템 설정이 다크 모드일 때 */
@media (prefers-color-scheme: dark) {
  :root {
    --color-bg: #111111;
    --color-text: #f0f0f0;
    --color-border: #333333;
  }
}

/* 변수를 쓰는 코드는 그대로 */
body {
  background-color: var(--color-bg);
  color: var(--color-text);
}

prefers-color-scheme: dark는 사용자의 운영 체제 다크 모드 설정을 감지합니다.


변수로 컴포넌트 테마 만들기#

CSS
:root {
  --btn-bg: var(--color-primary);
  --btn-color: white;
  --btn-padding: var(--space-2) var(--space-4);
  --btn-radius: var(--radius-md);
}

.btn {
  background-color: var(--btn-bg);
  color: var(--btn-color);
  padding: var(--btn-padding);
  border-radius: var(--btn-radius);
  border: none;
  cursor: pointer;
  transition: background-color 0.2s;
}

.btn:hover {
  --btn-bg: var(--color-primary-hover);
}

/* 변형: 위험 버튼 */
.btn-danger {
  --btn-bg: var(--color-danger);
}

/* 변형: 외곽선 버튼 */
.btn-outline {
  --btn-bg: transparent;
  --btn-color: var(--color-primary);
  border: 2px solid var(--color-primary);
}

직접 해보기 ✏️#

HTML 프로젝트 CSS에 변수 시스템을 도입해 보세요.

  1. :root에 주요 색상 변수 3~5개 정의
  2. 기존 하드코딩된 색상값을 변수로 교체
  3. 변수 하나를 바꿔서 전체 색상이 바뀌는지 확인
  4. (도전) @media (prefers-color-scheme: dark) 로 다크 모드 추가
CSS
/* 시작 템플릿 */
:root {
  --primary: #0070f3;
  --text: #222222;
  --bg: #ffffff;
  --border: #e0e0e0;
}

정리#

개념내용
CSS 변수 선언--변수명: 값;
:root전체 페이지 범위 변수
변수 사용var(--변수명)
기본값var(--변수명, 기본값)
다크 모드@media (prefers-color-scheme: dark)

다음 편은 CSS 시리즈의 마지막 — 완성 프로젝트입니다. HTML 프로젝트 페이지에 지금까지 배운 모든 CSS를 적용해 멋진 소개 사이트로 만들어 봅니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.