em,rem,px,%について使い分けよう

更新日:

目次
それぞれの見た目の違い
内部的な動き

それぞれの見た目の違い

まず今から、em , rem , px , %のそれぞれでmargin-leftをそれぞれ20で設定した例を示す。

これは何も付け加えていないテキストです

これがmargin-left: 20em;です

これがmargin-left: 20rem;です

これがmargin-left: 20px;です

これがmargin-left: 20%;です

内部的な動き

em

em(エム)について分かりやすく式に表すと、
emのサイズ(px) = [親要素のフォントサイズ(px)] × [emの値]となる。

emは親要素のフォントサイズの相対値を指定している。

rem(root em)

実はremはroot emの略である。remは上の結果を見ると分かる通り、emと同じ幅で動いている。それもそのはず、rem(レム)について分かりやすく式に表すと、
remのサイズ(px) = [ルート要素のフォントサイズ(px)] × [remの値]となる。

emとremの違い

emが親要素であるフォントサイズの相対値を指定しているのに対し、
remはルート要素であるフォントサイズの相対値を指定しているということである。

親要素について、HTMLとCSSのサンプルを用いて表すと、

HTML
        
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            <body> 
                <div class = "oya">
                    <p class = "ko"> こんにちは </p>
                </div>
            </body>
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            
        
        
CSS
        
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            .oya{
                font-size: 10px;
            }
            .ko{
                font-size: 2em;
            }
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        

このように、oyaクラスで設定されたフォントサイズである10pxに対し、koクラスでは2emと設定された。 emは親要素のフォントサイズの相対値となっているため、oyaクラスで設定されたフォントサイズの10pxがemのサイズを決める。つまり最終的なフォントサイズは20pxとなっている。
それに対し、ルート要素というのはhtmlタグで保存されている要素のことで、そのhtmlタグ保有のフォントサイズの相対的な値がremとなる。html内のフォントサイズは常に一定であるため、emのように親要素で決められたフォントサイズに左右されることなく値を設定できる。

px(ピクセル)

px(ピクセル)は画面上の点のことで、論理的な単位である。

例えば解像度1920px × 1080pxサイズのモニターを使っていて、CSSで margin-left: 960px; と指定した場合、画面左に960px分の空白をあけるということである。その場合文字の左端は画面の中央に位置される。

しかし、画面上の1ドットを基準としているが、pxは論理的な単位であるので、ブラウザをズームした時には文字の左側は中央にこない。次にmargin-left: 960;に設定した文字を配置しておくので、1920 × 1080のモニターがあればぜひ試してみてほしい。

これはmargin-left: 960;です

%(パーセント)

%(パーセント)は、親要素のサイズからの相対値のことである。親要素が1000pxで10%と指定した場合、100pxとなる。ただし、プロパティがweightやheightの場合、親要素がautoの場合では、height: 50%のような指定は効かない。また、border-widthは%が利用できないなど、プロパティによってルールが存在する。
参考にしたサイト :