ミニマムな HTML5 ファイルを 「HTML Standard」を見ながら書く

HTML ファイルの内容を例示するのになるべくコンパクトにしたい。

やっぱり HTML5 が一番コンパクト。HTML5 でミニマムに書いたもの


```

<!DOCTYPE HTML>
<HTML><HEAD><META CHARSET=UTF-8><TITLE></TITLE></HEAD>
<BODY></BODY>
</HTML>
```
気分で大文字。
スタイルシートとJavaScriptを使うものは以下の通り（気分で小文字）

```

<!doctype html>
<html><head><meta charset=utf-8><title></title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script></head>
<body></body>
</html>
```

# HTML Standard

参照したものは HTML Standard（Living Standard — Last Updated 24 March 2021）
https://html.spec.whatwg.org


# 要素解説

## ` <!DOCTYPE html> `

「13.1.1 The DOCTYPE」
https://html.spec.whatwg.org/#the-doctype

によると、

> DOCTYPEs are required for legacy reasons. 

ということで DOCTYPE は必須らしい。

これは省略できないらしい。
HTML5より前の

` <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> `

だとかに比べるとシンプルになってうれしい！

## ` <html>,</html> `

lang指定が必要な場合は

` <html lang="ja">`

とするけれども、charset に UTF-8 を指定するから別に無くてもいいよね。

## `  <head>,  </head>`

あいまいでなければ省略できる。しかしながら head タグの内側に内包する title タグは必須らしい。

## `<meta charset="UTF-8">`

これを明示的に書かないと、一部のブラウザで文字化けすることがあった。

こちらもHTML4の時代と比べるとすっきりしていいですね！

「HTML Standard」（Living Standard — Last Updated 24 March 2021）
の「4.2.5.4 Specifying the document's character encoding」
https://html.spec.whatwg.org/#character-encoding-declaration

によると、

> Those requirements necessitate that the document's character encoding declaration, if it exists, specifies an encoding label using an ASCII case-insensitive match for "utf-8".

とあるので、UTF-8 の記述は大文字でも小文字でも良い。

## `<title>title</title>`

これも Doctype 宣言と同様に必須らしい

## `  <body>,  </body>`

これも head タグと同じくあいまいでなければ省略できる

cf.,
「HTML Standard」（Living Standard — Last Updated 24 March 2021）
の「4.3.1 The body element」
https://html.spec.whatwg.org/#the-body-element

> A body element's start tag can be omitted if the element is empty, or if the first thing inside the body element is not ASCII whitespace or a comment, except if the first thing inside the body element is a meta, link, script, style, or template element.
A body element's end tag can be omitted if the body element is not immediately followed by a comment.


# 書き方

## 引用符って省略していいの？

13.1.2.3 Attributes
https://html.spec.whatwg.org/#attributes-2
https://html.spec.whatwg.org/#syntax-attribute-name
によると、値は引用符、二重引用符、引用符無しそれぞれで書くことができる。


## 要素は大文字小文字どちらでもいいの？

13.1.2 Elements
https://html.spec.whatwg.org/#elements-2

によると、要素はASCII 大文字小文字いずれでも書くことができる。
> Tags contain a tag name, giving the element's name. HTML elements all have names that only use ASCII alphanumerics. In the HTML syntax, tag names, even those for foreign elements, may be written with any mix of lower- and uppercase letters that, when converted to all-lowercase, matches the element's tag name; tag names are case-insensitive.

## 字下げは？


13.2.5 Tokenization
13.2.5.1 Data state
https://html.spec.whatwg.org/#data-state

> Consume the next input character:
> 
> U+0026 AMPERSAND (&)
Set the return state to the data state. Switch to the character reference state.
U+003C LESS-THAN SIGN (<)
Switch to the tag open state.
U+0000 NULL
This is an unexpected-null-character parse error. Emit the current input character as a character token.
EOF
Emit an end-of-file token.
Anything else
Emit the current input character as a character token.

ということなので、字下げなどに使ったスペースなどはそのまま出力される。

## 改行コードは？
13.2.3.5 Preprocessing the input stream
https://html.spec.whatwg.org/#preprocessing-the-input-stream
によると、
> Before the tokenization stage, the input stream must be preprocessed by normalizing newlines. Thus, newlines in HTML DOMs are represented by U+000A LF characters, and there are never any U+000D CR characters in the input to the tokenization stage.

とあるのでプリプロセッサにて改行コードは LF コードに整形されるらしい。なのであまり気にしなくてもいいですね。