トピックを検索
文字の間隔を広げると切れる、ボタンのラベル
高さを固定し、1行に収めてはみ出しを隠したボタンは、間隔を広げて長くなったラベルを収められず、途中で切ってしまいます。
問題
文字や単語の間隔を広げて読みやすくしている人が、サイズ固定のボタンで途中が切れたラベルを読めません。
ある店の商品ページでは、左に大きな写真、その横の狭い列に商品の詳細があります。その列の価格の下に、「カートに入れる」と「今すぐ購入」の2つのボタンが横に並んでいます。サイト本来の間隔では、どちらのラベルも余裕を持って収まります。ディスレクシアのある人が、文字や単語の間隔を広げる拡張機能を使って読みます。ラベルはそれぞれ長くなりますが、ボタンの大きさは変わりません。「今すぐ購入」はまだ収まりますが、「カートに入れる」は収まらず、「カートに入…」と途中で切れます。さらに狭いスマートフォンでは、両方が切れます。ページの下にあるサイズ選択のタブや「入荷のお知らせ」ボタンも、同じように切れます。
2つのボタンは並びの幅を等分し、ラベルを中央に置くための height: 44px と line-height: 44px が指定されています。中のラベルには、1行に保つための white-space: nowrap と、長すぎる場合に備えた overflow: hidden と text-overflow: ellipsis が指定されています。達成基準1.4.12は、行の高さをフォントサイズの1.5倍、段落の間隔を2倍、文字の間隔を0.12倍、単語の間隔を0.16倍にしても、コンテンツが失われないことを求めています。この値では各ラベルにより広い幅が必要ですが、ボタンは固定された並びを分け合っているため横に広がれず、nowrap のため折り返せず、固定の高さのため縦にも広がれません。そのためブラウザーはラベルを切り、省略記号を付けます。
文字の間隔を変える人は、すべてのサイトに同じ設定を使います。拡張機能や読書モードの多くはフォントも変えるため、ラベルはさらに長くなります。切れて最も困るのはボタンです。「カートに入…」なら推測できますが、「アカウントを削…」と「アドレスを削…」のように、区別がつかなくなることもあります。
10グループ中2グループに影響
- 全盲 (影響なし)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 届く範囲・力 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 言語・認知・学習の能力が限られる 文字が詰まって見えないよう、拡張機能などで文字や単語の間隔を広げるディスレクシアのある人。押したいボタンが「カートに入…」となり、残りを推測するしかありません。
- 視覚が限られる 拡大しても文字どうしがくっつかないよう、間隔を広げるロービジョンの人。大きく表示すると、切れたラベルはさらに読み取りにくくなります。
axe が確認するのは1.4.12の一部です。ルール avoid-inline-spacing は、利用者のスタイルシートを無効にしてしまう、!important 付きのインラインの間隔指定を検出します。間隔を実際に適用して、切れたラベルを探すことはしないため、上のボタンは合格します。検出するには、4つの値を適用してから、各操作部品のボックスとその中の文字を比べる必要があります。AIによる修正は、よく次の3つの形で失敗し、どれもラベルの一部を読めないままにします。
overflow: hiddenだけを消す:ラベルがボタンの端からはみ出し、隣のボタンに重なります。- 収まらないときにフォントを小さくする:利用者の間隔は保たれますが、文字が読めないほど小さくなります。
- ラベル全体を
titleに入れる:マウスを重ねて少し待ったときだけ表示され、タッチ操作では表示されません。
試してみる
文字の間隔を広げて、ボタンを読んでください。
「文字の間隔」をオンにしてください。行の高さ1.5、文字の間隔0.12em、単語の間隔0.16em、段落の間隔2emになります。2つのボタンをすべて読めますか?
問題あり 直してみませんか?
鋳鉄スキレット 26cm
49.00
再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。
修正方法
ボタンは固定のサイズではなく最小の高さと余白で作り、ラベルかボタンの並びを折り返せるようにします。
- 1ボタンとタブには min-height と余白を使い、固定の高さにしない。
- 2ラベルは省略記号で切らず、ラベルかその並びを折り返す。
- 3行・文字・単語の間隔を、インラインの !important で指定しない。
<div class="buy-row"> <button type="submit" class="button"><span class="button-label">カートに入れる</span></button> <button type="button" class="button button-secondary"><span class="button-label">今すぐ購入</span></button></div>1.4.12の間隔では、各ラベルが並びの半分の幅より長くなります。ボタンはどの方向にも広がれないため、ラベルの最後は省略記号の後ろに隠れます。
サイト本来の間隔では、ボタンの見た目は以前と変わりません。どちらも1行で高さ44ピクセルのまま、ラベルは行の高さではなく余白で中央に置かれます。間隔を広げると、収まらなくなったラベルは2行目に折り返し、ボタンもそれに合わせて高くなります。ボタンは横に並んだままで、HTMLも変わりません。
どちらの方法でも、1.4.12の間隔ですべてのラベルを読め、達成基準を満たします。ラベルを折り返す方法は変更が小さく、ボタンをデザインどおりの位置に保てますが、2行のラベルは少し読み取りにくくなります。並びを折り返す方法はラベルを1行に保てるため読みやすい一方、幅が足りないとボタンが縦に積まれ、その下のレイアウトが下にずれます。ツールバーや表の行のように、ボタンを横に並べておく必要がある場合はラベルの折り返しを、積まれても問題ない場合(多くのフォームや商品ページ)は並びの折り返しを選んでください。
ほかの固定された操作部品も探す。 タブ、ピル、バッジ、ナビゲーションのリンク、ドロップダウンの項目、表の見出しなど、ラベルを含む要素で、ピクセル指定の height と line-height、white-space: nowrap、text-overflow: ellipsis を探します。どれも min-height と余白に置き換えます。一覧の長い商品名を省略記号で切り、全文を商品ページに載せるのはデザインの判断ですが、操作部品のラベルを切るとコンテンツが失われます。
行の高さではなく余白で中央に置く。 line-height: 44px は1行を中央に置きますが、折り返した行もすべて44ピクセルの高さにします。余白か、display: inline-flex と align-items: center を使い、2行目が1行目の近くに並ぶようにします。
間隔は上書きできるままにする。 利用者は、ユーザースタイルシートや拡張機能で1.4.12の値を適用します。ページビルダーやリッチテキストエディターが書き込む style="letter-spacing: 0 !important" のようなインラインの指定は、利用者のスタイルシートより優先され、それだけで不適合になります(axe の avoid-inline-spacing)。間隔の指定はスタイルシートに移し、行・文字・単語の間隔から !important を外します。
切れるだけでなく、重なることもある。 商品写真に固定した「セール」のバッジや、ヒーロー画像に重ねた文字のように絶対配置した文字は、間隔が広がっても切れず、隣の要素に重なります。文字の場所が十分にあるか確認し、必要なら通常の配置に戻します。
アイコンと固定の幅。 アイコンとラベルを固定の width に入れたボタンも、同じように切れます。内容に合わせた幅にし、デザイン上必要なら min-width を使います。
外部のウィジェット。 決済ボタン、チャットの起動ボタン、Cookieバナーなどは、独自に高さを指定していることがよくあります。間隔を適用して確認し、切れる場合は提供元に報告します。達成基準はページ全体に適用されます。
ほかの文字体系。 日本語のように単語の間にスペースがない言語では、単語の間隔はほとんど効きませんが、文字の間隔と行の高さは効きます。サイトで提供するすべての言語で確認してください。
AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得
修正の確認
マウスを使わない5つの確認
確認方法: 文字の間隔
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ボタンのコンポーネントやテーマを変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。1.4.12が求めるのは、4つの値を適用してもコンテンツが失われないことだけで、サイト独自の間隔の設定を用意することは求めていません。画像の中の文字や、動画に焼き込まれた字幕など、対象外のコンテンツもあります。コード内のクラス名は仮のものです。商品ページだけでなく、操作部品のあるすべてのテンプレートで確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。