HTMLでリストのキャプション、タイトル、またはラベルを意味的に提供する方法


83

HTMLリストにセマンティックキャプションを提供する適切な方法は何ですか?たとえば、次のリストには「タイトル」/「キャプション」があります。

フルーツ

  • 林檎
  • オレンジ

「果物」という単語は、リスト自体に意味的に関連付けられるように、どのように処理する必要がありますか?


HTML仕様では、キャプション、凡例、メモの属性またはタグを要素に追加する必要があります。画像、表、リスト、その他の非テキストオブジェクトには、出版物にタイトル、凡例、メモが添付されており、有用なマークアップ言語はその規則を反映する必要があります。

9
この質問が閉じられたことに驚いています。それは明らかにセマンティクスに関するものであり、美学やその他の主観的なトピックに関するものではありません。問題は、「この状況に適切なセマンティックマークアップはありますか?」ということです。そして、HTML5に関する限り、答えは「はい」です。
daiscog 2017

9
「意見に基づく」として閉じられているので、私の興味のある多くの質問を見るのにうんざりしています。それは逆効果です。私たちの意見を述べましょう。また、この質問は「ベストプラクティス」についてです。人々は、ベストプラクティス(ソースを使用)に関して有効な議論をすることができます。それらの議論が必要です。それはすべて「意見」についてではありません
Mladen Adamovic 2017年

2
私はこの質問を再度開くことに投票し、意見が少なくなるように編集しました。今では、タイトルを追加するための正しいセマンティックな方法を明確に求めています。
ラザーLjubenović

回答:


73

マークアップを効果的に構成するキャプションまたは見出し要素はありませんが、同じ効果があります。ここにいくつかの提案があります:

ネストされたリスト

<ul>
    <li>
        Fruit
        <ul>
            <li>Apple</li>
            <li>Pear</li>
            <li>Organge</li>
        </ul>
    </li>
</ul>

リストの前の見出し

<hX>Fruit</hX>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

定義リスト

<dl>
  <dt>Fruit</dt>
  <dd>Apple</dd>
  <dd>Pear</dd>
  <dd>Orange</dd>
</dl>

2
@alohciリストにさらに多くの定義がある場合、定義リストまたは順序付けされていないリストの何が問題になっていますか?
ahsteele 2009

2
@Alohci:詳しく説明してください。あなたのコメントに興味をそそられましたが、他のオプションが「意味的に有効」でない理由を説明していないので、現状ではまったく役に立ちません
Stijn de Witt

4
@ StijndeWitt-それはすべて本当です。それが問題ではないという理由だけで、このインスタンスでは間違ったセマンティクスです。これは、HTMLマークアップを正しく取得する際の問題であり、実際のコンテンツとそれが関係するコンテキストです。
Alohci 2014

2
@JeffereyCaveの<ul>子として(または他のブロックレベルの要素)を持つことは、子ノードとして「フレージングコンテンツ」のみを持つことができると述べているHTML仕様に<p>よれば無効です。<p>
daiscog 2016年

4
@ahsteele興味深い... MDNはそれを説明リストとしてリストしています...ああ!「HTML5以前は、定義リストとして知られていました。」 developer.mozilla.org/en-US/docs/Web/HTML/Element/dl。あなたのリンクはhtml4用でした。そして、そのリンクで、彼らはダイアログを表すdlの例を示し、各dtは話者をマークし、ddは彼らが言うことを持っています。ですから、それらが何と呼ばれていても、このように適切に使用できると確信しています。
RoboticRenaissance 2016

54

オプション1

HTML5にはfigureandfigcaption要素あります。これは非常にうまく機能します。

例:

<figure>
    <figcaption>Fruit</figcaption>
    <ul>
        <li>Apple</li>
        <li>Pear</li>
        <li>Orange</li>
    </ul>
</figure>

これらはCSSで簡単にスタイル設定できます。


オプション2

CSS3の:: before疑似要素を使用すると、優れた解決策になる可能性があります。

HTML:

<ul title="Fruit">
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

CSS:

ul[title]::before {
    content: attr(title);
    /* then add some nice styling as needed, eg: */
    display: block;
    font-weight: bold;
    padding: 4px;
}

もちろん、ul[title];とは異なるセレクターを使用できます。たとえば、「title-as-header」クラスを追加してul.title-as-header::before代わりに使用したり、必要なものを使用したりできます。

これには、リスト全体のツールチップが表示されるという副作用があります。このようなツールチップが必要ない場合は、代わりにデータ属性(、、<ul data-title="fruit">などul[data-title]::before { content: attr(data-title); })を使用できます。


あなたの答えはスペックが言っていることです。なぜそれがトップ投票のものではないのだろうか。
アフメド・マフムード

@AhmedMahmoudおそらく、一番上の答えはこれより7歳古いからでしょう!
daiscog

ああ、時が経ちます。日付に気づかなかった。
アフメド・マフムード

それは、figure画像とは異なるコンテンツで使用できるという意味ですか?
CodeGust

1
@CodeGust絶対に
daiscog

13

私の知る限り、現在のHTML仕様には、テーブルの場合のように、リストのキャプションを提供するための規定はありません。今のところ、クラス化された段落またはヘッダータグのいずれかを使用し続けます。

<h3>Fruit</h3>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

将来、HTML5が広く採用されるようになる<legend>と、<figure>タグとタグを使用して、これをもう少し意味的に実現できるようになります。

詳細については、W3Cメーリングリストのこの投稿を参照してください。


4

スクリーンリーダーがリストを関連する見出しに確実にaria-labelledby接続するには、次のidように見出しに接続して使用できます。

<h3 id="fruit-id">Fruit</h3>

<ul aria-labelledby="fruit-id">
  <li>Apple</li>
  <li>Pear</li>
  <li>Orange</li>
</ul>

前の回答で述べたように、見出しレベルがドキュメントの見出し順序に従っていることを確認してください。


1

テーブルのようなリストには、キャプションのようなタグはありません。だから私はそれに<Hx>(あなたの以前に使用したヘッダーに応じてx)を与えるだけです。


1

私はこれが古いことを知っていますが、将来の人々のために見つけた答えを追加したいと思いました:https//www.w3.org/MarkUp/html3/listheader.html

<lh>要素を使用します:

<ul>
  <lh>Types of fruit:</lh>
  <li>Apple</li>
  <li>Orange</li>
  <li>Grape</li>
</ul>

注:これはHTML 3.0のドラフトで言及されていましたが、HTML 3.2には含まれていなかったため、一部のブラウザーでは正しくレンダリングされる可能性がありますが、サポートされていません。
ネイサンチャンピオン

0

古いブラウザをサポートするソリューションを見つけようとしていたので、単純化しすぎたソリューションがあるかもしれません。テーブル表示スタイルとID /クラスの使用:

    <ul>
        <li id="listCaption">My List</li>
        <li>first item</li>
        <li>second item</li>
        <li>third item</li>
      </ul>

次にdisplay: table-row;、CSSの要素にスタイルを適用します。

    li#listCaption {
      display: table-row;
      font-size: larger;
      text-decoration: underline; }

説明リストを使用している場合、これははるかにうまく機能します。これは、同じ質問があったときに行っていたものです。その場合、div要素がdlリスト内でサポートされている<div>ため、HTMLおよびdisplay: table-caption;CSSで使用できます。

    <dl>
        <div id="caption">Table Caption</div>
        <dt>term</dt>
        <dd>definition</dd>
    </dl>

CSSでは、キャプションにさまざまなスタイルを適用できます。

    #caption {
        display: table-caption;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        background: transparent;
        caption-side: top;
        text-align: center; }

これはブロック要素として扱われ、テキストが垂直方向に配置table-captionul/olれるため、うまく機能しないことに注意してください。これはおそらく望ましくありません。

FirefoxとChromeの両方でこれをテストしました。


-2

<label/>ラベルをリスト要素に関連付けるためにいつでも使用できます。

<div>
    <label for="list-2">TEST</label>
    <ul id="list-1">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
    <label for="list-2">TEST</label>
    <ol id="list-2">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
</div>

4
これは無効です。HTML仕様という状態for属性がしなければならないのIDで標識可能な要素UL(執筆時点で)ではありません
daiscog
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.