clamp() 함수는 CSS에서 어떤 값이 특정 범위 내에 있도록 "고정(clamp)"하는 역할을 합니다. 즉, 최소값(MIN), 선호하는 값(VAL), 그리고 최대값(MAX) 세 가지 인자를 받아서, 선호하는 값이 최소값과 최대값 사이에 있을 때는 선호하는 값을 사용하고, 그렇지 않으면 최소값 또는 최대값으로 제한하는 매우 유용한 함수입니다.

clamp() 함수의 구문

property: clamp(MIN, VAL, MAX);
  • MIN (최소값): 이 값보다 작아질 수 없는 하한선입니다. VALMIN보다 작으면, clamp() 함수는 MIN 값을 반환합니다.
  • VAL (선호하는 값 또는 중앙값): 이 값이 MINMAX 사이에 있다면, clamp() 함수는 VAL 값을 반환합니다. 이 부분에 주로 뷰포트 너비(vw), 컨테이너 너비(cqi, cqw) 등의 상대 단위를 사용하여 유동적인 변화를 만듭니다.
  • MAX (최대값): 이 값보다 커질 수 없는 상한선입니다. VALMAX보다 크면, clamp() 함수는 MAX 값을 반환합니다.

clamp() 함수의 작동 방식

  1. VALMIN보다 작으면 → 결과는 MIN
  2. VALMAX보다 크면 → 결과는 MAX
  3. MINVALMAX 이면 → 결과는 VAL

 

clamp() 함수의 장점 및 사용 사례

  • 유동적이고 반응형인 크기 조절:
    VAL 인자에 vw, vh, cqi, cqw 같은 상대 단위를 사용하면, 뷰포트나 컨테이너 크기 변화에 따라 폰트 크기, 여백, 너비 등이 부드럽게 조절되는 유동적인 디자인을 쉽게 구현할 수 있습니다.
  • 명확한 경계 설정으로 제어력 향상:
    값이 한없이 작아지거나 커지는 것을 방지하여, 디자인이 깨지거나 가독성이 떨어지는 상황을 막을 수 있습니다. 최소/최대 크기를 명확히 제어할 수 있다는 것이 큰 장점입니다.
  • 복잡한 미디어 쿼리 대체 가능:
    단일 속성의 부드러운 크기 조절을 위해 여러 개의 미디어 쿼리 브레이크포인트를 사용해야 했던 경우를 clamp() 하나로 간결하게 대체할 수 있습니다.

주요 사용 사례:

  • 반응형 타이포그래피: (우리가 사용한 방식!) 화면이나 컨테이너 너비에 따라 글꼴 크기를 유동적으로 조절하면서도 너무 작거나 커지지 않도록 제어합니다.
  • 유동적인 여백(padding, margin) 설정
  • 반응형 레이아웃 요소의 너비 또는 높이 조절

우리가 사용한 예시 다시 보기

tailwind.config.js에서 fontSize.bubble에 적용했던 값을 살펴봅시다:

bubble: "clamp(0.875rem, 4.46cqi, 1.25rem)"

여기서 각 부분의 의미는 다음과 같습니다:

  • MIN = 0.875rem (약 14px):
    말풍선 텍스트의 글꼴 크기는 아무리 작아져도 14px 밑으로 내려가지 않습니다. 컨테이너가 매우 좁아져 4.46cqi 계산 값이 14px보다 작아지더라도 최소 14px은 보장됩니다.
  • VAL = 4.46cqi:
    이것이 우리가 원하는 "선호하는" 글꼴 크기입니다. cqi는 컨테이너의 인라인 너비(주로 가로 너비)의 1%를 의미하므로, 4.46cqi는 컨테이너 너비의 4.46% 크기를 갖게 됩니다. 즉, 컨테이너의 너비가 변하면 이 값도 함께 변하여 글꼴 크기가 유동적으로 조절됩니다.
  • MAX = 1.25rem (약 20px):
    말풍선 텍스트의 글꼴 크기는 아무리 커져도 20px를 초과하지 않습니다. 컨테이너가 매우 넓어져 4.46cqi 계산 값이 20px보다 커지더라도 최대 20px로 제한됩니다.

결과적으로 이 설정은, 글꼴 크기가 최소 14px, 최대 20px의 경계 안에서 컨테이너 너비에 따라 유동적으로 변하는 매우 우아한 반응형 타이포그래피를 구현하게 해줍니다.

clamp()와 단위

MIN, VAL, MAX 인자에는 px, rem, em, %, vw, vh, cqi 등 다양한 CSS 단위를 사용할 수 있습니다. 특히 VAL 부분에 상대 단위를 사용하여 그 유연함을 극대화하는 경우가 많습니다.

브라우저 지원

clamp() 함수는 (2025년 현재 기준) 주요 모던 브라우저(Chrome, Edge, Firefox, Safari 등)에서 매우 잘 지원하고 있으므로, 안심하고 사용하셔도 됩니다.

clamp() 함수는 CSS만으로도 매우 정교하고 유연한 반응형 디자인을 구현할 수 있게 해주는 강력한 도구입니다. 잘 활용하시면 코드도 간결해지고 유지보수도 용이해지는 경험을 하실 수 있을 거예요!

+ Recent posts