단위 연산 시 주의사항 - by. UXKM

  • Publishing
  • SCSS
  • 연산과 함수 기초
  • 단위 연산 시 주의사항
요약 설명

SCSS에서 단위 연산을 할 때는 여러 주의사항이 있습니다.
단위 호환성, 나눗셈 연산의 특수성, CSS의 calc() 함수와의 차이 등을 이해하면 연산 오류를 방지할 수 있습니다.

이 페이지에서는 단위 연산 시 발생할 수 있는 문제와 그 해결 방법, 일반적인 실수와 주의사항을 상세히 알아봅니다.

단위 호환성

SCSS에서 연산을 할 때는 단위 호환성을 고려해야 합니다.
모든 단위가 서로 연산 가능한 것은 아닙니다. 단위 규칙을 잘 이해해 두면 연산 오류를 줄이고, 반응형 레이아웃에서 예기치 않은 결과가 나오는 상황을 예방할 수 있습니다.

같은 단위끼리만 연산 가능

일반적으로 같은 단위끼리만 연산할 수 있습니다.

pxem처럼 다른 단위는 직접 연산할 수 없습니다.
이런 경우 CSS의 calc() 함수를 사용해야 합니다.

호환 가능한 단위

일부 단위는 호환되어 연산이 가능합니다.

  • 단위 그룹
  • 호환 단위
  • 설명
  • 절대 길이

    px, cm, mm, in, pt, pc

    절대 길이 단위끼리는 연산 가능

  • 상대 길이

    em, rem, %

    상대 길이 단위끼리는 연산 가능

  • 혼합

    절대 길이와 상대 길이는 연산 불가

    px + em 같은 연산은 불가능

나눗셈 연산의 특수성

나눗셈 연산은 특별한 주의가 필요합니다.
CSS의 font: 12px/1.5 같은 문법과 충돌할 수 있기 때문입니다.

나눗셈이 연산으로 인식되지 않는 경우

나눗셈은 특정 조건에서만 연산으로 인식됩니다.

나눗셈을 연산으로 사용하려면 변수와 함께 사용하거나 괄호로 감싸야 합니다.

안전한 나눗셈 사용법

나눗셈을 안전하게 사용하는 방법을 알아봅니다.

가장 안전한 방법은 나눗셈 결과를 변수에 저장하거나 괄호로 명확히 표시하는 것입니다.

calc() 함수와의 차이

SCSS 연산과 CSS의 calc() 함수는 다른 방식으로 동작합니다.
두 방식을 언제 선택해야 하는지 알면, 브라우저에서만 가능한 계산과 빌드 타임에 미리 처리해 둘 계산을 깔끔하게 나눌 수 있습니다.

SCSS 연산 vs calc()

두 방식의 차이를 비교해봅니다.

  • 구분
  • SCSS 연산
  • calc()
  • 처리 시점

    컴파일 시점 (빌드 타임)

    런타임 (브라우저에서 실행)

  • 단위 제한

    같은 단위끼리만 연산 가능

    다른 단위도 연산 가능 (px + %, em + rem 등)

  • 결과

    계산된 값이 CSS에 포함

    calc() 표현식이 CSS에 그대로 유지

calc() 사용 예시

다른 단위를 연산해야 할 때는 calc()를 사용합니다.

SCSS 변수를 calc() 안에서 사용할 때는 인터폴레이션(#{})을 사용해야 합니다.

인터폴레이션을 사용해야 하는 이유에 대해서는 아래 [인터폴레이션 사용] 섹션에서 자세히 설명합니다.

일반적인 실수와 해결 방법

단위 연산 시 자주 발생하는 실수와 그 해결 방법을 정리합니다.
실제 프로젝트에서 자주 마주치는 에러 패턴을 미리 알아두면, 나중에 같은 문제가 생겼을 때 어디부터 의심해야 하는지를 빠르게 떠올릴 수 있습니다.

곱셈에서 두 값 모두 단위를 가진 경우

곱셈은 하나의 값만 단위를 가져야 합니다.

나눗셈에서 CSS 문법과 충돌

나눗셈이 CSS 문법으로 해석되는 경우입니다.

퍼센트와 다른 단위 연산

퍼센트는 다른 단위와 직접 연산할 수 없습니다.

0 값의 단위 처리

0 값은 단위가 없어도 됩니다.

인터폴레이션 사용

인터폴레이션(#{})은 SCSS 변수를 문자열이나 특정 문맥에서 사용할 때 필요한 문법입니다.
일반적인 CSS 속성 값에서는 변수를 그대로 사용할 수 있지만, calc() 함수나 문자열, 선택자, 속성명 등에서는 인터폴레이션을 사용해야 변수가 올바르게 해석됩니다.

인터폴레이션이란?

인터폴레이션은 변수 값을 문자열로 변환하여 삽입하는 기능입니다.
#{$variable} 형태로 사용하며, 변수의 값을 그대로 텍스트로 치환합니다.

일반 CSS 속성에서는 변수를 그대로 사용해도 되지만, calc() 같은 함수 안에서는 인터폴레이션이 필요합니다.

인터폴레이션이 필요한 이유

인터폴레이션을 사용하지 않으면 SCSS가 변수를 연산으로 해석하려고 시도하거나, 문법 오류가 발생할 수 있습니다.

인터폴레이션을 사용하면 변수 값이 그대로 문자열로 치환되어 calc() 함수에 올바르게 전달됩니다.

인터폴레이션이 필요한 경우

다음과 같은 경우에는 반드시 인터폴레이션을 사용해야 합니다.

calc() 함수 안에서 사용

calc() 함수 안에서는 변수를 직접 사용할 수 없고, 인터폴레이션으로 변수 값을 문자열로 변환해야 합니다.

문자열 안에서 사용

문자열 안에서 변수를 사용할 때는 인터폴레이션으로 변수 값을 텍스트로 삽입할 수 있습니다.

선택자 안에서 사용

선택자 이름이나 미디어 쿼리 조건에서 변수를 사용할 때도 인터폴레이션이 필요합니다.

속성명에서 사용

속성명을 변수로 만들 때도 인터폴레이션을 사용해야 합니다.

인터폴레이션 사용 시 주의사항

인터폴레이션을 사용할 때 주의해야 할 점들을 알아봅니다.

인터폴레이션 안에서는 연산을 직접 수행할 수 없습니다.
연산이 필요한 경우 변수에 먼저 계산한 값을 저장한 후 인터폴레이션으로 사용해야 합니다.

인터폴레이션 vs 일반 변수 사용

언제 인터폴레이션을 사용하고, 언제 일반 변수를 사용하는지 비교해봅니다.

  • 사용 위치
  • 일반 변수
  • 인터폴레이션
  • 일반 CSS 속성 값

    $size

    #{$size} (불필요하지만 가능)

  • calc() 함수

    $size ❌ 에러

    #{$size} ✅ 필수

  • 문자열 안

    $size ❌ 에러

    #{$size} ✅ 필수

  • 선택자

    $size ❌ 에러

    #{$size} ✅ 필수

  • 속성명

    $property ❌ 에러

    #{$property} ✅ 필수

일반 CSS 속성 값에서는 변수를 그대로 사용하는 것이 일반적이지만, 특수한 문맥에서는 인터폴레이션이 필수입니다.

모범 사례

단위 연산을 안전하고 효율적으로 사용하기 위한 모범 사례를 정리합니다.

같은 단위 사용하기

가능하면 같은 단위를 사용하여 연산하는 것이 가장 안전합니다.

괄호로 명확히 표시

복잡한 연산은 괄호로 우선순위를 명확히 표시합니다.

calc()와 SCSS 연산 조합

필요한 경우 SCSS 연산과 calc()를 함께 사용할 수 있습니다.

정리

단위 연산 시 주의사항에 대해 알아본 내용을 정리합니다.

  • 단위 호환성: 같은 단위끼리만 연산 가능, 다른 단위는 calc() 사용
  • 나눗셈 특수성: 변수와 함께 사용하거나 괄호로 감싸야 연산으로 인식
  • calc()와의 차이: SCSS 연산은 컴파일 시점, calc()는 런타임
  • 일반적인 실수: 곱셈에서 두 값 모두 단위, 나눗셈 충돌, 퍼센트 연산 등
  • 인터폴레이션: calc()나 문자열에서 변수 사용 시 #{} 필요
  • 모범 사례: 같은 단위 사용, 괄호로 명확히 표시, calc()와 조합

다음 페이지에서는 SCSS의 기본 내장 함수에 대해 자세히 알아봅니다.