意味的にリストに見出しを追加する方法


120

これはしばらくの間私を悩ませてきました、そして私はこれを適切に行う方法についてコンセンサスがあるかどうか疑問に思っています。HTMLリストを使用している場合、意味的にリストのヘッダーを含めるにはどうすればよいですか?

1つのオプションはこれです。

<h3>Fruits I Like:</h3>
<ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

しかし、意味的には、<h3>見出しは明示的に関連付けられていません<ul>

別のオプションはこれです:

<ul>
    <li><h3>Fruits I Like:</h3></li>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

しかし、見出しは実際にはリストアイテムの1つではないため、これは少し汚いようです。

このオプションはW3Cでは許可されていません。

<ul>
    <h3>Fruits I Like:</h3>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

よう<ul>さんは一つ以上含むことができます<li>s 'を

古い「リスト見出し」<lh>が最も理にかなっています

<ul>
    <lh>Fruits I Like:</lh>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

もちろん、それは正式にはHTMLの一部ではありません

<label>フォームと同じように使用するよう提案されていると聞きました:

<ul>
    <label>Fruits I Like:</label>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

しかし、これは少し奇妙で、とにかく検証されません。

リストヘッダーのスタイルを設定しようとすると、意味上の問題が簡単にわかります。この場合、<h3>タグを最初のタグ内に配置して、次の<li>ようなスタイルを設定する必要があります。

ul li:first-of-type {
    list-style: none;
    margin-left: -1em;
    /*some other header styles*/
}

ホラー!しかし、少なくともこの方法で<ul>ulタグをスタイリングすることで、見出し全体を制御できます。

これを行う正しい方法は何ですか?何か案は?


5
一部の人々はLHを使用していますが、実際には「実際の」HTMLタグを使用していないことに気付かず、ランダムなタグ名を作成しているだけです。ブラウザはそのようなタグをインライン要素として扱います。クラスとCSSをその上に置くことができるものもあります。
Glen Little


回答:


81

Felipe Alsacreationsがすでに述べたように、最初のオプションは問題ありません。

リストの下にあるものが見出しに属するものとして解釈されないようにしたい場合は、HTML5セクションコンテンツ要素がまさにそのためのものです。たとえば、次のようにできます

<h2>About Fruits</h2>
<section>
  <h3>Fruits I Like:</h3>
  <ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
  </ul>
</section>
<!-- anything here is part of the "About Fruits" section but does not 
     belong to the "Fruits I Like" section. -->

6
これは非常に理にかなっています。ありがとう。もちろん、HTML5を使用する場合は、これらのタグ内のトップレベルの見出しであるため、見出しは<h1>内にある必要があり<section>ます。
Tomas Mulder

6
<h1>確かに使用できます。でも<h3>大丈夫です。同じセクション内でより高いレベルの見出しを使用しない限り。
アロヒ、2012年

4
ブラウザ、スクリーンリーダー、およびその他の支援技術がHTML5で述べられているように正しく見出しの輪郭を示さない限り、h1..h6見出し(ここではh2およびh3)に固執する必要があります(coding.smashingmagazine.com/2011/08/16/を参照) … -「眉」を検索...)。数か月でどれだけ進化したかはわかりませんが、ブラウザのアクセシビリティAPIに関してはそれほど速くはないでしょう:/
FelipeAls 2012年

3
@davidjb-注意してください、それはまさにそのアドバイスが言うことではありません。これは、見出しレベルを提供するためにh1-h6を使用する必要があることを示しています。つまり、h1要素は、ページの最高レベルの見出しにのみ使用する必要があります。その最高レベルで見出しが1つしか存在できないとは言いません。ちなみに、ブラウザメーカーはアウトラインアルゴリズムを実装するつもりがないことを明言しており、状況がすぐに改善する見込みはほとんどない。
Alohci、2015

2
@ミシェル-それはあなたが視覚的に真ん中に意味するのか、意味的に真ん中に意味するのかによって異なります。視覚的に言えば、それはCSSが解決する問題であり、理想的にはマークアップを変更しないでしょう。意味的に言えば、どのようなリストを持っているのかわかりません。リストが1つではなく2つある可能性があります。
Alohci

53

この場合、定義リストを次のように使用します。

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>

5
上記の例のように、ラベルによって記述されたものの順序付けられていないリストの場合、これが最良の選択だと思います。セマンティクスは正確に一致します。ここに用語またはラベル(私が好きな果物)があり、ここにそのラベル(各果物)に対応するアイテムがあります。
Andrew

1
文字通り説明リストです。これが最高のソリューションです。
Derek━會功夫

display:list-item ... CSSで箇条書きを表示します。いい答えだ。
Mycah 2018年

9

あなたの最初のオプションは良いものです。それは最も問題の少ないものであり、他のオプションを使用できなかった正しい理由はすでにわかっています。

ちなみに、あなたの見出しは明示的にに関連付けられてい<ul>ます:リストの直前です!;)

編集:W3C HTML5および5.1の編集者の1人であるSteve Faulkner が、要素の定義スケッチしました。これは彼がHTML 5.2について議論する非公式の草案であり、それ以上のものはありません。lt


1
他のソリューションはまったく意味がありません

確かに、見出しをのように使用するようなもの<p>です。でも、テーブルの<th> `のfor属性のような、もう少し明示的なものが欲しい<label>' or the です。<lh>W3Cによって実際にサポートされている場合、このオプションが最も理にかなっていると思います。
Tomas Mulder

5

<div>はコンテンツ内の論理的な分割です。意味的には、見出しをリストとグループ化したい場合、これが最初の選択肢になります。

<div class="mydiv">
    <h3>The heading</h3>
    <ul>
       <li>item</li>
       <li>item</li>
       <li>item</li>
    </ul>
</div>

次に、次のCSSを使用してすべてを1つのユニットとしてスタイルすることができます

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...

少なくともスタイリングの目的では、良い選択です。
Tomas Mulder

意味論的に言えば、divは何も意味しません。なぜそれが(スタイリングの問題から)最初の選択肢になるのかわかりませんか?:x
ランボバフェット2018

@Rambobafet、素晴らしいネクロマンシー!その答えは、html5がセクションやその他の意味的に正しいオプションを導入する前の2012年からでした。一部のブラウザーは既にセクションをサポートしていましたが、サポートしていなかったブラウザーもあります。「div」はコンテンツ内の「論理的分割」の略であり、当時は、スタイル設定のためにコンテンツを分割するための最良の方法でした。
エバート

あなたは完全に正しい、「12」の部分を見なかった:)
Rambobafet


0

CSSで新しいクラスulheaderを定義してみてください。p.ulheader〜ulは、My Headerの直後に続くすべてを選択します

p.ulheader ~ ul {
   margin-top:0;
{
p.ulheader {
   margin-bottom;0;
}

-2

w3.orgによると(このリンクは期限切れのHTML 3.0ドラフト仕様にあることに注意してください):

順不同リストは、通常、箇条書きの項目リストです。HTML 3.0では、箇条書きをカスタマイズしたり、箇条書きなしで実行したり、複数列リストのリストアイテムを水平方向または垂直方向に折り返したりすることができます。

開始リストタグはでなければなりません<UL>。その後に、オプションのリストヘッダー(<LH>caption </LH>)が続き、最初のリストアイテム(<LI>)が続きます。例えば:

<UL>
  <LH>Table Fruit</LH>
  <LI>apples
  <LI>oranges
  <LI>bananas
</UL>

これは次のようにレンダリングできます。

テーブルフルーツ

  • りんご
  • オレンジ
  • バナナ

注:一部のレガシードキュメントでは、最初のLI要素の前にヘッダーまたはプレーンテキストが含まれている場合があります。HTML 3.0ユーザーエージェントの実装者は、不適切な形式のレガシードキュメントを処理するために、この可能性に対応することをお勧めします。


8
この「一致する」リンクが1995年のドラフト3.0仕様を指しており、ドラフトから外れることはなかったため、反対票を投じました。「lh」タグがドラフト以外のHTML仕様になることはありません。
Brooks Moses

HTML 3.0ほんとに古い文書です。
Derek款會功夫2016

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.