clamp()
property: clamp(최소 허용값, 선호값, 최대 허용값);
padding: clamp(10px, 1em, 30px);
width: clamp(220px, 45%, 430px);
font-size: clamp(1.8rem, 2.5vw, 2.8rem);
clamp()
는 CSS 속성 값을 지정할 때 사용하며, 괄호 안에 선호값
과 선호값
으로 허용할 수 있는 범위인 최소 허용값
과 최대 허용값
을 지정해서 비교한 하나의 값만을 나타내는 비교 함수형 표기법입니다.
즉, 선호값
이 범위 내에 있으면 선호값
을, 범위보다 작으면 최소 허용값
, 범위보다 크면 최대 허용값
을 값으로 나타냅니다.
예를 들어, padding: clamp(10px, 1em, 30px)
의 경우
'선호값'인 1em
이10px
보다 작으면 →10px
적용'선호값'인 1em
이30px
보다 크면 →30px
적용- 범위 내에 있으면 →
'선호값'인 1em
적용
예제
<button class="small-btn">Small Button</button>
<button class="medium-btn">Medium Button</button>
<button class="large-btn">Large Button</button>
/* 공통 버튼 스타일 */
button {
padding: clamp(10px, 1em, 30px);
}
/* font-size가 다른 버튼 스타일 */
.small-btn {
font-size: 12px; /* padding: 10px (최소 허용값) */
}
.medium-btn {
font-size: 24px; /* padding: 1em (선호값) 즉, 24px */
}
.large-btn {
font-size: 40px; /* padding: 30px (최대 허용값) */
}
코드 부연설명
em
단위가 font-size
이외의 길이에 관련된 속성의 값(예제에서는 padding
의 값으로 사용됨)에서는 지정하려는 현재 요소의 font-size
를 1em
의 기준으로 합니다.
이처럼 clamp()
는 CSS 속성 값을 지정할 때 괄호 안의 고정된 값 범위 내에서 계산된 하나의 값을 나타내는 함수형 표기법입니다.
clamp()
함수는 특정 값이 최소 허용값과 최대 허용값 사이에서 유동적으로 변할 수 있도록 하기 위한 비교 함수형 표기법입니다.
"clamp, 조여서 고정하다!"
clamp()
함수의 이름에 사용되는 clamp
는 원래 무언가를 조여서 고정하는 도구를 의미합니다.

위 이미지는 물체를 조여서 고정하는 공구인 클램프(clamp)를 나타낸 것입니다.
CSS의 clamp()
함수도 특정 범위 내의 값을 "조여서 고정"하는 역할을 합니다.
즉, 클램프가 물체를 잡아 고정하듯이, 이 함수도 특정 범위 내의 값으로 "조여서" 유지한다고 이해할 수 있습니다.
구문 설명
clamp(MIN, VAL, MAX)
clamp()
의 괄호 안에 쉽표(,
)로 구분된 세 개의 값이나, 값으로 나타낼 수 있는 표현식을 사용할 수 있습니다.
표현식은 덧셈(+
), 뺄셈(-
), 곱셈(*
), 나눗셈(/
) 및 괄호 등을 사용하여 숫자나 숫자와 단위가 조합된 기본적인 계산식과, CSS에서 값으로 유효하다고 평가할 수 있는 다른 표현식일 수 있습니다.
참고하세요!
clamp(MIN, VAL, MAX)
가 주어지면 max(MIN, min(VAL, MAX))
와 정확히 같은 값을 표현합니다 .
MIN
'최소 허용값'입니다. '선호하는 값'인 VAL
이 이 값보다 작지 않아야 되는 하한값을 지정합니다.
VAL
이 이 값보다 작으면 clamp(MIN, VAL, MAX)
는 이 값(MIN
)을 나타냅니다.
VAL
'선호하는 값'입니다. 가장 선호하는 값을 지정합니다.
'최소 허용값'인 MIN
과 '최대 허용값'인 MAX
사이에 있는 값일 경우 clamp(MIN, VAL, MAX)
는 이 값(VAL
)을 나타냅니다.
VAL
(선호값)은 일반적으로 상대적인 값을 사용합니다.
clamp()
함수는 특정 값이 최소 허용값과 최대 허용값 사이에서 유동적으로 변할 수 있도록 하기 위한 비교 함수형 표기법입니다. 값이 정해져 있는 절대값(예: px
) 보다는 유동적인 상대적인 값(예: %
, em
, vw
) 값을 사용할 때 VAL
(선호값)으로 지정하고, '최소 허용값'인 MIN
과 '최대 허용값'인 MAX
범위 내에서 값을 지정하기 위해 사용하기 때문입니다.
MAX
'최대 허용값'입니다. '선호하는 값'인 VAL
이 이 값보다 크지 않아야 되는 상한값을 지정합니다.
VAL
이 이 값보다 작으면 clamp(MIN, VAL, MAX)
는 이 값(MAX
)을 나타냅니다.
주의할 점
clamp()
에서는
auto
,
initial
,
inherit
,
unset
,
none
, normal
, bold
, min-content
, max-content
, fit-content
등과 같은 CSS 키워드 값을 사용할 수 없습니다.
유연한 디자인을 위한 clamp()
함수 활용 사례
clamp()
함수는 특정 값이 지정된 범위 내에서 유동적으로 변하도록 설정할 수 있는 강력한 CSS 함수입니다. 이 함수는 '최소 허용값'(MIN
), '선호값'(VAL
), 최대 허용값(MAX
)을 지정하면 그 사이에서 적절한 값을 계산합니다. 이 함수를 활용하면, 고정된 값을 사용하지 않고도 더 유연하고 반응형인 디자인을 구현할 수 있습니다.
반응형 폰트 크기 조절하기
뷰포트의 크기에 따라 폰트의 크기(font-size
)를 반응형으로 조절하는 예제입니다.
뷰포트(viewport)는 웹 브라우저 용어로, 현재 창(또는 전체 화면 모드로 문서를 보고 있는 경우 화면)에 표시되는 문서의 부분으로 웹 페이지가 보여지는 영역을 의미합니다.
<h4 class="type">반응형 폰트 크기 조절하기</h4>
/* 글꼴 크기를 12px와 100px 사이로 유지 */
.type {
font-size: clamp(12px, 10 * (1vw + 1vh) / 2, 100px);
}
코드 부연 설명
vw
와 vh
단위는
CSS vh, vw, vmax, vmin – 뷰포트 백분율 길이 단위를 참조하세요.
반응형 폰트 크기 조절하기
위 예제에서는 clamp()
를 사용해 폰트 크기가 최소 12px
, 최대 100px
사이에서 10 * (1vw + 1vh) / 2
의 값에 맞춰 유동적으로 변하도록 설정합니다. 뷰포트 크기에 따라 폰트 크기가 자동으로 조정되어 다양한 화면 크기에서 반응형 스타일을 구현하기에 용이합니다.
반응형 레이아웃
다음은 반응형 레이아웃에서 플렉스 박스에서 행과 열 사이의 간격을 지정하는 gap
속성에 clamp()
를 사용하는 예제입니다.
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
</div>
.container {
display: flex;
flex-wrap: wrap;
gap: clamp(10px, 2vw, 30px); /* 반응형 간격: 2vw를 기본값으로, 최소 10px, 최대 30px */
}
.item {
flex: 1 1 calc(25% - 20px); /* 각 아이템은 4개로 나누어지고, gap에 따라 조정 */
background-color: lightblue;
padding: 20px;
margin: 5px;
text-align: center;
}
뷰포트의 크기에 따라 gap
이 유동적으로 변하면서, 너무 좁거나 넓은 간격을 방지할 수 있습니다. 작은 화면에서는 간격이 좁아지고, 큰 화면에서는 간격이 더 넓어져 반응형 레이아웃이 자연스럽게 구성됩니다.
브라우저 호환성
함수 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
clamp()
|
79 | 79 | 75 | 13.1 |
명세서
명세서 사양 | |
---|---|
clamp()
|
CSS Values and Units Module Level 4 #funcdef-clamp |