テキストの描画
キャンバスの描画コンテキストでは、 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 を使用することもできます。