개발할때는 어떤 단위를 어떻게 써야할까?

귤양·2022년 4월 12일
0

HTML & CSS (+접근성)

목록 보기
18/18
post-thumbnail

왜 단위를 고민해야 할까?

디자이너에게서 디자인을 받아서 실제로 구동되는 화면으로 개발을 진행하다 보면 넓이와 높이, 여백, 폰트 사이즈 등 다양하게 단위를 지정하고 사용해야 하는 상황이 생긴다. 이 때 개발자는 고민에 빠지게 될 것이다. 어떤 단위를 사용하지? 단위를 어떻게 지정해야 할까?
하지만 어떤 단위를 사용할지 정하기 전에 한가지 알고 넘어가야 할 것이 있다. 우리는 개발할 때 사용할 수 있는 단위가 많다고 알고 있지만 사실상 브라우저는 px로만 모든 크기들을 표시한다. 일단 이 사실부터 확인해보자 지금 바로 개발자도구를 열어서 반영된 style을 확인해보자.

위 이미지에 표시된 폰트사이즈를 확인하면 분명 81.25%.. 즉 %라는 단위를 사용하고 있다고 표시되어 있다. 하지만 이걸로 끝이 아니라 computed탭을 눌러서 이 스타일이 실제로 반영된 값(계산된)을 다시 한번 확인해봐야한다.

위 이미지가 의미하는 바는 간단하고 또 명확하다. body에서 적용된 81.25%라는 값이 실제 브라우저의 현재 상태에 맞춰서 계산되어 13px이 되었고, 그 값이 body의 font-size로 적용되었다는 것이다.

그런데, 브라우저가 결국 반영하는 단위는 px뿐인데 어떤 이유로 새로운 단위가 생겨나게 된 것일까? 사실 솔직하게 말하면 생겨난 이유까지 명확하게 알지는 못하겠다. 하지만 웹과 모바일의 발전으로 인해 절대적인 값을 가지고 있는 수치인 px을 사용하면서 많은 불편함들이 생겨났고 그로인해 상대적인 수치들의 필요성이 점점 커지게 되었다는 것만큼은 확실하다. 결국 어떤 단위를 사용해야 하는지 고민해야 하는 이유는 변화된 환경에 따라서 알맞게 개발을 하기 위함인 것이다.

어떤 단위가 있을까?

단위에는 크게 px과 같은 절대적인 값을 가지고 있는 단위와 em 혹은 rem 처럼 상대적인 값을 가지고 있는 단위가 있다. 이 중에서 절대 길이 단위에는 우리에게 익숙한 cm(센티미터), mm(밀리미터)등의 단위들이 있지만 개발을 진행하면서 알아야 하는 절대길이 단위는 px(픽셀)이 거의 유일하다고 말할 수 있다.

상대길이 단위

상대 길이 단위에는 오늘 이 포스팅을 하게 만든 REM을 포함한 여러 단위들이 있지만 실제로 개발에 자주 사용되는 단위에 대해서만 설명을 하고자 한다.

  • vw: viewport 너비의 1%.

  • vh: viewport 높이의 1%.

  • vmin: viewport 의 작은 치수의 1%.

  • vmax: viewport 의 큰 치수의 1%.
    위 4가지 단위에서 사용되는 v는 viewport라는 의미이며, 이 단위들은 보여지는 화면의 크기에 영향을 받기 때문에 백분율로 계산된다.

  • %: 부모 요소의 영향을 받는다. (부모 요소의 width 값을 100%로 계산한다.)

  • em: 요소(자기자신)의 글꼴 크기 (em이라는 단위를 쓰는 해당 요소에 설정된 글꼴 크기를 말하며, 만약 해당 요소에서 글꼴 크기를 설정하지 않는다면 부모로부터 상속되는 글꼴크기가 된다.)

  • rem: 루트(HTML) 요소의 글꼴 크기 (html에 설정된 글꼴 크기를 1rem로 계산한다.)

어떤 단위를 사용해야 할까?

결론부터 말하자면 rem단위를 주로 사용하는 것이 좋다고 생각한다.
(이 때 vw, vh, vmin, vmax와 같은 단위는 열외로 하고 px, em, rem 단위 중에서만 말하고자 한다.)

px는 환경의 변화에 유연하게 대응하기가 힘들다.

px단위는 다시 말하지만 절대적인 값을 가지고 있는 값이다. 따라서 반응형 웹이나 모바일처럼 폰트 사이즈의 변화를 커스터마이징 하는 환경의 변화에 유연하게 대응하기가 힘들다.

em은 사용성이 떨어진다.

em은 상대적인 길이를 가지고 있는 단위라는 점에서는 rem과 동일하다. 하지만 문제는 이 상대적인 길이를 만들기 위한 기준 값 조차도 상대적이라는 것이다. 자기 자신의 글꼴 크기를 1em으로 지정하게 되는데, 이는 부모요소에 또 영향을 받고 그 부모요소는 또 그 부모요소에 영향을 받는다. 이는 지금 내가 작성하고 있는 1em의 크기가 px로 계산되었을 때 몇px의 크기가 되는지 계산하기가 매우 어렵다는 말이된다. 상대적인 단위를 사용하고자 하더라도 적어도 내가 사용하고 있는 크기가 어느정도의 크기를 가지고 있는지는 쉽게 알 수 있어야 할텐데 대형사이트의 경우 수십줄, 수백줄을 더듬어 올라가야 1em의 크기를 겨우 파악할 수 있다면 사용성이 너무 떨어진다. 하지만 뒤에서 추가로 설명하겠지만 em의 크기가 유용하게 사용되는 경우도 분명 있으므로 em에 대해서도 반드시 파악해둬야한다.

rem단위를 사용하는 것의 장점은?

그렇다면 rem단위를 사용하는 것이 좋다고 하는 이유는 무엇일까? rem은 상대적인 길이를 가지고 있는 단위라고 했다. 이 때 이 값을 정하는 기준값은 html에 작성한 font-size를 기준으로 한다. 때문에 모든 단위를 rem으로 작성하고 html의 폰트사이즈만 조정하면 전체적인 크기를 키울수도, 줄일수도 있게 되는 것이다. 또한 이 기준값을 10px로 작성하면 rem단위를 px단위와 유사하게 사용할 수도 있다. (이 기준값을 1px로 작성하면 px을 사용하는 것과 단위만 rem으로 작성했을뿐 px과 동일한 값으로 사용할 수도 있긴하다.) 때문에 우리가 기존에 사용하던 px과 비슷한 길이감을 생각하며 개발할 수 있기 때문에 더 유용하기도 하다. (많은 디자인툴에서 em이나 rem 단위는 지원하지 않고 px단위까지만 지원하는 경우가 많기 때문에 디자이너들은 px을 사용하여 디자인을 하기 때문에 px과 길이감을 동일하게 생각할 수 있다는 것은 큰 장점이다.)

REM, 어떻게 사용해야 할까?

위에서 언급했지만 REM을 사용하기 위해서는 기준이 되는 값을 html에 font-size로 정해줘야 하고, 이 값을 10px로 하면 px과 유사하게 사용할 수 있다고 했다. 그렇다면 정말 html에 font-size를 10px로 지정하고 사용하면 되는 것일까??? 나도 얼마전까지 이렇게 개발을 진행했다. 그리고 이렇게 개발을 진행해도 전혀 문제가 없어보였다. 이메일로 받아보던 newsletter에서 연결되어 있던 포스팅을 보기전까지는...

웹디자이너가 px대신 rem을 사용해야 하는 이유 : 요즘 IT의 번역글들

위 포스팅을 보기전까지만 해도 모바일이 아닌 pc의 브라우저에서 root 글꼴 크기를 별도로 설정할 수 있다는 것을 몰랐고 당연하게도 html에 font-size를 10px로 고정하는 것과 %로 수정해서 작성하는 것의 차이가 있다는 것을 알 수 없었다. 하지만 알게 된 이상 10px로 고정하지 않고, 10px을 %값으로 환원해서 작성하는 것이 맞다고 생각한다. 엄청나게 큰 공수가 드는 것도 아닌데, 알면서도 실천하지 않는다는 것은 개인적으로 찝찝함을 야기하기도 한다. 따라서 html에 font-size를 62.5%라는 값(브라우저의 기본 font-size가 16px이라고 가정했을 때 환원하여 10px이 되는 값)으로 설정하고 전체적으로는 rem단위를 사용하는 것이 맞다고 본다.

그럼 em은 언제 사용하나요?

em단위는 요소의 글꼴크기, 즉 자기자신의 글꼴크기를 기준으로 한다고 설명했었다. 그렇다면 어디에 사용하면 유용하게 사용할 수 있을지 한번 생각해보자. 예를 들면 버튼의 사이즈가 다양할 때에 버튼 내부의 양 옆 여백(padding)값을 버튼이 가지고 있는 1글자의 크기만큼으로 지정하고 싶을 때 사용할 수 있다. 만약 이런 상황에서 px 혹은 rem 단위를 사용한다면 버튼의 크기에 따라 각각 여백(padding)의 크기를 직접 지정해줘야 한다. 그리고 이후에 폰트 사이즈와 여백의 크기를 수정하고 싶을때에 또 다시 많은 코드(각 크기의 버튼에 폰트 사이즈와 padding)를 수정해줘야 하는 상황이 된다. 하지만 이런 상황에서 em단위를 사용한다면 font-size의 수정만으로도 여백이 자연스럽게 변경되는 것이다.
이처럼 글자 크기에 맞춰서 변경되어야 하는 내부 여백, 혹은 외부 간격에는 em단위를 사용하는 것이 유용할 수 있다.

profile
디자인하는 Frontend Developer.

0개의 댓글