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

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

html&css

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

페이지 정보

작성자 웹지기 댓글 0건 조회 8,548회 작성일 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건 2 페이지
  • 27 [ css ] css의 구조 && css의 선택자
  • 선택자 { 속성 : 값 ; } CSS의 선택자 - 전체 선택자 : * 로 표시되며 웹 문서 내 모든 요소 - 타입 선택자 : 요소 이름으로 사용하여 요소선택 - 아이디 선택자 : #기호로 표시되며 특정한 요소 선택 - 클래스 선택자 : 마침표(.)기호로 표시되며 특정한 요소 선택 - 계층 선택자 : - 예제) https://funyphp.com/bbs/board.php?bo_table=html&amp;wr_id=90 자손/자식/형제/근접후행형제 근접후행형제 :...
  • 웹지기 01-08 4143 0 0 댓글 0
  • 26 [ html ] 특수문자 코드표
  • 표현문자 숫자표현 문자표현 설명 - &amp;#00; - &amp;#08; - 사용하지 않음 space &amp;#09; - 수평탭 ...
  • 웹지기 07-31 8110 0 0 댓글 0
  • 25 제목이나 내용이 거꾸러 보이게 하기 위한 태그(?) 인가(?)
  • 아파치님이 그누보드에 올려놓은걸 메모하려고 적습니다. [code] &amp;#8238; 제목이나 내용부분에 이렇게 하고 적으면 글이 거꾸로 보인다고 하네요. ㅎㅎㅎ 보여주기위해 코드에 적습니다. [/code] 제 게시판에는 적용이 안되는군요 ㅋㅋㅋ
  • 웹지기 11-27 5692 0 0 댓글 0
  • 22 [ 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 7185 0 0 댓글 0
  • 18 [ css ] textFit 간편한 텍스트 피팅(입히기)
  • 한 줄 및 여러줄의 텍스트를 해당 컨테이너의 너비 및 높이에 빠르게 맞추는 종속성없는 텍스트 크기 조정 요소 ●기능 = textFit : - 빠른 속도로 바이너리 검색을 사용하여 텍스트를 컨테이너에 신속하게 맞춰 log n대부분의 솔루션보다 훨씬 빠릅니다. - 가장 적합 &lt;1ms합니다. 구현 세부 정보를 참조 하십시오 . - 종속성이 없습니다. - 작은. 4.1KB축소 및 1.5KBgzipped. - 최대의 정확성을 위해 Flexbox로 수평 ...
  • 웹지기 10-23 8710 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 8549 0 0 댓글 0
  • 16 [ css ] 브라우져 창 너비 높이등에 변하는 가변 폰트( 반응형 글자, 자동 크기 변경 ) 스타일 적용
  • em과 rem을 사용하면 기준이 되는 폰트 크기를 바꾸었을 때, 다른 폰트의 크기들도 지정해둔 것에 따라 차등적으로 바뀌어 적용되기 때문에 편리하다. 하지만 em과 rem은 브라우저의 창의 크기와는 상관이 없는 단위이다. 이와 달리 vw, vh, vmin, vmax는 브라우저 창의 가로 또는 세로 크기에 따라 변하는 폰트 단위이다. vw :viewport width vw단위는 웹 브라우저의 가로폭 (너비)를 기준으로 결정되는 크기다. 만약 웹 ...
  • 웹지기 10-23 21027 0 0 댓글 0
  • 15 [ css ] 글꼴 사이즈를 반응형으로 만들기
  • 반응형 웹에서 골치 아픈 문제 중 하나가 글꼴 사이즈 화면 크기에 비례하는 글꼴 사이즈를 지정할 수 있도록 하기 위해 CSS3 에는 rem(root em) 이라는 단위를 제공 루트 요소인 &lt;html&gt; 요소에 지정한 글꼴 크기를 기준으로 특정 요소의 글꼴 크기를 결정하는 방식으로써 부모 요소의 글꼴 크기를 기준으로 삼는 em 이라는 단위보다 계산하기 편리 또한 페이지 전체적으로 적용되어 있는 서로 다른 크기의 글꼴을 동일한 비율을 적용하여 일괄 변경할 수 있는 방...
  • 웹지기 10-23 18939 0 0 댓글 0
  • 14 [ html5 ] svg 듀터리얼
  • 확장 가능한 벡터 그래픽(Scalable Vector Graphics), SVG는 그래픽을 마크업하기 위한 W3C XML의 특수언어(diaelct)입니다. SVG는 파이어폭스, 오페라, 웹킷 브라우저, 인터넷 익스플로러 및 기타 여러 브라우저에서 부분적으로 지원하고 있습니다. 본 튜토리얼의 목적은 SVG 내부 구조를 설명하는 데 있으며, 기술적인 세부 사항을 다룹니다. 만약 그저 아름다운 이미지를 그리려고 한다면, Inkscape's documentation page에서 더 많은 유용...
  • 웹지기 10-15 5522 0 0 댓글 0
게시물 검색

회원로그인

접속자집계

오늘
755
어제
8,701
최대
61,067
전체
11,205,047

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