개발 2026년 04월 19일 12분 읽기

CSS if() 함수 완벽 가이드 — 조건부 스타일링의 혁명

CSS if() 함수 완벽 가이드

CSS if() 함수 완벽 가이드 — 조건부 스타일링의 혁명

CSS에서 JavaScript 없이 조건 판단이 가능해졌습니다. Chrome 137에서 정식 출시if() 함수는 CSS 역사상 가장 혁신적인 기능 중 하나입니다. 이 글에서는 CSS if() 함수의 기본 문법부터 실전 활용법까지 상세하게 다룹니다.

원문 출처: yayujs.com/blog — 번역 및 기술 보강: 공치파(Genyboa)

CSS if() 함수란?

CSS if() 함수는 CSS 속성 값을 조건에 따라 동적으로 변경할 수 있는 새로운 CSS 함수입니다. 이전에는 JavaScript나 CSS 클래스 전환을 통해서만 가능했던 조건부 스타일링을 이제 순수 CSS만으로 구현할 수 있습니다.

이것은 단순한 문법 설탕(Syntax Sugar)이 아닙니다. CSS의 패러다임을 근본적으로 바꾸는 기능입니다. 더 이상 간단한 스타일 변경을 위해 JavaScript를 작성할 필요가 없어졌습니다.

기본 문법

if() 함수는 순서대로 조건을 확인하고, 첫 번째로 일치하는 값을 적용합니다:

/* 기본 구문 */property: if(  condition-1: value-1;  condition-2: value-2;  condition-3: value-3;  else: default-value);

JavaScript의 if...else if...else와 유사하지만, CSS 속성 값 컨텍스트에서 동작합니다. 어떤 조건도 일치하지 않으면 else 값이 적용됩니다.

지원되는 조건 유형

if() 함수는 3가지 종류의 조건을 지원합니다:

  • style() — CSS 커스텀 프로퍼티(변수)의 값을 확인합니다. style(--theme: "dark")
  • media() — 미디어 쿼리 조건을 확인합니다. media(width >= 768px)
  • supports() — 브라우저 기능 지원 여부를 확인합니다. supports(color: lch(0 0 0))

활용 사례 1: 다크 모드 구현

이전에는 다크 모드를 구현하려면 JavaScript로 클래스를 전환하거나 prefers-color-scheme 미디어 쿼리와 함께 두 벌의 스타일을 작성해야 했습니다. CSS if()를 사용하면 CSS 변수 하나로 전체 테마를 제어할 수 있습니다:

/* CSS if()를 사용한 다크 모드 */:root {  --theme: "light"; /* 또는 "dark" */}body {  background: if(    style(--theme: "dark"): #1a1a1a;    else: #ffffff  );  color: if(    style(--theme: "dark"): #e4e4e4;    else: #333333  );}.card {  background: if(    style(--theme: "dark"): rgba(255, 255, 255, 0.05);    else: rgba(0, 0, 0, 0.02)  );  border-color: if(    style(--theme: "dark"): rgba(255, 255, 255, 0.1);    else: rgba(0, 0, 0, 0.1)  );  box-shadow: if(    style(--theme: "dark"): 0 4px 20px rgba(0, 0, 0, 0.5);    else: 0 2px 10px rgba(0, 0, 0, 0.08)  );}

JavaScript 비교: 이전에는 document.body.classList.toggle('dark')으로 클래스를 전환하고, .dark .card { ... } 형태로 별도의 스타일을 작성해야 했습니다. CSS if()를 사용하면 하나의 속성 선언 안에서 모든 것이 해결됩니다.

테마를 전환하려면 JavaScript에서 단 한 줄만 변경하면 됩니다:

// 한 줄로 테마 전환document.documentElement.style.setProperty('--theme', '"dark"');

활용 사례 2: 반응형 레이아웃

기존 방식에서는 여러 개의 @media 쿼리 블록을 작성해야 했습니다. CSS if()를 사용하면 하나의 속성 선언에서 모든 브레이크포인트를 처리할 수 있습니다:

/* 기존 방식 — 여러 미디어 쿼리 필요 */.container { width: 100%; }@media (min-width: 576px) { .container { width: 540px; } }@media (min-width: 768px) { .container { width: 720px; } }@media (min-width: 992px) { .container { width: 960px; } }@media (min-width: 1200px) { .container { width: 1140px; } }@media (min-width: 1400px) { .container { width: 1320px; } }/* CSS if() 방식 — 한 줄로 해결 */.container {  width: if(    media(width >= 1400px): 1320px;    media(width >= 1200px): 1140px;    media(width >= 992px): 960px;    media(width >= 768px): 720px;    media(width >= 576px): 540px;    else: 100%  );  padding-inline: if(    media(width >= 768px): 2rem;    else: 1rem  );}

코드가 6개의 미디어 쿼리 블록에서 2줄로 줄었습니다. 유지보수도 훨씬 간편해집니다. 브레이크포인트를 추가하거나 수정할 때 한 곳만 변경하면 됩니다.

활용 사례 3: 점진적 향상 (Progressive Enhancement)

최신 CSS 기능을 사용하면서도 구형 브라우저에서 자연스럽게 폴백하는 점진적 향상 패턴을 if()로 우아하게 구현할 수 있습니다:

/* 최신 색상 함수 사용 + 자동 폴백 */.element {  border-color: if(    supports(color: lch(0 0 0)): lch(50% 100 150);    supports(color: lab(0 0 0)): lab(50 100 -50);    else: rgb(200, 100, 50)  );}/* 최신 레이아웃 기능 사용 + 폴백 */.grid {  display: if(    supports(display: subgrid): subgrid;    supports(display: grid): grid;    else: flex  );}

이전에는 @supports 블록을 중첩하거나 별도로 작성해야 했지만, if()를 사용하면 한 줄의 속성 선언으로 모든 폴백 로직을 처리할 수 있습니다.

실전 활용: 버튼 컴포넌트

CSS 커스텀 프로퍼티와 if()를 결합하면 JavaScript 없이 다양한 버튼 변형을 만들 수 있습니다:

.btn {  --variant: "primary"; /* primary, secondary, danger, ghost */    padding: 12px 24px;  border-radius: 8px;  font-weight: 600;  border: 2px solid transparent;    background: if(    style(--variant: "primary"): #7c3aed;    style(--variant: "secondary"): #e2e8f0;    style(--variant: "danger"): #ef4444;    style(--variant: "ghost"): transparent;    else: #7c3aed  );    color: if(    style(--variant: "secondary"): #1a1a2e;    style(--variant: "ghost"): #7c3aed;    else: #ffffff  );    border-color: if(    style(--variant: "ghost"): #7c3aed;    else: transparent  );}/* 사용법 *//*  */

브라우저 지원 현황 (2025년 8월 기준)

브라우저 지원 여부 버전
Chrome / Edge 137+
Chrome Android 139+
Firefox 🔨 개발 중
Safari 📋 로드맵에 포함
Opera 미지원

현재는 Chromium 기반 브라우저에서만 지원되므로, 프로덕션에서는 @supports를 사용한 폴백을 반드시 함께 적용하세요.

기존 방식과의 비교

CSS if()가 기존 방식을 얼마나 개선하는지 비교해봅시다:

  • 미디어 쿼리 vs if(media()) — 여러 @media 블록이 하나의 속성 선언으로 통합. 코드량 80% 감소.
  • @supports vs if(supports()) — 중첩된 @supports 블록이 인라인 조건으로 간소화. 가독성 대폭 향상.
  • JavaScript 클래스 전환 vs if(style()) — DOM 조작 없이 CSS 변수만으로 스타일 전환. 성능 향상.

주의사항

  • CSS if()는 속성 값 컨텍스트에서만 사용 가능합니다. 선택자나 속성 이름에는 사용할 수 없습니다.
  • 중첩된 if()는 현재 지원되지 않습니다.
  • 프로덕션에서 사용할 때는 반드시 폴백 스타일을 함께 작성하세요.
  • 성능 면에서 CSS if()는 미디어 쿼리와 동등한 수준이므로 걱정할 필요가 없습니다.

마무리: 새로운 가능성

CSS if() 함수는 프론트엔드 개발의 판도를 바꿀 잠재력을 가진 기능입니다. 순수 CSS만으로 조건부 스타일링이 가능해지면서, JavaScript 의존도가 줄고 성능이 향상되며 코드가 간결해집니다.

새로운 CSS 기능을 접할 때 “반드시 지금 당장 배워야 한다”고 조급해할 필요는 없습니다. “이런 방법도 가능하다”는 가능성을 인식하는 것이 중요합니다. 프론트엔드 학습은 단거리 경주가 아닌 장거리 마라톤입니다.

👉 더 많은 CSS/프론트엔드 기술 글: 공치파(Genyboa)

자주 묻는 질문 (FAQ)

Q: CSS if() 함수는 어떤 브라우저에서 지원하나요?

A: 2025년 8월 기준 Chrome/Edge 137+, Chrome Android 139+에서 지원됩니다. Firefox는 개발 중, Safari는 로드맵에 포함되어 있습니다. 프로덕션에서 사용할 때는 @supports를 사용한 폴백을 반드시 적용하세요.

Q: CSS if()로 다크 모드를 구현할 수 있나요?

A: 네, CSS 커스텀 프로퍼티와 if(style())을 조합하면 JavaScript 없이 순수 CSS만으로 다크 모드를 구현할 수 있습니다. –theme 변수 값에 따라 배경색, 텍스트 색상, 카드 스타일 등을 조건부로 변경합니다.

Q: CSS if()와 미디어 쿼리의 차이는?

A: 미디어 쿼리는 별도의 @media 블록이 필요하지만, CSS if(media())는 속성 값 안에서 인라인으로 조건을 처리합니다. 6개의 미디어 쿼리 블록을 if() 한 줄로 대체할 수 있어 코드량이 80% 감소하고 유지보수가 간편합니다.

관련 추천 도구

CSS if()로 다듬은 멋진 UI도 결국 누군가에게 보여줄 수 있어야 빛이 납니다. 작업한 프론트엔드 프로젝트를 빠르게 배포하고 싶다면 글로벌 SSD 기반 클라우드 서버인 DigitalOcean으로 몇 분 만에 정적 사이트나 데모 페이지를 올려 실제 환경에서 스타일을 검증해 보세요.

※ 제휴 링크가 포함되어 있으며, 가입 시 추가 비용은 없습니다.

👉 관련 가이드 더 보기

← 2026년 JavaScript 프레임워크 3대 트렌드 — AI 우선, 동형 우선, 비동기 우선GenyBoa Patreon — 프리미엄 독점 콘텐츠와 커뮤니티 | 공치파 멤버십 →

관련 글