AD JB Toolbox 01

CSS / Reference / calc()

calc()는 CSS 속성값 안에서 덧셈·뺄셈·곱셈·나눗셈을 계산하는 함수입니다. 같은 속성에서 허용하는 자료형 안에서 백분율과 길이 단위를 조합할 수 있어, 컨테이너 너비에서 고정 공간을 빼는 레이아웃 등에 사용합니다.

문법과 주요 값

.card { width: calc(100% - 40px); }
.title { font-size: calc(1rem + 4px); }
값 또는 구분 동작과 선택 기준
+ / - 연산자 양쪽에 공백을 넣음
* / / 보통 숫자 배율·나누는 수와 함께 사용
괄호 중첩 계산 순서 지정
자료형 최종 결과가 해당 속성이 허용하는 값이어야 함

값의 적용 범위와 문법은 MDN의 calc() 문서에서 확인할 수 있습니다.

실행 예제와 결과 비교

아래 전체 코드를 UTF-8 형식의 calc-example.html 파일로 저장한 뒤 브라우저로 여세요. 예제용 CSS는 이 파일 안에만 넣고 사이트 전체 스타일시트에 그대로 붙여 넣지 않습니다.

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>calc() 비교 예제</title>
<style>
body { margin: 0; color: #20242b; background: #fff; font: 16px/1.7 "Malgun Gothic", sans-serif; }
#demo { padding: 24px; max-width: 820px; margin: auto; }
h1 { font-size: 22px; margin: 0 0 20px; }
.samples { display: flex; flex-wrap: wrap; gap: 24px; }
.label { margin: 0 0 8px; font-weight: 700; }
.samples > div { width: 300px; }
.target { width: calc(100% - 40px); padding: 0; border: 0; background: #bfe3ff; }
.reference { width: 100%; background: #ffd166; }
</style>
</head>
<body>
<main id="demo">
<h1>calc() 적용 비교</h1>
<section class="samples"><div class="a"><p class="label">100% - 40px</p><div class="target">너비 계산</div></div><div class="b"><p class="label">100%</p><div class="reference">너비 계산</div></div></section>
</main>
</body>
</html>

부모 너비가 300px인 예제에서 첫 박스의 내용 너비는 260px, 두 번째 박스는 300px입니다. 부모 너비를 바꾸면 첫 박스도 같은 40px 차이를 유지합니다.

연산 순서와 단위

곱셈·나눗셈은 덧셈·뺄셈보다 먼저 처리하고 괄호로 계산 순서를 바꿀 수 있습니다. calc(100% - 40px)처럼 +와 - 주변에는 공백을 넣습니다. 길이에 단위 없는 20을 더하는 식처럼 자료형이 맞지 않으면 선언이 무효가 될 수 있습니다.

퍼센트 기준과 유효성

백분율은 해당 속성의 규칙에 따라 기준이 정해지므로 width의 100%와 다른 속성의 100%를 같은 기준으로 해석하지 마세요. calc는 JavaScript나 임의의 단위 변환기가 아니며 0으로 나누거나 유효하지 않은 최종값이 되면 기대한 선언이 적용되지 않을 수 있습니다. 최신 형식의 단위 간 산술은 지원 범위를 확인하고 기본 숫자 배율과 구분합니다.

적용되지 않거나 예상과 다를 때

  • 개발자 도구에서 선언에 취소 표시가 있으면 공백, 단위와 괄호를 먼저 확인합니다.
  • padding·border 때문에 전체 너비가 달라지면 box-sizing 기준도 확인합니다.

관련 설정을 함께 조정할 때는 계산된 너비와 실제 박스 크기을 참고하세요.

같은 카테고리의 다른 글
CSS / Reference / list-style-type

CSS / Reference / list-style-type

list-style-type의 문법과 주요 값, 실제 적용 조건을 설명합니다. 순서 목록에는 i, ii 형태의 번호가, 비순서 목록에는 사각형 마커가 표시됩니다.

CSS / Reference / content

CSS / Reference / content

content의 문법과 주요 값, 실제 적용 조건을 설명합니다. 첫 예문 앞뒤에 문자열이 생성되고 data-label 값이 뒤에 표시됩니다.

CSS / Reference / opacity

CSS / Reference / opacity

opacity의 문법과 주요 값, 실제 적용 조건을 설명합니다. 첫 박스에서는 흰 글자도 함께 흐려지고 두 번째 박스에서는 배경만 뒤의 색과 섞입니다.

CSS / Reference / calc()

CSS / Reference / calc()

calc()의 문법과 주요 값, 실제 적용 조건을 설명합니다. 부모 너비가 300px인 예제에서 첫 박스의 내용 너비는 260px, 두 번째 박스는 300px입니다.

CSS / Reference / caption-side

CSS / Reference / caption-side

caption-side의 문법과 주요 값, 실제 적용 조건을 설명합니다. 같은 caption이 첫 표 아래와 두 번째 표 위에 표시됩니다.

CSS / Reference / background-repeat

CSS / Reference / background-repeat

background-repeat의 문법과 주요 값, 실제 적용 조건을 설명합니다. 같은 크기의 도형이 첫 박스에서는 반복되고 두 번째 박스에서는 한 번만 나타납니다.

CSS / Reference / border-style

CSS / Reference / border-style

border-style의 문법과 주요 값, 실제 적용 조건을 설명합니다. 첫 박스의 위·오른쪽·아래·왼쪽 테두리를 순서대로 확인하세요.

CSS / Reference / font-style

CSS / Reference / font-style

font-style의 문법과 주요 값, 실제 적용 조건을 설명합니다. 동일한 글꼴에서 italic과 oblique의 형태를 비교합니다.

CSS / Reference / text-align

CSS / Reference / text-align

text-align의 문법과 주요 값, 실제 적용 조건을 설명합니다. 가운데 정렬은 각 줄의 내용을 중앙에 놓고 양쪽 정렬은 줄을 맞추기 위해 간격을 조절합니다.

CSS / Reference / tab-size

CSS / Reference / tab-size

tab-size의 문법과 주요 값, 실제 적용 조건을 설명합니다. 각 행의 탭 다음 문자가 탭 정지 위치에 맞춰집니다.