0Pricing
HTML Academy · レッスン

label要素とアクセシビリティ

スクリーンリーダーをサポートするため、labelを入力欄に関連付けます。

「label要素とアクセシビリティ」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

ラベルが重要な理由

<label>要素は、フォームコントロールにテキストの説明を関連付けます:

  • スクリーンリーダーは、入力欄にフォーカスが移動したときにラベルを読み上げます
  • ラベルをクリックすると、関連付けられた入力欄が有効になります
  • ラベルがないと、スクリーンリーダーのユーザーはそのフィールドの目的を把握できません

forを使った明示的なラベル

for属性は、idによってラベルと入力欄を関連付けます:

<label for="email">Email address</label>
<input type="email" id="email" name="email">

<!-- for="email" matches id="email" -->
<!-- Clicking "Email address" moves focus to the input -->
<!-- Required for proper accessibility -->

暗黙的なラベル(内包)

入力欄をラベルの内側に配置すると、暗黙的な関連付けが作成されます:

<!-- No for/id needed — input is inside label -->
<label>
  Email address
  <input type="email" name="email">
</label>

<!-- Works fine but explicit association is more robust
     (especially when label and input are far apart in the DOM) -->

ラベルと入力欄を分離する

ラベルと入力欄を隣接させられない場合は、aria-labelledbyを使用します:

<h2 id="section-title">Billing Details</h2>
<input type="text" name="name" aria-labelledby="section-title">
<!-- The heading serves as the accessible label for the input -->

代替手段としてのaria-label

視覚的なラベルを用意できない場合は、aria-labelを使用します:

<!-- Search form with icon button -->
<form>
  <input type="search" name="q" aria-label="Search the site">
  <button type="submit" aria-label="Submit search">
    <svg><!-- magnifier icon --></svg>
  </button>
</form>

入力欄ごとに1つのラベル

各入力欄には、必ず1つだけラベルを付けてください。複数の入力欄には、それぞれ別のラベルが必要です:

<!-- BAD: one label for multiple inputs -->
<label>First and last name
  <input type="text" name="first">
  <input type="text" name="last">
</label>

<!-- GOOD: separate labels -->
<label for="first">First name</label>
<input type="text" id="first" name="first">

<label for="last">Last name</label>
<input type="text" id="last" name="last">

必須フィールドの表示

必須フィールドはアクセシブルな方法で示します:

<!-- Visual + accessible required indicator -->
<label for="email">
  Email address
  <span aria-hidden="true">*</span>         <!-- visual asterisk -->
  <span class="sr-only">(required)</span>    <!-- screen reader text -->
</label>
<input type="email" id="email" name="email" required>

グループにはfieldsetとlegendを使う

関連する入力欄を<fieldset>と<legend>でグループ化します:

<fieldset>
  <legend>Shipping address</legend>

  <label for="addr-street">Street</label>
  <input type="text" id="addr-street" name="street" autocomplete="address-line1">

  <label for="addr-city">City</label>
  <input type="text" id="addr-city" name="city" autocomplete="address-level2">
</fieldset>

ラジオボタングループのfieldset

ラジオボタンのグループには、必ずfieldsetとlegendが必要です:

<fieldset>
  <legend>Preferred contact method</legend>

  <label>
    <input type="radio" name="contact" value="email"> Email
  </label>
  <label>
    <input type="radio" name="contact" value="phone"> Phone
  </label>
  <label>
    <input type="radio" name="contact" value="text"> Text message
  </label>
</fieldset>

プレースホルダーはラベルではない

プレースホルダーはユーザーが入力すると消えるため、ラベルの代わりにはなりません:

<!-- BAD: placeholder used as a label -->
<input type="email" placeholder="Email address">
<!-- Screen readers may announce the placeholder, but many skip it -->
<!-- User cannot see the field purpose while typing -->

<!-- GOOD: -->
<label for="email">Email address</label>
<input type="email" id="email" placeholder="you@example.com">

視覚的に非表示のラベル

デザイン上、表示できるラベルがない場合は、スクリーンリーダー向けに残したまま視覚的に非表示にします:

<label for="search" class="sr-only">Search</label>
<input type="search" id="search" placeholder="Search...">

/* sr-only utility class: */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

確認問題

明示的な関連付けを使って、ラベルと入力欄をどのように関連付けますか?

まとめ:labelのアクセシビリティ

ラベルの要点:

  • すべての入力欄には、必ずラベルが必要です
  • <label for="id">で明示的に関連付けます
  • 入力欄をラベル内に配置すると、暗黙的に関連付けられます
  • aria-labelledbyでは、idによって任意の要素と関連付けられます
  • 表示テキストのないアイコンのみのボタンにはaria-labelを使用します
  • グループ化したコントロールには<fieldset>と<legend>を使用します

よくある質問

「label要素とアクセシビリティ」レッスンは無料ですか?

はい。「label要素とアクセシビリティ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「label要素とアクセシビリティ」で何を学びますか?

スクリーンリーダーをサポートするため、labelを入力欄に関連付けます。 ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「label要素とアクセシビリティ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. form要素:action、method、enctype
  2. 入力タイプ:text、password、email、number、tel
  3. label要素とアクセシビリティ
  4. button要素:submit、reset、button
← HTML Academyに戻る