font-sizeをremで指定する

コーディングでフォントサイズをpxではなくremで指定した方が、アクセシビリティの観点からいいとされていますが、その理由とsassでpx → remへ変換する自作関数について紹介します。

絶対値と相対値

私の足のサイズは25.5cmですが、これはどこにいても25.5cmで変わらず、絶対値と呼ばれます。
WEBの場合pxが絶対値になるので、font-size: 16px;と指定したらデバイスやブラウザ環境に左右されることなく16pxで表示されます。
ブラウザの設定で文字サイズを大きく設定したユーザーにとっても、設定が活かされずに同じ16pxで表示されてしまいます。

「90%」といわれたら、何かの基準に対しての90%→相対的な数値になります。
WEBでいうと %、em、rem が相対値になります。

1emも1remも両方とも「1文字分」になりますが、基準としているものが違います。
フォントサイズに指定する場合、1emは親のフォントサイズ1文字分、1remはhtmlのフォントサイズ1文字分になります。

特に指定がなけれはhtmlのフォントサイズは16pxなので、1rem=16pxとして計算します。
font-size: 1rem; と指定することで、指定がなかれば16px、ブラウザ設定で文字サイズを大きくしていれば20px・・・といったようにユーザーの設定を反映させた指定ができます。

計算が大変

たとえば14pxをremで指定しようとすると、14÷16=0.875rem、といったように計算が面倒になります。より直感的にrem指定ができるようにする方法を2つ紹介します。

font-size: 62.5%

1つ目は、htmlのフォントサイズを62.5%にするという手法です。
すると、1remは16×0.625=10pxになります。
14pxを指定する場合は1.4remになるので、わかりやすいですね。

sassの自作関数を使う

以前紹介した単位を除く関数と組み合わせて、cssにコンパイルした時にrem に変換されるスニペットを作っておく方法もあります。

数値の単位を除く関数strip-unitのコードはコチラです↓

//function.scss
@use 'sass: math';
@use 'sass: meta';
@function strip-unit($number){
  @if meta.type-of($number) == 'number' and not math.is-unitlless($number){
    @return math.div($number, $number * 0 + 1);
  }
  @return $number;
}

この関数を利用して、pxをrem変換する関数を自作します。

@use 'sass: math';

@function rem($pixel, $base: 16){
  @if math.unit($pixel) != 'px'{
    @warn '引数には、単位がpxの数値を入れて下さい'
  }
  @return math.div(stip-unit($pixel), 16) * 1rem;
}

引数$pixelに入れた数値がそのまま単位が外れて、16で割った数値にremがつきます。
使い方としては

//sass
.hoge{
  font-size: rem(42px);
}


//コンパイル後↓
.hoge{
  font-size: 2.625rem;
}

このような感じになります。

いいなと思ったら応援しよう!

ピックアップされています

コーディング

  • 8本

コメント

ログイン または 会員登録 するとコメントできます。
font-sizeをremで指定する|いずみ
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1