Movatterモバイル変換


[0]ホーム

URL:


 

Web Design Leaves

Personal Web Reference

HTML5/HTML Living Standard (2)

更新日:2022年03月10日

作成日:2017年07月04日

HTML5(現在は HTML Living Standard)では、セクションに関連する要素以外にも、新しい要素が追加されたり、意味が変更されたりしています。

関連ページ:HTML5/HTML Living Standard (1)

よく使う新要素

以下は、比較的良く使われる HTML5 での新要素 time 要素、figure 要素、figcaption 要素、picture 要素、source 要素、mark 要素、main 要素に関しての説明です。

time 要素

time 要素は、日付や時刻を表記する際に、24時間表記の時刻またはグレゴリオ暦による正確な日付 (時刻やタイムゾーンを伴うことも可能) を表す際に使用します。日時を記述するのに、必ず time 要素を使用しなくてはならないわけではなく、コンピュータやブラウザが理解できるように日時を示すことが目的です。

注意点: この要素は計算を行えない特殊な日付に対しては適切でなく、またグレゴリオ暦導入前の日付に対して使用するべきではありません (日付の計算で混乱するため)。

time element /time 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ

値にはコンピューターによって取り扱い可能な文字列を指定できます。言い換えると、time 要素の日時は、規定のフォーマット(書式)に従ってマークアップする必要があります。

フォーマットは、「年-月-日T時:分:秒タイムゾーンオフセット」のようになって、以下のようなルールになっています。

  • 年月日はハイフン(-)で繋ぐ
  • 年月日と時刻は大文字の T(または半角スペース)で繋ぐ
  • 時分秒はコロン(:)で繋ぐ
  • タイムゾーンオフセットは +09:00 または +0900 等(日本などの場合)

具体的には、以下のようなフォーマット(書式)で記述します。この他のフォーマットについては「W3C time element」を参照ください。

<!--有効な月文字列--><time>2011-11</time><!--有効な日付文字列--><time>2011-11-12</time><!--有効な西暦なし日付文字列--><time>11-12</time><!--有効な時刻文字列--><time>14:54</time><time>14:54:39</time><time>14:54:39.929</time><!--有効な浮動日時文字列:日付と時刻を T または半角スペースで区切る--><time>2011-11-12T14:54</time><time>2011-11-12T14:54:39</time><time>2011-11-12T14:54:39.929</time><time>2011-11-12 14:54</time><time>2011-11-12 14:54:39</time><time>2011-11-12 14:54:39.929</time>

以下は有効なタイムゾーンオフセット文字列の例です。Z は協定世界時(UTC)を表します。(日本時間は +09:00 または +0900)

<time>Z</time><time>+0000</time><time>+00:00</time><time>-0800</time><time>-08:00</time>

以下は有効なグローバル日時文字列の一例です。

<time>2011-11-12T14:54Z</time><time>2011-11-12T14:54+0000</time><time>2011-11-12T14:54+00:00</time><time>2011-11-12 14:54Z</time><time>2011-11-12 14:54+0000</time><time>2011-11-12 14:54+00:00</time>

経過時間や期間を表す場合は、2つの書式があります。1つは、数値に週「w」、日「d」、時間「h」、分「m」、秒「s」の単位を付け、半角スペースで区切って表す書式です。

<!--1週間と5日3時間20分17秒--><time>1w 5d 3h 20m 17s</time>

もう1つは「P」に続けて、数値に日「D」の単位を付け、「T」で区切った後に、同じく時間「H」、分「M」、秒「S」を表す書式です。

<!--1週間と5日(12日)3時間20分17秒--><time>P12DT3H20M17S</time>

datetime 属性

datetime 属性が指定されている場合は、日時以外の内容を time 要素内に記述することが可能です。

<time datetime="2017-05-22">今日</time>

datetime 属性に規定のフォーマットに従った値を指定すれば、要素の内容は自由に記述できます。

<p>△△は <time datetime="2017-07-07 19:00">7月7日</time>に開催します。</p><p>1着の記録は、<time datetime="2h 34m 56S">2時間34分56秒</time>でした。</p>

また、pubdate 属性は現在は廃止されています。

figure 要素

figure 要素は、本文から参照されるイラスト・図表・写真・ソースコードなどのまとまりを表します。figure 要素によるまとまりは、単体で独立している必要があります。つまり、その部分を文書から切り出したとしても元の文書に影響がないとともに、切り出した内容自体で意味が通るようにする必要があります。単なる雰囲気のための画像などには使えません。多くの場合、キャプション(figcaption 要素)を伴って使用されます。

また、figure要素は、セクショニングルートカテゴリに属しているので、記述されている文書のアウトラインには影響を与えません。そのため、この要素内では独自の見出しのランク付けを行うことができます。

figure element /figure 要素 /MDN
カテゴリーフローコンテンツ
セクショニングルート
パルバブルコンテンツ
この要素が使える場所フローコンテンツが期待される場所
コンテンツモデル以下のいずれか。
  • フローコンテンツ
  • 1つの figcaption 要素に続けてフローコンテンツ
  • フローコンテンツに続けて一つの figcaption 要素

以下のように本文と関連した写真や図版、 ソースコードなどを掲載するときに使います。

<h3>ニューヨーク散歩</h3><p>ニューヨークは散歩がいい。見るものが多いので飽きることがありません。</p><figure> <img src="/images/wvillage.jpg" alt="古い建物の多いビレッジの風景"></figure><p>ウェストビレッジは昔からアーティストに愛されてきました。</p>
<p><a href="#c3">以下は</a> load() の使用例です。</p><figure id="c3">  <pre><code>$("#jqs-1 button").click(function() {   $("#jqs-1 .injectToMe").load("../samples/ajax_02.html table#schedule");});</code></pre></figure><p>load() は指定の URL に向けて、Ajax 要求の発行を開始します。</p>

figcaption 要素

figcaption 要素は、その親要素となる figure 要素の内容にキャプションを表示する要素です。キャプションとは、写真、挿絵、図表、コードなどの内容を表す説明文(テキスト)のことです。

figure 要素において、figcaption 要素は必須という訳ではありません。

figcaption element /figcaption 要素 /MDN
カテゴリーなし
この要素が使える場所figure 要素の最初または最後の子要素として記述可能
コンテンツモデルフローコンテンツ

figcaption 要素は、figure 要素内の最初か最後に、1つだけ記述できます。

<h3>ニューヨーク散歩</h3><p>ニューヨークは散歩がいい。見るものが多いので飽きることがありません。</p><figure>  <figcaption>ウェストビレッジの古い建物</figcaption>  <img src="/images/wvillage.jpg" alt="古い建物の多いビレッジの風景" /></figure><p>ウェストビレッジは昔からアーティストに愛されてきました。</p>

以下は、figure 要素の途中に figcaption 要素があるので誤った使い方になります。

<h3>ニューヨーク散歩</h3><p>ニューヨークは散歩がいい。見るものが多いので飽きることがありません。</p><figure>  <h4>ウェストビレッジ</h4>   <figcaption>ウェストビレッジの古い建物</figcaption> <!-- 誤まり -->  <img src="/images/wvillage.jpg" alt="古い建物の多いビレッジの風景" /></figure><p>ウェストビレッジは昔からアーティストに愛されてきました。</p>

以下は、最後になるので正しい使い方です。

<h3>ニューヨーク散歩</h3><p>ニューヨークは散歩がいい。見るものが多いので飽きることがありません。</p><figure>  <h4>ウェストビレッジ</h4>   <p>ウェストビレッジを歩いていると古い建物が目に付きます。</p>  <img src="/images/wvillage.jpg" alt="古い建物の多いビレッジの風景" />  <figcaption>ウェストビレッジの古い建物</figcaption></figure><p>ウェストビレッジは昔からアーティストに愛されてきました。</p>

picture 要素

picture 要素は、ユーザーの閲覧環境(画面や端末の条件)に応じた画像を表示する要素で、レスポンシブイメージを文書内に埋め込むことができます。

source 要素を使ってサイズや内容の異なる複数の画像候補を用意することで、ユーザーの閲覧環境に適した画像を表示させることができます。(HTML 5.1 で追加されました。)

picture 要素に内包された複数の source 要素と、img 要素により画像リソースを提供します。

ブラウザは、picture 要素内の source 要素の条件を順に見て( srcset, media, type 属性を調べて)最初にマッチしたものを選択します。適切なものがない場合やブラウザが picture 要素をサポートしていない場合には、自動的に img 要素に指定された画像が表示されます。

ブラウザ実装状況:http://caniuse.com/#feat=picture

picture element /picture 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
エンベッディッドコンテント
この要素が使える場所エンベッディッドコンテントが期待される場所
コンテンツモデル0個、または複数の source 要素に続いて、1つの img 要素。オプションでスクリプト支援要素

img 要素と picture 要素の使い分け

レスポンシブイメージは、img 要素または picture 要素で設定することができますが、それぞれ以下のような特徴があります。

img 要素
同じ内容の画像で、サイズや解像度の異なる画像をセットしたい場合に使用します。条件の設定は可能ですが、実際にどの画像が使用されるかはブラウザ側の裁量に委ねられます。
picture 要素
サイズや解像度の違いだけでなく、内容の異なる画像をセットしたい場合に使用します(デバイスにより縦横比の異なる画像を表示させたい場合など)。picture 要素による設定では、指定した条件下で強制的に画像を切り替えることができます。

以下は、3枚の画像(large.png、medium.png、small.png)を用意し、ブラウザの幅により表示する画像を切り替える例です。

以下の場合、ウィンドウサイズが 980px 以上なら large.png が、640px 以上なら medium.png が 、640px 未満なら small.png が読み込まれます。

<picture>  <source media="(min-width: 980px)" srcset="images/large.png">  <source media="(min-width: 640px)" srcset="images/medium.png">  <img src="images/small.png" alt="サンプル画像"> </picture>

Window Width :

サンプル画像

基本的な記述方法(ウィンド幅による画像の切り替え)は、

  • source 要素media 属性を使ってメディアクエリを設定(条件を設定)
  • source 要素の srcset 属性を使って画像候補を指定(表示される画像を設定)
  • 必要に応じて複数の source 要素を配置
  • source 要素の後に img 要素を配置して、デフォルトで表示される画像を指定

img 要素は必ず最後に記述します。img 要素の後に書かれた source 要素はすべて無視されるので注意が必要です。また、ブラウザが picture 要素をサポートしていない場合には、自動的に img 要素に指定された画像が表示されます。

以下は画像解像度(ピクセル密度)により画像を切り替える例です。

<picture>  <source media="(min-width: 768px)"           srcset="images/large.png 1x,                  images/large_1.5x.png 1.5x,                  images/large_2x.png 2x" />  <source media="(min-width: 320px)"           srcset="images/medium.png 1x,                  images/medium_1.5x.png 1.5x,                  images/medium_2x.png 2x" />  <img src="images/small.png"        srcset="images/small_1.5x.png 1.5x,               images/small_2x.png 2x"       alt="サンプル画像" /></picture>

srcset 属性には複数の画像リソースを指定でき、それぞれの画像はカンマ区切りで記述します。

「1x」や「1.5x」「2x」という値は画像解像度を示しています。「1.5x」は通常の1.5倍の画像解像度の場合はこの画像を使用するように、と指定をします。「1x」の記述は省略可能です。

以下は、sizes 属性を使い、画像を常にビューポートの幅 80% で表示する例です。

割合で指定する場合は % ではなく vw 単位を使います( viewport widthの略)。割合は親要素の幅に対するものではなく、ビューポートの幅に対するものです。

<picture>  <source media="(min-width: 768px)"           sizes="80vw"          srcset="images/large.png 320w,                  images/large_1.5x.png 480w,                  images/large_2x.png 640w" />  <source media="(min-width: 320px)"           sizes="80vw"          srcset="images/medium.png 320w,                  images/medium_1.5x.png 480w,                  images/medium_2x.png 640w" />  <img src="images/small.png"        sizes="80vw"       srcset="images/small_1.5x.png 480w,               images/small_2x.png 640w"       alt="サンプル画像" /></picture>

以下は間違った例です。sizes 属性を指定した場合、source 要素の srcset 属性の値は、幅を指定する必要があります(解像度・画素密度記述子を指定すると W3C でチェックすると以下のようなエラーになります)。

Error: Bad value images/large.png, images/large_1.5x.png 1.5x,images/large_2x.png 2x for attribute srcset on element source:
No width specified for image images/large.png.
(When the sizes attribute is present, all image candidate strings must specify a width.)

<!--誤った使い方--><picture>  <source media="(min-width: 768px)"           sizes="80vw"          srcset="images/large.png (誤り),                   images/large_1.5x.png 1.5x (誤り),                  images/large_2x.png 2x (誤り)" />  <source media="(min-width: 320px)"           sizes="80vw"          srcset="images/medium.png (誤り),                  images/medium_1.5x.png 1.5x(誤り),                  images/medium_2x.png 2x(誤り)" />  <img src="images/small.png"        sizes="80vw"       srcset="images/small_1.5x.png 1.5x(誤り),               images/small_2x.png 2x(誤り)"       alt="サンプル画像" /></picture>

picture 要素を使ったサンプル

source 要素

source 要素は audio 要素、video 要素、picture 要素において、選択可能なファイルを複数指定します。複数のファイルを用意することで、閲覧者の環境に合わせて適切なファイルが選択されます。

source element /source 要素 /MDN
カテゴリーなし
この要素が使える場所メディア要素(audio 要素、video 要素、picture 要素)の子要素として記述可能。ただし、すべてのフローコンテンツや track 要素より前に記述する。
コンテンツモデル

以下は source 要素を picture 要素内に配置した場合のものです。(video 要素や audio 要素内に配置する場合とは異なります)

使用できる属性

media
メディアクエリを指定。ブラウザはそのメディアクエリの条件に一致した場合だけ、このソースを選択します。この属性は picture 要素の内部でのみ使用します。
src
文書内に埋め込む音声・動画ファイルの URL を指定。(audio 要素および video 要素では必須。picture 要素の内部にある source 要素では、この値は無視されます)
srcset
ブラウザが使用できる画像のセット(候補)をカンマ区切りで並べたリストで指定。ブラウザは、条件に合わせてこれらの中から画像を選択します。(詳細は「srcset 属性と sizes 属性」を参照)
sizes
source で示した画像を最終的に表示する幅を表す、ソースサイズのリスト。それぞれのソースサイズは、条件と長さのペアをカンマ区切りで並べたものです。この情報は srcset で指定された画像を使用する際に、ページのレイアウトを行う前にブラウザが使用します。sizes 属性は、source 要素が picture 要素の子要素である場合にのみ効果があります。(詳細は「srcset 属性と sizes 属性」を参照)
type
リンク先の MIME タイプを指定(例:type="image/webp")

mark 要素

mark 要素は、ハイライトされるテキストを表します。文章の中で特に目立たせたいテキストを示す要素で、その文章における重要性や強調を表すものではありません。テキストの特定の部分に対して参照や言及をするときに、「この部分です」と読者の意識を引きつけるために使います。

例えばウェブサイトの検索結果を表示するページ上で、検索した語句をハイライトする為などに使用できます。対応しているブラウザでは、背景が黄色くハイライト された状態で表示されます。

mark element /mark 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ

mark 要素は、ハイライト されるテキストを表します。

<p>mark 要素は、<mark>ハイライト</mark>されるテキストを表します。</p>

main 要素

main要素は文書内の主要なコンテンツを表します。この要素は、文書内で1つだけ配置することができます。(個数制限に関しては、変更になる可能性があります)

主要なコンテンツとは、Webサイト内の各ページで繰り返し使われるサイトのロゴやヘッダー、ナビゲーション、検索フォームや著作権のクレジットなどを除いた、その文書内で主な内容となる部分になります。また、セクショニングコンテンツではないので、文書のアウトラインに影響を与えません。

main element /main 要素 /MDN
カテゴリーフローコンテンツ
パルバブルコンテンツ
この要素が使える場所フローコンテンツが期待される場所
コンテンツモデルフローコンテンツ。但し、article、aside、footer、header、nav の各要素内で使用することはできません。(逆に、これらの要素が main 要素に含まれているのは問題ありません)

※ IE11 以下では main 要素をインライン要素として規定されているようです。そのため、IE でもブロック要素として表示させたい場合は以下を指定する必要があります。

main { display: block; }

以下の例では、ジャズに関する記事が2つありますが(スウィングとビバップ)、main 要素を使うことで、主要なコンテンツを特定しています。

<!-- 他のコンテンツ --><main>  <h1>ジャズ</h1>  <p>ジャズは....</p>  <article>    <h2>スウィング</h2>    <p>スウィングしなければ....</p>    <p>... </p>    <p>... </p>  </article>  <article>    <h2>ビバップ</h2>    <p>ビバップとは...</p>    <p>... </p>    <p>... </p>  </article></main><!-- 他のコンテンツ -->

main 要素はWAI-ARIAが策定する role 属性において、role="main" としてマッピングされますが、ブラウザーがこのマッピングを実装するまでは、main 要素の role属性に "main" を追加する事が提案されています。

<main role="main">  <article>    <h1>ビンテージギター</h1>    <p>1950年代に作成された...</p>  </article></main>

但し、W3C でチェックすると「Warning: The main role is unnecessary for element main.」と警告が表示されます。

ルビ関連の新要素

HTML5 では、ルビ(ふりがな)関連の新しい要素が追加されています。ルビとは文章内の任意のテキストに対するふりがな、説明、異なる読み方などの役割を持つテキストを、本文より小さく上部または下部に表示するものです。

  • ruby 要素:rt 要素や rp 要素と組み合わせてルビを表示する要素
  • rt 要素:ルビテキスト(ふりがなの文字列)を表示する要素
  • rb 要素:ルビベース(対象のテキスト)を明示的に示す要素(※非標準)
  • rp 要素:ruby 要素に対応していないルビの内容を括弧で表示する要素
  • rtc 要素:ルビテキストコンテナーを表す要素(※非標準)

ruby 要素

ruby 要素は、ルビ(ふりがな)を振るテキストの範囲を表します。

ruby 要素は、テキストにルビを振りたい場合に使用し、この要素内に対象のテキスト(ルビベース)を配置して、rt 要素でルビテキストを指定します。また、必要に応じて rb 要素、rtc 要素、rp 要素も使用することができます。

ruby element /ruby 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデル次のグループを1つ以上配置:
1つ以上のフレージング・コンテンツまたは rb 要素、その後に1つ以上の rt 要素または rtc 要素 (rp 要素を使用する場合は、rt 要素または rtc 要素の直前か直後に配置)

以下は文字毎のルビ(モノルビ)の例です。

<p>  <ruby>     日<rt>に</rt>    本<rt>ほん</rt>    語<rt>ご</rt>  </ruby></p>

ほん

以下は熟語のルビ(グループルビ)の例です。

<p>  <ruby>     日本語<rt>にほんご</rt>  </ruby></p>

日本語にほんご

以下は、rb要素を使って対象のテキストを明示的に示している例です。(前述の例と意味的には同じです)

<p>  <ruby>     <rb>日本語</rb><rt>にほんご</rt>  </ruby></p>

日本語にほんご

以下は、非対応ブラウザでは rt 要素の内容がそのまま表示されるので、rp 要素を記述して非対応ブラウザでは括弧で囲んだルビテキストが表示されるようにする例です。

<p>  <ruby>     日本語<rp>(</rp><rt>にほんご</rt><rp>)</rp>  </ruby></p>

日本語にほんご

rt 要素

rt 要素はルビテキストを表し、ruby 要素の内容となるテキストに与えられるルビ(ふりがな、説明、読み方など)として表示されます。ルビに対応していないブラウザーでは、rt 要素の内容は本文中にそのまま表示されます。

また、rt 要素の終了タグは、直後に rb、rp、rt、rtc 要素が続く場合は省略できますが、メンテナンス性を考慮すると省略しない方が良いでしょう。

rt element /rt 要素 /MDN
カテゴリーなし
この要素が使える場所ruby または rtc 要素の子として
コンテンツモデルフレージングコンテンツ

rb 要素

ルビの対象となるテキスト(ルビベース:ルビを振られるテキスト)を表します。この要素は、ruby要素の子要素として使用します。

ruby 要素内に複数の rt 要素が存在する場合に、ルビ対象テキストとルビを関連付けられます。

※非標準: この機能は標準ではなく、標準化の予定もありません。Firefox のみで機能します。

MDN ルビベース要素
カテゴリーなし
この要素が使える場所ruby 要素の子要素として
コンテンツモデルフレージングコンテンツ

以下は、rb 要素を使用した例です。

<p>  <ruby>     <rb>日</rb>    <rb>本</rb>    <rb>語</rb>    <rt>に</rt>    <rt>ほん</rt>    <rt>ご</rt>  </ruby></p>

ほん

rp 要素

rp 要素は ruby 要素に対応していないブラウザーにおいて、本文中にそのまま表示されるルビテキストを囲む括弧を表示します。ruby 要素の子要素、かつ rt 要素の前後に記述します。

ruby 要素に対応しているブラウザーでは無視され、何も表示されませんが、ruby 要素に未対応のブラウザーでは、rt 要素の前後に rp 要素の内容が表示されます。

rp element /rp 要素 /MDN
カテゴリーなし
この要素が使える場所ruby 要素の子として。ただし、rt または rtc 要素の直前または直後のどちらかにいれなければいけません。しかし rt 要素の間に入れることはできません。
コンテンツモデルフレージングコンテンツ

rp 要素の内容には括弧を入れるのが一般的ですが、他の文字を入れることも可能です。

rp 要素を使う場合は、rt 要素の「前後」に rp 要素を配置する必要があります(rt 要素の間に入れることはできません)。

以下は rp 要素の使用例です。

<p>  <ruby>     日本語<rp>(</rp><rt>にほんご</rt><rp>)</rp>  </ruby></p>

日本語にほんご

<p>  <ruby>     日<rp>(</rp><rt>に</rt><rp>)</rp>    本<rp>(</rp><rt>ほん</rt><rp>)</rp>    語<rp>(</rp><rt>ご</rt><rp>)</rp>  </ruby></p>

ほん

rtc 要素

rtc 要素はルビテキストコンテナーを表します。ルビテキストコンテナーとはルビテキストの集まりを指し、1つのルビ対象テキストに対して、複数のルビを適用したい場合等に使用できます。

※ Firefox でのみ機能します。非推奨(使わないほうが良い)

MDN ルビ文字列コンテナー要素
カテゴリーなし
この要素が使える場所ruby 要素の子として
コンテンツモデルフレージングコンテンツ、または、rt 要素。

rtc 要素は、rt 要素(ルビテキスト)のコンテナを明示的に示します。次の例では、rtc 要素を使って rt 要素のコンテナを明示的に示しています。

<p>  <ruby>     日本語    <rtc><rt>にほんご</rt></rtc>  </ruby></p>

日本語にほんご

しかし、rt 要素は暗黙的なコンテナ内に配置されているので、上記の例は rtc 要素を使わずに以下のように記述することができます。

<p>     <ruby>     日本語    <rt>にほんご</rt>  </ruby></p>

日本語にほんご

rtc 要素を利用するケースとしては、1つのルビ対象テキストに対して、複数のルビを適用したい場合があります。

rtc 要素の中には暗黙的に rt 要素があるとみなされるので、rtc 要素内に直接テキストを記述することができます。

<p>     <ruby>     日本語    <rt>にほんご</rt>    <rtc>Japanese</rtc>  </ruby></p>

日本語にほんごJapanese

rtc 要素内のルビテキストを分割したい場合は、以下のように rtc 要素内に rt 要素を配置します。

<p>  <ruby>     <rb>日</rb>    <rb>本</rb>    <rb>語</rb>    <rt>に</rt>    <rt>ほん</rt>    <rt>ご</rt>    <rtc>      <rt>ni</rt>      <rt>hon</rt>      <rt>go</rt>    </rtc>  </ruby></p>

ほんnihongo

rp 要素を使用した例

<p>  <ruby>    <rb>日</rb>    <rb>本</rb>    <rb>語</rb>    <rp>(</rp>    <rt>に</rt>    <rt>ほん</rt>    <rt>ご</rt>    <rp>)</rp>    <rp>[</rp>    <rtc>      <rt>ni</rt>      <rt>hon</rt>      <rt>go</rt>    </rtc>    <rp>]</rp>  </ruby></p>

ほん)[nihongo]

フォーム関連要素

HTML5 のフォーム部品は、フローコンテンツ、フレージングコンテンツ、インタラクティブコンテンツなどの通常のカテゴリーに加えて、以下のようなカテゴリーに属しています。

フォーム関連要素
フォームと関連を持つことができる要素のことです。デフォルトでは、その要素の祖先にある form 要素と関連づけられますが、HTML5で登場した form 属性が指定できる要素では祖先以外の form 要素とも関連づけることができます。
リスト化要素
form.elements API と fieldset.elements API にリストされる要素です。これらの API は、JavaScript などから使用できます。
ラベル付け可能要素
label要素と関連づけることができる要素です。(input 要素は type 属性の値が hidden の場合、ラベル付けできません。)
送信可能要素
フォームの送信でデータを送ることができる要素です。
リセット可能要素
リセットボタンが押されたときに影響を受ける要素です。

関連ページ:HTML フォームの設置

参考ページ:最適なフォームの作成 | Google Developers

input 要素

HTML5 のフォーム関連要素で大きく変更されたのが input 要素です。

input element /input 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
<type属性が hidden でない場合>
インタラクティブコンテンツ
パルパブルコンテンツ
フォーム関連要素(リスト化要素、ラベル付け可能要素、送信可能要素、リセット可能要素)
<type属性が hidden の場合>
フォーム関連要素(リスト化要素、送信可能要素、リセット可能要素)
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデル
input 要素の新しい type 属性

HTML5 で新たに追加されたフォーム部品の多くは、input 要素の type 属性に新しい値を指定することで利用できます。

  • search:検索ボックス
  • tel:電話番号入力欄
  • url:URL 入力欄
  • email:メールアドレス入力欄
  • datetime-local:タイムゾーンを持たない(ローカルの)日時の入力欄
  • date:年月日の入力欄
  • month:年月の入力欄
  • week:週の入力欄
  • time:時分秒の入力欄
  • number:数値の入力欄
  • range:数値の入力欄
  • color:色指定の入力欄

これらの属性値に対応しないブラウザでは、type="text" と同じ 1行入力欄になります。対応したブラウザでは、値に応じた入力コントロールの表示がされ、スマートフォンなど、ソフトウェアキーボードを備えたデバイスでは、コントロールのタイプに応じて、適切なキーボードが表示されます。

search

type 属性の値に "search" を指定すると、input 要素は検索ボックスになります。検索ボックスは機能的には type="text" のテキストボックスと変わりませんが、ブラウザによっては表示が少し異なる可能性があります。改行は自動的に入力値から取り除かれます。

<input type="search" name="sample">

type="search" の iput 要素

iPhone では、以下のように表示されます。

type 属性に search を指定した iPhone での検索ボックスの画像

tel

type 属性の値に"tel"を指定すると、input 要素は電話番号の入力欄になります。但し、特に何か電話番号用の機能があるわけではなく、入力内容が電話番号のみに制限されるわけでもありません。

改行は自動的に入力値から取り除かれますが、他に強要される文法はありません。pattern や maxlength といった属性を使用して、コントロールに入力する値を制限できます。

<input type="tel" name="tel_sample" />

type="tel" の iput 要素

iPhone では、以下のように表示されます。ソフトウェアキーボードがテンキーに変わるので、ユーザーが番号を入力しやすくなります。

type 属性に tel を指定した iPhone での入力欄の画像

url

type 属性の値に"url"を指定すると、input 要素は URL の入力欄になります。入力された値は送信前に、空文字列またはひとつの妥当な絶対 URL が含まれているかの検証を受けます。改行および先頭または末尾のホワイトスペースは、自動的に入力値から取り除かれます。pattern や maxlength といった属性を使用して、コントロールに入力する値を制限できます。

type 属性に url を指定した入力欄

<input type="url" name="url_sample" />

type="url" の iput 要素

iPhone では、以下のように表示されます。ソフトウェアキーボードに「.com」や「/」などのキーが表示されます。

type 属性に search を指定した url での入力欄の画像

email

type 属性の値に"email"を指定すると、input 要素はメールアドレスの入力欄になります。入力された値は送信前に、空文字列またはひとつの妥当な電子メールアドレスが含まれているかの検証を受けます。

type 属性に email を指定した入力欄

<input type="email" name="email_sample">

type="email" の iput 要素

iPhone では、以下のように表示されます。ソフトウェアキーボードに「@」マークが表示されます。

type 属性に email を指定した iPhone での入力欄の画像

datetime-local

type 属性の値に"datetime-local"を指定すると、input 要素は日時の入力欄になります。対応しているブラウザーでは年月日と時分を入力するコントロールが表示され、そこから選択することで日時を入力できるようになります。

この値を指定された入力コントロールから送信される日時は、閲覧者(ユーザー)の現地時間となります。送信される値は、ISO 8601 形式 (yyyy-mm-ddThh:mm:ss) になります。

type 属性に datetime-local を指定した入力欄の画像

<input type="datetime-local" name="datetime-local_sample">

type="datetime-local" の iput 要素

min 属性max 属性を使うと、ユーザーが選択可能な期間を指定できます。

<input type="datetime-local" name="datetime-local_sample" min="2017-06-01T00:00" max="2017-06-05T00:00">

type 属性に datetime-local を指定し、選択可能な期間を指定した入力欄の画像

step 属性に数値を指定すると、時分の入力の刻みを指定できます。単位は秒で、「60」で1分刻みになるので、5分刻みにしたいときは「300」と指定します。

<input type="datetime-local" name="datetime-local_sample" step="300">

iPhone では、以下のように表示されます。

type 属性に datetime-local を指定した iPhone での入力欄の画像

date

type 属性の値に"date"を指定すると、input 要素は日付けの入力欄となります。対応するブラウザでは、カレンダーのユーザインタフェースが表示され、そこから選択することで日付けを入力できるようになります。

min 属性と max 属性で期間を指定できる点や、ste p属性で刻みを指定できる点も datetime-local と同様です。step 属性の値の単位は日で、「1」を指定すると1日刻みになります。

<input type="date" name="date_sample">

type 属性に date を指定した入力欄の画像

type="date" の iput 要素

iPhone では、以下のように表示されます。

type 属性に date を指定した iPhone での入力欄の画像

month

type 属性の値に"month"を指定すると、input 要素は年月の入力欄になり、対応しているブラウザーでは年月を入力するコントロールが表示されます。

min 属性や max 属性、step 属性を指定できます。min 属性と、値が12の step 属性を同時に指定すると、min 属性で指定した月のみを選択できるようになります。例えば、min="2017-05" step="12"と指定すると、2017年5月、2018年5月......のように、毎年5月のみが選択できるようになります。

<input type="month" name="month_sample">

type 属性に month を指定した入力欄の画像

type="month" の iput 要素

iPhone では、以下のように表示されます。

type 属性に month を指定した iPhone での入力欄の画像

week

type 属性の値に"week"を指定すると、input 要素は週の入力欄になります。対応しているブラウザーでは週を入力するコントロールが表示されます。

week の値は西暦と週の組み合わせで構成されます。たとえば、「2017-W24」は2017年の24週目という意味です。min 属性や max 属性、step 属性も指定できます。

<input type="week" name="week_sample">

type 属性に month を指定した入力欄の画像

type="week" の iput 要素

time

type 属性の値に"time"を指定すると、input 要素は時分秒の入力欄になります。対応しているブラウザーでは時分秒を入力するコントロールが表示されます。

<input type="time" name="time_sample">

type 属性に time を指定した入力欄の画像

type="time" の iput 要素

デフォルトでは時間と分のみの入力できますが、step 属性の値を「1」などにすることで、秒も入力できるようになります。step 属性の単位は秒で、デフォルト値が「60」なので、59以下の値にすれば秒刻みで入力できることになります。

<input type="time" name="time" min="00:00" max="12:00" step="1">

type 属性に time を、step 属性の値を「1」を指定した入力欄の画像

type="time" の iput 要素

iPhone では、以下のように表示されます。

type 属性に time を指定した iPhone での入力欄の画像

number

type 属性の値に"number"を指定すると、input 要素は数値の入力欄となります。対応しているブラウザーでは入力ボックスのコントロールが表示され、クリックすることで数値を変更することができます。また、数値以外の入力が送信されようとした場合はエラーを返します。

min 属性、max 属性、step 属性を使用すると、それぞれ最小値・最大値・数値の刻みを指定できます。

<input type="number" name="number_sample">

type 属性に number を指定した入力欄の画像

type="number"のiput要素

min 属性、max 属性、step 属性の値を小数点以下に指定することで、小数点以下の値も扱えるようになります。

<input type="number" name="number_sample2" max="0.10" step="0.01">

step で小数点以下の値を指定していない場合、手動で小数点以下の値を入力するとエラーになります。

type 属性に number を指定した入力欄の画像(step で小数点以下の値を指定していない場合に、小数点をマニュアルで入力した場合エラーになる)

iPhone では、以下のように表示されます。

type 属性に number を指定した iPhone での入力欄の画像

range

type 属性の値に"range"を指定すると、input 要素は数値の入力欄になり、対応しているブラウザーでは、スライダー形式のユーザインタフェースが表示されます。但し、それほど厳密ではない、大まかな数値の入力欄です。

  • 数値の正確性は重要ではない
  • 指定できる数値は上限と下限の範囲が必須

数値の範囲は min 属性と max 属性で指定しますが、値を省略した場合はデフォルト値である「0」と「100」が設定されます。

入力値の初期値は value 属性で指定しますが、value 属性もしくはその値が省略された場合はデフォルト値である「min 属性値+( max 属性値 - min 属性値)÷2」が設定されます。例えば、min 属性値が0で max 属性値が100の場合、「0+(100-0)÷2」で、50となります。

ユーザーがスライダーを操作せずに送信した場合、値は空ではなく、value 属性に指定した初期値が送信されます。

<input type="range" name="range_sample">

type="range" の iput 要素

step 属性を使うと、数値の刻みを指定できます。省略した場合は、デフォルト値である1が設定されます。

<input type="range" name="range_sample" value="30" min="0" max="100" step="5">

通常は整数のみ指定できますが、min 属性、max 属性、step 属性の値を小数点以下に指定することで、小数点以下の値も扱えるようになります。

<input type="range" name="range" min="0.05" step="0.05">

iPhone では、以下のように表示されます。

type 属性に range を指定した iPhone での入力欄の画像

color

type 属性の値に"color"を指定すると、input 要素は色を指定するためのコントロールになります。対応しているブラウザーでは色を入力するコントロールが表示され、クリックするとパレット(RGB カラーの入力欄)が表示されます。

type 属性に color を指定した入力欄をクリックして表示されるパレットの画像

送信されるデータは、RGB 値を 16進数に変換したカラーコードです。例えば #7DB7C0 のような形式になります。

color は range 同様、値を空にできません。ユーザーが何も選択せずに送信ボタンを押した場合、デフォルト値の #000000 が送信されます。また、入力を必須とする required 属性も指定できません。

<input type="color" name="color_sample">

type="color" の iput 要素

iPhone では、以下のように表示されます。現時点(2017年6月2日)では、 type="text" のテキストボックスと変わりません。

type 属性に color を指定した iPhone での入力欄の画像

input 要素の新しい属性

input 要素には以下のような新しい属性が追加されました。

autocomplete 属性

autocomplete 属性は、オートコンプリート(自動補完)機能の有効/無効や期待されている値を指定(示唆)するもので、input 要素、textarea 要素、select 要素、form 要素で利用できます。

  • on:自動補完を行います (初期値)
  • off:自動補完を行いません ※ 現行ブラウザーのほとんどでは autocomplete 属性を off に設定しても、ブラウザーのパスワードマネージャーがパスワードなどを自動入力したりすることを抑制できません(パスワード欄の自動入力を抑止するために autocomplete="new-password"> を指定することができますnew-password)。
  • name や email、username、new-password などの値も指定できます。(MDN autocomplete 属性
<form action="" method="post" autocomplete="off"><input type="text" autocomplete="on"><input type="text" autocomplete="off">

autocomplete 属性は、input 要素に記述するとフォーム部品ごとにオートコンプリートの有効/無効を指定できます。form 要素に記述するとその中のフォーム部品をまとめて指定できます。

input 要素の autocomplete 属性を省略すると、親要素である form 要素の autocomplete 属性が適用されます。

form 要素の autocomplete 属性も省略されている場合は、デフォルト値である on が適用されます。

セキュリティ上の理由などでオートコンプリートを機能させたくない場合は、明示的に off を指定する必要があります。

autocomplete="new-password" による自動入力を抑止

パスワード欄の自動入力を抑止したい場合は、 autocomplete="new-password" を指定します。

<input type="password" name="pw" size="15" autocomplete="new-password">
autofocus 属性

autofocus 属性をフォーム部品に指定すると、ページが表示された際にその要素にフォーカスします。autofocus 属性は同一ページ内のフォーム部品に1つだけ指定できます。

autofocus 属性は論理属性です。

<input type="text" autofocus="autofocus"><input type="text" autofocus>

この属性は、type 属性が hidden である場合は適用できません。

コントロールへのフォーカス適用は、DOMContentLoaded イベントが発生する前に行われます。

form 属性

form 属性はフォームとフォーム部品の要素を関連づける属性です。フォーム部品の要素に form 属性を指定し、その値に form 要素の id 属性値を指定することで、両者を関連付けることができます。

属性の値は同一文書内の form 要素の id 属性の値でなければなりません。

<form action="" method="post" id="example">... 中略...</form><input type="submit" form="example">

この属性は input 要素を form 要素の子孫としてだけでなく、文書内のどこにでも配置することを可能にします。つまり、form 要素の外にフォームパーツを記述しても、正常に動作させることができます。input 要素はひとつの form 要素にのみ関連づけることができます。

この属性を指定しない場合、input 要素は form 要素の子孫要素として配置しなければなりません。

list 属性

list 属性は入力コントロールへのデータ入力時に表示する入力候補リストを指定します。入力候補リストは、同一文書内に記述したdatalist 要素で定義し、list 属性の値は、対象としたい datalist 要素に付与した id 属性の値を指定します。

list 属性を使うことで、事前にセットしておいた値をリスト形式で表示することができるようになります。

<input list="citylist" tyle="text" name="city" value=""><datalist id="citylist"> <option value="Tokyo"> <option value="New York"> <option value="Paris"> <option value="London"></datalist>

値は、同一文書内の datalist 要素の id であることが必要です。この属性は、type の値が hidden、checkbox、radio、file、ボタンタイプである場合は無視します。

詳しくはdatalist 要素の項目を参照してください。

max 属性

max 属性は入力コントロールに対して入力可能な値の最大値 (数値または日時) を指定します。

フォームから送信されるデータの入力範囲を限定したい場合、max 属性と min 属性を組み合わせます。

  • 数値の場合:max 属性に指定できる値は浮動小数点数です(整数も含みます)。
  • 日時の場合:max 属性に指定できる値は日付け文字列です。2017-06-03T11:07:24 のような形式になります。
<input type="datetime" name="datetime" min="2017-06-01T00:00" max="2017-06-05T00:00"><input type="number" name="num" min="10" max="200">
min 属性

min 属性は入力コントロールに対して入力可能な値の最小値 (数値または日時) を指定します。

フォームから送信されるデータの入力範囲を限定したい場合、max 属性と min 属性を組み合わせます。また、step 属性をあわせて指定することで、入力可能な最小値(ステップベース)を指定することもできます。

  • 数値の場合:min 属性に指定できる値は浮動小数点数です(整数も含みます)。
  • 日時の場合:min 属性に指定できる値は日付け文字列です。2017-06-03T11:07:24 のような形式になります。
<input type="datetime" name="datetime" min="2017-06-01T00:00" max="2017-06-05T00:00"><input type="number" name="num" min="10" max="200">
maxlength 属性

type 属性の値が text、email、search、password、tel、url の場合、この属性はユーザーが入力できる (Unicode コードポイントでの) 最大文字数です。他のコントロールタイプでは無視されます。textarea 要素にも指定可能。

<input type="password" maxlength="30">
minlength 属性

type 属性の値が text、email、search、password、tel、url の場合、この属性はユーザーが入力できる (Unicode コードポイントでの) 最小文字数です。他のコントロールタイプでは無視されます。textarea 要素にも指定可能。

<input type="password" minlength="10">
multiple 属性

multiple 属性は input 要素や select 要素において、選択肢の複数選択を可能にします。この論理属性は、ユーザーが複数の値を入力してよいかを示します。

この属性は input 要素の場合、type 属性の値が email または file である場合に適用します。他の値では無視します。

<input type="file" name="example" multiple><input type="email" name="sample_email" multiple>

対応するブラウザでは、select 要素の選択肢やアップロードするファイルを Ctrl キーなどを押しながらクリックすることで、複数選択可能になります。multiple 属性は論理属性です。

送信されるデータは、選択した内容がカンマ (,) 区切りで送信されます。

pattern 属性

pattern 属性には、input 要素の値をチェックするための正規表現を指定します。

この属性は、type 属性の値が text、search、tel、url、email、password である場合に適用します。他の値では無視します。正規表現の文法は、JavaScript の正規表現アルゴリズムと同一です。

この属性で指定する正規表現は、部分一致ではなく全体一致でチェックするものとなります。(パターンの前後に ^(?: と )$ が指定されているとみなされます)

また、pattern 属性を使用する場合は、title 属性で入力パターンの説明を入れておくことが推奨されています。この説明は、エラーメッセージ、ツールチップなどに表示される場合があります。

<input type="text" name="postal_code" pattern="\d{3}-\d{4}" title="郵便番号は、3桁の数字、ハイフン(-)、4桁の数字で記入してください。">

required と pattern を使用すると、フィールドに値が指定されることと、値が正しい形式に一致することを必須にできます。

<input type="text" name="postal_code" pattern="\d{5}" title="入力する値は、5桁の数字で記入してください。" required>

但し、以下の条件の場合、この属性は無視され、検証は行われません。

  • 関連づけられた form 要素に novalidate 属性が付与され、検証が無効な場合
  • 同じ入力コントロール要素に disabled 属性、または readonly 属性が指定されている場合
placeholder 属性

placeholder 属性は、入力の助けとなるような短いヒント(記入例やフォーマットの例など)を指定します。対応しているブラウザでは、この値が入力欄に表示され、入力を開始すると消えます。

長いヒントや入力コントロールに対する説明文などを指定したい場合には title 属性が適切であるとされています。また、placeholder 属性にセットするテキストには改行を入れることはできません。

<input type="text" name="postal_code" placeholder="000-0000">
required 属性

required 属性を指定すると、その要素は入力が必須になります。空欄のまま送信しようとすると、対応しているブラウザーではエラーが表示され、フォームの送信は行われません。required 属性は論理属性です。

type 属性の値が hidden、image、またはボタンタイプ (submit、reset、button) である場合は使用できません。

<input type="text" name="example" required>

但し、以下の条件の場合、この属性は無視されます。

  • 関連づけられた form 要素に novalidate 属性が付与され、検証が無効な場合
  • 同じ入力コントロール要素に disabled 属性、または readonly 属性が指定されている場合
step 属性

step 属性は数値や日時の値を入力する際に、増減量を制限するための入力可能な値の最小単位を指定します。

例えば、type 属性が number の input 要素に対して step 属性の値を 10 とすると、入力可能な値は 0, 10, 20... のように、0 からスタートして 10 刻みとなります。

<input type="number" name="number_sample" value="" step="10">

step 属性で指定する単位のことをステップと呼び、基準となる値(入力可能な最小値)をステップベースと呼びます。

step 属性は min 属性を組み合わせることで、入力可能な最小値である「ステップベース」を指定できます。

<input type="number" name="number_sample2" value="" min="5" step="5">

min 属性の値を 5 にすると、ステップベースは 5 になります。この指定により、入力可能な値は 5, 10, 15, 20...となり、0 は含まなくなります。min 属性を指定しない場合は、ステップベースにはそれぞれのデフォルト値が適用されます。

指定する値は、type 属性の値によって異なります。

type 属性指定できる値(単位)デフォルトのステップ
number正の実数1
range正の実数1
date日単位1(日)
month月単位1(月)
week週単位1(週)
time秒単位60(秒)
datetime-local秒単位60(秒)

例えば、type 属性が datetime-local の場合、デフォルトは60秒(= 1分)なので、デフォルトの場合、秒は表示されませんが、step 属性に 10(秒)を指定すると、秒も入力可能になります。

<input type="datetime-local" name="datetime-local_sample2" value="">
<input type="datetime-local" name="datetime-local_sample3" value="" step="10">
novalidate 属性

novalidate 属性を指定した場合、フォーム送信の際のデータ検証を行いません。HTML5 では、コントロールに入力された内容を検証することができますが、この検証を無効にします。novalidate 属性は論理属性です。

フォームに無効な入力が含まれている場合でも、フォームの送信をユーザに許可したい場合にフォーム要素または個々の入力要素に novalidate 属性を追加します。(その場合でも、JavaScript では値をチェックすることができます。)

以下はフォームの検証を無効にする例です。

<form action="" method="post" novalidate>... 中略...</form>
formnovalidate 属性

formnovalidate 属性は input 要素、button 要素で指定すると、フォーム送信の際にそれらの要素の検証を行いません。formnovalidate 属性は論理属性で、input 要素と button 要素でサポートされています。

form 要素に novalidate 属性が指定されていない場合、送信時に入力内容が検証されますが、input 要素に formnovalidate 属性を指定するとそれらの要素の検証を行いません(form 要素の novalidate 属性を上書きします)。また、送信ボタンに formnovalidate 属性を指定することで、そのフォームを検証の対象外とします。

例えば送信ボタンとは別に保存ボタンを作成し、そのボタンにこの属性を指定することで、入力必須のコントロールが未入力の状態でも、フォームの内容を保存することができます。

input 要素や button 要素に formnovalidate 属性が指定されている場合(または上位の form 要素 で novalidate属性が指定されている場合) formnovalidate 属性は true になります。

<form action="" method="post">  <p>    <label for="name">お名前</label>    <input name="name" id="name" required>  </p>  <p>    <label for="content">内容</label>    <textarea name="content" id="content" required></textarea>  </p>  <p>    <input type="submit" name="submit" value="送信" >    <input type="submit" name="save" value="保存"  formnovalidate>  </p></form>

フォームの検証(Validation)

フォームに入力された値の検証は、以前はクライアントサイドの場合、JavaScript などで記述する必要がありましたが、HTML5 からは仕様に組み込まれるようになりました。クライアントサイドの HTML5 の内蔵フォーム検証は JavaScript ほどカスタマイズできませんが、パフォーマンスは優れています(サーバーサイドは別途 PHP 等で記述する必要があります)。

HTML5 では、以下の2通りの方法で検証を設定することができます。

  • input 要素の type 属性に適切な値を指定します。例えば email を指定すると、値が妥当なメールアドレスであるかをチェックする制約が自動的に作成され検証されます。
    • type="url" :妥当な URL が含まれているかを検証
    • type="email":妥当なメールアドレスであるかを検証
    • type="number":数値であるかどうかを検証
  • patternminmaxminlengthmaxlengthrequired などの検証関連属性を設定します。例えば required を設定すると、入力欄が空欄の場合はフォームが送信されず、エラーメッセージが表示されます。

参考ページ:

input 要素に適切な type 属性を指定したり、検証関連属性を設定することでその入力値に対して制約(規則)が適用され、入力された値がすべて規則に従っていれば妥当とみなされ、そうでなければ不正とみなされます。

妥当とみなされると、

  • CSS の :valid疑似クラスが適用されます。これにより、妥当な要素に特定のスタイルを適用することができます。
  • ユーザーがデータを送信しようとすると、(JavaScript などの他の検証が他になければ)フォームを送信します。

不正とみなされると、

  • CSS の :invalid 疑似クラスが適用されます。これにより、不正な要素に特定のスタイルを適用することができます。
  • ユーザーがデータを送信しようとすると、ブラウザーはエラーメッセージを表示し、フォームを送信しません。

検証は即座に実行されるため、ページが表示された直後で、ユーザーがまだフィールドに入力する前でも、フィールドが無効とマークされる可能性があります。

以下は、URL 入力用(type="url")と Email アドレス入力用(type="email")の input 要素に、required 属性を指定して検証する例です。

<div class="validation_sample">  <div>    <label for="url_input">URL :</label>    <input type="url" id="url_input" required>    <p> 検証:      <span class="invalid">URL が正しくありません。</span>       <span class="valid">正しい URL です。</span>     </p>  </div>  <div>    <label for="email_input">Email :</label>    <input type="email" id="email_input" required>    <p> 検証:      <span class="invalid">メールアドレスが正しくありません。</span>       <span class="valid">正しいメールアドレスです。</span>     </p>  </div></div>

ユーザーが required 属性を指定した入力欄(:required)に入力する際(:focus)に、値が正しければ(:valid)、入力欄の背景色を緑にしてメッセージ(p .valid)を緑で表示し、値が正しくなければ(:invalid)、入力欄の背景色を赤にしてメッセージ(p .invalid)を赤色で表示するようにしています。

input:focus:required:valid {  background-color:#CDFAD1;}input:focus:required:invalid {  background-color:#F1BDBE;}input + p .invalid {   display: none; }input + p .valid {   display: none; }input:focus:required:valid + p .valid {   display: inline;  color: #1BB006;}input:focus:required:invalid + p .invalid {   display: inline;  color: #CB2629;}

検証:URL が正しくありません。正しい URL です。

検証:メールアドレスが正しくありません。正しいメールアドレスです。

以下は、required 属性と minlength 属性を指定した input 要素(type="text")と required 属性を指定したメールアドレス入力用(type="email")の input 要素を持つフォームの例です。

送信ボタンをクリックしたり、入力欄にカーソルを置いて return キーを押してフォームを送信する際に指定した属性とタイプによる検証が行われ、不正な値の場合はブラウザによりメッセージが表示されます。

また、この例では、input:required:invalid にピンク色の背景色を指定しているので、初期状態では何も入力されていないため入力欄がピンク色になっています。

正しい値が入力されると入力中などフォーカスしている間は、input:focus:required:valid により背景色が薄緑色になります。

<form>  <div>    <label for="nameInput">お名前: </label>    <input type="text" name="nameInput" id="nameInput" minlength="3" required>  </div>  <div>    <label for="emailInput">メールアドレス: </label>    <input type="email" name="emailInput" id="emailInput" required>  </div>  <div>    <button>送信</button>  </div></form>
input:focus:required:valid {  background-color: #D9F8DA;}        input:required:invalid {  background-color: #F9DADB;}
検証に利用できる疑似クラス

検証に利用できる以下のような疑似クラスが用意されています。

HTML5 検証に利用できる疑似クラス
擬似クラス説明
:valid入力値がすべての検証要件を満たす場合
:invalid入力値がすべての検証要件を満たさない場合
:requiredrequired 属性が設定された入力要素
:optionalrequired 属性が設定されていない入力要素
:in-range値が範囲内にある数値入力要素
:out-of-range値が範囲外にある数値入力要素
:indeterminatetype="radio"の input 要素で、同じ name の値を持つすべてのラジオボタンが未選択である場合や type="checkbox" 要素で、JavaScript によって indeterminate プロパティが true に設定されている場合、または progress 要素で、中間の状態の場合(:indeterminate | MDN - Mozilla

新しいフォーム関連要素

HTML5 のフォームでは、以下のような新しいフォーム要素も追加されました。

  • datalist 要素:入力候補の選択肢を提供
  • output 要素:計算やユーザによるアクションの結果を表示
  • progress 要素:タスクの進捗状況の表示
  • meter 要素:特定の範囲にある数値を表示
  • keygen 要素:鍵ペアの生成を定義(非推奨:標準から削除されました)
datalist 要素

datalist 要素は閲覧者に入力候補を提供します。入力候補の選択肢は、内包する option 要素で指定します。この要素、および内包される要素は、画面上にはレンダリングされません。

datalist 要素は、datalist 要素に指定された id 属性の値と、input 要素に指定された list 属性の値によって関連付けを行うことができます。関連付けられた input 要素において、datalist 要素は入力候補の選択肢として機能します。

datalist element /datalist 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
または 0 個以上の option 要素のいずれか

入力候補の表示対象となる input 要素と datalist 要素は、input 要素の list 属性の値に、datalist 要素の id 属性の値を指定して関連付けします。

<label for="myBrowser">ブラウザを選択してください。</label><input list="browsers" name="myBrowser" id="myBrowser"><datalist id="browsers">  <option value="Chrome">  <option value="Firefox">  <option value="Internet Explorer">  <option value="Opera">  <option value="Safari"></datalist>

以下のように datalist 要素内に select 要素を記述すると、datalist 要素に対応しているブラウザーでは select 要素は無視され、未対応ブラウザーではフォールバックコンテンツとして表示されます。

<label for="myBrowser2">ブラウザを選択してください。</label><input list="browsers2" name="myBrowser2" id="myBrowser2"><datalist id="browsers2">  <select name="browsers2">    <option value="Chrome">Chrome</option>    <option value="Firefox">Firefox</option>    <option value="Internet Explorer">Internet Explorer</option>    <option value="Opera">Opera</option>    <option value="Safari">Safari</option>  </select></datalist>

以下は、datalist 要素に対応していない Safari のスクリーンショットで select 要素として表示されています。

datalist 要素内に select 要素を記述した場合の Safari での表示

現在 Safari は datalist 要素に対応しています。can i use datalist

output 要素

output 要素は計算の出力結果を表します。

クライアントサイドスクリプトで結果を出力することが前提のため、JavaScript を実行できない環境では利用できません。その場合は、output 要素の内容が表示されます。

また、あくまで出力だけを目的とした要素なので、output 要素の値(計算結果)がフォーム送信されるわけではありません。

output element /output 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
フォーム関連要素(リスト化、ラベル付け可能、リセット可能)
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ

以下の例は、それぞれの input 要素の name 属性を使ってその値を取得し、form 要素内に書いた JavaScript で計算しています。

この例では form 要素の oninput イベントハンドラを使って、計算結果を outout の値として返しています。

oninput イベントハンドラは input イベントのためのイベントハンドラで、input イベントは、input 要素の値が変更された際に発生します。

valueAsNumber は、HTMLInputElement のプロパティで、input 要素の数値形式の値を、文字列ではなく数値として返します。

<form onsubmit="return false" oninput="result.value = a.valueAsNumber + b.valueAsNumber;">  <p>    <input type="number" name="a" id="a" value="0" >    +    <input type="number" name="b" id="b" value="0" >    =    <output name="result" for="a b"></output>  </p></form>

+ =

以下は、output 要素に指定可能な属性です。

name 属性
name 属性は、出力欄を識別するための名前を指定します。この名前は、スクリプトから参照する際に使用できます。代わりに id 属性を使用することもできます。
for 属性

for 属性は、計算の対象となるフォーム部品を指定し、output 要素と入力コントロール(input 要素)を関連付けます。この属性の値には、対象となる入力コントロール(input 要素)に指定した id 名を指定します。

この属性は、フォーム部品と計算結果の関連性を明確に示したい場合に使用します(この属性がなくても、計算結果を出力することは可能)。

form 属性

form 属性は、その output 要素どの form 要素に関連付けるかを指定します。この属性の値には、対応する form 要素に指定した id 名を指定します。

この属性は、出力欄を form 要素の外に配置する場合に使用します。(form 要素の中に配置する場合は不要)

以下は、前述の例を name 属性の代わりに id 属性を使って書き換えたものです。また、JavaScript では、valueAsNumber プロパティの代わりに parseInt() を使っています。

<form onsubmit="return false" oninput="result2.value = parseInt(a2.value)+parseInt(b2.value);">  <p>    <input type="number" id="a2" value="0" >    +    <input type="number" id="b2" value="0" >    =    <output id="result2"></output>  </p></form>

+ =

以下は、input 要素の type="button" をクリックした際の onclick イベントハンドラに JavaScritp の計算を記述する例です。

<form>価格($):<input type="number" name="price" id="price"> 消費税率(%):<input type="number" name="tax" id="tax" step="0.01">  税込み価格:<output name="total_price" id="total_price" for="price tax"></output><input type="button" onclick="document.getElementById('total_price').value =(parseInt(document.getElementById('price').value, 10) *(parseFloat(document.getElementById('tax').value, 10)/100) +parseInt(document.getElementById('price').value, 10)).toFixed(2);" value="計算する"></form>
価格($): 消費税率(%):

税込み価格:$

以下のように JavaScript を script タグに記述することもできます。

<form>価格($):<input type="number" name="price" id="price"> 消費税率(%):<input type="number" name="tax" id="tax" step="0.01"> 税込み価格:<output name="total_price" id="total_price" for="price tax"></output><input type="button" onclick="show_price();" value="計算する"><script>function show_price() {  (document.getElementById('total_price').value =     parseInt(document.getElementById('price').value, 10) *     (parseFloat(document.getElementById('tax').value, 10)/100) +     parseInt(document.getElementById('price').value, 10)).toFixed(2);;}</script></form>
progress 要素

progress 要素は、進捗状況を表します。表示の実装方法はブラウザベンダーに委ねられていますが、通常はプログレスバーとして表示されます。JavaScript を使用して、プログレスバーの値を操作することが可能です。

例えば、処理の進捗状況やバッテリーの充電率など、完了とされる値に対する現在の値を表すために使用します。対応していないブラウザーでは、progress 要素の内容が代替コンテンツとなります。

progress element /progress 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
ラベル付け可能要素
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
但し、progress 要素を子孫要素に持つことはできない

以下は、progress 要素に指定可能な属性です。

value 属性
現時点での進捗状況を数値で指定します。指定できる値は浮動小数点数ですが、0以上、max 属性値以下である必要があります。
max 属性
完了となる値を指定します。省略された場合の初期値は 「1.0」 です。max 属性を省略した場合、progress 要素の最大値は1.0となり、value 属性の値には0.0から1.0までの数値を指定します。

progress 要素の内容には、progress 要素に対応していないブラウザー向けに、プログレスバーの内容を表すコンテンツを記述することが推奨されています。progress 要素内に書いた内容は、progress 要素に対応しているブラウザーでは表示されません。

<progress value="70" max="100">70 %</progress>
70 %
<progress value="0.3">30 %</progress>
30 %
meter 要素

meter 要素は、メーターを表示して特定の範囲にある数値や割合を示す値を表します。

例えば、ディスクの使用量や人口割合などを表す場合に使用します。対応するブラウザーでは、メーターなどの直感的な形式で表示されます。対応していないブラウザーでは、meter 要素の内容が代替コンテンツとなります。

但し、meter 要素は、進捗状況や進行度合いを表すために使うべきではありません。進捗を表す要素としては progress 要素が定義されています。また、値の範囲が明確でない数値を表すことはできないため、最大値が定められていない数値を表すために meter 要素を使うのは適切ではありません。

meter element /meter 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
ラベル付け可能な要素
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
但し、meter 要素を子孫要素に持つことはできない

以下の例では、ハードディスクの使用率を表しています。value 属性の値に特定の数値を指定して使用率を表していますが、実用上は JavaScript などを使って、変動する数値を表示する用途などで用いられます。

<p>ハードディスク使用率:<meter value="40" min="0" max="100">40%</meter></p>

ハードディスク使用率:40%

以下は、meter 要素に指定可能な属性です。それぞれの属性で指定できる数値は浮動小数点数です。

value 属性(必須)
現在の数値を指定します。max 属性値以下、min 属性値以上でなければなりません。
max 属性
指定可能な値の最大値を指定します。min 属性、および low 属性が指定されている場合はその値以上である必要があります。省略された場合の初期値は 「1」 です。
min 属性
指定可能な値の最小値を指定します。max 属性、および high 属性が指定されている場合はその値以下である必要があります。省略された場合の初期値は 「0」 です。
high 属性
value 属性で指定した数値が高いと判断される値を指定します。max 属性値以下、かつ min 属性、および low 属性が指定されている場合はその値以上である必要があります。
low 属性
value 属性で指定した数値が低いと判断される値を指定します。min 属性値以上、かつ max 属性、および high 属性が指定されている場合はその値以下である必要があります。
optimum 属性
value 属性で指定した数値が最適だと判断される数値を指定します。max 属性値以下、min 属性値以上である必要があります。

meter 要素は、low 属性と high 属性を使って、ゲージを「低・中・高」の3つの範囲に分けることができます。

  • low 属性で指定した値以下が「低」の範囲
  • high 属性で指定した値以上が「高」の範囲
  • それ以外が「中」の範囲

になります。また、optimum 属性を使って、「最適値」も指定できます。

以下は、low 属性、high 属性、optimum 属性を使った meter 要素の例です。

<p>  A <meter value="20" max="100" low="30" high="80" optimum="100">20点</meter></p><p>  B <meter value="60" max="100" low="30" high="80" optimum="100">60点</meter></p><p>  C <meter value="90" max="100" low="30" high="80" optimum="100">90点</meter></p>

A20点

B60点

C90点

progress 要素同様、meter 要素の内容には、meter 要素に対応していないブラウザー向けに、ゲージの内容を表すコンテンツを入れることが推奨されています。meter 要素内に記述した内容は、meter 要素に対応しているブラウザーでは表示されません。

その他の(新)要素

前述以外の HTML5 で導入された新要素や既存の要素について。

コード関連

code 要素

code 要素は、ソースコードなど(プログラムのソースコードや HTML や CSS のソースコード等)を表します。ブラウザの既定の等幅フォントを使用して表示されます。

code element /code 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
<p>The <code>code</code> element represents a fragment of computercode.</p>

以下のサンプルは、color, background-color などのスタイルを指定しています。

Thecode element represents a fragment of computer code.

また、プログラムの種類に language- の接頭辞を付けて、class 属性で識別名として指定することが推奨されています。

<pre><code class="language-pascal">var i: Integer;begin    i := 1;end.</code></pre>

以下のサンプルは、background-color などのスタイルを指定しています。

var i: Integer;begin    i := 1;end.
var 要素

var 要素は変数を表すのに使用します。例えば、プログラムコードにおける変数を表示するのに使います。

ブラウザーにより異なりますが、通常は現在のフォントの斜体を使って表示されます。

var element /var 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
<p><code><var>z</var> = <var>x</var> + <var>y</var></code></p>

以下のサンプルは、color, background-color などのスタイルを指定しています。

z =x +y

samp 要素

samp 要素は、プログラムやコンピューターからの出力テキストの例を表すのに使用します。通常はブラウザーの既定の等幅フォントを使用して表示されます。

samp element /samp 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ
<p>The computer said <samp>Too much cheese in tray two</samp> but I didn’t know what that meant.</p>

The computer saidToo much cheese in tray two but I didn’t know what that meant.

kbd 要素との組み合わせについては、kbd 要素を参照ください。

kbd 要素

kbd 要素は、プログラムやコンピューターからの入力テキスト(キーボード入力や音声コマンド、その他の入力機器などからの文字入力)を表します。

通常はブラウザーの既定の等幅フォントを使用して表示されます。

kbd element /kbd 要素 /MDN
カテゴリーフローコンテンツ
フレージングコンテンツ
パルバブルコンテンツ
この要素が使える場所フレージングコンテンツが期待される場所
コンテンツモデルフレージングコンテンツ

以下は kbd 要素を単体で使用する例で、ユーザーが入力する内容であることを表します。

<p><kbd>ABC</kbd>と入力します。</p>

ABCと入力します。

kbd 要素内で kbd 要素を使用する場合、内側の kbd 要素は、キーボードのキーや入力の1つの単位を表します。

<p><kbd><kbd>ctrl</kbd> + <kbd>alt</kbd> + <kbd>del</kbd></kbd> を押します。</p>

ctrl +alt +del を押します。

samp 要素内で kbd 要素を使用する場合、kbd 要素は、システムによって返された入力内容(エコーバック)を表します。入力した内容が画面上に表示されている状態を表します。

<p><kbd>F10</kbd> キーを押すと 「<samp><kbd>F10</kbd> が押されました</samp>」と表示されます。</p>

F10 キーを押すと 「F10 が押されました」と画面上に表示されます。

kbd 要素内で samp 要素を使用する場合、samp 要素は、システム出力に基づいた入力を表します。システムによって出力されたメニュー項目や画面上に表示されているボタンの名前など、システムが表示した文字列に基づく入力などを表す場合に使用します。

<p><kbd><kbd><samp>ファイル</samp></kbd>⇒<kbd><samp>新規作成</samp></kbd></kbd>を選択して下さい。</p>

ファイル新規作成を選択して下さい。

これらは厳密な規則ではないので、以下のように簡単に記述しても問題ありません。

<p><kbd>ファイル⇒新規作成</kbd>を選択して下さい。</p>

ファイル⇒新規作成を選択して下さい。

カスタムデータ属性 data-*

HTML5 で新たに追加されたカスタムデータ属性は、接頭辞 data- からはじまる任意の属性名を使って HTML の各要素に対し独自の値を設定することができます。

カスタムデータ属性は、既存の属性に適切なものがなかった場合に、独自のデータ(値)を属性に設定して使用します。全ての HTML 要素に対し、複数設定することが可能です。

data- からはじまる任意の属性名をつけることができますが、カスタムデータ属性の名前に使えるのは、アルファベット(小文字のみ)、数字、ハイフン、アンダースコアです。大文字は使えません。

そして、その属性に対して値を入れておくことで、CSS や javascript、jQuery からその値にアクセスすることができるようになります。

関連ページ:

データ属性とCSS

CSSでは属性セレクターを使って要素のスタイルを指定することができます。

<p data-color="orange">オレンジ</p> <p data-color="green">メロン</p>
p[data-color="orange"] {  color: orange;  font-weight: bold;}p[data-color="green"] {  color: #449A6A;  font-weight: bold;}

オレンジ

メロン

また、attr() を使って属性値を取得することができます。

以下は、::after 擬似要素を使って属性値を表示する例です。

<p data-add-text="追加のテキスト">Lorem ipsum dolor sit amet</p> <p data-add-text="追加のテキスト#2">Animi sint corrupti ipsum sunt</p>
p[data-add-text]::after {  content: "( "attr(data-add-text)" )";}

Lorem ipsum dolor sit amet

Animi sint corrupti ipsum sunt

HTML5 で廃止された要素・属性

以下は HTML5 で廃止された主な要素です。

廃止された主な要素
要素意味代替方法
acronym略語(頭字語)abbr 要素
appletJavaアプレットembed 要素、object 要素
basefont基準フォントCSS font プロパティ
bgsound効果音・BGMaudio 要素
bigフォントサイズを一回り大きくCSS font プロパティ
blink文字を点滅N/A
centerセンタリングCSS margin:auto、text-align:center
dirディレクトリ型のリストul 要素
fontフォントCSS font プロパティ
frameフレーム内の設定フレームを使わない
framesetフレーム分割フレームを使わない
isindex検索キーワード用の入力欄input 要素 type="text"
marquee文字をスクロールCSS3 マーキー系プロパティ
nobr改行なしで表示CSS white-space:nowrapなど
noframesフレームが表示できない場合の表示内容フレームを使わない
strike打ち消しCSS text-decoration:line-through
tt等幅フォントCSS font-family:monospace
u等幅フォントCSS text-decoration:underline

以下は HTML5 で廃止された主な属性です。CSS で代用できる属性などが廃止になっています。

廃止された属性
要素廃止された属性
acharsetshaperevcoordsname
areanohref
bodybackgroundbgcolortextlinkvlinkalink
brclear
captionalign
colwidthalignvaligncharcharoff
colgroupwidthalignvaligncharcharoff
divalign
dlcompact
formaccept
h1~h6align
headprofile
hrsizewidthalignnoshade
htmlversion
iframelongdescscrollingframebordermarginwidthmarginheightalign
imglongdescnamealignborderhspacevspace
inputalignusemapismap
legendalign
litype
linkcharsettargetrev
menucompact
metascheme
objectclassidcodetypearchivecodebasestandbydeclarealignborderhspacevspace
olcompact
palign
paramvaluetypetype
prewidth
tablesummarywidthframerulescellspacingcellpaddingalignbgcolor
tbodyalignvaligncharcharoff
tdalignvaligncharcharoffabbrscopeaxiswidthheightbgcolornowrap
tfootalignvaligncharcharoff
thalignvaligncharcharoffaxiswidthheightbgcolornowrap
theadalignvaligncharcharoff
tralignvaligncharcharoffbgcolor
ultypecompact

WAI-ARIA

WAI-ARIA は、WebAccessibilityInitiative -AccessibleRichInternetApplications の頭文字で、HTML や SVG で利用できるアクセシビリティ確保のための属性の仕様です。

WAI-ARIA(または単に ARIA)はネイティブ HTML で対応できないアクセシビリティの問題がある領域を仲介するのに適しており、アクセシビリティ ツリーでの要素の解釈方法を変更する属性を指定することで機能します。

developers.google.com -ARIA の概要

HTML5 と ARIA との関係

HTML5 では、役に立つ多くのセマンティックなタグを HTML に導入しました。新たな <progress> 要素のようにいくつかのタグは、ARIA で使用可能なロールと正に重複します。ARIA にも存在する HTML5 タグをブラウザがサポートする場合は、通常その要素に ARIA のロールやステートも追加する必要はありません。ARIA には HTML5 で使用できない多くのロール、ステート、プロパティが含まれており、それらは HTML5 を使用する開発者にとって引き続き有用でしょう。

developer.mozilla.org -HTML5 と ARIA との関係は?

WAI-ARIA の本体仕様では、大きく分けて以下の2つの属性があります。

  • コンテンツの役割(Roles)を表すための role 属性
  • コンテンツの状態(States)や性質(Properties)を表すための aria 属性

コンテンツの役割や状態、性質を明確にすることで、コンテンツを読み取る機械(スクリーンリーダー等)はウェブページやアプリケーション内の文脈を理解することができます。それによりユーザーに情報を的確に提供することができ、アクセシビリティが高まります。

ARIA 関連参考ページ:

役割を表す role 属性

各要素の中に「role="xxx"」という属性を記述することで、「役割」を表わすことができます。

例えば、本来特に意味を持たない div 要素に対して、ナビゲーションとして振る舞わせたければ、以下のように記述します。

<div role="navigation">...</div>

同じことは、HTML5 の nav 要素を使えば実現可能です。

<nav>...</nav>

以下は複数のボタンを組み合わせたボタンのグループですが、ボタンの親要素の div 要素に role="group" を指定する例です。

<div class="btn-group" role="group">  <button type="button" class="btn btn-default">Left</button>  <button type="button" class="btn btn-default">Middle</button>  <button type="button" class="btn btn-default">Right</button></div>

Roles(ロール・役割)には以下のようなものがあります。(ロールの分類

  • ランドマークロール(Landmark Roles)
  • ウィジェットロール(Widget Roles)
  • 文書構造(Document Structure)

ランドマークロール(Landmark Roles)

Landmark Roles は、Web ページ内のランドマークを表わします。例えば、role="banner" と指定されている要素は、それがバナーであることを、role="navigation" と指定されている要素は、それがナビゲーションであることを伝えます。

Landmark Roles には、以下のようなものがあります。

  • banner
  • complementary
  • contentinfo
  • form
  • main
  • navigation
  • region
  • search

ウィジェットロール(Widget Roles)

Widget Roles は、各種ウィジェット類を表わします。例えば、role="tab" と指定されている要素は、それがタブであることを、role="tabpanel" と指定されている要素は、それが各タブに紐づいて表示されるパネルでであることを伝えます。

Widget Roles には、以下のようなものがあります。

  • alert
  • alertdialog
  • button
  • checkbox
  • dialog
  • gridcell
  • link
  • log
  • marquee
  • menuitem
  • menuitemcheckbox
  • menuitemradio
  • option
  • progressbar
  • radio
  • scrollbar
  • searchbox
  • slider
  • spinbutton
  • status
  • switch
  • tab
  • tabpanel
  • textbox
  • timer
  • tooltip
  • treeitem

また、以下のように、複数の Widget Roles をひとまとめにするものもあります。

  • combobox
  • grid
  • listbox
  • menu
  • menubar
  • radiogroup
  • tablist
  • tree
  • treegrid

文書構造(Document Structure)

Document Structure は、Web ページの文書構造を表わします。例えば、role="heading" と記述されている要素は、それが見出しであることを伝えます。

Document Structure には、以下のようなものがあります。

  • application
  • article
  • cell
  • columnheader
  • definition
  • directory
  • document
  • feed
  • figure
  • group
  • heading
  • img
  • list
  • listitem
  • math
  • none
  • note
  • presentation
  • region
  • row
  • rowgroup
  • rowheader
  • separator
  • table
  • term
  • toolbar

状態や性質を表す aria 属性

aria 属性は、要素の状態や性質を表すことができ、用途に応じた属性が多数用意されています。ステート(状態/States)とプロパティ(性質/Properties)の2つのタイプがあります。

ステートは、要素の「状態」を伝達し、プロパティは、要素の「性質」を伝達します。いずれも、各要素の中に「aria-xxxx="(属性値)"」という記述をすることで、「状態」や「性質」を表わすことができます。

ステートは、ユーザーの操作によって生じる状態を表わすものなので、必要に応じて JavaScript を使って、属性値をその時々で変更します。

  • ステートに関する aria:多くの属性で、属性値に true または false を指定
  • プロパティに関する aria:属性値に参照先の ID や数値または真偽値を指定

例えば、アイコンフォントなどそれが単に装飾目的のための場合は、aria-hidden="true" を指定します。(aria-hidden の値に「true」を指定することで、その要素が非表示であることをブラウザに伝え、読み上げをしないようにすることができます。)

<span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> E-mail

また、例えばテキストの代わりに画像だけで目的を示しているボタンがあり、この視覚的なマークを見ることができないユーザー向けに目的を明確に示したい場合、aria-label属性を使用します。aria 属性は要素にラベルと説明を加える複数の仕組みを提供してくれます。

<button type="button" class="close" aria-label="閉じる"><span aria-hidden="true">&times;</span></button>

aria-label と似たような属性にaria-labelledby があり、その目的は aria-label と同じですが、「ラベルテキストが画面上で可視である場合、aria-labelledby を使用すべきであり、aria-label を使用すべきではない」とされているようです。言い換えると、「インターフェイスが画面上で可視ラベルをもつことが不可能である場合のみ aria-label を使用する」とされているようです。

aria-labelledby を使用すると、DOM 内の別の要素の ID を要素のラベルとして指定できます。

<span id="do-label">Drink Options</span><div role="radiogroup" aria-labelledby="do-rabel"><input type="radio" name="drink_options" value="Beer"> Beer <input type="radio" name="drink_options" value="Wine"> Wine <input type="radio" name="drink_options" value="Sake"> Sake.....</div>

aria-describedby は、aria-labelledby によるラベルの提供と同様に、アクセス可能な説明を提供します。

<label for="pw">パスワード</label><input type="password" id="pw" aria-describedby="pw-help"><div id="pw-help">パスワードは8文字以上で大文字・小文字を含む必要があります。</div>

参考:ARIA ラベルと関係性(developers.google.com)

グローバルなステートおよびプロパティ

一部のステートおよびプロパティは、ロールが適用されるかどうかに関係なく、すべての要素に適用可能です。以下のステートおよびプロパティは、すべてのロール及びすべての基本マークアップ要素によってサポートされます。

  • aria-atomic
  • aria-busy (ステート)
  • aria-controls(この要素によってコンテンツが制御されている要素を特定する。タブパネルなど。aria-controls="参照 ID")
  • aria-current (ステート/例 aria-current="page"→現在のページを表す)
  • aria-describedby
  • aria-details
  • aria-disabled (ステート)
  • aria-dropeffect
  • aria-errormessage
  • aria-flowto
  • aria-grabbed (ステート)
  • aria-haspopup(ポップアップメニューなどが存在するかどうか。tooltip は該当しない)
  • aria-hidden (ステート)
  • aria-invalid (ステート)
  • aria-keyshortcuts
  • aria-label
  • aria-labelledby
  • aria-live
  • aria-owns
  • aria-relevant
  • aria-roledescription

ステートおよびプロパティの分類

ステートおよびプロパティは、次のように分類されています。

  • ウィジェット属性
  • ライブ領域属性
  • ドラッグアンドドロップ属性
  • 関係属性

ウィジェット属性

以下の属性は、ウィジェットロールをサポートするために使用されます。

  • aria-autocomplete
  • aria-checked
  • aria-disabled
  • aria-errormessage
  • aria-expanded
  • aria-haspopup
  • aria-hidden
  • aria-invalid
  • aria-label
  • aria-level
  • aria-modal
  • aria-multiline
  • aria-multiselectable
  • aria-orientation
  • aria-placeholder
  • aria-pressed
  • aria-readonly
  • aria-required
  • aria-selected
  • aria-sort
  • aria-valuemax
  • aria-valuemin
  • aria-valuenow
  • aria-valuetext

ライブ領域属性

この属性は、任意の要素に適用することができます。

  • aria-atomic
  • aria-busy
  • aria-live
  • aria-relevant

ドラッグアンドドロップ属性

ドラッグ可能な要素とそのドロップターゲットのような、ドラッグアンドドロップインターフェイス要素に関する情報を示す属性です。

  • aria-dropeffect
  • aria-grabbed

関係属性

文書構造から容易に決定することができない要素間の関係または関連を示す属性です。

  • aria-activedescendant
  • aria-colcount
  • aria-colindex
  • aria-colspan
  • aria-controls
  • aria-describedby
  • aria-details
  • aria-errormessage
  • aria-flowto
  • aria-labelledby
  • aria-owns
  • aria-posinset
  • aria-rowcount
  • aria-rowindex
  • aria-rowspan
  • aria-setsize

スクリーンリーダー限定テキスト

例えばフォームで placeholder 属性でラベルをテキストボックス内に表示したりしますが、label 要素を省略してしまうと目の不自由な方がスクリーンリーダー(Screen Reader)からラベルが読み上げられなくなってしまいます。また、アイコンなどを画像やアイコンフォントだけで表示しているコンテンツなどは、スクリーンリーダーにその意味が読み上げられません。

対策としては、スクリーンリーダには読み上げられるが、画面には表示しないようにします。

以下は、Bootstrapで使われているスクリーンリーダー限定テキストの CSS (sr-only クラス)の例です。

.sr-only {  position: absolute;  width: 1px;  height: 1px;  padding: 0;  margin: -1px;  overflow: hidden;  clip: rect(0, 0, 0, 0);  border: 0;}

以下は「コンテンツの非表示と更新(developers.google.com)」に掲載されている例です。

.sr-only {  position: absolute;  left: -10000px;  width: 1px;  height: 1px;  overflow: hidden;}

WAI-ARIA 参考になるサイトのリスト

HTML5 参考になるサイトのリスト

©2013-2025 Web Design Leavesprivacy policycontact


[8]ページ先頭

©2009-2025 Movatter.jp