この文書は「HTML5 differences from HTML4 (W3C Working Draft 25 May 2011)」の日本語訳です。
原文の最新版 は、この日本語訳が参照した版から更新されている可能性があります。
この日本語訳は参考情報であり、正式な文書ではないことにご注意ください。また、翻訳において生じた誤りが含まれる可能性があります。他の仕様の訳については Web 標準仕様 日本語訳一覧 を参照してください。
Copyright © 2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
HTML5 は World Wide Web の中核言語 HTML の第 5 版です。この文書「HTML5 における HTML4 からの変更点」は、HTML5 が HTML4 からどう変わったのかをその理由とともに説明します。なお、HTML5 仕様は現在も活発に修正や変更が行われているため、この文書は正しい情報を提供できていない場合があります。疑わしい部分がある場合には HTML5 仕様を参照するようにしてください。[HTML5]
この章は、この文書の公開時におけるステータスについて説明しています。このため、他の仕様がこの文書を上書きしている可能性があります。W3C による他の出版物およびこの技術レポートの最新版は W3C 技術レポートインデックス (http://www.w3.org/TR/) から探すことができます。
この文書は HTML Activity の HTML Working Group が作成した 2011年5月25日付 W3C 草案 (Working Draft) です。HTML WG はこの文書を Working Group Note として HTML5 仕様 とともに公開する予定です。仕様書やこの文書へのコメントを寄せるのに適切なフォーラムは public-html-comments@w3.org です。公開アーカイブ も存在しています。
草案としての仕様書公開は W3C メンバーによる支持を意味するものではありません。この文書は更新されたり他の文書と置き換えられたり、また破棄される可能性もある草稿段階の仕様書です。策定中ということを明記せずにこの文書を引用することは適当でありません。
この文書は 5 February 2004 W3C Patent Policy の下で活動するグループにより作成されました。W3C は 特許情報の開示に関する公開リスト を関連する団体と共にその成果物とあわせて管理しています。リストには情報開示に関する説明もありますのでご参照ください。特許について十分に知識のある人物が、当該仕様に関し Essential Claim(s) が認められると判断した場合は、W3C 特許方針の第6章 に従い情報を開示する必要があります。
HTML は 1990 年代はじめに誕生してから今日まで発展を続けています。HTML の機能は仕様書を定義し拡張されることもあれば、ソフトウェアの独自実装により拡張されることもありました。この歴史のなか、実装と製作者の慣習は近づき、仕様書やその他の標準とも合致しました。しかし一方で相違も生まれ続けています。
HTML4 は 1997 年に W3C 勧告となりました。そしてその仕様書は今日も、HTML の機能を大まかに説明する説明書として利用されています。しかしながら、この仕様書は実装同士、また Web 上に存在する莫大な数の HTML 文書に対し、どのように相互運用性を確保するのかという、重要な情報を提供していません。
そして残念ながら、情報の欠如は HTML4 を XML でシリアライズした XHTML1 や、HTML と XHTML に JavaScript API を提供する DOM Level 2 HTML に対しても起こってしまいました。HTML5 はこれらの仕様を置き換える目的で策定されています。[DOM2HTML] [HTML4] [XHTML1]
HTML5 仕様の草案は、2004 年に始められた HTML 実装と Web 上の HTML 文書に対し行った調査結果を反映し、次の要件を掲げています。
HTML5 は草稿段階の仕様です。HTML5 仕様および、この文書中の HTML5 に関する項目は、現在も HTML ワーキンググループや WHATWG メーリングリストで検討中です。未解決の問題は HTML5 仕様からリンクされています。
HTML5 は、現在 Web 上に公開されている HTML 文書について、ユーザーエージェントが後方互換を取るようにと定義しています。HTML5 では、製作者のためオーサリング言語をシンプルにした結果、表象的な要素をはじめとするいくつかの要素や属性が含まれていません。CSS の使用が推奨されるこれらの要素や属性に関しては、後のセクションに詳しい説明があります。
一方で、ユーザーエージェントは古い要素や属性をサポートし続けなければなりません。このため、HTML5 仕様は製作者に対する要件と、ユーザーエージェントに対する要件を明確に分けています。たとえば、製作者は isindex
や plaintext
要素を使用することはできませんが、ユーザーエージェントはこれらの要素を Web 上のコンテンツと互換性をとるかたちでサポートする必要があります。
「製作者の要件」「ユーザーエージェントの要件」という2つの適合性要件を定義したことで、要素や属性に「非推奨 (deprecated)」という扱いを行う必要はなくなりました。
HTML5 仕様は、少なくとも2つの完全な実装が登場するまでは完成したとみなされません。実装が完全であるかを検証するときにはテストスイートが使われます。このアプローチは、実装される前に最終仕様が承認されていた過去の HTML とは異なります。この変更の目的は、仕様が実装可能であり、また仕様が完成した際にすでに作成者が利用できることを保証することにあります。
HTML5 では、広く使われている HTML4 や XHTML 1 と互換性のある HTML 構文を採用しています。しかしこの構文は HTML4 における、処理命令 や 短縮マークアップ などの難解な SGML の機能とは互換性がありません。ほとんどのユーザーエージェントでサポートされていないからです。HTML 構文を使用する文書のほとんどは text/html
メディア型で提供されています。
HTML5 はまた、エラー処理を含む詳細な構文解析規則を定義しています。これらの規則は、既にある実装と多くの部分で互換性を持つように設計されています。ユーザーエージェントは text/html
メディア型を持つリソースに対し、これらの規則に従い構文解析を行う必要があります。HTML 構文に適合する文書の例は、次のようなものになります。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>
HTML5 はまた text/html-sandboxed
というメディア型を HTML 構文に対して提供しています。このメディア型は、信頼できないコンテンツをホストする際に利用されます。
HTML5 で使用できるもうひとつの構文は XML です。この構文は XHTML 1 文書および、その実装と互換性をもちます。XML 構文を使用する文書は、XML のメディア型を利用する必要があります。また、XML 仕様にて述べられた規則に基づき、要素は http://www.w3.org/1999/xhtml
名前空間に属する必要があります。 [XML]
次の例は、HTML5 文書の XML 構文に適合する文書の例です。この XML 文書は XML のメディア型、すなわち application/xhtml+xml
, または application/xml
で提供される必要があることに注意してください。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example document</title>
</head>
<body>
<p>Example paragraph</p>
</body>
</html>
HTML5 の HTML 構文において、作成者は次の3つの方法から文書の文字エンコーディング (符号化方式) を指定できます。
Content-Type
ヘッダなど、転送レベルでの指定。
meta
要素の charset
属性による指定。要素は文書の先頭 1024 バイト以内に記述する必要があります。たとえば、<meta charset="UTF-8">
は、UTF-8 を指定する際に使うことができます。これは今まで使われていた <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
という指定方法を置き換えるものです (しかし、http-equiv
による指定も引き続き利用することは可能です)。
XML 構文では、作成者は XML 仕様の規定に基づいて符号化方式を指定しなければいけません。
HTML5 の HTML 構文は、ブラウザーにページを標準モードで表示させるよう、DOCTYPE を必須としています。DOCTYPE はモード指定以外に何も目的を持っていないため XML 構文での記述は任意となります。これは、XML のメディア型を利用する文書は常に標準モードで表示されるからです。[DOCTYPE]
DOCTYPE 宣言は <!DOCTYPE html>
となります。HTML 構文では、大文字と小文字を区別しません。以前の HTML は SGML であり、DTD を参照する必要があったため DOCTYPE は長くなっていました。しかしこれは HTML5 では異なり、DOCTYPE はただ HTML 構文において標準モードを有効にする手段として必要とされています。なお、ブラウザーは現段階において既に <!DOCTYPE html>
を標準モードのトリガーとして解釈しています。
HTML5 では、HTML 構文でも MathML や SVG を利用することができます。とても簡単な例ですが、次のように書くことが可能となります。
<!doctype html>
<title>SVG in text/html</title>
<p>
A green circle:
<svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg>
</p>
もちろん、複雑なことも行えます。たとえば、HTML の中で、SVG の foreignObject
を利用し、その中に MathML や HTML を含めることも可能です。
他にもいくつか、知っておいて損のない変更点があります。
lang
属性が XML の xml:lang
と同様に、空文字列を記述することができるようになりました。
このセクションは、明確に HTML4 と HTML5 の違いを説明するため、いくつかのサブセクションに分かれています。
HTML5 では、文書をよりよく構造化するために、次の要素が新しく追加されました。
section
要素は、文書やアプリケーションにおける一般的なセクションを表します。h1
, h2
, h3
, h4
, h5
, h6
要素と共に使用することで、文書構造を表すことができます。
article
要素はブログのエントリや新聞記事など、文書内で自己完結可能な箇所を示します。
aside
要素はページ内にあるその他の内容と、少ししか関係していないものを表します。
hgroup
要素はセクションの見出しを表します。
header
要素は導入部やナビゲーションをグループ化します。
footer
要素はセクションのフッタを表します。フッタには作者に関する情報や、著作権情報などを含められます。
nav
要素はナビゲーションとなるセクションを表します。
figure
は本文から単独で参照されることの多い、自己完結した内容を表します。
<figure>
<video src="example.webm"></video>
<figcaption>Example</figcaption>
</figure>
figcaption
要素はキャプションを提供します。
他にも、新しい要素が追加されています。
マルチメディアコンテンツのための audio
要素と video
要素が導入されました。どちらの要素にも API が提供され、製作者がスクリプトを利用し独自のユーザーインターフェースを開発できます。もちろん、ユーザーエージェントが自動的にインターフェースを用意する仕組みも提供されます。また、source
要素を使えば、異なるメディアデータを選択させることもできます。
track
要素は video
要素にテキストトラックを提供します。
embed
要素はプラグインを利用するコンテンツに使われます。
mark
要素は他の文脈との関連性から言及目的で印付けられたテキストを表します。
progress
要素はダウンロードや負荷の高い処理などに用いられる実行中のタスクを記します。
meter
要素はディスク容量などの測定値を表します。
time
要素は日付や時刻などの時間情報を表します。
bdi
要素は双方向のテキストにおいて、マークアップしたテキストが周辺の文字の影響を受けないようにします。
wbr
要素は改行機会 (line break opportunity) を与えます。
canvas
要素はグラフやゲームなど、動的に描画・更新が行われるビットマップグラフィックスに用いられます。
command
要素はユーザーが実行するコマンドを表します。
details
要素はユーザーがオンデマンドに受け取る、付加的な情報やコントロールを表します。summary
要素が要約や説明、キャプションを提供します。
datalist
要素は input
要素の新しい list
属性と組み合わせ、コンボボックスを作成します。
<input list="browsers">
<datalist id="browsers">
<option value="Safari">
<option value="Internet Explorer">
<option value="Opera">
<option value="Firefox">
</datalist>
keygen
要素はキーのペアを生成するためのフォームコントロールを表します。
output
要素はスクリプトによる計算結果など、何らかの出力結果を表します。
input
の type
属性は、新しく次の値をサポートします。
これらの属性値は、ユーザーエージェントがインターフェースを提供し、決められたフォーマットでサーバーにデータを送信することができるように定義されました。たとえばこれらは、カレンダーの日付選択インターフェースや、ユーザーのアドレスブックと統合した機能に役立ちます。
また、これらの属性値により、ユーザーがサーバーにデータを送信する前にフォームの内容をチェックすることができます。このため、フィードバックを待つ時間の短縮を実現し、ユーザーにより良いエクスペリエンスを提供することができます。
HTML5 は HTML4 で定義されていた要素に、新しい属性を導入しました。
a
要素と area
要素に media
属性が追加されました。これは link
要素との一貫性のためです。
area
要素に hreflang
属性、type
属性、rel
属性が追加されました。これは a
要素と link
要素との一貫性のためです。
base
要素に target
属性が追加されました。これは a
要素との一貫性のためです。また、すでに広くサポートされてもいます。
meta
要素に charset
属性が追加されました。これはすでに広くサポートされており、また文書の文字エンコーディングを指定するための、より素敵な方法です。
input
, select
, textarea
, button
要素に、新しく autofocus
属性が追加されました (ただし、type
属性に hidden
が指定された input
要素には指定できません)。この属性は、ページのロード時にフォームコントロールにフォーカスを与えるものです。ユーザーが自動フォーカス機能をオフにできることも含めて、この属性はユーザーエクスペリエンスを向上させるでしょう。
input
要素と textarea
要素に placeholder
属性が追加されました。この属性はユーザーに対し、フォームに入力する情報についてヒントを与えるためのものです。
<input type=email placeholder="a@b.com">
input
, output
, select
, textarea
, button
, label
, object
, fieldset
要素に form
属性が追加されました。この属性はコントロールが属するフォームを指定するためのものです。これにより、これらの要素は目的の form
要素の中に書かなくてもその form
要素に属すことができます。
<label>Email:
<input type=email form=foo name=email>
</label>
<form id=foo></form>
input
要素と textarea
要素に required
属性が追加されました (ただし、type
属性に hidden
, image
, submit
など、何らかのボタンタイプが指定された input
要素には指定できません)。この属性は、フォームを送信するためにユーザーが値を入力しなければならないコントロールを指定します。select
に指定する場合、最初の option
要素は値が空のプレースホルダでなれけばなりません。
<label>Color: <select name=color required>
<option value="">Choose one
<option>Red
<option>Green
<option>Blue
</select></label>
fieldset
要素は disabled
属性を指定できるようになりました。この属性を指定することで、すべての子孫コントロールを無効化することができます。また、スクリプトからのアクセスに利用する目的で name
属性も導入されました。
input
要素は次に挙げる新しい属性により、さまざまな制約を加えることができるようになりました。autocomplete
, min
, max
, multiple
, pattern
, step
がその属性です。また、先に述べたように、datalist
要素と併用する list
属性も存在します。
input
要素と textarea
要素に dirname
属性が導入されました。ユーザーが送信する内容の書字方向に影響します。
textarea
要素に maxlength
属性と wrap
属性が追加されました。前者は入力可能な文字数を、後者は送信される内容の行送りの挙動を制御するものです。
form
要素に、新しく novalidate
属性が追加されました。この属性により、フォーム検証を無効にすることができます (つまり、フォームをいつでも送信可能にすることができます)。
input
要素と button
要素に新しく formaction
, formenctype
, formmethod
, formnovalidate
, formtarget
属性が加わりました。これらの属性が記述されている場合、form
要素の action
, enctype
, method
, novalidate
, target
属性は上書きされます。
menu
要素は2つの新しい属性 type
, label
を導入しました。これらの属性により、要素を典型的なユーザーインターフェースで見られるようなメニューに変形させることができます。またグローバル属性 contextmenu
と併用することで、コンテキストメニューの提供も行うことができるようになりました。
style
要素に新しく scoped
属性が加わりました。これによりスコープを絞ったスタイルシートの指定が可能となります。このような style
要素によるスタイル指定は、ローカルツリーにのみ適用されます。
script
要素に新しく async
属性が加わりました。この属性はスクリプトのローディングおよび実行に影響を与えます。
html
要素は manifest
と呼ばれる新しい属性を持つことができるようになりました。この属性は、オフライン Web アプリケーションのための API と強調し、アプリケーションキャッシュのマニフェストを指定します。
link
要素は sizes
属性を持つようになりました。この属性は rel
属性の値 icon
(favicon の指定などに利用) と組み合わせ、参照するアイコンの大きさを指定するために利用されます。つまり、異なる大きさのアイコンを指定できるようになります。
ol
要素は reversed
と呼ばれる新しい属性を持つことができるようになりました。この属性を指定することで、リストが降順であることを示すことができます。
iframe
要素は2つの新しい属性 seamless
と sandbox
を持つようになりました。これらはたとえばブログのコメントなど、内容をサンドボックス化したい時に利用します。
HTML4 で定義されていたいくつかの属性がすべての要素に適用可能となりました。accesskey
, class
, dir
, id
, lang
, style
, tabindex
, title
属性がその属性で、これらはグローバル属性と呼ばれます。また、XHTML 1.0 において xml:space
属性はいくつかの要素にしか適用できませんでしたが、HTML5 の XHTML 構文ではすべての要素に適用可能となりました。
さらに、新しいグローバル属性も導入されました。
contenteditable
属性は、指定された要素が編集可能領域であることを示します。編集可能である場合は、ユーザーがその内容を変更し、マークアップを操作することができます。
contextmenu
属性は、製作者によって提供されるコンテキストメニューを指定します。
data-*
属性は、ページ作成者が好きに定義することのできる属性です。将来の HTML との衝突を避けるため、属性に data-
という接頭辞をつける必要がありますが、それ以外は好きな属性を定義できます。しかしながらこの属性は、ユーザーエージェントの拡張として利用することはできません。
draggable
属性と dropzone
属性は、新しく定義されたドラッグ & ドロップ API と組み合わせて利用します。
hidden
属性は、現在またはこの先において、意味を成さない要素を表します。
role
属性と aria-*
属性群は、支援技術を指示するために利用されます。
spellcheck
属性は、内容のスペルチェックを行うかどうかを指定します。
HTML5 ではまた、HTML4 で定義されていた onevent-name
といったイベントハンドラ属性すべてがグローバル属性に変更されました。また、新たなイベントの定義にあわせて、それを処理するイベントハンドラ属性も設けています。たとえば、video
や audio
といったメディア要素で利用される play
イベントが当てはまります。
次に挙げる要素は HTML5 で若干意味が変更されています。これらの変更は Web における使われ方を反映したもの、またはより便利なものとなるよう行われています。
href
属性のない a
要素はリンクが設定される可能性を示すプレースホルダを表すようになりました。また、これまでフレーズ内容 (インライン要素またはテキスト) のみに限定された内容モデルが変更され、フロー内容 (ブロック要素) も含むことができるようになりました。
address
要素は、新しいセクショニングの概念により、スコープが狭まりました。
b
要素は文章のなかで、とくに付加的な重要性を与えるわけでも、異なるトーンや雰囲気を表現するわけでもないが、実利的な理由から注意を引きつける箇所を表すようになりました。たとえば文書の概要におけるキーワードや、レビューにおける製品名、対話的なテキストベースのソフトウェアにおける実行可能箇所、記事のリード文などが当てはまります。
cite
要素は作品 (例: 本、新聞、小論、詩、楽譜、楽曲、脚本、映画、テレビ番組、ゲーム、彫刻、絵画、演劇、戯曲、オペラ、ミュージカル、展示、訴状、判決書、etc.) のタイトルを表すようになりました。HTML4 仕様書の例に使われていたような、人名をマークアップする例は適合しないことになります。
dl
要素は名前と値のグループからなる連想リストを表すようになりました。また、会話文を表す要素ではないことが記されました。
head
が子要素として object
をもつことができなくなりました。
hr
要素は、パラグラフレベルでの主題変化を表すようになりました。
i
要素は文章のなかで、異なったトーンや雰囲気、もしくは他ののテキストと性質が異なる箇所を表すようになりました。たとえば分類、専門用語、他言語での慣用句、考え、アルファベットでの船舶名表記などが当てはまります。
label
要素と結びつけられたコントロールに、ブラウザーがフォーカスを移すことは行われなくなります。しかし、プラットフォーム側で標準的に、ラベルとフォームコントロールのフォーカスが結びついているばあいはこの通りではありません。
menu
要素は、ツールバーやコンテキストメニューを表すよう再定義されました。
s
要素は正しくなくなった、もしくは関係のなくなった内容を表すようになりました。
small
要素は、細則などの補足的な注釈を表すようになりました。
strong
要素は、文章の一部を部分的に強調するものではなく、文章の重要度を示すものとなりました。
u
要素は、音声では明示化されることはないものの明示的に区別して表示される、文意に影響しない注釈を表します。たとえば、中国語での固有名詞や、スペルミスのある単語の指示などに利用されます。
li
要素の value
属性は表象的ではないことから非推奨ではなくなりました。ol
要素の start
属性も同様に非推奨ではなくなりました。
a
要素と area
要素の target
属性は非推奨ではなくなりました。これは iframe
など、Web アプリケーションにおいて役立つものであるからです。
script
要素と style
要素の type
は、スクリプト言語が ECMAScript, スタイル言語が CSS の場合、指定が必須ではなくなりました。
table
要素の border
属性には "1" もしくは空文字列しか指定できなくなりました。
次の属性は書くことができますが、製作者はこれらを利用することは咎められ、代替手段を利用することが強く求められています。
img
要素に border
属性を記述する場合には、値に "0
" を指定する必要があります。製作者はこの属性の変わりに CSS を使うことができます。
script
要素に language
属性を書く場合には、値に "JavaScript
" (case-insensitive) を指定する必要があります。また、type
属性と矛盾がないようにする必要もあります。有益な機能というわけではないので、製作者は単純にこの属性を省いて構いません。
a
要素の name
属性。製作者は id
属性を利用できます。
table
要素の summary
属性。HTML5 では、いくつかの代替手段を提供しています。
img
要素や他の要素が持つ width
, height
にパーセンテージを指定できなくなりました。
このセクションにある要素は、製作者が使用することのできない要素です。しかし、ユーザーエージェントはそれらをサポートし続ける必要があります。HTML5 仕様書では、これらの要素をどのように扱うかを随所で定義しています。たとえば、isindex
要素の処理は構文解析のセクションで定義されています。
次に挙げる要素は HTML5 に存在しません。なぜならこれらの要素は表象的であり、またそれらの機能は CSS にて扱われるべきだからです。
basefont
big
center
font
strike
tt
次に挙げる要素もまた HTML5 に存在しません。これらの要素はユーザビリティやアクセシビリティに影響するからです。
frame
frameset
noframes
次に挙げる要素は使用例が少ない、混乱の元になる、また他の要素でよりよく処理できることから含まれていません。
acronym
要素は多大なる混乱を引き起こしたことから削除されました。略語には abbr
要素を用いてください。
applet
要素は object
が支持されたことから廃止されました。
isindex
要素はフォームコントロールの代用により置き換えられます。
dir
要素は ul
要素が広く使われていることから廃止されました。
最後に、noscript
要素は HTML 構文でのみ適合するようになりました。これは noscript
要素の利用が HTML パーサーに依存するからであり、そのため XML 構文には含まれません。
HTML4 の属性のうちいくつかは、HTML5 で書くことのできない属性です。仕様では、ユーザーエージェントがそのような属性を含む古い文書をどのように処理するかを定義していますが、制作者はそれらを利用してはいけません。利用した場合、その文書は妥当ではありません。
しかし、HTML5 では 代わりに何を利用すればよいかを説明するガイド を設けています。
link
要素と a
要素の rev
属性と charset
属性。
a
要素の shape
属性および coords
属性。
img
要素と iframe
要素の longdesc
属性。
link
要素の target
属性。
area
要素の nohref
属性。
head
要素の profile
属性。
html
要素の version
属性。
img
要素の name
属性 (代わりに id
属性を使ってください)。
meta
要素の scheme
属性。
object
要素の archive
, classid
, codebase
, codetype
, declare
, standby
属性。
param
要素の valuetype
属性と type
属性。
td
要素と th
要素の axis
属性と abbr
属性。
td
要素の scope
属性。
table
要素の summary
属性。
これらの属性に加え、HTML5 では HTML4 で定義されていた表象的な属性がすべて削除されました。これらは CSS にて扱われるべきだからです。
caption
, iframe
, img
, input
, object
, legend
, table
, hr
, div
, h1
, h2
, h3
, h4
, h5
, h6
, p
, col
, colgroup
, tbody
, td
, tfoot
, th
, thead
, tr
要素の align
属性。
body
要素の alink
, link
, text
, vlink
属性。
body
要素の background
属性。
table
, tr
, td
, th
, body
要素の bgcolor
属性。
object
要素の border
属性。
table
要素の cellpadding
属性と cellspacing
属性。
col
, colgroup
, tbody
, td
, tfoot
, th
, thead
, tr
要素の char
属性および charoff
属性。
br
要素の clear
属性。
dl
, menu
, ol
, ul
要素の compact
属性。
table
要素の frame
属性。
iframe
要素の frameborder
属性。
td
, th
要素の height
属性。
img
, object
要素の hspace
属性及び vspace
属性。
iframe
要素の marginheight
属性と marginwidth
属性。
hr
要素の noshade
属性。
td
, th
要素の nowrap
属性。
table
要素の rules
属性。
iframe
要素の scrolling
属性。
hr
要素の size
属性。
li
, ol
, ul
要素の type
属性。
col
, colgroup
, tbody
, td
, tfoot
, th
, thead
, tr
要素の valign
属性。
hr
, table
, td
, th
, col
, colgroup
, pre
要素の width
属性。
HTML5 は Web アプリケーションを製作する手助けとなるいくつかの API を提供します。これらの API は新しいアプリケーションのために導入された要素と共に使用できます。
video
要素と audio
要素で利用可能な、ビデオやオーディオを再生する API。
contenteditable
と共に用いられる、編集 API。
draggable
属性と共に用いられる、ドラッグ & ドロップ API。
HTMLDocument
の拡張HTML5 は DOM Level 2 HTML の HTMLDocument
インターフェースをさまざまな面で拡張しています。このインターフェースは Document
インターフェースをインプリメントするすべてのオブジェクトにインプリメントされます。このため、複合文書においても意味を持つことになります。また他にも、いくつか注目すべき新しいメンバがあります。
getElementsByClassName()
は class 名から要素を取得するものです。このメソッドは class
属性を持ついかなる要素、また SVG や MathML などの Document
オブジェクトで使用できるように定義されました。
innerHTML
は HTML 文書や XML 文書を簡単にパースし、シリアライズできるものです。この属性は Web ブラウザーが独自に持っていた非標準な機能を基にしており、以前は HTMLElement
のみに定義されていました。
activeElement
および hasFocus
は、どの要素に現在フォーカスが当たっているか、また Document
がフォーカスをそれぞれ行っているかを調べるためのものです。
HTMLElement
の拡張HTML5 では HTMLElement
インターフェースに対しても、いくつかの拡張が行われました。
getElementsByClassName()
は基本的に HTMLDocument
のものよりスコープが狭まったものです。
innerHTML
は今日の Web ブラウザーで既にサポートされているものです。また、XML 文書として扱われる場合には、XML でも働くように定義されています。
classList
は className
のための便利なアクセサーです。このアクセサーが返すオブジェクトは、contains()
, add()
, remove()
, toggle()
といったメソッドを、要素の class を操作する際に実行します。
a
, area
, link
要素についてもまた、relList
という、rel
属性に対し同様の処理を行うアクセサーを持っています。
このセクションでは、公開されている HTML5 草案の変更点を記録しています。変更についての詳細は public-html@w3.org
や whatwg@whatwg.org
のアーカイブ、または WHATWG Weekly をご覧ください。変更の理由については WHATWG の Rationale ページをご覧ください。細かな編集に関わるもの、または技術的ですが変更が些細なものについては記録していません。あなたが実装者である場合は、この文書ではなく HTML5 仕様そのものの変更を追従してください。
変更点は、大まかですが時系列に沿って記述されています。
img
, object
, CSS での javascript:
スキームのサポートが削除されました。
canvas
に toBlob()
メソッドが追加されました。
canvas
2D Context の drawFocusRing()
メソッドが drawSystemFocusRing()
, drawCustomFocusRing()
という2つのメソッドに分割されました。
PropertyNodeList
の values
アトリビュートが getValues()
メソッドに置き換えられました。
select
イベントが定義されました。
input
と textarea
に selectDirection
IDL アトリビュートが追加されました。
:enabled
, :disabled
擬似クラスが fieldset
に、そして :indeterminate
擬似クラスが progress
にそれぞれマッチするようになりました。
TrackList
に getKind()
メソッドが追加されました。
MediaController
API と mediagroup
属性が追加されました。
TrackList
の getName()
メソッドが getLabel()
に改称されました。
table
要素の border
属性が conforming となりました。
u
要素が conforming となりました。
table
要素の summary
属性が non-conforming となりました。
video
要素の audio
属性が boolean 属性である muted
属性に変更されました。
Content-Language
meta pragma が non-conforming となりました。
pushState
, replaceState
実装がフィードバックされ仕様が変更になりました。また history.state
が追加されました。
tracks
IDL アトリビュートが textTracks
へ改称されました。
forminput
, formchange
イベントと dispatchFormInput()
, dispatchFormChange()
メソッドが削除されました。
rel
属性のキーワード archives
, up
, last
, index
, first
またその類似キーワードが削除されました。
video
要素のレターボックスは CSS の 'object-fit' プロパティとして定義されるようになりました。
canvas
に cross-origin なフォントが使われた際にフォント情報が漏れることがなくなりました。
window
の onerror
イベントハンドラがランタイムエラーだけでなく、コンパイル時のスクリプトエラーにおいても送出されるようになりました。
script
要素の async
がデフォルトで true
になりました。挿入順にスクリプトを実行させるため false
に設定も可能です。
atob()
, btoa()
メソッドが定義されました。
.manifest
から .appcache
へと変更されました。
action
, formaction
属性の値に空文字列を指定できなくなりました。
dropzone
が追加されました。
bdi
が追加されました。利用者が追加した内容が双方向テキストに影響する場合に、その処理を手助けします。
dir
属性に新しい値 "auto
" が追加されました。
input
要素に新しい属性 dirname
が追加されました。属性が指定されたとき、ユーザーによって指定された書字方向がサーバーに送信されます。
track
要素と関連する TextTrack API が追加されました。
getSelection()
API が DOM Range に移動されました。また、UndoManager
がまだ十分な状態にないことから W3C の HTML5 仕様から削除されました。
hidden
要素がテーブル関連要素で利用可能になりました。
canvas
の getContext()
メソッドが複数のコンテキストをより良く扱えるように定義されました。
startTime
IDL 属性が initialTime
に変更され、また startOffsetTime
IDL 属性が追加されました。
prefetch
が a
要素からも利用可能になりました。
ins
要素と del
要素の datetime
属性において、時刻の記述が必要ではなくなりました。
form
要素から HTTP の PUT と DELETE を使うことが可能ではなくなりました。
s
要素が非推奨ではなくなりました。
video
要素に audio
属性が追加されました。
いつもどおり、微細な仕様の修正も数多く行われています。
title
要素は必須でしたが、srcdoc
をもつ iframe
要素が参照する文書および電子メールにおいては必須でなくなりました。これは、例外としたケースではすでに他の形でタイトルが存在することにあります。
keywords
が meta
要素の標準メタデータ名になりました。
iframe
要素の sandbox
属性に新しい値 allow-top-navigation
が追加されました。これはこのキーワードを与えたとき、埋め込んだ内容がその親にナビゲートできることを示すものです。
wbr
要素が追加されました。
link
要素の rel
属性がもつ
キーワードについて、文書の代替ではないフィードについても指定できるようになりました。
これらに加え、細かな変更、仕様の明確化、および修正が行われました。
dialog
要素が削除され、会話のマークアップについて説明するセクションに置き換えられました。
document.head
が導入されました。スクリプトから head
要素へ簡単にアクセスする機能を提供します。
feed
が削除されました。別のリンク型 alternate
に特定のメディア型を指定する方法で代替可能です。
createHTMLDocument()
が API として導入されました。HTML 文書の作成を簡単に行えます。
meter
, progress
要素で定義されていた、要素内容から値を処理する「マジック」が削除されました。国際化の観点で問題があったためです。
meter
, progress
, output
要素でも label
要素によるラベル付けが行えるようになりました。
text/html-sandboxed
が導入されました。悪意があるかもしれないコンテンツを害のないようにホストするための仕組みです。
iframe
要素に srcdoc
属性が導入されました。悪意があるかもしれないコンテンツをインラインで埋め込むための仕組みです。この属性は sandbox
, seamless
属性と共に使うことが考えられています。
figure
要素が legend
要素の代わりに新しい figcaption
要素を利用するようになりました。HTML5 を W3C 勧告前から利用したいという人が多かったためです。
details
要素には summary
要素が導入されました。figure
要素と同様の理由になります。
autobuffer
属性が preload
に改称されました。
他にも多くの issue が解決されています。上記のリストは、製作者にとって重要と考えられるものを取り上げています。
これらの変更に加えて、W3C の HTML5 から マイクロデータ、canvas
の 2D context API, Web Messaging (postMessage()
API) が分離され、それぞれ個別の草案として公開されることになりました (WHATWG の HTML5 では、これらを引き続き含んだかたちで公開しています)。
マイクロデータの語彙が W3C の HTML5 草案から削除されました。別の草案として公開されてもいませんが、WHATWG の HTML5 には含まれたままです。
time
が空である場合、ユーザーエージェントは時間をロケールに合わせた表記で表示する必要があるようになりました。
load
イベントは Window
に割り当てられますが、そのターゲットが Document
になりました。
pushState()
が Referer
ヘッダーに影響するようになりました。
onundo
と onredo
が Window
に移動しました。
startTime
メンバを持つようになりました。これはリソースがどこで開始されたかを表すものです。
header
要素の名称が hgroup
に変更されました。そして、別の定義をもつ新しい header
が追加されました。
createImageData()
が ImageData
オブジェクトを引数に取れるようになりました。
createPattern()
が video
要素を引数に取れるようになりました。
footer
要素は header
の中に存在できなくなり、また header
も address
, footer
の中に存在できなくなりました。
<input type="tel">
という新しいフォームコントロールが追加されました。
accesskey
が定義されました。
section
要素と article
要素に cite
属性が追加されました。
<p><table>
の構文解析に関する特別な処置が追加されました。詳しくは last of the parsing quirks をご覧ください。textarea
要素のメンバに textLength
が追加されました。
rp
要素はこれまで内容に一文字しか持てませんでしたが、phrasing content を持てるように変更されました。
location.reload()
が定義されました。
hashchange
イベントが非同期に発火するようになりました。
spellcheck
IDL アトリビュートが DOMString
にマップするようになりました。
hasFeature()
のサポートが最小限に抑えられました。
Audio()
コンストラクタが autobuffer
属性をセットするようになりました。
thead
要素に td
を記述することができなくなりました。
input
要素と DataTransfer
オブジェクトに files
IDL アトリビュートが追加されました。
datagrid
要素と bb
要素が削除されました。これは要素の設計が満足に支持されなかったことによります。
このほかにも、仕様の明確化、誤植、実装者に対する項目、そしてその他の小さな問題も解決されています。
加えて、これまで HTML5 仕様中で定義されていた次の機能が分離されました。これらは IETF での作業が検討されています。
spellcheck
が追加されました。
this
が Window
オブジェクトではなく WindowProxy
オブジェクトを返すよう定義されました。
input
要素の IDL アトリビュート value
が定義されました。
designMode
の定義が、よりレガシーな実装に沿うよう変更されました。
drawImage()
メソッドが video
要素を受け取ることが可能になりました。
document.domain
が IPv6 互換になりました。
video
要素が真偽値属性である autobuffer
を持つようになりました。
meta
要素の charset
属性を記述できるようになりました。ただし、これは単に記述できるというだけで、エンコーディングを指定する意味はありません。また、属性値は文書のエンコーディングに一致しなければいけません。
bufferingRate
, bufferingThrottled
が削除されました。
postMessage()
API が MessagePort
オブジェクトの配列をとるようになりました。これまでは一つのオブジェクトに制限されていました。
select
要素に用意された add()
メソッドの第二引数と、options
が任意になりました。
input
と button
要素の action
, enctype
, method
, novalidate
, target
属性が formaction
, formenctype
, formmethod
, formnovalidate
, formtarget
へと変更されました。
document.cookie
と localStorage
) を同時に変更する際に生じる問題に対応するため、"ストレージの排他制御 (storage mutex)" という概念が追加されました。関連して、明示的に開放するため、Navigator
に getStorageUpdates()
メソッドが追加されました。
text/html
でも SVG を利用することができるようになります。
textarea
要素に placeholder
属性が追加されました。
keygen
要素が追加されました。
datagrid
要素の項が改訂され、API がより非同期なものになりました。また、グリッドの中でロードされていない部分も許可されるようになりました。
これらの変更に加えて、HTML5 で定義されていた次の機能が分離され、Web Applications Working Group に移管されました。これらはそれぞれ個別の仕様として策定されることになります。
localStorage
と sessionStorage
)
ImageData
オブジェクトの data
メンバは、配列から CanvasPixelArray
オブジェクトへ変更されました。
canvas
要素とその API において、影の実装が必須要件になりました。
canvas
のセキュリティモデルが明確になりました。
canvas
の処理モデルにおいてさまざまな変更が行われました。これは実装者や製作者からのフィードバックによるものです。たとえば、NaN や Infinity が渡されたときの処理が明記されたり、arc()
, arcTo()
の定義が修正されたりしています。
innerHTML
について、往復処理の向上に関連する修正が行われました。
canvas
要素の toDataURL()
メソッドは、メディア型が image/jpeg
である場合、その品質レベルの指定ができるようになりました。
video
の poster
属性は、要素の内在寸法に影響するようになりました。
link
要素の type
属性の挙動が明確化されました。
link
要素で指定されたリソースの種類が画像と想定されるとき、その sniffing が許可されるようになりました。
base
要素の href
属性は xml:base
に依存しない旨が明記されました。
http://www.w3.org/1999/xhtml
の指定された xmlns
属性が、すべての HTML 要素に対して許可されるようになりました。
data-*
属性と embed
要素に指定されたカスタム属性が、XML の Name
production にマッチしなければならないようになり、またコロンを含むことができなくなりました。
volume
属性の規定値が 0.5 から 1.0 に変更されました。
event-source
要素は eventsource
要素に改名されました。他の HTML 要素がハイフンを利用していないというのが理由です。
postMessage()
の引数として利用される、メッセージチャンネル API が追加されました。
bb
要素が追加されました。これは、ユーザーが実行できる、ユーザーエージェントのコマンドを表します。
addCueRange()
メソッドが、コールバックにより expose された識別子を取ることができるように変更されました。
Window
オブジェクトの parent
アトリビュートが定義されました。
text/plain
で Flash を提供するサーバーのため、embed
要素は拡張子 sniffing を行うように定義されました。ただし、より良い方法がないか検討中のため、仕様書では issue として記されています。embed
要素は src
属性が無くても利用可能となりました。
getElementsByClassName()
は CSS との一貫性をもたせるため、互換モードでは ASCII case-insensitive として動作するようになりました。
localName
がノード名を大文字で返すことはなくなりました。
data-*
は常に小文字となると定義されました。
Window
オブジェクトの opener
アトリビュートは、target="_blank"
や rel="noreferrer"
なリンクから開かれたページでは存在しないようになりました。
Window
オブジェクトの top
アトリビュートが定義されました。
a
要素は flow content を持つことができるようになりました。ただし、ネストした interactive content を含むことはできません。
header
が何を意味するかが定義されました。
canvas
要素において、パターンが必須とされました。
menu
要素から autosubmit
属性が削除されました。
outerHTML
と insertAdjacentHTML()
が追加されました。
xml:lang
属性が、lang
属性も指定されており、かつ同じ値を保持している場合に許可されるようになりました。XML における lang
属性についても同様に、xml:lang
属性も指定されており、かつ同じ値を保持している場合に許可されるようになりました。
Window
オブジェクトの frameElement
アトリビュートが定義されました。
alt
属性が省略された場合は、title
属性、legend
要素を持つ figure
要素、見出しを持ちその画像を含むセクションのどれかが存在していなければならないとされました。
irrelevant
属性は hidden
属性に改名されました。
definitionURL
属性が適切にサポートされました。以前の定義では構文解析処理中にすべて小文字になってしまう不具合がありました。
datatemplate
, rule
, nest
要素を定義していました)。
loop
要素をひとつだけ持てるようになりました。
load()
メソッドは非同期処理として再定義されました。また、source
要素の type
属性を見るだけではなく、ファイルを順番に実行するようになりました。
canPlayType()
という新しいメンバが追加されました。
totalBytes
, bufferedBytes
アトリビュートが削除されました。
Location
オブジェクトは resolveURL()
メソッドを持つようになりました。
q
要素が再び変更され、引用符はユーザーエージェントが挿入するものという前の定義に戻されました。
unload
イベントと beforeunload
イベントが定義されました。
td
要素または th
要素を指定した headers
属性をサポートしなければなりません。一方で、製作者は th
要素のみを指定することができます。
http-equiv
の値を登録できるようになりました。
charset
属性を持つ meta
要素は、文書の先頭 512 バイト以内に記述される必要があるとされました。
StorageEvent
オブジェクトは storageArea
アトリビュートを持つようになりました。
foreignObject
要素内で、どのように HTML が利用されるかが定義されました。
HTMLDocument
オブジェクトと Window
オブジェクトでどのように動作するかが定義されました。
Window
オブジェクトが locationbar
, menubar
, personalbar
, scrollbars
, statusbar
, toolbar
アトリビュートを持つようになりました。これらは、ユーザーインターフェースに関する情報を与えます。
document.domain
が Public Suffix List を参照するようになりました。 [PSL]
別の仕様として策定されていた Web Forms 2.0 が HTML5 に取り込まれました。フォーム関連の章に行われた変更は、次の通りです。
select
要素と datalist
要素の data
属性からのフォーム記入サポートが削除されました。
form
属性で行うことができます。
dispatchFormInput()
メソッドと dispatchFormChange()
メソッドが削除されました。
inputmode
属性が削除されました。
input
要素は min
属性と max
属性をサポートしないようになりました。
input
要素の allow
属性は authoritative でなくなりました。
textarea
要素の pattern
属性と accept
属性が削除されました。
submit()
メソッドは送信のみを行うようになり、フォームコントロールが妥当かどうか保証するものではなくなりました。
input
要素の規定値は middle となり、最小値ではなくなりました。
input
要素の size
属性が適合する属性になりました (これまでは非推奨とされていました)。
object
要素もフォーム送信を行えるようになりました。
input
要素の type
属性に新しい値 color
と search
が追加されました。
input
要素に multiple
属性が追加されました。この属性により、複数の e メールやファイルを記述することができます。なお、記述可能な内容は、type
属性の値に依存します。
input
, button
, form
要素に novalidate
属性が追加されました。この属性によりフォーム送信時に、フィールドが持つ値の妥当性検証を行わないようにすることができます。
label
要素の中に input
要素が存在していても、for
属性がその input
要素を参照する場合、その重複指定が許されるようになりました。
input
要素は indeterminate
IDL アトリビュートを持つようになりました。
input
要素に placeholder
属性が追加されました。
ping
属性の実装、またその記述についての詳細が変更されました。
<meta http-equiv=content-type>
もまた、文字エンコーディングの指定として許可されるようになりました。
canvas
要素の API が整理されました。また、文字を描画する機能が追加されました。
globalStorage
が localStorage
と名前を変え、また same-origin ポリシーの制限が課せられました。また、関連するイベントディスパッチについての説明が明確化されました。
postMessage()
API が変更されました。URL ではなくメッセージの origin のみが expose されるようになりました。また、ターゲット文書の origin を指定する2つ目の引数が必須となりました。
dataTransfer
オブジェクトは送信されるデータの型を指定する types
属性を持つようになりました。
m
要素が mark
要素に変更されました。
figure
要素はキャプションを持たなくてよいようになりました。
ol
要素に reversed
属性が加わりました。
queryCommandEnabled()
メソッドや、関連するメソッドが追加されています。
td
要素に、headers
属性が追加されました。
table
要素は新しく createTBody()
メソッドを持つようになりました。
data-name
という形式で属性を記述することができます。データへのアクセスは、dataset[name]
という形式で DOM から行うことができます。
q
要素が、ブラウザーが自動的に引用符を付加するのではなく、内容が引用符を持たなければならないと定義されました。
target
属性に _blank
が追加されました。
showModalDialog
API が追加されました。
document.domain
API が追加されました。
source
要素は新しく pixelratio
属性を持つようになりました。これは、エンコードに問題のあるビデオに対して利用します。
video
要素に IDL アトリビュート bufferedBytes
, totalBytes
, bufferingThrottled
が追加されました。
begin
イベントが Progress Events との整合性をとるため、loadstart
に改称されました。
script
要素に charset
属性が追加されました。
iframe
要素に、サンドボックス機能を提供する sandbox
属性と seamless
属性が追加されました。
ruby
, rt
, rp
要素が追加されました。
showNotification()
メソッドが追加されました。
beforeprint
, afterprint
イベントがサポートされました。
編集者は、この文書の執筆に貢献してくれた Ben Millard, Bruce Lawson, Cameron McCormack, Charles McCathieNevile, Dan Connolly, David Håsäther, Dennis German, Frank Ellermann, Frank Palinkas, Futomi Hatano, Gordon P. Hemsley, Henri Sivonen, James Graham, Jens Meiert, Jeremy Keith, Jürgen Jeka, Krijn Hoetmer, Leif Halvard Silli, Maciej Stachowiak, Marcos Caceres, Mark Pilgrim, Martijn Wargers, Martyn Haigh, Masataka Yakura, Michael Smith, Olivier Gendrin, Øistein E. Andersen, Philip Jägenstedt, Philip Taylor, Randy Peterman, Toby Inkster, Yngve Spjeld Landro, そして長年 HTML5 に関わり、Web の向上につとめてくださった方にとても感謝しています!