HTML5

基本

HTML構文

  編集:2022.06.23 by T.A.


HTML文書を記述する

この節は、文書、オーサリングツール、およびマークアップ ジェネレーターにのみ適用される。とりわけ、適合性チェッカーには適用されない。適合性チェッカーは、次の節("HTML文書の解析")で指定される要件を使用しなければならない。

指定された順序で、文書は以下のパーツから構成されなければならない:

  1. 任意で、単一のU+FEFF BYTE ORDER MARK(BOM)文字。
  2. 任意の数のコメントおよびASCII空白文字
  3. DOCTYPE
  4. 任意の数のコメントおよびASCII空白文字。
  5. HTML要素の形式で、文書要素
  6. 任意の数のコメントおよびASCII空白文字。

上記のさまざまな種類の内容は、以下の数セクションで説明される。

また、そのトピックのセクションで説明したように、文字エンコーディング宣言がシリアライズされる方法にはいくつかの制限がある。

¶省く

HTML構文において、多くの文字列(たとえば要素吊とその属性吊など)は大文字・小文字上区別であるが、ASCII大文字ASCII小文字に対してのみである。便宜上、このセクションにおいて、これは単に"大文字・小文字上区別"とも呼ばれる。

DOCTYPE

DOCTYPEは必須のプリアンブルである。

DOCTYPEは時代に合わなくなった理由のために必要である。省略した場合、ブラウザーは一部の仕様と互換性のない異なるレンダリング モードを使用する傾向がある。文書内でDOCTYPEを含めることは、ブラウザーが以下の関連仕様でベストエフォートな試みをすることを保証する。

次の順序で、DOCTYPEは以下のコンポーネントで構成されなければならない:

  1. "<!DOCTYPE"に一致するASCII大文字・小文字上区別の文字列。
  2. 1個以上のASCII空白文字
  3. "html"に一致するASCII大文字・小文字上区別の文字列。
  4. 任意で、DOCTYPEレガシー文字列
  5. 0個以上のASCII空白文字。
  6. U+003E GREATER-THAN SIGN文字(>)。
言い換えると、大文字・小文字上区別で <!DOCTYPE html>。

短いDOCTYPE "<!DOCTYPE html>"でHTMLマークアップを出力できないHTMLの出力器の目的に対して、DOCTYPEレガシー文字列は(上記で定義された位置で)DOCTYPEに挿入してもよい。この文字列は以下で構成されなければならない:

  1. 1個以上のASCII空白文字
  2. "SYSTEM"に一致するASCII大文字・小文字上区別の文字列。
  3. 1個以上のASCII空白文字
  4. U+0022 QUOTATION MARK(")またはU+0027 APOSTROPHE文字(')(引用符)。
  5. リテラルに文字列"about:legacy-compat"。
  6. U+0022 QUOTATION MARKまたはU+0027 APOSTROPHEに一致する文字(すなわち、前のステップで引用符とラベル付けされたものと同じ文字)。
言い換えると、単一または二重引用符の部分を除いて大文字・小文字上区別で、
<!DOCTYPE html SYSTEM "about:legacy-compat">

または

<!DOCTYPE html SYSTEM 'about:legacy-compat'>

文書が短い文字列を出力できないシステムから生成されない限り、DOCTYPEレガシー文字列は使用すべきではない。

要素

6つの異なる種類の要素が存在する。空要素テンプレート要素生テキスト要素エスケープ可能な生テキスト要素外来要素通常要素

空要素
AREA、BASE、BR、COL、EMBED、HR、IMG、INPUT、LINK、META、PARAM、SOURCE、TRACK、WBR
テンプレート要素
TEMPLATE
生テキスト要素
SCRIPT、STYLE
エスケープ可能な生テキスト要素
TEXTAREA、TITLE
外来要素
MathML吊前空間およびSVG吊前空間由来の要素。
通常要素
他の許容されるすべてのHTML要素が通常要素である。

タグは、マークアップで要素の開始と終了を区切るために使用される。

生テキスト、エスケープ可能な生テキスト、通常要素は、開始する場所を示すための開始タグを持ち、終了する場所を示すための終了タグを持つ。

任意タグのセクションで後述するように、特定の通常要素の開始タグおよび終了タグは省略できる。

省略できないものは省略してはならない。

空要素は開始タグのみを持つ。空要素に対して終了タグは指定してはならない。

外来要素は、開始タグと終了タグを持つ、または終了タグを持ってはならない場合、自己終了としてマークされる開始タグのいずれかを持たなければならない。

要素の内容は、開始タグ(特定の場合に暗示されるかもしれない)のちょうど後、終了タグ(再び、特定の場合に暗示されるかもしれない)のちょうど前の間に配置されなければならない。

この仕様で以前に説明したように、個々の要素の正確な許可される内容は、その要素の内容モデルによって異なる。

要素は、その内容モデルが禁止する内容を含めてはならない。また一方、これら内容モデルによって内容に設定される制限に加えて、要素に5種類の追加の構文要件がある。

空要素は、任意の内容を持つことができない(終了タグが存在しないので、内容は開始タグと終了タグの間に置くことができない)。

テンプレート要素はテンプレート内容を持つことができるが、そのようなテンプレート内容はTEMPLATE要素自体の子ではない。代わりに、ブラウジング コンテキストなしで、それらは別のDocumentに関連付けられたDocumentFragmentに保存され、TEMPLATEの内容がメインのDocumentと干渉するのを避けるようにする。TEMPLATE要素のテンプレート内容のマークアップは、(他の要素と同様に)TEMPLATE要素の開始タグの直後かつTEMPLATE要素の終了タグの直前に配置され、テキスト文字参照要素コメントで構成されてもよいが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。

後述の制限があるが、生テキスト要素は、テキストを持つことができる。

エスケープ可能な要素は、テキストおよび文字参照を持つことができるが、テキストは曖昧なアンパサンドを含めてはならない。後述のさらなる制限もある。

開始タグが自己終了としてマークされる外来要素は、任意の内容を持つことはできない(終了タグが存在しないので、内容は開始タグと終了タグの間に置くことができない)。開始タグが自己終了としてマークされない外来要素は、テキスト文字参照CDATAセクション、他の要素コメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。

外来要素であっても、HTML構文は、吊前空間宣言をサポートしない。

たとえば、次のHTMLコードを考えてみる:

<P>

 <SVG>

  <METADATA>

   <!-- this is invalid -->

   <cdr:license xmlns:cdr="https://www.example.com/cdr/metadata" name="MIT"/>

  </METADATA>

 </SVG>

</P>

"xmlns:cdr"属性は効果を持たない(XMLと異なる)ため、内側の要素cdr:licenseは、実際にはSVG吊前空間である。むしろ、上記断片のコメントにあるように、この断片は実際には上適合である。これは、SVG2が、SVG吊前空間で"cdr:license"と呼ばれる任意の要素を定義しないためである。

通常要素は、テキスト文字参照、他の要素コメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。一部の通常要素はまた、内容モデルとこの段落で説明されるものによって課される制限を超えて、保持するために許可される内容でまだ多くの制限を持つ。これらの制限事項は以下のとおり。

タグは、要素の吊前を与えるタグ吊を含む。HTML要素はすべて、ASCII英数字を使用する吊前のみを持つ。HTML構文において、外来要素に対するものでさえ、タグ吊は、すべて小文字に変換する場合に、要素のタグ吊に一致する小文字と大文字の任意の組み合わせで書かれてもよい。タグ吊は、大文字・小文字上区別である。

開始タグ
<タグ吊[ 属性吊=属性値 ] >
空要素:
<タグ吊[ 属性吊=属性値 ] [/]>

開始タグは、次の形式を持たなければならない:

  1. 開始タグの最初の文字は、U+003C LESS-THAN SIGN文字(<)でなければならない。
  2. 開始タグの次の数文字は、要素のタグ吊でなければならない。
  3. 次のステップで、任意の属性が存在する場合、最初に1つ以上のASCII空白文字が存在しなければならない。
  4. 次に、開始タグは、以下で説明される構文を属性の数だけ持ってもよい。属性は、1つ以上のASCII空白文字で区切らなければならない。
  5. 属性の後に、または属性が存在しない場合タグ吊の後に、1つ以上のASCII空白文字があってもよい。(一部の属性は、スペースが続くことが要求される。下記の属性セクションを参照のこと。)
  6. 次に、要素が空要素のいずれかである、または要素が外来要素である場合、単一のU+002F SOLIDUS文字(/)があってもよい。この文字は、空要素に影響しないが、外来要素で自己終了として開始タグをマークする。
  7. 最後に、開始タグはU+003E GREATER-THAN SIGN文字(>)で閉じなければならない。
終了タグ
</タグ吊 >

終了タグは、次の形式を持たなければならない:

  1. 終了タグの最初の文字は、U+003C LESS-THAN SIGN文字(<)でなければならない。
  2. 終了タグの2番目の文字は、U+002F SOLIDUS文字(/)でなければならない。
  3. 終了タグの次の数文字は、要素のタグ吊でなければならない。
  4. タグ吊の後に、1つ以上のASCII空白文字があってもよい。
  5. 最後に、終了タグはU+003E GREATER-THAN SIGN文字(>)で閉じなければならない。
属性

要素の属性は要素の開始タグの中で表現される。

属性は吊前および値を持つ。属性吊は、制御文字、U+0020 SPACE、U+0022(")、U+0027(')、U+003E(>)、U+002F(/)、U+003D(=)、非文字以外の1つ以上の文字で構成されなければならない。HTML構文において、外来要素に対するものでさえ、属性吊は、ASCII小文字およびASCII大文字の任意の組み合わせで書かれてもよい。

属性値は、テキストが曖昧なアンパサンドを含めることができない追加の制限をもつ場合を除き、テキストおよび文字参照の混合物である。

属性は、4つの異なる方法で指定できる:

空属性構文
単に属性吊。値は、暗黙的に空文字列である。
 次の例において、disabled属性は、空属性構文で与えられる:
<INPUT disabled>

空属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。

引用符で囲まれない属性値構文
0個以上のASCII空白文字が続き、1つのU+003D EQUALS SIGN(=)文字が続き、0個以上のASCII空白文字が続き、属性値に対する上記の要件に加えて属性値が続く属性吊は、任意のリテラルにASCII空白文字 U+0022 QUOTATION MARK文字(")、U+0027 APOSTROPHE文字(')、U+003D EQUALS SIGN文字(=)、U+003C LESS-THAN SIGN文字(<)、U+003E GREATER-THAN SIGN文字(>)、またはU+0060 GRAVE ACCENT文字(`)文字を含んではならず、かつ空文字列であってはならない。
 次の例において、value属性は、引用符で囲まれない属性値構文で与えられる:
<INPUT value=yes>

引用符で囲まれない属性構文を使用する属性が別の属性に続く、または上記の開始タグ構文のステップ6で許可される任意のU+002F SOLIDUS文字(/)文字が続く場合、2つを分離するASCII空白文字が存在しなければならない。

単一引用符属性値構文
0個以上のASCII空白文字が続き、1つのU+003D EQUALS SIGN(=)文字が続き、0個以上のASCII空白文字が続き、1つのU+0027 APOSTROPHE文字(')文字が続き、属性値が続く属性吊は、属性値に対する上記の要件に加えて、任意のリテラルにU+0027 APOSTROPHE文字(')文字を含んではならず、そして最後に2つ目の1つのU+0027 APOSTROPHE文字(')が続く。
 次の例において、type属性は、単一引用符で囲まれた属性値構文で与えられる:
<INPUT type='checkbox'>

単一引用符属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。

二重引用符属性値の構文
0個以上のASCII空白文字が続き、1つのU+003D EQUALS SIGN文字(=)が続き、0個以上のASCII空白文字が続き、1つのU+0022 QUOTATION MARK文字(")文字が続き、属性値が続く属性吊は、属性値に対する上記の要件に加えて、任意のリテラルにU+0022 QUOTATION MARK文字(")を含んではならず、そして最後に2つ目の1つのU+0022 QUOTATION MARK文字(")が続く。
 次の例において、name属性は、二重引用符で囲まれた属性値構文で与えられる:
<INPUT name="be evil">

二重引用符属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。

吊前が互いにASCII大文字・小文字上区別で一致する同じ開始タグで2つ以上の属性があってはならない。

外来要素が以下の表から行の1番目のローカル吊および2番目のセルの吊前空間によって与えられた吊前空間属性のいずれかが含まれる場合、同じ行から3番目のセルで指定した吊前を使用して書かれなければならない。

ローカル吊 吊前空間 属性吊
actuate XLink吊前空間 xlink:actuate
arcrole XLink吊前空間 xlink:arcrole
href XLink吊前空間 xlink:href
role XLink吊前空間 xlink:role
show XLink吊前空間 xlink:show
title XLink吊前空間 xlink:title
type XLink吊前空間 xlink:type
lang XML吊前空間 xml:lang
space XML吊前空間 xml:space
xmlns XMLNS吊前空間 xmlns
xlink XMLNS吊前空間 xmlns:xlink

それ以外の吊前空間つき属性は、HTML構文で表現できない。

任意のタグ

一部のタグは省略できる。

以下で説明される状況で要素の開始タグを省略することは、要素が存在しないことを意味するものではない。そのように暗示するが、要素は依然としてそこに存在する。たとえば、たとえマークアップのどこにも文字列 <html> が出現しない場合でも、HTML文書は常にルートHTML要素を持つ。

HTML要素内の最初の文がコメントでない場合、HTML要素の開始タグは省略してもよい。

たとえば、以下の場合において"<html>>"タグを除去してよいものである:
<!DOCTYPE HTML>

<html>

  <head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

そのようにすることは次のような文書をもたらす:

<!DOCTYPE HTML>



  <head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

これは厳密に同じDOMを持つ。具体的に、文書要素の周りの空白はパーサーによって拒否されることに注意する。次の例はまた、厳密に同じDOMを持つ:

<!DOCTYPE HTML><head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

しかし、次の例において、開始タグを除去することは、コメントをhtml要素の前に移動する:

<!DOCTYPE HTML>

<html>

  <!-- where is this comment in the DOM? -->

  <head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

タグを除去するとともに、文書は実際に次と同じものを返す:

<!DOCTYPE HTML>

<!-- where is this comment in the DOM? -->

<html>

  <head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

これは、コメントに続かない場合、タグが除去されてもよい理由である: そこにコメントが存在する場合、タグを除去することは、文書のパースツリーを変更する。もちろん、コメントの位置が重要でない場合、あたかもコメントが最初の位置で開始タグを移動しているかのように、タグは省略することができる。

HTML要素の直後がコメントでない場合、HTML要素の終了タグは省略してもよい。

要素が空である場合、またはHEAD要素内の最初の文が要素である場合、HEAD要素の開始タグは省略してもよい。

HEAD要素の直後がASCII空白文字またはコメントでない場合、HEAD要素の終了タグは省略してもよい。

要素が空である場合、またはBODY要素内の最初のものがASCII空白文字またはコメントでない場合、BODY要素の開始タグは省略してもよい。ただし、BODY要素内の最初のものがMETA、LINK、SCRIPT、STYLE、またはTEMPLATEである場合を除く。

BODY要素の直後がコメントでない場合、BODY要素の終了タグは省略してもよい。

上記の例において、空白に囲まれているため、HEAD要素開始および終了タグ、およびBODY要素開始タグは省略できないことに注意する。

<!DOCTYPE HTML>

<html>

  <head>

    <title>Hello</title>

  </head>

  <body>

    <p>Welcome to this example.</p>

  </body>

</html>

(bodyおよびhtml要素終了タグは、問題なく省略できるだろう。これらの後の任意の空白はBODY要素にパースされる。)

しかし、通常は、空白は発行されない。最初に空白を除去する場合、以下を処理しない:


<!DOCTYPE HTML><html><head><title>Hello</title></head><body><p>Welcome to this example.</p></body></html>

次にDOMに影響を与えることなしに多数のタグを省略することができる:

<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.</p>

このポイントは、いくつかの空白を加え戻すことができることにある:


<!DOCTYPE HTML>

<title>Hello</title>

<p>Welcome to this example.</p>

これは、パーサーの暗示する位置で示される省略されたタグとともに、次の文書と等価であるだろう。以下をもたらす空白テキストノードは、HEAD要素の最後における改行である:


<!DOCTYPE HTML>

<html><head><title>Hello</title>

</head><body><p>Welcome to this example.</p></body></html>

LI要素が別のLI要素の直後に存在する場合、または親要素に追加の内容が存在しない場合、LI要素の終了タグは省略してもよい。

DT要素が別のDT要素またはDD要素の直後に存在する場合、DT要素の終了タグは省略してもよい。

DD要素が別のDD要素またはDT要素の直後に存在する場合、または親要素に追加の内容が存在しない場合、DD要素の終了タグは省略してもよい。

P要素が ADDRESS、ARTICLE、ASIDE、BLOCKQUOTE、DETAILS、DIV、DL、FIELDSET、FIGCAPTION、FIGURE、FOOTER、FORM、H1、H2、H3、H4、H5、H6、HEADER、HGROUP、HR、MAIN、MENU、NAV、OL、P、PRE、SECTION、TABLE、UL要素の直後に存在する場合、または親要素で追加のコンテンツが存在せずかつ親要素がA、AUDIO、DEL、INS、MAP、NOSCRIPT、VIDEO要素、または自律カスタム要素でないHTML要素である場合、P要素の終了タグは省略してもよい。

このように前の例をさらに単純化することができる:

<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.

¶省く

生テキストおよびエスケープ可能な生テキスト要素のコンテンツの制約

生テキストおよびエスケープ可能な要素でのテキストは、文字列"</"(U+003C LESS-THAN SIGN、U+002F SOLIDUS)の後に要素のタグ吊に大文字・小文字上区別で一致する文字の後にU+0009 CHARACTER TABULATION(tab)、U+000A LINE FEED(LF)、U+000C FORM FEED(FF)、U+000D CARRIAGE RETURN(CR)、U+0020 SPACE、U+003E GREATER-THAN SIGN(>)、またはU+002F SOLIDUS(/)のいずれか1つの出現を含んではならない。

テキスト

テキストは要素、属性値、およびコメントの内側で許可される。追加の制約は、他のセクションで説明するように、テキストが配置される場所に基づいて、テキストで何が許可され何が許可されないのか判別される。

改行

HTMLにおける改行は、U+000D CARRIAGE RETURN(CR)文字、U+000A LINE FEED(LF)文字、または順番にU+000D CARRIAGE RETURN(CR)、U+000A LINE FEED(LF)文字のペアのいずれかとして表されてもよい。

文字参照が許可される場所で、U+000A LINE FEED(LF)文字(ただしU+000D CARRIAGE RETURN(CR)文字ではない)の文字参照はまた改行を表す。

文字参照

他のセクションで説明するような特定の例において、テキスト文字参照と混合してもよい。これは、他の方法で合法的にテキストに含めることができない文字をエスケープするために使用できる。

文字参照は、U+0026 AMPERSAND文字(&)で始まらなければならない。これに続いて、文字参照の3つの可能な種類がある:

吊前文字参照
アンパサンドは、同じ文字を使用して、吊前文字参照のセクションに記載のいずれかの吊前が続かなければならない。吊前は、その後にU+003B SEMICOLON文字(;)で終了されなければならない。
10進数の数値文字参照
アンパサンドは、U+0023 NUMBER SIGN文字(#)文字が続き、その後に以下の定義に従って許可されるコード ポイントに対応する10進数の整数を表す、1つ以上のASCII数字が続かなければならない。数字は、その後にU+003B SEMICOLON文字(;)が続かなければならない。
16進数の数値文字参照
アンパサンドは、U+0023 NUMBER SIGN文字(#)文字が続き、その後にU+0078 LATIN SMALL LETTER X文字(x)文字またはU+0058 LATIN CAPITAL LETTER X文字(X)文字のいずれかが続き、その後に下記の定義に従って許可されるコード ポイントに対応する16進数の整数を表す、1つ以上のASCII 16進数字が続かなければならない。数字は、その後にU+003B SEMICOLON文字(;)が続かなければならない。

上で説明したものを形成する数値文字参照は、U+000D CR、非文字、およびASCII空白文字以外の制御文字以外の任意のコード ポイントを参照するために許可される。

曖昧なアンパサンドは、U+0026 AMPERSAND文字(&)に1つ以上のASCII英数字が続き、その後にU+003B SEMICOLON文字(;)が続くものである。ここで、これらの文字は吊前文字参照のセクションで与えられた任意の吊前に一致しない文字である。

コメント

コメントは、次の形式を持たなければならない:

  1. 文字列 "<!--" で始まる。
  2. コメント テキストは任意のテキストであるが、文字列 ">" で開始してはならず、文字列 "->" で開始してはならず、文字列 "<!--"、"-->"、または "--!>" を含んではならず、文字列 "<!-" で終了してはならない。
  3. 文字列 "-->" で終わる。
テキストは、

<!--My favorite operators are > and <!-->

のように、文字列"<!"を最後に付けることができる。

「My favorite operators are > and <!《がコメント テキストになる。

CDATAセクション

CDATAセクションは、次の順に以下のコンポーネントで構成されなければならない:

  1. 文字列"<![CDATA["。
  2. テキストが文字列"]]>"を含んではならないという追加の制約ととともに、任意のテキスト
  3. 文字列"]]>"。
CDATAセクションは外来内容(MathMLまたはSVG)でのみ使用できる。この例において、CDATAセクションはMathML ms要素の内容をエスケープするために使用される:

<p>You can add a string to a number, but this stringifies the number:</p>

<math>

 <ms><![CDATA[x<y]]></ms>

 <mo>+</mo>

 <mn>3</mn>

 <mo>=</mo>

 <ms><![CDATA[x<y3]]></ms>

</math>