テキストの描画
前の章でスタイルや色を適用する方法を見た後は、キャンバスにテキストを描画する方法を見ていきます。
テキストの描画
キャンバスの描画コンテキストでは、 2 種類のテキスト描画方法を提供しています。
fillText(text, x, y [, maxWidth])
-
(x,y) で指定した位置にテキストを塗りつぶして描画します。任意で最大描画幅を指定できます。
strokeText(text, x, y [, maxWidth])
-
(x,y) で指定した位置にテキストの輪郭を描画します。任意で最大描画幅を指定できます。
fillText
の例
現在の fillStyle
を使用して、テキストを塗りつぶして描画します。
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.font = "48px serif";
ctx.fillText("Hello world", 10, 50);
}
strokeText
の例
現在の strokeStyle
を使用して、テキストの輪郭を描画します。
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.font = "48px serif";
ctx.strokeText("Hello world", 10, 50);
}
テキストのスタイル付け
上記の例では、テキストを既定のサイズより若干大きくするため、すでに font
プロパティを使用していました。キャンバスにテキストを表示する形式を調整できるプロパティは、さらにいくつかあります。
font = value
-
テキストを描画する際に使用するテキストのスタイルです。 CSS の
font
プロパティと同じ構文に則った文字列です。既定のフォントは 10px sans-serif です。 textAlign = value
-
テキストの配置を設定します。使用できる値は
start
、end
、left
、right
、center
です。既定値はstart
です。 textBaseline = value
-
ベースラインの位置ぞろえを設定します。使用できる値は
top
、hanging
、middle
、alphabetic
、ideographic
、bottom
です。既定値はalphabetic
です。 direction = value
-
書字方向を設定します。使用できる値は
ltr
、rtl
、inherit
です。既定値はinherit
です。
以前に CSS を扱ったことがあれば、これらのプロパティも見慣れているでしょう。
以下は WHATWG 提供の、textBaseline
属性によってサポートされている様々なベースラインを示した図です。
textBaseline の例
以下のコードを編集すると、canvas の変更個所をその場で確認できます。
高度なテキスト測定
テキストのより詳細な情報を得る必要がある場合は、以下のメソッドで測定することができます。
measureText()
-
指定したテキストを現在のテキストスタイルで描画したときの幅をピクセル単位で表した情報を持つ、
TextMetrics
オブジェクトを返します。
以下のコードスニペットは、テキストを測定して幅を得る方法を示しています。
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
const text = ctx.measureText("foo"); // TextMetrics object
text.width; // 16;
}
アクセシビリティの考慮
<canvas>
要素は単なるビットマップであり、描画するオブジェクトの情報は提供しません。キャンバス上に書かれたテキストは、画面の拡大を頼りにしているユーザーにとって、読みやすさの問題を発生させる可能性があります。キャンバス要素内のピクセルは変倍しないので、拡大するとぼやけてしまいます。これは、ピクセルがベクターではなく、文字の形をしたピクセルの集合であるためです。拡大するとピクセルが大きくなります。
キャンバスのコンテンツは、意味づけされた HTML のようにアクセシビリティツールに公開されることはありません。一般的に、アクセシビリティのあるウェブサイトやアプリでキャンバスを使用することは避けましょう。キャンバスの代わりに HTML 要素や SVG を使用することもできます。