Definitionslisten, wie sie im Buche stehen
1. April 2008 – 19:01 Uhr
Neben den bekannteren Formen von Listen in HTML, der ungeordneten <ul> und der geordneten oder nummerierten Liste <ol>, gibt es einen weiteren vielseitigen Listentyp: die Definitionsliste <dl>. Die Definitionsliste stellt zwei Listenelemente zur Verfügung: den Definitionsausdruck (definition term) <dt> und die Definition (definition data) <dd>.
Das W3C hat sich bei der Elementdefinition nicht nur sehr flexibel gezeigt*, was die vielseitige Verwendbarkeit von Definitionslisten angeht, es hat uns Webdesignern darüber hinaus auch keine Beschränkung auferlegt, wie viele Definitionsausdrücke <dt> und Definitionen <dd> wir in einem Zusammenhang verwenden. Wir verfügen mit der Definitionsliste also über ein semantisch vielseitiges Element.
Ich verwende hier im Blögchen Definitionslisten z.B. für bibliografische Angaben, wenn ich Bücher bespreche, wobei ich den Titel im <dt>-Element und den Originaltitel (bei übersetzten Büchern) sowie die Verlagsangaben in je einem <dd>-Element darstelle.
Eine weitere Möglichkeit für Definitionslisten ist die strukturierte Darstellung wörtlicher Wechselrede, wie sie z.B. bei gedruckten Interviews genutzt wird. In diesem Fall wird für den Fragenden das <dt>-Element verwendet, für den Befragten das <dd>-Element.
Wie im Buch
Eher klassisch, im Wortsinne, kommt die Definitionsliste in Glossaren oder FAQ zum Einsatz. Glossare kennt der Leser (nicht nur) wissenschaftlicher Fachbücher als Auflistung der verwendeten Fachbegriffe nebst Erläuterung, meist in oppositioneller Spaltendarstellung:

Wie realisiere ich eine solche oppositionelle Darstellung standardkonform und browsersicher?
Ich baue zunächst die Struktur in (X)HTML auf:
<dl class="glossar"> <dt>background</dt> <dd>Angaben zum Hintergrund als Kurzform. Die Eigenschaft vereinigt die folgenden Eigenschaften</dd> <dt>background-attachment</dt> <dd>Fixieren der Hintergrundgrafik, fixed, inherit oder scroll</dd> ... ... </dl>
Die Platzierung der Definitionselemente in Opposition und deren wunschgemäße Positionierung muss ich nun mittels Stylesheet vornehmen. Ich entscheide mich aufgrund der einfachen Realisierbarkeit und der Flexibilität für eine fließende Positionierung (float). Tatsächlich ist diese Art der Positionierung nicht ganz trivial, denn ich muss, um das Ganze wirklich flexibel zu halten, für eine Reihe möglicher Fälle vorsorgen.
Das Stylesheet: Fälle und Fallstricke
Schritt 1: Die oppositionelle Position
Ich platziere Definitionsausdruck und Definition auf derselben Zeile, indem ich ersteren per float: left; aus dem Dokumentfluss herausnehme und links neben die Definition verschiebe – die ein absatzgenerierendes (block-level) Element darstellt:
.glossar dt {
float: left;
...
}
Schritt 2: Unterschiedliche Zeilenzahl und Laufweite
In Schritt 2 muss ich nun dem Umstand Rechnung tragen, dass die Definitionen in vielen Fällen mehrere Zeilen umfassen werden, der Definitionsausdruck jedoch immer nur eine Zeile benötigt. Gleichzeitig muss ich gewährleisten, dass ich jederzeit genügend Breite für die Definitionsausdrücke zur Verfügung habe.
Dabei will ich aber möglichst zuverlässig verhindern, dass bei unterschiedlicher Zeilenzahl die Definition sozusagen nach links ›zurückkehrt‹, indem sie den Definitionsausdruck wie ein Bild umfließt. Den Umfluss, wie ich ihn bei einem eingeschobenen Bild bevorzuge, und wie er bei Vergrößerung des Schriftgrades auftreten kann, möchte ich gerade vermeiden:

Da die Definition <dd> ein absatzgenerierendes Element ist, kann ich sie mit dem Setzen eines Außenabstandes (margin) vom linken Rand des umgebenden Elementes absetzen. Der ›fließende‹ Definitionsausdruck <dt> stört hierbei nicht. Ich wähle nun einen linken Rand (margin-left), der mir genügend Raum lässt, um auch längere Definitionsausdrücke fließend unterzubringen – und sorge damit gleichzeitig für eine visuell ansprechende Spaltendarstellung:
.glossar dd {
margin-left: 15em;
...
}

Das Konstrukt ist nun stabil, indem die entstandene rechte Spalte jederzeit als Block erhalten bleibt, unabhängig von der Zeilenzahl.
Flexibilität
Um sicherzustellen, dass die auf diese Weise stabil oppositionell gesetzte Definitionsliste auch bei veränderter Schriftgröße im Browser des Betrachters ihr Layout behält, muss ich den vorgenannten margin-Wert mit der Maßeinheit »em« setzen. Den erforderlichen Wert ermittle ich anhand des längsten in meiner Liste vorkommenden Definitionsausdrucks – ich muss hier einfach etwas pi mal Daumen schätzen und auch gerne noch etwas Luft lassen. Im Beispielfall setze ich einen linken Rand von 15em (margin-left: 15em;). Damit verändert bei Veränderung der Schriftgröße lediglich die rechte Spalte (die Definitionen) ihre Breite und in Folge gegebenenfalls die Zeilenzahl, sofern sie vom umgebenden Element (z.B. einer Containerspalte) am Ausbreiten gehindert wird.
Zukünftig, wenn die gängigen Webbrowser die automatische Silbentrennung beherrschen, werden wir Webdesigner es etwas einfacher haben, denn wir werden bei längeren oder Bindestrich-getrennten Begriffen mit kontrolliertem Umbruch arbeiten können.
Das in den Bildern gezeigte Beispiel einer oppositionellen Definitionsliste ist als Demo in HTML und CSS zu sehen und steht zu eigenen Tests, Versuchen und Verwendung natürlich frei zur Verfügung.
* »Definition lists, created using the DL element, generally consist of a series of term/definition pairs (although definition lists may have other applications).«

Dieser Inhalt (Textbeitrag und Fotos) ist unter einer Creative-Commons-Lizenz BY-NC-ND lizenziert.


Am 1. April 2008 um 19:59 Uhr
Hi Boris,
leider werden die Definitionslisten viel zu selten eingesetzt und fristen ein Mauerblümchen-dasein obwohl die sehr flexibel sind, weil man eben drei Ansatzpunkte für CSS-Regeln hat (dl, dt und dd).
Am 1. April 2008 um 20:15 Uhr
Schöner Beitrag. Werde in Zukunft auch mal schauen, wo ich sie sinnvoll einsetzen kann.
Am 1. April 2008 um 20:54 Uhr
Klasse Beitrag! Vielen Dank!
Am 1. April 2008 um 23:53 Uhr
Schön, dass mal jemand darauf hinweist, dass Definitionslisten nicht ausschließlich für Definitionen zu verwenden sind sondern unterschiedlichste Anwendungsmöglichkeiten haben.
Sollte es im zweiten CSS-Beispiel nicht “.glossar dd” heißen?
Am 2. April 2008 um 09:38 Uhr
Dein Beispiel im Text hat einen Fehler.
Dieser Teil
.glossar dt {float: left;
margin-left: 15em;
...
}
müsste so aussehen
.glossar dd {margin-left: 15em;
...
}
Also dd statt dt.
Wenn man dann noch statt margin-left padding-left nimmt, kann man den dd-Elementen auch noch einen Hintergrund oder einen Border (top oder bottom) zuweisen, um die einzelnen Blöcke optisch noch etwas zu trennen.
Ich nutze Definitionslisten gern in Formularen. Das Label kommt dann in das dt-Element und die Inputs in das dd-Element.
Am 2. April 2008 um 09:38 Uhr
Super Beitrag! Kann ich gut gebrauchen. Herzlichen Dank!
Am 2. April 2008 um 10:44 Uhr
Hallo,
kann es sein, dass der
margin-leftnicht für das<dt>-Element, sondern das<dd>-element gelten soll? so stehts zumindest im verlinkten.cssgruß
krono
Am 2. April 2008 um 10:46 Uhr
Sehr schön. Ich verwende Definitionslisten sehr gerne im Zusammenhang mit Bildern und Bildunterschriften. Mit ein bisschen Javascript kann man sogar aus einem Bild samt “alt”- oder “title”-Attribut eine Bildunterschrift erzeugen; das gesamte Konstrukt nutzt dann eben Definitionslisten.
Sehr gut geeignet für sämtliche CMS, bei denen sich die Art der Bild-Einbindung nicht von vornherein festlegen lässt.
Am 2. April 2008 um 11:09 Uhr
@alle, die es angemerkt haben:
Danke für den Hinweis auf die falsche Angabe der »margin: left«. Die muss natürlich im »dd« anstatt im »dt« stehen.
Das war wieder einmal so ein typischer copy&paste-Fehler. Wie ich das hasse. Ich habe hier leider normalerweise keinen Gegenleser mit genügend Kenntnis von HTML/CSS zur Hand.
Am 2. April 2008 um 12:34 Uhr
Ich nutze Definitionslisten gerne und für alle möglichen Anwendungsfälle. Daher kann ich auch dem Artikel, der im Adventskalender von 24ways erschien und diese auf reine Definitionsaufgaben beschränken will, mal gar nichts abgewinnen.
Am 2. April 2008 um 14:32 Uhr
Ich muss Florian beipflichten: Defintion-Lists lassen sich auch fein verwenden, um Bilder mit Bild-Unterschriften zu versehen. Oder spricht da etwas gegen?
Am 2. April 2008 um 18:46 Uhr
Hi Steffen,
nein, sollte eigentlich nichts dagegen sprechen. Das Content Management System TYPO3 zum Beispiel rendered Bilder und Bildunterschriften schon länger auf diese Art und Weise.
Am 2. April 2008 um 19:09 Uhr
Bei mehrzeiligen Definitionen macht der IE – wenn überrascht’s? – mit dem margin-left einen Fehler: es gibt eine leichte Abstufung.
Das kann mit folgender IE-spezifischer Korrektur gelöst werden:
dd {
text-indent: -3px;
}
Am 2. April 2008 um 20:51 Uhr
Ja, Definitionslisten sind etwas sehr brauchbares, auch für Navigationen funktionieren diese gut
Danke für die sehr hilfreiche Zusammenfassung.
Aus Dresden grüssend
Ralph
Am 5. April 2008 um 16:43 Uhr
Schöner Beitrag, da fallen mir gleich wieder ein paar laufende Projekte ein, bei denen eine Definitionliste die bessere Wahl ist.
Am 16. April 2008 um 14:46 Uhr
wenn der dt-tag ein img-tag einschließt, dann ist Pustekuchen mit sauberer Liste, da der nächste dt-tag kein Clearing betreibt.
Das ist echt Schade !
Am 21. Mai 2008 um 07:50 Uhr
Danke für das Auffrischen meines Gedächtnisses. Sinnvoll erscheinen mir Definitionslisten als Ersatz für einfache Tabellen – eben wegen der eifachen Semantik. Ein Screenreader (Stichwort Barrierefreiheit) wird mit Definitionslisten keine Probleme haben, oder?