この文書は「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 の向上につとめてくださった方にとても感謝しています!