1. HTML文書の基本構造をつくる
このチャプターでは、サイト制作のうえで基本となるHTMLの構造を作成し、各部分について解説しています。
さっそくHTMLを書いていきます。適当なフォルダを作成し、その中にindex.html
ファイルを作成します。
ドキュメントタイプ宣言をする
index.html
の1行目で、まずはじめに「HTMLのバージョン」を宣言を行います。VS Codeなど補完機能がついているエディターでは、最初の一文字目を打ったら候補が出てくるかと思います。
<!DOCTYPE html>
これはHTMLの一番新しい仕様である「HTML Living Standard」の宣言で、現在においては必須の記述です。いま新しくHTMLページを作成する場合は何も考えずに<!DOCTYPE html>
と書いておいて問題ありません(この仕様のひとつ前のHTML5も同じ記述です)
古いサイトだと、以下のような記述がされているものもあります。いずれも過去のHTMLの仕様に基づいた宣言です(ここに挙げたもの以外もあります)
<!-- HTML 4.01 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- HTML 4.01 Transitional -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- XHTML 1.0 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
ブラウザはページを表示する際、このドキュメントタイプ宣言を見て、そのページで表示するモード(HTMLの解釈)を自動で切り替えます。宣言がない場合もページは表示されますが、意図しない表示となる可能性もあるので、必ず宣言しておいた方がよいです(宣言がないことでとんでもない表示になることは稀ですが…)
<!DOCTYPE>
は慣例的に大文字で書かれることが多いですが、小文字でも構いません。とりあえず、HTMLの1行目ではまずこの宣言を行います。
HTML構造の大枠をつくる
つぎに、HTML構造の大枠をつくります。といっても、以下の記述で終わりです。
<!DOCTYPE html>
<html lang="[メイン言語]">
<head>
<meta charset="[文字コード]">
<title>[サイト名などブラウザのタブバーなどに表示される名称]</title>
</head>
<body>
<!-- ここに記述された内容がブラウザの画面に表示される -->
</body>
</html>
実際にはこの後head
の中身をもう少し足しますが、ブラウザにページを表示するために最低限必要な情報はこれだけです。テキストや画像、リンクなどをそのまま表示するだけであれば、上記でじゅうぶん機能します。先述のドキュメントタイプ宣言とこの<html>...</html>
の構造は、ひとつの構文として覚えておくとよいかと思います。
<!-- -->
で書かれた部分はコメント部分です。この記述箇所はブラウザのソース表示では確認できますが、実際の画面上には反映されません(コメントアウトともいいます)
html要素
要素としてのhtml
は、HTML文書における起点になる要素であり、他のすべてのHTMLはこの配下に記述します。ここでは以下を指定します。
lang属性
html
のlang
属性の値に、「そのページで使用するメイン言語」を指定します。日本語であればja
、英語はen
です。
ブラウザはページを表示する際、<!DOCTYPE>
に続いてこのlang
属性を見てページの言語を解釈します。指定がない場合でもブラウザは自動的に解釈をしますが、音声読み上げなどアクセシビリティの面でも重要なので、指定しておいた方がよいです。
head要素
head
要素内では、主にブラウザや検索クローラーなどが読み取る情報を記載します。以下はその情報の一例です。
- 文字コード
- デバイス(ブラウザ)幅
- 検索区ローターに対する指示
- OGP
- CSSやJavaScriptなどのリソースパス
ここでは、以下の2つを指定します。
metaのcharset属性
文字コードを指定します。日本語サイトで指定されている文字コードとしては、かつてはShift_JIS
やEUC-JP
がほとんどでしたが、現在ではほぼすべての文字や絵文字を表示できるutf-8
(大文字でも小文字でも)を指定するのが一般的です。
こちらも<!DOCTYPE>
同様、いま新しくHTMLページを作成する場合は何も考えずに<meta charset="utf-8">
と書いておいて問題ありません。meta
要素のcharset
属性とVS Codeなどエディターの文字コードは合わせておきます。
サイトが文字化けしている場合、HTML内でこの文字コードが設定されていないか、meta
要素に記述された文字コードと実際のHTMLファイルの文字コードが一致していないか、どちらかの可能性が高いです。自分の環境では大丈夫でも他の人が見たら文字化けしている…ということもあるので、<meta charset="utf-8">
も必ず指定しておく方がよいです。
title属性
ブラウザのタブやブックマーク時などに表示されるテキスト文言を指定します。サイト名やそのページのタイトルを表示するのが一般的です。
title
要素の文言やタグそのものを記述しなくても、ブラウザ上で表示自体はされますが、この場合ブラウザのタブなどにはファイル名またはURLがそのまま表示されます。あまり省略することはないと思いますが、これも指定しておく方がよいです。
このハンズオンでは、「My Profile」というタイトルを入れています。
body要素
body
要素内に記述された内容が、ブラウザの画面に表示されます。
上記のコード例には<!-- ここに記述された内容がブラウザの画面に表示される -->
と記述していますが、<!-- -->
の記述はHTMLではコメントアウトの記述となり、ブラウザでこのHTMLファイルを開いても現状は何も表示されません。中身は次以降のチャプターで記述していきます。
head要素の中に追記する
このままだとスマホで見たときの画面幅やレイアウトのスタイルがなにもあたらない状態なので、head
の中にもう少し記述を追加します。
ビューポートを追加する
meta
要素として、ビューポート(viewport)を指定します。ビューポートとはウェブコンテンツを表示できるウインドウの領域のことで、これによりブラウザの幅により表示が切り替わるレスポンシブ対応」が可能になります。
<meta name="viewport" content="width=device-width,initial-scale=1.0">
meta
要素のname
属性にviewport
を指定し、content
属性にはビューポートで指定できる値を設定します。指定できる値はいくつかありますが、基本的には以下の2つを指定するでOKです。
width=device-width
:横幅をデバイスの横幅にinitial-scale=1.0
:ページを最初に読み込んだときの表示倍率(1.0
あるいは1
が規定値 / 倍率100%)
format-detectionを設定する
同じくmeta
要素にformat-detection
を指定します。format-detection
はもともとAppleが独自に定義したもので、主にiOSなどのデバイスで電話番号の表示を自動的にリンクされるのを制御するためのタグ指定です。ブラウザによってサポート状況はまちまちなようですが、少なくともiOS+Safariでは有効です。
<meta name="format-detection" content="telephone=no">
meta
要素のname
属性にformat-detection
を指定し、content
属性にはtelephone=no
を指定します。これで電話番号表示の自動リンクを無効化できます。
個人の運営するサイトにおいて電話番号を表示することは稀なケースかと思いますが、ときどき「電話番号っぽい数字とハイフンの文字列」が電話番号と認識されて自動リンクされているケースを見かけるので、指定しておくとよいです。
検索クローラーのクロールを拒否する
検索クローラーに拾われてGoogleなど検索エンジンにインデックス(登録)されたくないという場合は、以下のように指定します。
<meta name="robots" content="noindex,nofollow,noarchive">
meta
要素のname
属性にrobots
を指定し、content
属性には拒否する値を指定します。上記の指定は、以下を拒否しています。
noindex
:指定のあるページを検索結果に表示しないようにするnofollow
:指定のあるページからのリンクを辿らないようにするnoarchive
:指定のあるページのキャッシュを表示しないようにする
検索エンジンのインデックス制御については、当サイトの以下記事でも詳しく解説しているので、こちらもご参考ください。
CSSファイルを読み込む
このままではbody
要素内にHTMLタグを書いてもスタイルシート(CSS)によるスタイルがあたらないので、これを読み込むための記述をします。
.css
ファイルの読み込みは、link
要素を使用します。link
要素は「外部リソースを読み込む」タグでCSSファイルのほか、RSSフィードのリンクもlink
要素で読み込みます。「外部リソース」といっても他のサイトということではなく、「HTMLファイルから見て外にあるリソース」のことを指します。JavaScriptの.js
ファイルも外部リソースにあたります。
<link rel="stylesheet" href="./css/style.css">
link
要素のrel
属性にstylesheet
を指定します。この指定により、「このリソースのリンク先はスタイルシートである」と宣言しています。
href
属性には、CSSファイルのパスを指定します。このパス指定は、CSSファイルを読み込むHTMLファイルから見た相対パスのほか、https://
からはじまる絶対パス、サイトのドキュメントルート(public_html
など)である/
からはじまるルートパスでも指定できますが、いったんローカルのPC上で作業するのであれば、相対パスでの記述をおすすめします。
上記のパス指定では、index.html
から見て/css
ディレクトリ内のstyle.css
ファイルを読み込んでいます。
かつてはtype="text/css"
という属性値も入れていましたが、現在では省略可能であり記述は不要です。
なお、link
要素にはmedia
属性というものもあります。これは読み込むCSSファイルの対象メディア(プリント用など)を指定するものですが、詳細はCSSのチャプターで解説します。
media
属性の記述を省略した場合、対象は「すべて(all
)」であり、通常のWebサイトのレイアウトとしては省略で問題ありません。
ここまでに記述したコード
ここまで記述したHTML文書の中身です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="format-detection" content="telephone=no">
<meta name="robots" content="noindex,nofollow,noarchive">
<title>My Profile</title>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<!-- ここに記述された内容がブラウザの画面に表示される -->
</body>
</html>
この状態では、index.html
をブラウザで開いても画面が真っ白でなにも表示されません。次のチャプターから少しずつ表示用のHTMLを書いていきます。
参考情報など
このチャプターで解説した各HTMLタグについて、詳細の仕様を知りたい場合は、以下MDN (MDN Web Docs)のドキュメントもご覧ください。
- Doctype - MDN Web Docs 用語集 | MDN
- <html>: HTML 文書 / ルート要素 - HTML | MDN
- <head>: 文書メタデータ(ヘッダー)要素 - HTML | MDN
- <meta>: メタデータ要素 - HTML | MDN
- <title>: 文書題名要素 - HTML | MDN
- <link>: 外部リソースへのリンク要素 - HTML | MDN
- <body>: 文書本体要素 - HTML | MDN
- HTML コメント <!-- … --> の使用 - HTML | MDN
- Viewport (ビューポート) - MDN Web Docs 用語集 | MDN
以下はmeta
要素のname="format-detection"
属性に関するAppleのドキュメントです。ページ自体が古いものなので、meta
要素の情報については、上記MDNの方をご参考ください。
- Supported Meta Tags format-detection項目