コニファ・ロゴ

ツール集:[CSS]フォントサイズなどを相対指定する単位のemとremの違い

フォントサイズを指定する場合、「px」などの絶対指定と、「%」などの相対指定の2種類の単位があります。
関連ページ → [ブラウザ上で文字の見た目を確認する・その2]
このページで確認する「em」、「rem」は、相対指定の一種で、ともに文字サイズの高さを1とする単位です。
「em」は、その指定要素がある位置での文字サイズを基準にします。仮にルート要素であるhtmlタグで文字サイズを15pxと指定( html {font-size:15px} )していたとしても、そのemがある位置の親要素のfont-size指定が18pxならば、1emのサイズは18pxになります。

一方、「rem」は、ルート要素で指定した文字サイズを基準にします。htmlの入れ子の中にあっても親要素の指定に影響されません。

サンプル1(emを使った場合)

font-size:1em; padding:0.5em

font-size:1em; padding:0.5em

サンプル1は、左右の親要素内に内包するテキストを含めて全く同じp要素が入っています。文字サイズは、ルート要素で指定した15pxのままで、右側の親要素のみに font-size:18px を指定しています。その結果、
左側:1emは15px font-sizeが15px(1em)paddingが7.5px(0.5em)
右側:1emは18px font-sizeが18px(1em)paddingが9px(0.5em)
になっています。

サンプル1のhtmlソース

  <div class="box">
  	<div class="parent-l"><p class="sample">font-size:1em; padding:0.5em</p></div>
  	<div class="parent-r"><p class="sample">font-size:1em; padding:0.5em</p></div>
  </div>

サンプル1のCSSソース

html {
	font-size: 15px;
	}
.parent-l,.parent-r {
	display: inline-block;
	width: 45%;
	margin: 0 0 0 15px;
	padding: 5px;
	}
.parent-r {
	font-size: 18px;
	}
p.sample {
	text-align: center;
	background: #bef;
	color: #000;
	border: 1px solid #ccc;
	font-size: 1em;  /*-- emを使用 --*/
	padding: 0.5em;  /*-- emを使用 --*/
	}

 

サンプル2(remを使った場合)

font-size:1rem; padding:0.5rem

font-size:1rem; padding:0.5rem

サンプル2は、サンプル1と同じ状態のものを使い、p要素のみclass名を「sample2」として、CSSでemをremに置き換えています。右側の親要素のみに  font-size:18px を指定していますが、結果は同じになります。
左側:1remは15px font-sizeが15px(1rem)paddingが7.5px(0.5rem)
右側:1remは15px font-sizeが15px(1rem)paddingが7.5px(0.5rem)

サンプル2のhtmlソース

  <div class="box">
  	<div class="parent-l"><p class="sample2">font-size:1rem; padding:0.5rem</p></div>
  	<div class="parent-r"><p class="sample2">font-size:1rem; padding:0.5rem</p></div>
  </div> 

サンプル2のCSSソース(変更部分のみ)

p.sample2 {
	text-align: center;
	background: #bef;
	color:#000;
	border: 1px solid #ccc;
	font-size: 1rem;  /*-- remを使用 --*/
	padding: 0.5rem;  /*-- remを使用 --*/
	}

 

サンプル3(左右のpaddingのみをemとremに)

font-size:18px; padding:0.5em

font-size:18px; padding:0.5rem

左右の親要素をまったく同じにして、左右のp要素の文字サイズをともに絶対指定の font-size:18px 、paddingのみ左を「em」、右を「rem」の単位にしています。その結果、左側のpaddingは、font-sizeの18pxの半分の9pxに、右側のpaddingは、ルート要素指定の15pxの半分の7.5pxになります。
左側:font-sizeが18px 1emは18px paddingが9px(0.5em)
右側:font-sizeが18px 1remは15px paddingが7.5px(0.5rem)

サンプル3のhtmlソース

 <div class="box">
  	<div class="parent"><p>font-size:18px; padding:0.5em</p></div>
  	<div class="parent"><p class="rem">font-size:18px; padding:0.5rem</p></div>
 </div> 

サンプル3のCSSソース

.parent {
	display: inline-block;
	width: 45%;
	margin: 0 0 0 15px;
	padding: 5px;
	}
.parent p {
	text-align: center;
	background: #bef;
	color:#000;
	border: 1px solid #ccc;
	font-size: 18px;
	padding: 0.5em;  /*-- p要素左側emを使用 --*/
	}
.parent p.rem {
	padding: 0.5rem;  /*-- p要素右側remを使用 --*/
	}

 

戻るボタン