6.1 함수 calc()의 기본 기능
calc() 함수는 CSS에서 수학 연산을 수행할 수 있게 해줘서, 보다 유연하고 적응력 있는 스타일을 만들 수 있게 해줘. 특히 다양한 단위를 조합하거나 동적으로 값(사이즈, 여백, 경계 등)을 계산할 때 유용해.
calc() 함수는 더하기, 빼기, 곱하기, 나누기 네 가지 기본 수학 연산을 수행할 수 있어. 이 연산들은 픽셀, 퍼센트, em, rem 같은 다양한 단위를 조합할 때 사용할 수 있어서 적응력 있고 동적인 스타일을 만드는 데 도움을 줘.
구문:
셀렉터 {
속성: calc(표현식);
}
연산 예제
- 더하기:
calc(100% + 20px) - 빼기:
calc(50% - 10px) - 곱하기:
calc(10px * 2) - 나누기:
calc(100px / 2)
예제:
<div>
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
div {
width: calc(100% - 50px);
margin: calc(1em + 10px);
background: lightblue;
}
이 예시에서는:
- 요소의 너비는
100%에서50px을 뺀 값으로 계산돼 - 마진은
1em과10px의 합계로 계산돼
6.2 calc() 함수의 사용 예제
1. 더하기와 빼기
calc() 함수는 보통 요소의 크기와 여백을 보다 정확하게 제어하기 위해 더하기와 빼기에 자주 사용돼.
예제 1: 퍼센트와 픽셀 더하기
이 예제에서 컨테이너의 너비는 부모 요소의 100% 너비에서 40픽셀을 뺀 값으로 계산돼. 이는 여백과 컨테이너 내의 다른 요소를 고려할 수 있게 해줘:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.container {
width: calc(100% - 40px);
margin: 20px;
background: lightgreen;
}
예제 2: 고정 값을 뺀 값
이 예제에서 사이드바의 너비는 부모 요소의 100% 너비에서 250픽셀을 뺀 값으로 계산돼, 이는 주요 콘텐츠를 위한 공간을 남겨줘:
<div class="sidebar">
<ul>
<li><a href="#"></a>Article 1</li>
<li><a href="#"></a>Article 2</li>
<li><a href="#"></a>Article 3</li>
</ul>
</div>
.sidebar {
width: calc(100% - 250px);
background: tomato;
}
2. 곱하기와 나누기
calc() 함수는 곱하기와 나누기도 할 수 있어서, 비율에 맞는 크기와 여백을 만드는 데 유용해.
예제 3: 곱하기
이 예제에서 요소의 높이는 20픽셀에 3을 곱한 값, 즉 60픽셀로 계산돼:
<div class="element">Element</div>
.element {
height: calc(20px * 3);
background: lightpink;
}
예제 4: 나누기
이 예제에서 박스의 너비는 부모 요소의 너비의 3분의 1로 계산돼, 세 개의 동일한 열을 만들 수 있게 해줘:
<div class="box">
Box
</div>
.box {
width: calc(100% / 3);
background: yellow;
}
6.3 다양한 단위의 결합
calc() 함수의 핵심 기능 중 하나는 다양한 단위의 결합이 가능하다는 거야. 이를 통해 적응력 있고 유연한 스타일을 만들 수 있어.
예제 5: 퍼센트와 픽셀 결합
이 예제에서 헤더의 높이는 뷰포트 높이(viewport height)의 100%에서 50픽셀을 뺀 값으로 계산돼서, 고정된 여백을 고려할 수 있게 해줘.
<header class="header">
<nav>
<ul>
<li>메인</li>
<li>소개</li>
<li>연락처</li>
</ul>
</nav>
</header>
.header {
height: calc(100vh - 100px);
background: lightgreen;
}
nav ul {
list-style: none;
display: flex;
justify-content: space-around;
padding: 10px;
}
동적 크기 계산
calc() 함수는 요소의 크기를 동적으로 계산할 때 유용해서, 디자인을 보다 적응적이고 유연하게 만들어줘.
예제 6: 동적 너비 계산
이 예제에서 콘텐츠의 너비는 부모 요소의 너비의 100%에서 각각 20픽셀씩 두 개의 여백을 뺀 값으로 계산돼:
<div class="content">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.content {
width: calc(100% - 2 * 20px);
background: lightgreen;
}
6.4 미디어 쿼리에서 calc()의 사용
calc() 함수는 미디어 쿼리 내에서 적응형 스타일을 만드는데 사용될 수 있어.
예제 7: 미디어 쿼리에서 적응형 여백
이 예제에서 컨테이너의 여백은 뷰포트 너비가 최소 600픽셀에 도달하면 증가해:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.container {
padding: 10px;
background: tomato;
}
@media (min-width: 600px) {
.container {
padding: calc(10px + 2vw);
}
}
예제 8: 미디어 쿼리에서 적응형 크기
이 예제에서는 컨테이너의 여백이 600픽셀 너비의 화면에서 반으로 줄어들어, 디자인의 적응성을 향상시켜:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
:root {
--main-padding: 20px;
}
.container {
padding: var(--main-padding);
background: yellow;
}
@media (max-width: 600px) {
.container {
padding: calc(var(--main-padding) / 2);
}
}
6.5 장점과 단점
calc() 함수의 장점:
1. 유연성. calc() 함수는 다양한 단위를 조합하고 수학 연산을 수행해 보다 유연하고 적응력 있는 디자인을 만들 수 있게 해줘.
2. 동적 스타일 관리. calc()를 통해 요소의 크기와 여백을 동적으로 변경할 수 있어서, 디자인을 더 응답적이고 적응력 있게 만들어줘.
3. 복잡한 계산의 단순화. calc() 함수는 CSS에서 복잡한 계산을 간단하게 수행해줘서, 간단한 수학 연산에 JavaScript를 사용할 필요를 줄여줘.
calc() 함수의 제한 및 특징:
1. 연산자 주변 공백. calc() 표현식에서는 연산자 주변에 반드시 공백이 있어야 해. 예를 들어, calc(100% - 50px)는 맞고, calc(100%-50px)는 오류를 발생시켜.
2. 브라우저 호환성. calc() 함수는 대부분의 현대 브라우저에서 지원되지만, 오래된 버전에서는 호환성 검토가 필요할 수 있어.
3. 성능. calc() 함수 사용은 특히 복잡한 계산이나 자주 값이 변경될 때 페이지 렌더링 시간을 약간 증가시킬 수 있어.
GO TO FULL VERSION