📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 105行目: | 105行目: | ||
<syntaxhighlight lang="html"> | <syntaxhighlight lang="html"> | ||
<form accept-charset="UTF-8"> | <form accept-charset="UTF-8"> | ||
</syntaxhighlight> | |||
<br> | |||
===== role属性 ===== | |||
role属性は、role属性はタグの役割を明確に示し、Webページのアクセシビリティを向上させるためのものである。<br> | |||
role属性およびaria属性を活用することにより、支援技術を使用するユーザにとって理解・操作しやすいフォームが作成できる。<br> | |||
<br> | |||
formタグに関連する主なrole値 | |||
* role="form" | |||
*: フォームセクションであることを明示的に示す。 | |||
*: formタグ自体にはデフォルトでこの役割があるため、通常は省略可能である。 | |||
*: <br> | |||
* role="group" | |||
*: 関連する入力項目をグループ化する。 | |||
*: 例: 住所や個人情報等、関連性の高いフィールドをまとめる場合に使用する。 | |||
<br> | |||
===== aria属性 ===== | |||
role属性およびaria属性を活用することにより、支援技術を使用するユーザにとって理解・操作しやすいフォームが作成できる。<br> | |||
<br> | |||
* aria-label | |||
*: 要素の説明ラベルを提供する。 | |||
*: 視覚的なラベルがない場合に有効である。 | |||
*: 例: aria-label="会員登録フォーム" | |||
*: <br> | |||
* aria-labelledby | |||
*: 別の要素のIDを参照してラベルとして使用する。 | |||
*: <syntaxhighlight lang="html"> | |||
<h2 id="form-title">お問い合わせ</h2> | |||
<form aria-labelledby="form-title"> | |||
</syntaxhighlight> | |||
* aria-required | |||
*: 入力必須項目であることを示す。 | |||
*: HTML5のrequired属性と併用することが推奨される。 | |||
*: 例: aria-required="true" | |||
*: <br> | |||
* aria-invalid | |||
*: 入力値が無効であることを示す。 | |||
*: バリデーションエラー時に使用する。 | |||
*: 例: aria-invalid="true" | |||
*: <br> | |||
* aria-describedby | |||
*: 補足説明を提供する要素との関連付け | |||
*: <syntaxhighlight lang="html"> | |||
<input aria-describedby="email-hint"> | |||
<div id="email-hint">会社のメールアドレスを入力してください</div> | |||
</syntaxhighlight> | |||
* aria-errormessage | |||
*: エラーメッセージを示す要素との関連付け | |||
*: <syntaxhighlight lang="html"> | |||
<input aria-errormessage="email-error"> | |||
<div id="email-error">正しいメールアドレスの形式で入力してください</div> | |||
</syntaxhighlight> | |||
* aria-expanded | |||
*: 展開可能な要素の状態を示す。 | |||
*: アコーディオン形式のフォームで使用する。 | |||
*: 例: aria-expanded="false" | |||
*: <br> | |||
* aria-controls | |||
*: 制御対象となる要素のIDを示す。 | |||
*: <syntaxhighlight lang="html"> | |||
<button aria-controls="address-fields">住所を入力</button> | |||
<div id="address-fields"> | |||
<!-- 住所入力フィールド --> | |||
</div> | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
* role属性とaria属性は適切に組み合わせて使用することで効果を発揮する。 | |||
* 過剰な指定は逆に混乱を招く可能性がある。 | |||
* ネイティブのHTML要素が提供する機能を優先的に使用する。 | |||
* スクリーンリーダーでの動作確認が推奨される。 | |||
<br> | |||
==== 使用例 : アクセシブルなフォーム ==== | |||
以下の例では、WAI-ARIAの属性を活用しながら、アクセシブルなフォームを作成している。<br> | |||
<br> | |||
アクセシビリティ対応のポイントを以下に示す。<br> | |||
* role="form"属性およびaria-label属性で、フォームの目的を明確に示している。 | |||
* labelタグおよびinputタグを、id属性とfor属性で関連付けている。 | |||
* 必須項目には、aria-required="true"属性を設定している。 | |||
* エラー状態は、aria-invalid="true"属性で示し、エラーメッセージをaria-errormessageで関連付けている。 | |||
* 補足説明は、aria-describedbyで関連付けている。 | |||
<br> | |||
これにより、スクリーンリーダーユーザは、フォームの目的、各入力項目の意味や必須 / 任意項目、エラーが発生した場合のフィードバックを得ることができる。<br> | |||
また、入力項目に関する補足説明を確認できる。<br> | |||
<br> | |||
<syntaxhighlight lang="html"> | |||
<form role="form" aria-label="お問い合わせフォーム"> | |||
<!-- フォームの各セクションをグループ化 --> | |||
<div role="group" aria-labelledby="personal-info"> | |||
<h2 id="personal-info">個人情報</h2> | |||
<!-- ラベルとフォーム要素を明確に関連付け --> | |||
<div class="form-field"> | |||
<label for="fullname" id="name-label"> | |||
氏名 | |||
<span aria-label="必須" class="required">*</span> | |||
</label> | |||
<input type="text" id="fullname" name="fullname" aria-required="true" aria-describedby="name-help" required> | |||
<div id="name-help" class="help-text"> | |||
氏名をフルネームで入力してください | |||
</div> | |||
</div> | |||
<!-- エラーメッセージの適切な関連付け --> | |||
<div class="form-field"> | |||
<label for="email"> | |||
メールアドレス | |||
<span aria-label="必須" class="required">*</span> | |||
</label> | |||
<input type="email" id="email" name="email" aria-invalid="true" aria-errormessage="email-error" required> | |||
<div id="email-error" class="error" role="alert"> | |||
有効なメールアドレスを入力してください | |||
</div> | |||
</div> | |||
</div> | |||
<!-- 送信ボタン --> | |||
<button type="submit" aria-label="フォームを送信">送信する</button> | |||
</form> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||