本文へ移動
easeweb
ご相談
トピックを検索

ドラッグでしかサイズを変えられない分割パネル

サイドバーと本文の間の区切り線はドラッグでしか動かず、フォーカスも当たらないため、キーやクリックでは幅を変えられず、今の幅も伝わらない

WCAG 2.2
SC 2.1.1ASC 2.5.7AA· 2.2 で追加SC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <div class="divider"></div>
アクセシビリティの問題を示した図: 手の操作:サイドバーを広げるには?
01

問題

ドラッグできない人はサイドバーの幅を変えられず、スクリーンリーダーの利用者には、幅を変えられることも今の幅も伝わらない

02

試してみる

マウスでサイドバーを広げてから、マウスを使わずにTabでも試してみましょう

  • 問題1: パネルの間の線をドラッグします。次にTabキーを押します。フォーカスは最後のメモから「共有」へ移り、区切りには止まりません。下の欄にも、区切りは一度も出てきません。

  • 問題2: 同じ区切りに role="separator" を足しただけです。Tabキーは同じように区切りを飛ばし、矢印キーも何もしません。スクリーンリーダーでページを読み進めても、見つかるのはせいぜい区切り線で、幅も、変える方法も伝わりません。

  • 修正を適用します。 Tabキーと矢印キー、HomeとEndで試し、次にクリックだけで試してください。ドラッグせずに幅を変えられますか?

問題あり 修正できますか?

持ち物リスト

  • パスポートと航空券
  • 充電器と変換プラグ
  • レインコート

スクリーンリーダーの読み上げ:

(Tabでアプリの中を移動してください)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

ドラッグしなくても幅を変えられるようにする

修正前

ドラッグでしか動かない区切り

<div class="notes-app">  <nav class="sidebar" id="sidebar" aria-labelledby="notes-title" style="width: 30%">    <h2 id="notes-title">メモ</h2>    <ul>      <li>        <a href="/notes/packing-list" aria-current="page">持ち物リスト</a>      </li>      …    </ul>  </nav>  <div class="divider"></div>  <main class="note">    <h1>持ち物リスト</h1>    <button type="button">共有</button>    …  </main></div>
問題点3点
  • 区切りはフォーカスを受け取らないため、キーボードでは届きません。
  • 動かす方法はドラッグだけです。
  • ロールも値もないため、ここにコントロールがあることも、サイドバーの幅も、支援技術には伝わりません。
修正後

矢印キーで動く区切りと、「狭く」「広く」のボタン

<div class="notes-app">  <nav class="sidebar" id="sidebar" aria-labelledby="notes-title" style="width: 30%">    <h2 id="notes-title">メモ</h2>    <ul>      <li>        <a href="/notes/packing-list" aria-current="page">持ち物リスト</a>      </li>      …    </ul>    <div class="sidebar-width" role="group" aria-label="サイドバーの幅">      <button type="button" data-step="-5">狭く</button>      <button type="button" data-step="5">広く</button>    </div>  </nav>  <div class="divider" role="separator" tabindex="0" aria-orientation="vertical"    aria-labelledby="notes-title" aria-controls="sidebar"    aria-valuenow="30" aria-valuemin="20" aria-valuemax="50" aria-valuetext="30%"></div>  <main class="note">    <h1>持ち物リスト</h1>    <button type="button">共有</button>    …  </main></div>
修正の手順6ステップ
  1. tabindex="0" で、区切りをTabの順序に入れます。フォーカスできる区切りはウィジェットの種類になり、aria-valuenow が必須です。
  2. 大きさを変えるペインと同じ「メモ」を aria-labelledby で名前にし、aria-controls でそのペインを指します。
  3. aria-valuenow、aria-valuemin、aria-valuemax でサイドバーの幅をアプリに対する割合で示し、aria-valuetext で、その数字がパーセントだと伝えます。
  4. 左右の矢印キーで5%ずつ動かし、HomeとEndでサイドバーの最小と最大の幅にします。preventDefault() で、矢印キーでページがスクロールしないようにします。
  5. 「狭く」と「広く」のボタンを加えます。1回のクリックやタップで幅を変えられ、区切りだけでは得られない、ドラッグしない方法になります。HTML標準のボタンなので、Tabの順序に入り、音声操作では「広くをクリック」と言えます。キーと同じ5%ずつ動くので、キーで届く幅にはすべて届きます。
  6. どの方法でも setWidth() を通すため、スクリーンリーダーが読む値はいつも画面の幅と同じです。ドラッグは近道として残ります。

これで二つの修正前の例はどちらも直り、2.1.1、2.5.7、4.1.2を満たします。区切りは、ARIA Authoring Practices Guide(APG)のウィンドウスプリッターのパターンに沿うものになりました。ただし、Enterキーでペインを折りたたむ操作は含めていません(「実装の判断」を参照)。

04

デザインの案

区切りは細い線のままでも、ドラッグせずに幅を変えられる

メモの一覧と開いたメモの間の線を3通りに描きました。それぞれドラッグしてから、クリックだけで試し、マウスを使わずにTabでも試してください。2つは1回ずつ押すだけで幅が変わり、1つはポインターを押さえたままでないと動きません。

デザインファイルで

  • 区切りは、何もしていない状態から、押せるものを横に添えて描く。ホバーで現れる線だけにしない。
  • サイドバーの最小と最大の幅、1回押すごとに変わる幅(5%など)を書いておく。
  • 区切りとボタンそれぞれにフォーカスの枠を付けて描く。どちらのパネルに対しても3:1以上にする。
  • スマートフォンのレイアウトも描く。パネルは縦に並び、区切りは表示しない。

合格

  • 持ち物リスト
    線の上の小さな矢印 線の中ほどに白い小さな楕円を置き、狭くする矢印と広くする矢印を並べます。どちらも24 × 24ピクセルで、操作は目が探す場所にあります。1回押すごとに線が5%動き、線そのものもTabキーと矢印キーで動き、ドラッグもできます。最小と最大の幅では、矢印を消さずに薄く描きます。
  • 持ち物リスト
    ツールバーのサイドバーの幅の切り替え 「狭い」「中」「広い」の3つの幅を、パネルの上の小さな切り替えに並べ、今の幅を青で塗ります(白に対して6.83:1)。どの幅になっているか、誰にでも見えます。パネルの間の線はこれまでどおり、間のどの幅にもドラッグでき、そのときは3つのどれも塗られません。

不合格

  • 持ち物リスト
    ホバーで現れる線WCAG 2.5.7 最もすっきりしたレイアウトです。ポインターが近づくまでパネルの間に線はなく、近づくと2ピクセルの青い線が現れ、それをドラッグします。幅を変える方法はドラッグだけなので、Tabでは何も見つからず、クリックしても何も起きません。ホバーのないタッチスクリーンでは、線が表示されることもありません。
05

修正の確認

5項目

確認方法: キーボード、スクリーンリーダー、マウス、タッチ、拡大表示

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。レイアウトやパネルのライブラリーを変更した際は、再度確認します。

スクリーンリーダーでの role="separator" tabindex="0"の読まれ方

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。スクリーンリーダーによって、区切りの読み方や、矢印キーを区切りに渡すかどうかが異なるため、利用者が使う製品で確認してください。価格や音量のような1つのスライダーは「ドラッグでしか動かない範囲スライダー」、カードや項目の移動は「マウスでしか動かせないドラッグ&ドロップのボード」、ジェスチャー全般は「ボタンで代われないピンチ・ドラッグ・傾きのジェスチャー」で扱っています。表の列幅の変更、ドッキングや切り離しのできるパネル、3つ以上並ぶペインには、それぞれ別の配慮が必要で、ここでは扱いません。対象とする支援技術で、レイアウト全体を確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る