記事タイトル
本文...
ページの作成
親となるページを選択してください。
| この記事の要点 |
|
HTML5.1 で標準化されたセクション要素。ページの主要コンテンツを意味します。スクリーンリーダー利用者が「本文だけを読みたい」とき、この要素にジャンプできます。
記事タイトル | サイト名
サイト名
記事タイトル
本文...
| 要素 | 内? | 理由 |
|---|---|---|
(サイト共通) | × | 全ページ共通の要素 |
(グローバルナビ) | × | 全ページ共通 |
| ○ | ページの主役 |
| ○ | 本文の節 |
記事内のヘッダ | ○ | 記事の冒頭部分(タイトル等) |
記事内のフッタ | ○ | 記事の末尾(著者情報等) |
サイドバー | △ | 本文の補足なら含めても OK |
(サイト共通) | × | 全ページ共通 |
HTML5 仕様は「 はページに 1 つだけ」と明記。複数あるとバリデーションエラー、スクリーンリーダーも混乱します:
記事 A
記事 B
記事 A
記事 B
例外: hidden 属性付きなら複数 OK(SPA で画面切替時に使う)。
ホーム
...
About
...
Contact
...
HTML5 の は暗黙の role が main。明示的に書く必要はありません:
...
...
...
...
キーボード / スクリーンリーダー利用者のため、ページ冒頭に「本文へスキップ」リンクを置きます:
本文へスキップ
...
...
HTML5 のアウトラインアルゴリズム上、 はセクショニング要素ではない( / / / がセクショニング)。アウトラインに新しい階層は作りません:
サイト名
記事タイトル
セクション 1
を「メインコンテンツの目印」として活用 内が優先される傾向 を起点に本文抽出/* レイアウトの基本 */
main {
max-width: 800px;
margin: 0 auto;
padding: 2em 1em;
line-height: 1.7;
}
/* 2 カラム(main + aside) */
body {
display: grid;
grid-template-columns: 1fr 300px;
gap: 2em;
max-width: 1200px;
margin: 0 auto;
}
aside {
border-left: 1px solid #ccc;
padding-left: 2em;
}
/* スマホで 1 カラムに */
@media (max-width: 768px) {
body {
grid-template-columns: 1fr;
}
aside { border-left: none; border-top: 1px solid #ccc; }
}
...
...
...
...
// 本文抽出
const mainContent = document.querySelector('main');
const text = mainContent.innerText;
console.log('本文文字数:', text.length);
// 読了時間計算
const wordsPerMinute = 400; // 日本語の場合
const minutes = Math.ceil(text.length / wordsPerMinute);
console.log(`読了目安: ${minutes} 分`);
// 印刷時に main だけ表示
function printArticleOnly() {
const original = document.body.innerHTML;
document.body.innerHTML = mainContent.outerHTML;
window.print();
document.body.innerHTML = original;
}
// SPA でルート切替時にフォーカス移動(a11y)
function navigateTo(path) {
history.pushState({}, '', path);
const main = document.querySelector('main');
main.focus(); // スクリーンリーダーが新しいコンテンツを読み始める
}
| ブラウザ | 対応 |
|---|---|
| Chrome / Edge | 26+(実質ほぼ全バージョン) |
| Firefox | 21+ |
| Safari | 7+ |
| IE 11 | レンダリングは可、CSS スタイル不可。main { display: block } 必要 |
IE11 向けには CSS で display: block を明示するのが安全:
/* IE 11 対応 (HTML5 セマンティック要素を block 化) */
header, footer, main, nav, aside, article, section, figure, figcaption {
display: block;
}
Q: Q: ランディングページのように主役が複数ある場合は? Q: SPA で URL 切替ごとに main を入れ替えても良い? ページの作成
親となるページを選択してください。
子ページはありません を使わずに
A: HTML4 / 古いブラウザ向けには OK。HTML5 では の方が短くて意味も明確です。
A: 1 つの の中で や を並べてください。 を複数置くのは仕様違反です。
A: OK。むしろ a11y 上、画面遷移後に にフォーカスを移すのが推奨です。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
コメントを削除してもよろしいでしょうか?
掲示板