Front-end/CSS(SASS,SCSS)

[CSS]반응형 사이트 calc() 함수와 예제 및 계산 방법에 대해 알아보기

by 빽짱구 2024. 6. 20.

calc()는 CSS에서 동적인 계산을 가능하게 하는 함수입니다. 이를 통해 길이, 백분율, 수치 등을 혼합하여 스타일을 동적으로 설정할 수 있습니다. calc() 함수는 CSS에서 다양한 상황에 유용하게 사용됩니다.

이미지 출처 : https://webdesign.tutsplus.com/mathematical-expressions-calc-min-and-max--cms-29735t

calc() 함수의 사용법

calc() 함수의 기본 구문은 다음과 같습니다:

property: calc(expression);

여기서 expression은 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 등의 산술 연산을 포함할 수 있습니다.

 

사용 예제

1. 너비 계산

부모 요소의 너비에서 특정 픽셀 값을 뺀 너비를 설정하고 싶을 때 사용합니다.

.container {
    width: 100%;
}

.content {
    width: calc(100% - 20px);
}

이 예제에서 .content 요소의 너비는 부모 요소 .container의 너비에서 20px을 뺀 값으로 설정됩니다.

 

2. 폰트 크기 조정

기본 폰트 크기에 상대적인 값을 추가하고자 할 때 유용합니다.

.text {
    font-size: calc(16px + 1vw);
}

이 예제에서 .text 요소의 폰트 크기는 16px에 뷰포트 너비의 1%를 더한 값이 됩니다.

 

3. 레이아웃 계산

여러 요소의 크기를 동적으로 계산하여 레이아웃을 구성할 때 사용합니다.

.sidebar {
    width: 200px;
}

.main-content {
    width: calc(100% - 200px);
}

이 예제에서 .main-content 요소는 부모 요소의 전체 너비에서 .sidebar 요소의 200px을 뺀 값으로 설정됩니다.

 

4. 마진과 패딩 계산

마진과 패딩을 동적으로 설정할 때도 사용할 수 있습니다.

.box {
    padding: calc(10px + 2%);
    margin: calc(5% - 10px);
}

이 예제에서 .box 요소의 패딩은 10px에 2%를 더한 값이고, 마진은 5%에서 10px을 뺀 값으로 설정됩니다.

 

언제 calc()를 사용해야 하는가?

  1. 반응형 디자인: 뷰포트 크기에 따라 동적으로 크기를 조정해야 할 때.
  2. 고정 크기와 비율 혼합: 고정된 픽셀 값과 비율(%)을 조합하여 레이아웃을 구성할 때.
  3. 복잡한 레이아웃 계산: 여러 요소 간의 복잡한 계산이 필요할 때.
  4. 동적 값 적용: CSS 변수나 다른 동적 값과 조합하여 스타일을 적용할 때.

calc() 함수를 사용하면 CSS에서 다양한 단위를 조합하여 동적으로 계산할 수 있습니다. 이 함수는 산술 연산을 사용하여 여러 값들을 계산하고 그 결과를 CSS 속성 값으로 설정합니다.

 

반응형

 

calc()에서 사용 가능한 산술 연산

  • 덧셈 (+)
  • 뺄셈 (-)
  • 곱셈 (*)
  • 나눗셈 (/)

calc() 사용 예제

1. 덧셈 (+)

.element {
    width: calc(50% + 100px);
}

위 코드에서 .element의 너비는 부모 요소 너비의 50%에 100px을 더한 값입니다.

 

2. 뺄셈 (-)

.element {
    height: calc(100vh - 50px);
}

위 코드에서 .element의 높이는 뷰포트 높이(100vh)에서 50px을 뺀 값입니다.

 

3. 곱셈 (*)

곱셈은 비율 계산에 사용됩니다. 예를 들어, 2배의 크기를 계산할 때 유용합니다.

.element {
    width: calc(50px * 2);
}

위 코드에서 .element의 너비는 50px의 두 배인 100px입니다.

 

4. 나눗셈 (/)

나눗셈은 값을 특정 비율로 나눌 때 사용됩니다.

.element {
    width: calc(100px / 2);
}

위 코드에서 .element의 너비는 100px을 2로 나눈 값인 50px입니다.

 

연산 조합

calc() 함수 안에서는 여러 연산을 조합하여 복잡한 계산을 수행할 수 있습니다.

.element {
    width: calc((100% - 50px) / 2 + 20px);
}

위 코드에서 .element의 너비는 부모 요소 너비의 100%에서 50px을 뺀 값을 2로 나누고, 거기에 20px을 더한 값입니다.

 

괄호 사용

복잡한 계산을 할 때는 연산의 우선순위를 명확하게 하기 위해 괄호를 사용할 수 있습니다.

.element {
    margin: calc((10% + 5px) * 2);
}

위 코드에서 .element의 마진은 10%에 5px을 더한 값을 2배로 한 값입니다.

 

예제들

반응형 레이아웃 예제

.container {
    width: 100%;
}

.sidebar {
    width: 200px;
}

.content {
    width: calc(100% - 200px);
}

위 예제에서 .content 요소는 부모 요소의 전체 너비에서 .sidebar 요소의 너비를 뺀 값으로 설정됩니다.

 

동적 패딩 계산

.box {
    padding: calc(10px + 1em);
}

위 코드에서 .box 요소의 패딩은 10px에 현재 요소의 폰트 크기 1em을 더한 값입니다.

주의사항

  • 공백 사용: 연산자 주위에 공백을 반드시 사용해야 합니다. calc(100%-50px)처럼 공백이 없으면 올바르게 작동하지 않습니다.
  • 브라우저 호환성: 대부분의 현대 브라우저는 calc() 함수를 지원하지만, 특정 오래된 브라우저에서는 지원하지 않을 수 있습니다. 필요한 경우 적절한 폴리필(polyfill)이나 대체 방법을 사용하십시오.

calc()를 사용하면 고정된 단위와 유동적인 단위를 조합하여 복잡한 레이아웃과 스타일을 손쉽게 구현할 수 있습니다. 이를 통해 더 유연하고 반응적인 웹 디자인을 만들 수 있습니다.

728x90