Skip to content
This page has been auto-translated and may contain errors.View in English

ドキュメント構造とアウトライン

docs.scrimba.com

ページは要素の単なる集まりではありません。上から下へと読み進めていくと、まとまりを持つべきです。タイトルがあり、その下に各セクションが続き、それぞれが独自の見出しを持ち、移動するのに理にかなった順序になっています。その形状がページのアウトラインであり、それは2つのものが協力して作られます。見出しは各部分に名前をつけ、セマンティックHTMLの章からのランドマーク領域、<header><nav><main><aside><footer>は、それらの部分を領域にグループ化します。この章では、この2つがどのように全体ページに結合されるかについてです。

見出しとランドマークがアウトラインをどのように形成するか

ウェブページは上から下へと読まれます。ちょうど本のページを読むのと同じ方法です。ページを訪れる誰もが上から始めて下へ進むので、コンテンツがある順序は、訪問者がそれを読む順序です。誰かが実際に出会いたいと思う順序に物を置いてください。

見出しは、その順序に形を与えます。見出しは、その後に続く部分の短いラベルで、<h1>から<h6>までのタグで書かれています。<h1>はページ全体のタイトルです。各<h2>はその下のメインセクションに名前をつけ、<h3><h2>内の小さい部分に名前をつけます。それらを積み重ねると、ページの**アウトライン**が得られます。ページの順序を反映した目次です。

html
<h1>初心者向けサワドウ</h1>
<h2>必要なもの</h2>
<h3>材料</h3>
<h3>道具</h3>
<h2>スターターを作る</h2>

見出しだけを読んでも、1つの段落も読む前に、ページが何についてで、どのように構成されているかすでに分かります。

ページの構造は2つのレイヤーから来ており、それぞれが異なる質問に答えます。見出しレベル<h1>から<h6>は、ネストされた階層を形成します。<h1>はページタイトル、<h2>はトップレベルのセクション、<h3>はその<h2>のサブセクション、などです。見出しだけを読むと、ページの**アウトライン**が得られます。これはマークアップから直接構築された目次です。

ランドマーク要素は2番目のレイヤーを形成します。<header><nav><main><aside><footer>はページをネーム付き領域にグループ化するため、ネストされたトピックのリストではなく、領域のマップが得られます。これはナビゲーション、これはメインコンテンツ、これはフッターです。

html
<body>
  <header>
    <nav>...</nav>
  </header>
  <main>
    <h1>初心者向けサワドウ</h1>
    <h2>必要なもの</h2>
    <h2>スターターを作る</h2>
  </main>
  <footer>...</footer>
</body>

1つの構造はコンテンツが何についてなのかを伝え(見出し)、もう1つは各種類のコンテンツがどこに住んでいるかを伝えます(ランドマーク)。よく構築されたページは両方を持っています。

**アウトライン**は、ページの構造を階層として表現したものです。上部にタイトルがあり、その下にセクションがあり、その下にサブセクションがあります。何もこのアウトラインを画面に描きません。それはマークアップに存在し、その主な対象はピクセルではなく構造を読むソフトウェアです。

スクリーンリーダー(視覚で操作しない人のためにページを音声で話すか、点字ディスプレイを駆動するソフトウェア)は、ページから2つのナビゲーション可能な構造を構築します。1つ目は、<h1>から<h6>のすべての見出しのリストで、ソース順序でそのレベルとともに保持されるため、ユーザーはすべての見出しを引き上げて、必要な見出しにすぐにジャンプできます。2つ目はランドマークのリストで、<header><nav><main><aside><footer>でマークされた領域であり、これにより、その間のすべてを読む代わりに全体領域の間をジャンプできます。各ランドマーク要素は暗黙的なARIAロール(領域の種類(navigationまたはmainなど)に名前をつけるアクセシビリティラベル)を持ち、そのロールはスクリーンリーダーが発表するものです。

これら2つの構造は実際のアウトラインです。目が見える読者は見出しテキストをページ下に走査してスキミングします。スクリーンリーダーユーザーは同じ見出しと領域をステップスルーしてスキミングします。同じ構造、2つの方法で到達します。これが意図的に構築する理由です。アウトラインは少数の人が依存する装飾ではなく、大規模なグループが完全に読む方法です。

Juno見出しとランドマークがアウトラインをどのように形成するか 本のようにページを上から下へ読むので、人々が希望する順序に物を置いてください。見出し、<h1>から<h6>は骨格です。<h1>はページタイトルで、すべてはその下にネストされます。見出しだけを読むと、ページがどのようにレイアウトされているかすでに知っているはずです。
Juno見出しとランドマークがアウトラインをどのように形成するか 2つのレイヤーがページに形を与えます。見出しレベルはネストされた目次を構築し、<main><nav>のようなランドマークは領域をマップします。1つはコンテンツが何についてなのかを言い、もう1つはそれがどこに住んでいるかを言います。両方を構築すると、ページは単に見た目だけでなく、実際の構造を持ちます。
Juno見出しとランドマークがアウトラインをどのように形成するか スクリーンリーダーはあなたのページから2つのリストを構築します。レベル付きのすべての見出しと、すべてのランドマーク領域です。そのペアはあなたのアウトラインであり、それが多くの人が実際に読む方法です。だから構造は少数のユーザーにとっての利点ではなく、それは読む経験そのもので、あなたが選んだタグから直接来ます。

1つのメインと正しい見出し順序

2つの習慣でアウトラインをクリーンに保ちます。まず、ページに単一の<h1>を与えます。それはページのタイトルで、ページは本がカバーに1つの名前を持つのと同じように1つのタイトルを持ちます。他はすべて<h2>以下です。

次に、レベルをスキップしないでください。<h2>の後、次のステップダウンは<h3>で、<h5>ではありません。レベルをスキップするとアウトラインに間隙が生じます。これは第1章と第4章をリストする目次のようなものです。一度に1レベルを上下に移動します。

html
<h1>平日のディナー</h1>
<h2>パスタ</h2>
<h3>トマトとバジル</h3>
<h3>ニンニクバター</h3>
<h2>サラダ</h2>
<h3>ギリシャンサラダ</h3>

これらの見出しが座っているコンテンツは、通常1つの<main>領域に存在します。<main>はページのプライマリコンテンツをマークし、このページに一意の部分であり、すべてのページで繰り返される共有ヘッダー、ナビゲーション、フッターではありません。<h1>があるのと同じように、1つの<main>があります。

ページには正確に1つの<main>ランドマークがあります。このページに一意のコンテンツをラップし、スクリーンリーダーはそれへの直接ジャンプを提供するため、ユーザーはすべてのページで繰り返されるヘッダーとナビゲーションをスキップできます。1つのページに2つの<main>要素があると、その約束が破られ、領域マップが混乱します。

見出しについて、2つのルールがアウトラインをまとめます。1つの<h1>があります。これはページタイトルです。見出しレベルは1つ下ります。<h2>の後に<h3>が続きます。<h4><h5>に直進することはありません。見出しレベルをどのくらい大きく見えるかではなく、アウトラインのどこに座っているかで選択します。<h1>はしばしばページヘッダー内の<main>の直下に住んでおり、ページが何についてなのかに名前をつけます。

html
<main>
  <h1>平日のディナー</h1>
  <h2>パスタ</h2>
  <h3>トマトとバジル</h3>
</main>

見出しが大きすぎたり小さすぎたりしたら、それはスタイリングの問題です。CSSでサイズを設定し、レベルをその意味のままにしておきます。

ページごとに1つの<main>があります(シングルページアプリのように、すべてをDOMに保つが非アクティブビューを隠す場合のみ、複数のマークアップを持つことができます)。ARIAロールmainを持ち、キーボードおよびスクリーンリーダーユーザーが繰り返されるナビゲーションをバイパスするために依存する「メインコンテンツへスキップ」ジャンプのターゲットです。

見出しレベルは見かけ以上の重みを持っています。それは知る価値があるある歴史的背景のためです。長年、HTMLスペックは、セクション要素(<section><article><nav><aside>)から構造を計算するドキュメント**アウトラインアルゴリズム**を説明してきたため、<section>内にネストされた<h1>は自動的に2レベルの見出しに降格されます。それはクリーンなアイデアでした。ブラウザはそれを実装せず、スクリーンリーダーはそれを使用せず、そして最終的にスペックから削除されました。

実用的な結果はシンプルで永続的です。アウトラインは見出し番号だけで定義されます。3つの<section>要素深くネストされた<h1>は、すべてのブラウザとすべてのスクリーンリーダーに対してトップレベルの見出しです。ネストはあなたのために何も番号を付け直しません。だから1つの<h1>を保ち、一度に1レベル下ります、そして数字をそれが持つ構造的事実として扱い、決してサイズダイアルとしてではありません。

Juno1つのメインと正しい見出し順序 ページはタイトルを1つ持つため、ページごとに1つの<h1>です。見出しレベルを一度に1つ下げます。<h2>その後<h3>で、<h5>へジャンプしません。ページのメインコンテンツは1つの<main>に入ります。見出しがサイズが間違っているように見えたら、それはCSSの仕事で、レベルを切り替える理由ではありません。
Juno1つのメインと正しい見出し順序 1つの<main>、1つの<h1>、そして1つ下がるレベル。見出しをレンダリングされるサイズではなく、アウトラインのそこに置くことで選択します。スタイルシートにサイズが属しているため。<main>はスキップリンクのターゲットでもあるため、単一の1つを保つことでそのショートカットが機能します。
Juno1つのメインと正しい見出し順序 セクションネストによって見出しの番号を付け直す古いアウトラインアルゴリズムは構築されず、削除されたため、見出し番号はアウトライン、完全に終了です。3つの<section>要素に埋もれた<h1>はどこでも依然として<h1>です。1つの<h1>、1つの<main>を保ち、一度に1レベル下ります。

コンテンツのグループ化と順序付け

関連するコンテンツはグループ化されているとより良く読まれます。このための2つの要素が存在します。<section>はページの主題別チャンクで、レシピの「材料」部分のように独自の見出しを持ちます。<article>は単体で立ち、それを持ち上げて取り出しても理にかなう部分です。単一のブログ投稿やカスタマーレビューのように。

html
<article>
  <h2>スロー・ライズ・フォカッチャ</h2>
  <p>ほぼこねる必要がないローフ。</p>
</article>

グループ化と同じくらい順序が重要です。ページは上から下へと読まれるため、最も重要なコンテンツを上の方に置き、残りを読者が希望する順序に配列します。レシピはステップの前に何が必要なかをリストしています。それはあなたがそれを続ける順序だからです。

<section>を1つの見出しの下に属する主題別グループ化に使用し、<article>をブログ投稿、製品カード、フォーラムの返信のように単独で配信できる自己完結型ユニットに使用します。両方とも見出しを持つべきで、アウトラインに表示されるようにします。グループ化するのは仕事の半分だけで、グループに名前がない場合です。

要素を書き込む順序は**ソース順序**で、最初に見えるよりも大きな重みを持ちます。ソース順序は読む順序であり、タブ順序です。読む順序はスクリーンリーダーが話すものであり、CSSなしでページが表示するものです。タブ順序は、Tabキーを押してリンクとフォームコントロールを通るキーボードの移動順序です。両方とも既定でソースをフォローします。

html
<main>
  <article>
    <h2>スロー・ライズ・フォカッチャ</h2>
    <h2>...</h2>
  </article>
</main>

CSSはフレックスボックスまたはグリッドを使用して視覚的に物を周りに移動できますが、ソースは変わりません。だからマークアップを実際に読む順序に書き、そこからスタイルを設定します。CSSで並び替えて、表示される順序とタブ順序が一致せず、キーボードで操作する誰にとっても混乱します。

<section><article>はコンテンツをグループ化しますが、どちらも見出しレベルを生成しません。これはアウトラインアルゴリズムのポイントが具体化したものです。<section>はアウトラインにランクを追加しません。そして、その中に見出しのない<section>はスクリーンリーダーがナビゲートできることに何もありません。すべての部分化要素に見出しを与えるか、それは目が見える人がグループ化を見てもアウトラインはできません。

ほぼ誰もページを最初から最後まで読まないため、スキミングを念頭に置いて構造化します。目が見える人は見出しをスキミングします。スクリーンリーダーユーザーは見出しとランドマークのリストをステップスルーします。各画面フルの説明的な<h2>、そしてポイントがサポートの詳細の前に来るように前面に負荷をかけたコンテンツ。両方のスキミング人を提供します。見出しのない段落の壁はどちらかの種類のスキミングする人には読めません。

それから**キーボードナビゲーション**があります。マウスではなくTabキーでページを移動することで、ソース順序をフォローします。CSSのorderflex-direction: row-reverse、またはグリッド配置で視覚的にコンテンツの並び替えを行う瞬間、視覚順序とソース順序が分岐します。ブラウザはまだソースをフォローするため、ユーザーがタブを操作するとフォーカスは予測不可能な画面の周りをジャンプします。マウスユーザーが気づかない並び替えはキーボードユーザーの迷路になります。信頼できるルールは、ソース順序が意図された読む順序に一致することを作ること、そしてコンテンツがどのように読まれるべきかに影響しない変更のためだけにCSS並び替えを予約することです。

Junoコンテンツのグループ化と順序付け 見出しを持つ主題別部分の<section>、単一投稿のようにそれ自身で立つ部分の<article>で関連するコンテンツをグループ化します。それからその順序に気を付けます。ページは上から下へ読まれるため、重要な物は上の方に行きます。誰かが実際にそれを読みたいと思う順序でそれを書いてください。
Junoコンテンツのグループ化と順序付け<section>は見出しの下にコンテンツをグループ化し、<article>は単一投稿のような自己完結型ユニットをラップし、両方はアウトラインにランドしていることを望む見出しが必要です。大きなもの:ソース順序は読む順序とタブ順序です。マークアップをその読む順序で書き、それからCSSに見た目を処理させるか、キーボードパスが人々が見るものと一致しなくなります。
Junoコンテンツのグループ化と順序付け 見出しのない<section>はアウトラインに不可視であるため、すべてのグループ化は見出しを獲得するか、スクリーンリーダーが到達できることを何もグループ化しません。そしてソース順序はあなたのタブ順序です。CSSのorderやグリッドで並び替え、フォーカスは画面の周りにホップを開始します。ソース順序を読む順序に一致させ、読む方法を変えない場合のみCSSで並び替えます。

一般的な構造的な間違い

少数の構造的な間違いは何度も現れ、各々がクリーンな修正を持っています。

  • テキストを大きくするために見出しタグを使用する。 見出しがレンダリングされるサイズが必要だから<h3>に到達する、アウトラインを破ります。意味によってレベルを選択し、CSSでサイズを設定します。
  • 見出しレベルをスキップする。 <h2>から<h4>へジャンプしてアウトラインに穴を残します。一度に1レベル下ります。
  • 複数の<h1> ページは1つのタイトルを持ちます。余分な<h1>タグは目次を混乱させます。
  • 見出しがまったくない。 段落の長い実行に何もそれを破るものがないことは、スキャンするのが難しいです。見出しを追加して、読者が自分の道を見つけることができるようにします。

これらを修正して、ページはすべての誰にとって明確に読みます。眼でスキャンしているか、それを読み上げて聞いているか。アクセシビリティの章は、すべての訪問者のためにページを機能させるにあたりさらに進みます。

一般的な間違いはすべて、外観が構造の代わりにあることになります。

レンダリングされたサイズのために見出しレベルを選択することはアウトラインをスクランブルします。レベルは構造シグナルであり、CSSはすでにサイズを制御しているから。レベルをスキップ(<h2>の後に<h4>)は失われたセクションとして読む間隙を残します。複数の<h1>要素はページに複数のタイトルを与え、その目次をぼやけます。そして、見出しを偽造する、<p><div>を太字と大きくスタイリングすると、構造なしで外観を得ます。スクリーンリーダーが構築する見出しリストに現れません。

言及する価値がある2つ以上。空のランドマーク、その中に何もない<nav>のように、どこにも導かない領域を追加します。そしてコンテンツをCSSで並び替えるため、表示順序がもうソースと一致しないため、キーボードユーザーは彼らが見るものと一致しない順序でページを通ってタブします。HTMLに構造を保ち、CSSに外観を保ち、これらのほとんどは決して起こりません。

ほとんどの構造的な失敗は異なる衣装で同じエラーです。構造が必要だった場所に使用される外観。太字と大きくスタイリングされた<div>は、スタイリングはアウトラインに影響を与えないため、補助技術には何も与えません。実見出し要素だけが見出しリストに入ります。スキップされたレベルはスクリーンリーダーユーザーが消えたセクションとして読みます。複数の<h1>要素はページに複数のタイトルを与え、ほとんどのユーザーが頼る1つのショートカットを弱めます。

より微妙な失敗は順序とフォーカスに関するものです。視覚的とソース順序が分岐するようにCSSで並び替えることは、マウスユーザーに見えず、キーボードナビゲーションがソースをフォローするため、タブを通ってナビゲートする誰にとっても方向感覚を失わせます。正のtabindex値(タブ順序の早期にある要素を強制する属性)はシーケンス外のフォーカスをジャンプさせることでこれを悪くします。それらを回避し、ソース順序に仕事をさせてください。そして、アクセス可能なコンテンツがない、空の<nav>やヘッディングなしの<section>のランドマークは、どこにも導かない領域をマップに追加します。

すべての下のルール。HTMLに構造を構築し、CSSなしで正しくなるようにし、その上でスタイルを設定します。アウトラインが平坦でスタイル設定されていないマークアップとして保つページは、それが読まれるすべての方法のための保有しているものです。要素自身についてはさらに、セマンティックHTMLの章はこの1つに仲間です。

Juno一般的な構造的な間違い 大きな4つ。見出しを使用してテキストを大きくしないこと、レベルをスキップしないこと、2番目の<h1>を追加しないこと、そして長いページを見出しなしで残さないこと。それぞれがアウトラインを混乱させます。見出しレベルを意味によって選択し、CSSにサイズの処理を任せてください。
Juno一般的な構造的な間違い ほぼすべての構造的なバグは、外観が構造の代わりにあることです。サイズのために選ばれた見出し、見出しをふりをしている太字<div>、スキップされたレベル、2つの<h1>要素。スタイリングされた<div>はアウトラインに決して引っ越しないため、それは眼だけへの見出しです。HTMLに構造を、CSSにスタイリングを保ち、これらはほぼ消えます。
Juno一般的な構造的な間違い すべてのケースでの伝説はスタイリングが構造の仕事をしていることです。偽<div>見出し、スキップされたレベル、空のランドマーク、キーボードフォーカスをホップさせるCSS並び替え。正のtabindexもスキップしてください。それはフォーカスをシーケンス外にドラッグします。ゼロCSSで正しいマークアップを構築し、その上でスタイルを設定すると、誰かがそれに到達する方法に関係なく、正しく読みます。