So fügen Sie einer Liste semantisch Überschriften hinzu

120

Das hat mich schon eine Weile beschäftigt, und ich frage mich, ob es einen Konsens darüber gibt, wie man das richtig macht. Wie füge ich bei Verwendung einer HTML-Liste semantisch einen Header für die Liste ein?

Eine Option ist folgende:

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

aber semantisch ist die <h3>Überschrift nicht explizit mit dem verknüpft<ul>

Eine andere Option ist folgende:

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

Dies scheint jedoch etwas schmutzig zu sein, da die Überschrift nicht wirklich zu den Listenelementen gehört.

Diese Option ist vom W3C nicht zulässig:

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

wie <ul>‚s nur eine oder mehr enthalten <li>s‘

Die alte "Listenüberschrift" <lh>ist am sinnvollsten

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

Aber natürlich ist es nicht offiziell Teil von HTML

Ich habe gehört, es schlägt vor, dass wir <label>wie ein Formular verwenden:

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

aber das ist ein wenig seltsam und wird sowieso nicht validieren.

Es ist leicht, die semantischen Probleme zu erkennen, wenn ich versuche, meine Listenkopfzeilen zu formatieren. Am Ende muss ich meine <h3>Tags in die erste einfügen <li>und sie für die Gestaltung mit etwas wie:

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

Horror! Aber zumindest auf diese Weise kann ich die gesamte <ul>Überschrift und alles steuern, indem ich das ulTag gestalte.

Was ist der richtige Weg, um dies zu tun? Irgendwelche Ideen?

Tomas Mulder
quelle
5
Einige Leute verwenden LH, stellen jedoch möglicherweise nicht fest, dass sie kein "echtes" HTML-Tag verwenden, sondern nur einen zufälligen Tag-Namen erstellen. Browser behandeln ein solches Tag als Inline-Element. Einige erlauben es Ihnen, eine Klasse und CSS darauf zu setzen.
Glen Little
1
Mögliches Duplikat von stackoverflow.com/questions/2417891/…
goodeye

Antworten:

81

Wie Felipe Alsacreations bereits sagte, ist die erste Option in Ordnung.

Wenn Sie sicherstellen möchten, dass nichts unter der Liste als zur Überschrift gehörend interpretiert wird, sind die Inhaltselemente des HTML5-Abschnitts genau dafür vorgesehen. So könnten Sie zum Beispiel tun

<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. -->
Alohci
quelle
6
Das macht sehr viel Sinn; Vielen Dank. Wenn wir HTML5 verwenden, sollte sich die Überschrift natürlich <h1>innerhalb der <section>Überschrift der obersten Ebene innerhalb dieser Tags befinden.
Tomas Mulder
6
Sie können <h1>dort sicher verwenden. Ist <h3>aber auch OK. Solange Sie keine Überschrift einer höheren Ebene innerhalb desselben Abschnitts verwenden.
Alohci
4
Wir sollten uns an die Überschriften h1..h6 (hier h2 und h3) halten, solange Browser, Bildschirmleser und andere unterstützende Technologien die in HTML5 angegebenen Überschriften nicht korrekt umreißen (siehe Kodierung.smashingmagazine.com/2011/08/16/). … - Suche nach "Brauen" ...). Ich bin nicht sicher, wie viel es in ein paar Monaten entwickelt hat, aber wahrscheinlich nicht so schnell in Bezug auf die Barrierefreiheit API von Browsern: /
FelipeAls
3
@davidjb - sei vorsichtig, das ist nicht genau das, was dieser Rat sagt. Es heißt, dass h1-h6 verwendet werden sollte, um Überschriftenebenen bereitzustellen. Das heißt, dass h1-Elemente nur für die höchste Überschriftenebene auf der Seite verwendet werden sollten. Es heißt nicht, dass es auf dieser höchsten Ebene nur eine Überschrift geben kann. Im Übrigen haben Browserhersteller deutlich gemacht, dass sie nicht beabsichtigen, den Gliederungsalgorithmus zu implementieren, sodass wenig Hoffnung besteht, dass sich die Situation schnell verbessert.
Alohci
2
@Michele - Das hängt davon ab, ob Sie visuell in der Mitte oder semantisch in der Mitte meinen. Wenn visuell, dann ist dies ein Problem für CSS und würde Ihr Markup im Idealfall nicht ändern. Wenn semantisch, dann bin ich mir nicht sicher, welche Art von Liste Sie haben. Möglicherweise haben Sie zwei Listen, nicht eine.
Alohci
53

In diesem Fall würde ich eine Definitionsliste wie folgt verwenden:

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>
Duncan Tidd
quelle
5
Für eine ungeordnete Liste von Dingen, die von einem Label beschrieben werden, wie im obigen Beispiel, halte ich dies für die beste Wahl. Die Semantik stimmt genau überein: Hier ist ein Begriff oder eine Bezeichnung (Früchte, die ich mag), und hier sind Elemente, die dieser Bezeichnung entsprechen (jede Frucht).
Andrew
1
Es ist buchstäblich eine Beschreibungsliste . Dies ist die beste Lösung imo.
Derek 9 會 功夫
display: list-item ... CSS zum Anzeigen der Aufzählungszeichen. Gute Antwort.
Mycah
9

Ihre erste Option ist die gute. Es ist das am wenigsten problematische und Sie haben bereits die richtigen Gründe gefunden, warum Sie die anderen Optionen nicht verwenden konnten.

Übrigens ist Ihre Überschrift explizit mit dem verknüpft <ul>: Es steht direkt vor der Liste! ;)

edit: Steve Faulkner, einer der Editoren von W3C HTML5 und 5.1, hat eine Definition eines ltElements entworfen . Das ist ein inoffizieller Entwurf , den er für HTML 5.2 diskutieren wird, noch nichts mehr.

FelipeAls
quelle
1
Ich stimme zu, die anderen Lösungen machen überhaupt keinen Sinn
Richtig, so ähnlich wie eine Überschrift über a <p>. Aber ich möchte immer noch etwas expliziteres, so etwas wie das forAttribut für ein <label>' or the <th> `für Tabellen. Ich denke, die <lh>Option wäre am sinnvollsten, wenn sie tatsächlich vom W3C unterstützt würde.
Tomas Mulder
5

Ein <div> ist eine logische Unterteilung in Ihrem Inhalt. Semantisch wäre dies meine erste Wahl, wenn ich die Überschrift mit der Liste gruppieren möchte:

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

Dann können Sie das folgende CSS verwenden, um alles zusammen als eine Einheit zu gestalten

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...
Evert
quelle
Gute Wahl, zumindest für Stylingzwecke.
Tomas Mulder
Semantisch sprechendes Div bedeutet nichts, ich verstehe nicht, warum es Ihre erste Wahl wäre (aus Styling-Gründen)? : x
Rambobafet
@ Rambafafet, tolle Nekromantie! Diese Antwort stammte aus dem Jahr 2012, bevor HTML5 Abschnitte und andere semantisch korrektere Optionen einführte. Einige Browser unterstützten den Abschnitt bereits, andere jedoch nicht. "div" ist die Abkürzung für "logische Aufteilung" in Ihren Inhalten. Zu dieser Zeit war dies der beste Weg, um Ihre Inhalte für das Styling aufzuteilen.
Evert
Sie haben vollkommen recht, haben den Teil "'12" nicht gesehen :)
Rambobafet
0

Versuchen Sie, eine neue Klasse, ulheader, in CSS zu definieren. p.ulheader ~ ul wählt alles aus, was unmittelbar auf My Header folgt

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

Laut w3.org (beachten Sie, dass dieser Link im längst abgelaufenen Entwurf der HTML 3.0-Spezifikation enthalten ist ):

Eine ungeordnete Liste ist normalerweise eine Liste mit Elementen mit Aufzählungszeichen. Mit HTML 3.0 können Sie die Aufzählungszeichen anpassen, auf Aufzählungszeichen verzichten und Listenelemente für mehrspaltige Listen horizontal oder vertikal umbrechen.

Das Eröffnungslisten-Tag muss sein <UL>. Es folgt ein optionaler Listenkopf ( <LH>Beschriftung </LH>) und dann das erste Listenelement ( <LI>). Beispielsweise:

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

was gerendert werden könnte als:

Tafelobst

  • Äpfel
  • Orangen
  • Bananen

Hinweis: Einige ältere Dokumente enthalten möglicherweise Überschriften oder einfachen Text vor dem ersten LI-Element. Implementierern von HTML 3.0-Benutzeragenten wird empfohlen, diese Möglichkeit zu berücksichtigen, um schlecht geformte Legacy-Dokumente zu verarbeiten.

Jfields
quelle
8
Downvoting, da dieser "nach" -Link auf den Entwurf der 3.0-Spezifikation von 1995 verweist, der es nie aus dem Entwurf geschafft hat. Das "lh" -Tag hat es nie in eine HTML-Spezifikation ohne Entwurf geschafft.
Brooks Moses
HTML 3.0Whoa das ist ein wirklich altes Dokument.
Derek 9 會 功夫