ブログ
ハーモニック・モジュラー・スケールのためのSassライブラリとSketchプラグイン
このブログではこれまで「文字サイズの比率と調和」や「音楽、数学、タイポグラフィ」といった記事で、調和数列をもとにしたスケールから文字サイズを決定する手法を紹介してきました。私たちのチームではこのスケールを「ハーモニック・モジュラー・スケール」と呼び、実際に多くのプロジェクトで採用しています。
このたび私たちは、ハーモニック・モジュラー・スケールにもとづくテキストのスタイリングを簡単にするためのツールとして、Sassライブラリ「Harmonic Modular Scale」とSketchプラグイン「Harmonic Modular Scale for Sketch」を公開しました。これらのツールはスケールにもとづく文字サイズを算出すると同時に、行の高さを一定のユニットの整数倍に揃える機能も持っています。
Harmonic Modular Scale
Harmonic Modular ScaleはSassライブラリです。ハーモニック・モジュラー・スケールにもとづくfont-size
と、一定のユニットの整数倍からなるline-height
を出力します。なおライブラリはSassの新しいモジュールシステムを使って書かれています。
ライブラリでは以下のオプション変数を設定できます。
$scale-factor
:スケールのもとになる調和数列の、各項の分母にあたる整数。デフォルトは8
$base-font-size
:スケールの基準になるfont-size
の値。デフォルトは1rem
$line-height-unit
:line-height
の最小単位。デフォルトは0.25rem
$use-calc
:出力結果のfont-size
とline-height
プロパティの値にcalc()
関数を使うかどうか。デフォルトはtrue
もしこれらのオプションを変更する場合は、@use
で読み込むときにwith
節で上書きします。
@use "../node_modules/harmonic-modular-scale" as hms with (
$base-font-size: 1.25rem,
$use-calc: false
);
ライブラリのもっとも基本的な使い方は、以下のようにsizes()
ミックスインを用いてfont-size
とline-height
を出力するものです。
@use "../node_modules/harmonic-modular-scale" as hms;
body {
@include hms.sizes(0, 3);
}
h1 {
@include hms.sizes(3, 1);
}
figcaption {
@include hms.sizes(-2, 1);
}
これは以下のようなアウトプットが得られます。
body {
font-size: 1rem; /* 16px */
line-height: calc(1em * 56 / 32); /* 28px */
}
h1 {
font-size: calc(1rem * 8 / 5); /* 25.6px */
line-height: calc(1em * 40 / 32); /* 32px */
}
figcaption {
font-size: calc(1rem * 8 / 10); /* 12.8px */
line-height: calc(1em * 50 / 32); /* 20px */
}
sizes()
ミックスインは2つの引数を取ります。1つめの$font-size-degree
は必須の引数で、文字サイズのスケール上の位置を指定します。オプションの$base-font-size
を0
として、それより大きければ正、小さければ負の整数を指定します。例えば$base-font-size
が1rem
(16px)、$scale-factor
が8
のときのfont-size
の出力結果は以下のようになります。
$font-size-degree |
出力されるfont-size |
px値 |
---|---|---|
4 |
calc(1rem * 8 / 4) |
32px |
3 |
calc(1rem * 8 / 5) |
25.6px |
2 |
calc(1rem * 8 / 6) |
21.333px |
1 |
calc(1rem * 8 / 7) |
18.286px |
0 |
1rem |
16px |
-1 |
calc(1rem * 8 / 9) |
14.222px |
-2 |
calc(1rem * 8 / 10) |
12.8px |
-3 |
calc(1rem * 8 / 11) |
11.636px |
-4 |
calc(1rem * 8 / 12) |
10.667px |
第2引数の$line-height-degree
は行の高さを決定するためのものです。sizes()
で得られるline-height
の値はつねにオプション$line-height-unit
(デフォルトは0.25rem
[4px])の整数倍になります。$line-height-degree
は、font-size
が最低限収まるline-height
を0
として、そこからどれだけ増減させるかを整数で指定します。
上記の例では、body
のfont-size
が16pxなので、これが最低限収まる4px単位のline-height
は同じく16pxです。$line-height-degree
が3
なので、16pxに12pxを足した28pxがline-height
として得られます。h1
はfont-size
が25.6pxで$line-height-degree
の0
に当たるのが28pxなので、1
を指定すると結果は32pxになります。以下の表はfont-size
が0.8rem(12.8px)の場合のline-height
プロパティの出力です。
$line-height-degree |
出力されるline-height |
px値 |
---|---|---|
3 |
calc(1em * 70 / 32) |
28px |
2 |
calc(1em * 60 / 32) |
24px |
1 |
calc(1em * 50 / 32) |
20px |
0 |
calc(1em * 40 / 32) |
16px |
-1 |
calc(1em * 30 / 32) |
12px |
またget-line-height()
という、line-height
をもとにした長さを返す関数も用意されています。これは例えば「本文2行分のマージンを中見出しの上に持たせたい」というようなときに便利です。引数として$font-size-degree
と$line-height-degree
に加えて、line-height
を何倍するかを指定する$lines
も渡せます。
@use "../node_modules/harmonic-modular-scale" as hms;
$theme-sizes-body: (0, 3);
$theme-sizes-h2: (2, 2);
body {
@include hms.sizes($theme-sizes-body);
}
h2 {
@include hms.sizes($theme-sizes-h2);
margin-top: hms.get-line-height($theme-sizes-body, 2);
margin-bottom: hms.get-line-height($theme-sizes-body);
}
これは次のように出力されます。
body {
font-size: 1rem;
line-height: calc(1em * 56 / 32); /* 28px */
}
h2 {
font-size: calc(1rem * 8 / 6);
line-height: calc(1em * 48 / 32);
margin-top: calc(1rem * 56 / 32 * 2); /* 56px */
margin-bottom: calc(1rem * 56 / 32); /* 28px */
}
Harmonic Modular Scale for Sketch
Harmonic Modular Scale for SketchはSketchでテキストをスタイリングするためのプラグインです。GUIを通じて、ハーモニック・モジュラー・スケールにもとづく文字サイズと、ユニットの整数倍からなる行の高さを指定できます。デザイナーと開発者が共通のロジックでタイポグラフィに触れることで、両者の連携が円滑になることを目指して開発しました。
使い方は簡単です。プラグインのウィンドウを開き(Plugins > Harmonic Modular Scale > Type Scale Settings…)、テキストレイヤーを選択した状態で、Font size degreeとLine height degreeのスライダーを調整してください。チームでSketchファイルを共有するときは、メンバーがそれぞれプラグインをインストールしておくと便利です。レイヤーを選択するだけでパラメーターの値を共有できます。