Frontend/CSS & SCSS & SASS

px을 em, rem으로 변경하는 법 ( feat. sass:math )

Dogvelop 2023. 5. 16. 22:12

- PX
Pixel 은 대게 absolute lenth ( 절대 길이 ) 라고 부른다.
-> 다른 요소들의 크기와 상관없이 동일한 값을 가진다. ( 화면 해상도에 따라 다를 수 있음. )

but. px을 사용하게 되면 사용자의 글꼴 크기 설정을 무시해버리는 상황같은 심각한 문제를 일으킬 수 있다.

보통 브라우저의 default 사이즈는 16px이다. px을 사용하게 되면 모든 브라우저 설정값들을 덮어쓰기때문에, 루트 글꼴 크기는 무시하는 상황이 발생하여 개발자, 사용자가 원하지 않는 문제가 있는 UI가 만들어질 수 있다.

 

이러한 것들을 방지하고자 rem, em 단위를 사용한다.

 

 

- REM

브라우저의 root 글꼴 크기의 배수를 적용.
ex) root 글꼴 크기가 16px인 경우. 16px = 1rem

 

 

- EM

텍스트를 포함하는 여러 element에 배수를 적용.
ex) element의 글꼴 크기가 48px = 3em이라면, 해당 element 내부에선 16px = 1em

반응형 웹앱을 만드는 데에 있어서 px대신 rem, em 단위를 사용하는 것은 선택이 아닌 필수로 생각이 된다.

 

이하 코드는 px 단위가 익숙한 개발자가 사용하면 좋을 px -> rem, em 단위로 변경해 주는 method이다. ( base : 16 )

@use "sass:math";

@function removeUnit($value) {
  @return math.div($value, ($value * 0 + 1));
}

@function px2em($px, $base: 16) {
  @return math.div(removeUnit($px), $base) * 1em;
}

@function px2rem($px, $base: 16) {
  @return math.div(removeUnit($px), $base) * 1rem;
}

 

물론, rem 단위를 px 단위로도 변경할 수 있다.

@use "sass:math";

@function rem2px($rem, $base: 16) {
  @return (removeUnit($rem) * $base) * 1px;
}