[ css ] 반응형 웹을 위한 em, rem 디자인 > html&css

본문 바로가기
사이트 내 전체검색

html&css

[ css ] 반응형 웹을 위한 em, rem 디자인

페이지 정보

작성자 웹지기 댓글 0건 조회 7,333회 작성일 18-10-23 10:32

본문

 em과 rem은 무엇인가?

w3c의 css3 스펙 중 distance unit을 살펴봤다. css의 거리 단위는 크게 상대적 길이와 절대적 길이가 있다. 상대적 길이는 em, ex, ch, rem, vw, vh, vmin, vmax가 있고 절대적 길이는 cm, mm, q, in, pt, pc, px가 있다. 대개 크로스 브라우징이나 쉬운 계산 때문에 강제적으로 길이를 px로 많이 사용한다. 여러 디바이스를 모두 대응해야 하는 문제 때문에 em을 사용하기도 했는데, css3에는 rem이라는 새로운 거리 단위를 지원하게 되었다.

기준에 따른 상대적 길이
단위 설명 기준점
*em 엘리먼트의 폰트 사이즈 글자 크기
ex 엘리먼트의 폰트의 x(소문자) 높이 값
ch 엘리먼트 폰트의 0(숫자)glyphs의 가로값
*rem 루트 엘리먼트의 폰트 사이즈
vw 뷰포트 너비의 1% 화면 크기
vh 뷰포트 높이의 1%
vmin 뷰포트의 중 작은 크기의 1%
vmax 뷰포트의 중 큰 크기의 1%

스펙과 다른 글들을 통해 내가 이해한 내용이다. 다른 상대적 길이 단위를 이용하면 좀 더 가변적인 디자인이 가능 할 것 같다. 하지만 영어 해석이 좀 어려워서 일단은 em과 rem에 집중하기로 했다.

 

em과 rem은 왜 쓰는가?

상대적 길이 단위를 쓰는 이유는 물론 가변적 디자인을 하기 위해서이다. 유연한 디자인과 유지보수의 편리함. 또 어느 디바이스 어떤 상황에서도 사용자에게 같은 컨텐츠를 제공할 수 있다. 반응형 웹이나 웹 표준, 웹 접근성 모두 같은 맥락이라고 볼 수 있다. 자세한 내용은 인터넷의 많은 글에서 찾아 볼 수 있다.

 

em과 rem의 차이점

em과 rem의 가장 큰 차이점은 기준이 무엇이냐는 것이다. em은 상위 엘리먼트의 폰트 사이즈가 기준이고, rem은 루트 엘리먼트(html)의 폰트 사이즈가 기준이 된다. 아래 예를 들었다.

이런 html이 있다고 가정할 때

      <div><p>안녕하세요. 인디브도트입니다.</p></div>
      
em을 썼을때
            html{font-size:10px;}div{font-size:2em;}p{font-size:1em;}
            
em을 썼을때
rem을 썼을때
            html{font-size:10px;}div{font-size:2em;}p{font-size:1rem;}
            
rem을 썼을때

둘의 차이는 p 엘리먼트에 em, rem 단위 밖에 없지만 결과적으로는 10px과 20px의 차이가 있다. em 단위를 쓴 p의 폰트 사이즈는 html의 10px을 div에서 2em으로 10px * 2 = 20px이 되었고 이것을 기준으로 20px * 1 = 20px이 되었다. rem 단위를 쓴 p의 폰트 사이즈는 html의 10px을 div에서 2em으로 10px * 2 = 20px이 되었지만 루트 엘리먼트가 기준이므로 10px * 1 = 10px이 되었다.

 

인디브도트 블로그에 적용하기

em을 사용해서 글자 크기를 지정하는 방법

em을 사용해서 글자 크기를 지정하는 방법이라는 글을 보면, 퍼센트를 이용해서 body의 기본 글자 크기를 고치는 방법을 설명한다.  body { font-size : 62.5% } 로 16px이던 폰트 사이즈를 계산하기 쉬운 10px로 변환하여 사용한다. 하지만 rem은 루트 엘리먼트 기준이기 때문에  html { font-size : 62.5% } 로 루트 엘리먼트의 폰트 사이즈를 10px로 바꿔 사용하였다.

하지만 이렇게 사용하다가 문제가 생겼다. 모바일에서는 1.4rem으로 폰트 사이즈를 14px로 하고, 데스크탑에서는 폰트사이즈를 16px로 사용하려고 하였는데, body의 1.4rem을 유지하면서 html안의 폰트 사이즈를 %로 계산하기가 너무 힘들었다. 그래서 그냥 모바일에서는 html  {font-size : 10px}  데스크탑에서는 html  {font-size : 12px} 로 바꾸어 사용하였다. 그럼 P의 폰트사이즈는 모바일에서 14px, 데스크탑에서는 16.8px이 되어 뷰포트에 맞는 유동적 디자인을 하였다.

그리고 평소에 사용하던 px대신에 margin, padding에 rem 단위를 썼다.

미디어쿼리에 rem 적용?

rem을 미디어쿼리에도 적용해 보고싶었다. 브레이크 포인트 중 하나를 980px로 잡았기 때문에  @media(min-width:98rem){...} 로 작성하였다. 하지만 내가 의도한대로 동작되지 않았다. 뷰포트 980px이 아니라 뷰포트가 1568px이 되었을때 동작하였다. 이유가 무엇인지 미디어쿼리 스펙에서 찾아볼 수 있었다.

Media queries are (almost) always independent of the contents of the document, its styling, or any other internal aspect; they’re only dependent on “external” information unless another feature explicitly specifies that it affects the resolution of Media Queries, such as the @viewport rule.

미디어 쿼리는 문서의 스타일 또는 내부의 기타 형태의 콘텐츠와는 무관하다는 내용이 있다. 나는  html {font-size:62.5%} 로 1em을 10px로 바꾸어 주었지만, html의 글꼴 크기 스타일과 상관없이 1em은 여전히 16px이기 때문에 980px이 아니라 16px * 98 = 1568px에 미디어쿼리가 동작된 것이다.

 

결론

rem으로 디자인하기를 목표로 삼고 제작하면서 많은 혼란이 있었다. 요즘엔 브라우저에서 확대 축소 기능이 다 제공되기 때문에 em, rem을 쓰는 것이 효율성이 있는것인지.. 비율로 생각하기 보다는 px로 생각하는 버릇이 많이 남아 있어서 그런것 같기도 하고.. 아니면 내가 아직 상대적 길이 단위에 대한 이해가 부족한 것 같다. 어떤 단위를 이용하고 설계하는 것이 최적의 디자인을 할 수 있는지에 대한 고민은 끝이 없는 것 같다.

추천0 비추천0

댓글목록

등록된 댓글이 없습니다.

Total 42건 1 페이지
  • 42 [ css ] 브라우져 창 너비 높이등에 변하는 가변 폰트( 반응형 글자, 자동 크기 변경 ) 스타일 적용
  • em과 rem을 사용하면 기준이 되는 폰트 크기를 바꾸었을 때, 다른 폰트의 크기들도 지정해둔 것에 따라 차등적으로 바뀌어 적용되기 때문에 편리하다. 하지만 em과 rem은 브라우저의 창의 크기와는 상관이 없는 단위이다. 이와 달리 vw, vh, vmin, vmax는 브라우저 창의 가로 또는 세로 크기에 따라 변하는 폰트 단위이다. vw :viewport width vw단위는 웹 브라우저의 가로폭 (너비)를 기준으로 결정되는 크기다. 만약 웹 ...
  • 웹지기 10-23 19044 0 0 댓글 0
  • 41 [ CSS ] 텍스트 줄바꿈, 글자자르기
  • white-space공백 줄바꿈문자 처리방법 (띄어쓰기나 줄바꿈으로 이한 공백부분 등)white-space:normal;normal이 기본값, 여러칸의 공백이나 줄바꿈을 공백 1칸으로 인식한다. 지정된 넓이의 끝에서 자동으로줄바꿈한다.- 코드에서의 원래 텍스트여수 밤바다 이 조명에 담긴 아름다운 얘기가 있어 네게 들려주고파white-space:pre;띄어쓰기는 실제 입력한 칸 수대로, 줄바꿈도 엔터를 친 대로 나온다. 넘어가는 부분에서 강제 줄바꿈은 되지 않는다.white-space:nowr...
  • 웹지기 09-11 18750 0 0 댓글 0
  • 40 [ css ] 글꼴 사이즈를 반응형으로 만들기
  • 반응형 웹에서 골치 아픈 문제 중 하나가 글꼴 사이즈 화면 크기에 비례하는 글꼴 사이즈를 지정할 수 있도록 하기 위해 CSS3 에는 rem(root em) 이라는 단위를 제공 루트 요소인 &lt;html&gt; 요소에 지정한 글꼴 크기를 기준으로 특정 요소의 글꼴 크기를 결정하는 방식으로써 부모 요소의 글꼴 크기를 기준으로 삼는 em 이라는 단위보다 계산하기 편리 또한 페이지 전체적으로 적용되어 있는 서로 다른 크기의 글꼴을 동일한 비율을 적용하여 일괄 변경할 수 있는 방...
  • 웹지기 10-23 17303 0 0 댓글 0
  • 38 [ html / css ] html / css 효과 튜토리얼 모음
  • HTML / CSS[HTML/CSS] 001.CSS3를 이용한 탭 메뉴(tab menu) 만들기How to Create a CSS3 Tabbed Navigation[미리보기][HTML/CSS] 002.CSS3를 이용한 버티컬 네비게이션 메뉴 만들기Orman Clark’s Vertical Navigation Menu[미리보기][HTML/CSS] 003.CSS3를 이용한 오목한 버튼 이미지 코딩하기Tagtastic Tag Cloud with CSS Transformations[미리보기][HTML/CS...
  • 웹지기 09-28 11884 0 0 댓글 0
  • 37 [ css ] 최고의 반응형 CSS 프레임워크 18선
  • 1. Bootstrap가장 많은 사람들이 쓰고 가장 널리 알려진 부트스트랩입니다. LESS를 사용하였으며 12컬럼 반응형 그리드 시스템,수많은 위젯, 컴포넌트, 자바스크립트 플러그인을 지원하며 다운받을때 원하는 기능만 커스터마이즈 할수있습니다.2. Foundation013년 2월에 최초의 Mobile first 프레임워크라는 캐치로 릴리즈된 Foundation4. Sass와 Compass를 사용부트스트랩보다 더 오래된 프레임워크로 현재 부트스트랩 아성에 버티는 거의 유일한 프레임워크https://...
  • 웹지기 10-03 9444 0 0 댓글 0
+1
  • 열람중 [ css ] 반응형 웹을 위한 em, rem 디자인
  • em과 rem은 무엇인가? w3c의 css3 스펙 중 distance unit을 살펴봤다. css의 거리 단위는 크게 상대적 길이와 절대적 길이가 있다.상대적 길이는 em, ex, ch, rem, vw, vh, vmin, vmax가 있고절대적 길이는 cm, mm, q, in, pt, pc, px가 있다. 대개 크로스 브라우징이나 쉬운 계산 때문에 강제적으로 길이를 px로 많이 사용한다. 여러 디바이스를 모두 대응해야 하는 문제 때문에 em을 사용하기도 했는데, css3에는 rem이라는 새로운 거...
  • 웹지기 10-23 7334 0 0 댓글 0
  • 32 [ css ] textFit 간편한 텍스트 피팅(입히기)
  • 한 줄 및 여러줄의 텍스트를 해당 컨테이너의 너비 및 높이에 빠르게 맞추는 종속성없는 텍스트 크기 조정 요소 ●기능 = textFit : - 빠른 속도로 바이너리 검색을 사용하여 텍스트를 컨테이너에 신속하게 맞춰 log n대부분의 솔루션보다 훨씬 빠릅니다. - 가장 적합 &lt;1ms합니다. 구현 세부 정보를 참조 하십시오 . - 종속성이 없습니다. - 작은. 4.1KB축소 및 1.5KBgzipped. - 최대의 정확성을 위해 Flexbox로 수평 ...
  • 웹지기 10-23 7134 0 0 댓글 0
  • 31 [ html ] 특수문자 코드표
  • 표현문자 숫자표현 문자표현 설명 - &amp;#00; - &amp;#08; - 사용하지 않음 space &amp;#09; - 수평탭 ...
  • 웹지기 07-31 7003 0 0 댓글 0
  • 29 [ css ] keyframe - css 애니메이션 기능 적용해보기
  • keyframe - css 애니메이션 기능 적용해보기 html &lt;p&gt;동해물과 백두산이 마르고 닳도록 하나님이 보우하사 우리나라 만세&lt;/p&gt; css p { animation-duration: 3s; animation-name: slidein; } @keyframes slidein { from { margin-left: 100%; width: 300% } to { margin-lef...
  • 웹지기 11-23 6093 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
13,763
어제
8,999
최대
33,828
전체
8,468,599

그누보드5
Copyright © funyphp.com. All rights reserved.