Contents
see ListCSS가 프로그래밍 언어 수준의 표현력을 갖추기 시작했습니다. 2026년에 브라우저에 탑재된 CSS if() 조건 함수는 속성 값 내에서 직접 조건 분기를 수행할 수 있게 해주며, CSS Masonry Layout은 Pinterest 스타일의 벽돌 배치를 네이티브로 지원합니다. JavaScript 의존도를 대폭 줄이는 이 두 기능의 실전 사용법을 자세히 알아봅니다.
CSS if() 조건 함수
CSS if()는 속성 값 레벨에서 조건 분기를 수행하는 함수입니다. CSS 커스텀 프로퍼티(변수)와 결합하면 JavaScript 없이도 동적인 스타일 전환이 가능합니다.
기본 문법
/* if(조건: 참일 때 값; else: 거짓일 때 값) */
/* 커스텀 프로퍼티 기반 조건 */
:root {
--theme: dark;
}
.card {
background: if(
style(--theme: dark): #1a1a2e;
else: #ffffff
);
color: if(
style(--theme: dark): #e0e0e0;
else: #1a1a2e
);
border: 1px solid if(
style(--theme: dark): #333;
else: #e2e8f0
);
}미디어 쿼리 조건
/* 미디어 쿼리를 if() 안에서 직접 사용 */
.container {
padding: if(
media(width >= 768px): 2rem;
else: 1rem
);
display: if(
media(width >= 1024px): grid;
else: flex
);
grid-template-columns: if(
media(width >= 1024px): repeat(3, 1fr);
else: 1fr
);
}supports 조건
/* 기능 지원 여부에 따른 분기 */
.layout {
display: if(
supports(display: grid): grid;
else: flex
);
gap: if(
supports(gap: 1rem): 1rem;
else: 0 /* gap 미지원 시 margin으로 대체 필요 */
);
}다중 조건 (체이닝)
/* 여러 조건 순차 평가 */
:root {
--density: compact;
}
.list-item {
padding: if(
style(--density: compact): 4px 8px;
style(--density: comfortable): 12px 16px;
style(--density: spacious): 20px 24px;
else: 8px 12px
);
font-size: if(
style(--density: compact): 13px;
style(--density: comfortable): 15px;
else: 16px
);
}실전: 다크모드 컴포넌트
/* JavaScript 없이 다크모드 토글 */
.theme-toggle {
/* 체크박스로 테마 전환 */
&:has(input:checked) {
--theme: dark;
}
}
.card {
--bg: if(
style(--theme: dark): #1e293b;
else: #ffffff
);
--text: if(
style(--theme: dark): #f1f5f9;
else: #0f172a
);
--shadow: if(
style(--theme: dark): 0 4px 20px rgba(0, 0, 0, 0.4);
else: 0 4px 20px rgba(0, 0, 0, 0.08)
);
background: var(--bg);
color: var(--text);
box-shadow: var(--shadow);
padding: 1.5rem;
border-radius: 12px;
transition: all 0.3s ease;
}CSS Masonry Layout
Pinterest 스타일의 벽돌형 레이아웃을 CSS Grid의 확장으로 네이티브 지원합니다. 기존에는 Masonry.js 같은 라이브러리가 필수였습니다.
기본 사용법
/* 세로 방향 Masonry */
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: masonry; /* 핵심! */
gap: 16px;
}
.gallery-item {
border-radius: 8px;
overflow: hidden;
}
.gallery-item img {
width: 100%;
height: auto;
display: block;
}가로 방향 Masonry
/* 가로 방향 Masonry (행이 고정, 열이 가변) */
.horizontal-masonry {
display: grid;
grid-template-rows: repeat(3, 1fr);
grid-template-columns: masonry;
gap: 12px;
}반응형 Masonry 갤러리
<!-- HTML -->
<div class="photo-grid">
<div class="photo" style="--h: 300px"><img src="photo1.jpg" alt=""></div>
<div class="photo" style="--h: 200px"><img src="photo2.jpg" alt=""></div>
<div class="photo" style="--h: 400px"><img src="photo3.jpg" alt=""></div>
<div class="photo" style="--h: 250px"><img src="photo4.jpg" alt=""></div>
<!-- ... -->
</div>.photo-grid {
display: grid;
grid-template-rows: masonry;
gap: 16px;
/* 반응형 컬럼 */
grid-template-columns: repeat(
auto-fill, minmax(250px, 1fr)
);
}
.photo {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.photo:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.photo img {
width: 100%;
height: auto;
display: block;
object-fit: cover;
}Masonry 정렬 제어
/* masonry-auto-flow: 아이템 배치 순서 제어 */
.gallery {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: masonry;
gap: 16px;
/* next: 순서대로 배치 (기본) */
masonry-auto-flow: next;
/* definite-first: grid-row/column 지정된 아이템 우선 */
masonry-auto-flow: definite-first;
/* ordered: DOM 순서 유지 */
masonry-auto-flow: ordered;
}
/* 특정 아이템 2열 차지 */
.gallery-item.featured {
grid-column: span 2;
}
/* 특정 위치에 고정 */
.gallery-item.pinned {
grid-column: 1;
}두 기능 결합: 적응형 갤러리
:root {
--layout: masonry;
}
.adaptive-gallery {
display: grid;
gap: if(
media(width >= 768px): 20px;
else: 10px
);
grid-template-columns: if(
media(width >= 1200px): repeat(4, 1fr);
media(width >= 768px): repeat(3, 1fr);
media(width >= 480px): repeat(2, 1fr);
else: 1fr
);
/* 레이아웃 모드 전환 */
grid-template-rows: if(
style(--layout: masonry): masonry;
else: auto
);
}
/* 폴백 */
@supports not (grid-template-rows: masonry) {
.adaptive-gallery {
grid-auto-rows: 200px;
}
.adaptive-gallery img {
height: 100%;
object-fit: cover;
}
}CSS if() 함수와 Masonry Layout은 2026년 CSS가 얼마나 강력해졌는지를 보여주는 대표적인 기능입니다. if()는 JavaScript에 의존하던 조건부 스타일링을 CSS 네이티브로 가져왔고, Masonry는 가장 많이 사용되던 레이아웃 라이브러리를 대체합니다. 두 기능을 적극 활용하면 코드량을 줄이면서도 더 나은 성능과 접근성을 확보할 수 있습니다.