HTML5

概要

HTML5は、プロプライエタリなプラグインとして提供されているリッチインターネットアプリケーションのプラットフォーム（JavaFX、Adobe Flash、Microsoft Silverlight 等）を置き換えることを標榜しており、ウェブアプリケーションのプラットフォームとしての機能やマルチメディア要素が実装されている。そのためHTML5が普及すればAdobe Flashなどのプラグインは不要になるという意見がある（後述）。
2008年以降に発表されたウェブブラウザの多くはHTML5に段階的に対応している。Google Chrome 3.0以降、Safari 3.1以降、Firefox 3.5以降、Opera 10.5、Internet Explorer 9などであり主にaudio要素・video要素・canvas要素への対応が進んでいる（2010年3月現在）。またWebSocketなど、当初HTML5の一部とされていたものの切り離され別の規格として策定作業が進められているものがある。

HTML Living Standard

HTML Living Standardは、WHATWGが策定しているHTMLの標準仕様である。W3Cの勧告するHTML5およびそれ以降（HTML 5.1など）は、HTML Living Standardを基にしている。ただし、W3C側で変更がなされており、両者には差異が生じている。ウェブブラウザの開発元では、HTML Living Standardのほうがよく参照されている。

エンコーディング

文書の文字コードにはUTF-8を推奨している。文書の文字コードの指定は、meta要素におけるcharset属性で指定する。これとHTTPレスポンスヘッダーのcontent-typeでエンコード宣言が省略された場合はUTF-8が既定となる。またcharset属性を含めたmeta要素は文章先頭から1024バイト以内に記載する必要がある。

文書の構造

従来のHTMLやXHTML規格は、仕様に書かれた文書構造のルールだけではなく、妥当性検証のためのDTD（およびそのほかのスキーマ）を提供していた。一方、HTML5仕様ではスキーマは提供されない。文書構造のために提供されるのはHTML5仕様に列挙されている各種ルールのみである。

SGML宣言

SGMLを採用していた従来のHTML規格においては、HTML文書は本質的にSGML文書であったため、HTML規格がそれぞれ提供するSGML宣言を文書の先頭に記述することが仕様上許されていた。一方HTML5の仕様では、HTML構文、XHTML構文のいずれを用いた場合でも、文書中にSGML宣言を記述することは許されていない。

文書型宣言およびDTDの扱い

HTML5仕様においては、文書型宣言はもはやモード指定以外の意味をなさず、その書式は “<!DOCTYPE html>” である。
HTML構文では文書型宣言は必須である。XHTML構文では、HTML5で導入される新しい機能を利用する場合は必須、それ以外の場合は文書型宣言は必須ではない。
従来のHTML規格で提供されていたDTDがなくなり、また文書型宣言の書式が決まっているため、HTML5ではDTDが利用できず、DTDに依存する多くの機能のほとんどが扱えなくなる。例としては、HTML4以前に扱えていた文字実体参照のほとんどがHTML5では扱えなくなる（XMLは文書内部にDTDを書くこともできるが、上記の文書型宣言の決まりを無視する結果となるため、HTML5の仕様の範疇ではない）。

処理命令

SGMLを採用していた従来のHTML規格では、文書内に処理命令 (Processing instruction) を記述することができた。実際に用いられている例として、DTDを他の処理系で利用するための "architectural support declaration" が存在する (ISO/IEC 15445)。
一方、HTML5仕様におけるHTML構文ではSGMLの処理命令は記述できず、同様の機能も利用できない。XHTML構文であればXMLの処理命令は書ける。

マーク区間

SGMLを採用していた従来のHTML規格では、マーク区間 (marked section) と呼ばれる仕組みが利用できた。以下に例を挙げる。
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN"><html><head><title>...</title></head>
  <body>
    <p><![INCLUDE[ INCLUDE...マーク区間宣言がない場合と同じように解釈される ]]></p>
    <p><![IGNORE[  IGNORE ...マーク区間の中身を無視される ]]></p>
    <p><![RCDATA[  RCDATA ...マーク区間の中身がRCDATAとして処理される ]]></p>
    <p><![CDATA[   CDATA  ...マーク区間の中身がCDATAとして処理される ]]></p>
    <p><![TEMP[    TEMP   ...マーク区間の中身が一時的なものとして扱われる ]]></p>
  </body></html>
上に挙げた例のうち、HTML5仕様で利用できるのはCDATAセクションのみである。

コメントと注釈宣言

SGMLのコメントは "-- コメント文 --" という形を取り、マーク宣言中の空白文字の出現が許されている場所に任意の回数書くことができる。したがって従来のHTMLでは文書型宣言の中などでもコメントを挿入することが可能で、例えばISO/IEC 15445の文書型宣言は
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN" --コメント-->
のようにも書ける。一方、HTML5の文書型宣言にはコメントを挿入することはできない。
また、注釈宣言の扱いも従来のHTMLとHTML5では異なる。SGMLを採用していた従来のHTMLでは注釈宣言の中に任意の回数コメントを書くことができるが、HTML5ではHTML構文でもXHTML構文でもこのような書き方は認められていない。また、従来のHTMLでは注釈宣言内の最後のコメントと終了区切り子の間に空白文字を挿入することもできたが、HTML5ではこのような書き方も認められていない。
<!--コメント1-- --コメント2-- --HTML5ではこのような注釈宣言は書けない--><!-- この注釈宣言の書き方もHTML5では不可能--  >

終了区切り子の省略

SGMLをもとにした従来のHTMLでは、タグやマーク宣言の終了区切り子 ">" が、文字列　"<", "</"の直前に存在する場合、その終了区切り子 ">" を省略することが仕様の上では許されていた。HTML5では終了区切り子の省略はできない。
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN"><html<head<title>Sample</title</head><body<p>「閉じないタグ」の例。終了区切り子が省略されている</p</body</html>

空タグ

SGMLにおける空タグ (empty tag) とは要素型名などが書かれていない空っぽのタグのことである。従来のHTMLでは空タグの存在を許しており、利用できる場所は限られるが、空開始タグ "<>" と空終了タグ "</>" が仕様の上では記述できる。一方、HTML5では空タグを利用することはできない。

簡略終了タグ

SGML規格には、NET（Null End Tag、簡略終了タグ）と呼ばれる仕組みが存在する。従来のHTMLでのNETは "/" であり、仕様上では、 "<p>文章</p>" という記述を "<p/文章/" と書くような記法が許されていた。
一方のHTML5に簡略終了タグという仕組みはない。ただし、後述する空要素の開始タグを "<br />" などと記述する方法は、（従来のSGMLの立場では）NETを利用したものと解釈することはできる。XMLの空要素タグも、SGMLの立場からはNETおよび付属書KのNESTCを利用した記法であると解釈できる。

空要素のタグ

従来のSGMLおよびHTMLにおける空要素 (empty element) は、DTDで内容モデルを空 (EMPTY) と決められた要素のことである（例：br要素）従来のHTMLでは、空要素の終了タグを書くことは許されていない。よって例えば、br要素のタグを "<br />" や "<br></br>" のように記述することもできない。
HTML5のHTML構文における空要素 (void elements) は、内容を含むことができない要素のことである。空要素はその開始タグを ">",　"/>" のいずれかで閉じることができる。例を挙げると、br要素のタグは "<br>" と記述するほかに、XHTML構文のように "<br />" と記述することもできる。ただし空要素の終了タグを書くことはできない。また、このような記法が許されるのは空要素または外部要素 (foreign element) のタグのみで、その他の要素の開始タグは ">" で閉じねばならない。例えば、HTML5のHTML構文では内容を含まないp要素を "<p />" のように書くことはできない。
XML仕様においては、空要素 (empty elements) は内容を含まない要素のことである。HTML5のXHTML構文では、空要素は直後に終了タグを伴う開始タグ（例："<br></br>"）、あるいは空要素タグ（Empty-Elements。例："<br />"）のどちらでも表現できる。

HTML5 の要素と属性

nav要素（ナビゲーションのブロック用）や footer要素（作者や著作権の状態を表すまとまり用）や section要素（節）や progress要素（進捗状況）など、特別な意味を持つ要素が追加される。これらは検索エンジンのインデックス作業を容易にする。また、マルチメディアのための audio要素や video要素や2次元ビットマップ画像を描画するための canvas要素も追加される。
HTML 4.01で非推奨だった font要素や center要素などのCSSによって実現されるべきマークアップはすべて廃止されることとしている。acronym要素も廃止され、abbr要素に一本化される。
lang属性は、XHTML構文における xml:lang属性のように空の文字列をとり得る。

エラーの取り扱い

HTML5 (text/html) 対応ブラウザは間違った構文を柔軟に処理できる。HTML5は、古いブラウザが新しいHTML5の構造を安全に無視することが出来るように設計されている。HTML 4.01とは対照的に、HTML5は対応したブラウザであれば間違った構文に対して同じ結果となるように、字句解析と構文解析のための詳細な規則を規定している。

Adobe Flash

2010年頃までに急速に普及したアップルのiPhoneとiPadがFlash非対応を貫き、スティーブ・ジョブズCEO（当時）がHTML5を支持しFlashを厳しく批判したことが大きな影響を与えた。iPhoneやiPadにFlash対応を求める声は多かったが、特にスマートフォン向けでは徐々にFlashからHTML5への転換が進んでいる。
Flashの開発元であるアドビシステムズは、かつて社をあげてFlashを擁護したが、2011年11月には、モバイルブラウザー用のFlash Playerの開発中止を発表した。（2013年には担当者でCTOだったケビン・リンチはAppleへ転職）2017年現在、アドビはHTML5の推進に積極的であり、FlashからHTML5への変換ツールなどをリリースしている。

モバイルアプリケーション

スマートフォン向けのアプリの多くは、HTML5で開発されたウェブアプリケーションに置き換わるという見方がある。2011年にイギリスのフィナンシャル・タイムズ紙がHTML5による購読アプリを発表し注目を集めた。アップルのApp Storeには審査や課金に関する制約が大きく、Androidでは1つのアプリで様々なハードウェア仕様に対応する必要があるが、Webアプリケーションではそれらの制約を受けない。一方で各端末向けの公式アプリストアで配布されるネイティブアプリにもメリットはあるため、2012年時点では置き換えが大きく進んでいるわけではない。ただ、Android端末とiOS端末ではネイティブアプリの開発に際し全く別個の開発環境を要求されているのに対し、HTML5はほぼ完全に共通の技術を使え、しかもHTML5で開発したアプリをネイティブアプリにすることも可能になっているため、ネイティブアプリ開発でHTML5が利用されることも少なくない。