rootのfont-sizeにvwを設定して画面幅によって可変にしたいmixin
はじめに
レスポンシブにしたときのfont-sizeどうしていますか?
breakpointをいっぱい切る、vwで良い感じに調整する、clamp使う、良い感じのmixin作る、何もしない、と色々やり方があると思います・・・。
地味にめんどくさかったりするのでmixinを作ったほうが早いですね、きっと。
かつ、remを使いたい。htmlに62.5%つけるあれです。それをvwで設定します。
※Dart Sass対応。まだ対応していない方は適宜calc()で書き換えて頂けると。
コード
/*
* htmlのfont-size用
*/
@function rootFz($baseWidth: 1280px) {
@return math.div(10px, $baseWidth) * 100vw;
}
/*
* font-size可変用
*/
@function calcFz($max) {
$value: math.div($max, 10);
@return clamp(10px, #{$value}rem, #{$max}px);
}
html {
font-size: rootFz();
}
@media screen and (max-width: 768px) {
html {
font-size: rootFz(375px);
}
}
.hoge {
font-size: calcFz(16);
}
@media screen and (max-width: 768px) {
.hoge {
font-size: calcFz(14);
}
}
解説
rootFz()
rootFzの引数のデフォルト($baseWidth)はPCのデザインカンプの幅を入れてください。
今回はPCデザインカンプ1280pxの場合です。
SPの場合はメディアクエリ内でrootFzを記述して、引数にSPのデザインカンプを入れてください。
今回はSPデザインカンプ375pxの場合です。
コンパイルすると↓の値がhtmlに入っているはずです。(PC)
calcFz()
font-sizeをclamp()で計算します。
引数にデザインカンプ上の値を入れてください。
最小値は10pxにしてあります。(10px以下には基本的にはならないので問題ないはずです。)
基準の値はhtmlにrootFz()しており、1rem=10pxになるように設定してあるので、1/10した値を入れます。
※例だと1.6remが入ります。
最大値はデザインカンプの値そのままpxで入るようにしています。
さいごに
画面縮めたり大きくしたり、文字サイズ大きくしたり小さくしたりしても気持ち良いfont-sizeの完成です。
デザインに寄せてレイアウトを崩さない方法なので、フォントサイズ小さくしてアクセシビリティ的にどうなの?とかあると思うので、部分的に使うのが良いかもしれません!
横幅MAXのときに使うとレイアウト崩れずに良い感じにできます!
Discussion