Skip to content

CSS 함수 해설

가장 많은 일을 하는 CSS 함수를 용도별로 정리했습니다: 크기 계산, 사용자 지정 속성 읽기, 색상 혼합과 선택, 그라데이션 그리기, 필터 적용, 도형 그리기, 박스 변환, 논리로 값 선택하기. 각 행은 함수와 한 줄 예시를 짝지어 보여줍니다.

CSS 함수는 인자를 받아 브라우저가 사용하는 값을 반환합니다. 자주 쓰이는 것은 연산을 위한 calc(), 디자인 토큰을 위한 var(), 유동 크기를 위한 clamp(), 파생 색상을 위한 color-mix()입니다. 자유롭게 중첩할 수 있습니다: clamp(1rem, var(--fluid), 3rem)은 하나의 반응형 값입니다.

참고 표 · 62 항목
62 of 62 rows
크기와 계산
혼합 단위를 포함한 산술 표현식의 결과.width: calc(100% - 2rem);
주어진 값 중 가장 작은 값.width: min(100%, 60ch);
주어진 값 중 가장 큰 값.width: max(320px, 40vw);
최솟값, 선호값, 최댓값 사이로 제한된 값.font-size: clamp(1rem, 2vw, 1.5rem);
사용자 에이전트가 제공하는 환경 변수를 읽습니다.padding: env(safe-area-inset-top);
콘텐츠의 고유 너비로 제한된 크기.width: fit-content(200px);
한 값을 다른 값의 가장 가까운 배수로 반올림합니다.width: round(up, 133px, 50px);
나눗셈의 양수 나머지. 항상 0 이상입니다.margin: mod(100px, 30px);
나눗셈의 나머지. 피제수의 부호를 유지합니다.margin: rem(-100px, 30px);
절댓값.translateX(abs(-10px));
값의 부호에 따라 -1, 0 또는 1.padding: sign(-5px) * 10px;
그리드
그리드 트랙을 위한 크기 범위. 최솟값과 최댓값 사이.grid-template-columns: minmax(100px, 1fr) minmax(0, 2fr);
트랙 패턴을 지정한 횟수만큼, 또는 채워질 때까지 반복합니다.grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
논리와 조건
조건에 따라 두 값 중 하나를 고릅니다.font-size: if(media(width > 600px), 1.25rem, 1rem);
미디어 쿼리가 일치하면 참. if() 안에서 사용합니다.padding: if(media(width > 40rem), 2rem, 1rem);
브라우저가 선언을 지원하면 참. if() 안에서 사용합니다.display: if(supports(color: oklch(0 0 0)), oklch(0 0 0), #333);
선택자가 일치하면 참. if() 안에서 사용합니다.font-weight: if(selector(:hover), 700, 400);
사용자 지정 속성
사용자 지정 속성의 값. 선택적 폴백을 지정할 수 있습니다.color: var(--accent, #333);
색상
빨강, 초록, 파랑(및 알파) 채널로 만든 색.color: rgb(59 130 246 / 0.8);
색상, 채도, 명도로 만든 색.color: hsl(210 80% 50%);
지각 균등한 OKLCH 색 공간의 색(일관된 밝기).color: oklch(0.7 0.15 250);
지정한 색 공간에서 두 색을 섞은 색.color: color-mix(in srgb, red 40%, blue);
목록 중 기준색과 대비가 가장 큰 선택지.color: color-contrast(#fff vs #000, #777);
색상, 백색도, 흑색도로 만든 색.color: hwb(210 10% 20%);
CIELAB 색 공간의 색(밝기, a축, b축).color: lab(52% 40 59);
CIELAB 색 공간의 색(밝기, 채도, 색상).color: lch(52% 49 24);
좌표로 지정한, 미리 정의된 임의의 색 공간의 색.color: color(display-p3 1 0.4 0.2);
라이트 모드에서는 첫 번째 색, 다크 모드에서는 두 번째 색.color: light-dark(#1a1a1a, #f5f5f5);
그라데이션과 이미지
직선을 따라 색상이 전환되는 그라데이션.background: linear-gradient(90deg, #4b9fff, #2ee6a6);
한 점에서 바깥으로 퍼지는 그라데이션.background: radial-gradient(circle, #fff, #000);
중심점을 중심으로 회전하며 쓸어 가는 그라데이션.background: conic-gradient(red, yellow, red);
외부 리소스를 불러옵니다: 이미지, 폰트, SVG.background-image: url(hero.webp);
기기 해상도에 가장 맞는 이미지를 고릅니다.background-image: image-set("hero.webp" 1x, "hero@2x.webp" 2x);
두 이미지를 지정한 비율로 섞습니다.background-image: cross-fade(30%, url(a.webp), url(b.webp));
필터와 도형
filter 속성 안에서 사용하는 픽셀 필터.filter: blur(4px) brightness(1.1);
클립이나 도형을 그리는 데 쓰는 SVG 패스 문자열.clip-path: path('M10 10 H 90 V 90 Z');
HTML 속성 값을 읽습니다. content 밖에서는 용도가 제한적입니다.content: attr(data-label);
요소의 대비를 조정합니다.filter: contrast(1.4);
요소의 알파 모양을 따라가는 그림자를 그립니다.filter: drop-shadow(0 4px 8px rgb(0 0 0 / 0.3));
요소를 회색조로 변환합니다.filter: grayscale(100%);
요소의 색을 반전합니다.filter: invert(1);
세피아 톤을 적용합니다.filter: sepia(0.6);
요소 색상의 색조를 회전합니다.filter: hue-rotate(90deg);
filter로 요소의 불투명도를 설정합니다.filter: opacity(0.5);
clip-path나 shape-outside용 원형 도형.clip-path: circle(40% at 50% 50%);
clip-path나 shape-outside용 타원형 도형.clip-path: ellipse(50% 35% at 50% 50%);
clip-path용 둥근 사각형 도형.clip-path: inset(10px 10px 10px 10px round 8px);
점 목록으로 만든 다각형 도형.clip-path: polygon(50% 0, 100% 100%, 0 100%);
변환
요소를 X축과 Y축 방향으로 이동합니다.transform: translate(10px, 20px);
요소를 자기 중심 기준으로 회전합니다.transform: rotate(45deg);
요소를 X축과 Y축 방향으로 확대·축소합니다.transform: scale(1.25);
요소를 X축과 Y축 방향으로 기울입니다.transform: skew(10deg, 0deg);
여섯 개 행렬 값으로 만든 하나의 2D 변환.transform: matrix(1, 0, 0.5, 1, 10, 0);
요소의 자식을 위한 3D 원근 깊이를 설정합니다.transform: perspective(600px) rotateY(20deg);
애니메이션과 카운터
네 개 제어점으로 만든 이징 곡선.transition-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
같은 크기의 단계로 건너뛰는 이징.animation-timing-function: steps(8, end);
CSS 카운터의 현재 값. content로 사용합니다.content: counter(chapter);
카운터와 모든 조상 카운터의 값을 문자열로 이어 붙인 것.content: counters(item, ".");
값이 시작과 끝 사이를 진행함에 따라 0에서 1로 변합니다.opacity: progress(scroll(), 0, 50vh);
범위에서 뽑은 난수. 요소마다 고정됩니다.rotate: random(from -5deg to 5deg);
각도의 사인값. calc 표현식에 사용합니다.translateY(calc(1rem * sin(45deg)));
각도의 코사인값. calc 표현식에 사용합니다.translateX(calc(1rem * cos(45deg)));