Wir haben noch nicht alle älteren Artikel nachbearbeitet. Das bezieht sich in der Regel nur auf die Codebeispiele, die noch nicht optimal dargestellt werden.
HTML5 in der Praxis II
Im ersten Teil ging es um den grundsätzlichen Aufbau, im zweiten Teil kümmert sich Matthias Mees nun um die Inhalte. Es geht um den Aufbau einer Startseite, einer Artikel-Ansicht und eines Archivs. Noch einmal mit konkreten Beispielen zum Abschluss unserer HTML5-Reihe.
Das Grundgerüst aus Teil 1 muss nun noch "befüllt" werden. Es fehlen die eigentlichen Inhalte im Inhaltsbereich, welche nun anhand dreier typischer Beispielbereiche eines Blogs illustriert werden sollen. Die folgenden Codeschnipsel stehen also auf der jeweiligen Unterseite innerhalb des div
mit der ID #inhalt.
Die Startseite
Die "klassische" Startseite eines Blogs listet üblicherweise die letzten Artikel auf, das passende Tag hierfür ist article
.
<article>
<header>
<h1>Titel des ersten Artikels</h1>
</header>
<div class="entry-content">
<p>Dies ist ein erster Beispielartikel im
Beispielblog. Sein einziger und
ausschließlicher Sinn ist es, nun ja, ein
Beispielartikel zu sein. Mehr nicht. Keine wirklich
schwere Aufgabe.</p>
<p>In weiteren Artikeln wird vermutlich mehr passieren
als nur so ein bißchen Text wie hier. Wir
werden sehen.</p>
</div>
<footer>
<p>Geschrieben am
<time datetime="2009-08-24T16:02+01:00"
pubdate="pubdate">
24. August 2009 um 16:02
</time> Uhr von Autor.
<a href="#">Kategorie 1</a>
</p>
</footer>
</article>
Balsam für geschundene Semantikherzen von Webautoren: Im header
des article
findet sich der Artikel-Titel, jegliche Metainformation wandert in einen footer
und dazwischen steht der eigentliche Artikelinhalt, hier zum Zweck der einfacheren Gestaltung in ein div
verpackt.
Das Datum findet sich im neuen time
-Element, durch pubdate
wird gekennzeichnet, dass es das Veröffentlichungsdatum des Artikels ist.
Die Artikelseite
Typisch für die Einzelansicht eines Blogeintrages ist, dass das soeben erwähnte Markup der Eintrage um Kommentare zum Artikel sowie ein Kommentarformular ergänzt wird.
Auf den footer
im obigen Codebeispiel folgt dabei zunächst der Abschnitt, welcher die Kommentare zum Artikel darstellt:
<section id="kommentare">
<header>
<h1>Kommentare</h1>
</header>
<article>
<header>
<h2>Kommentator A schrieb am
<time datetime="2009-08-25T11:17+01:00"
pubdate="pubdate">
25.08. um 11:17</time>:</h2>
</header>
<div class="kommentar-content">
<p>Ein erster Testkommentar.</p>
</div>
</article>
<article>
<header>
<h2>Kommentator B schrieb am
<time datetime="2009-08-25T11:19+01:00"
pubdate="pubdate">
25.08. um 11:19</time>:</h2>
</header>
<div class="kommentar-content">
<p>Noch ein Testkommentar.</p>
</div>
</article>
</section>
Die Auszeichnung der Kommentare ist im Wesentlichen analog zur Auszeichnung der Blogeinträge — als verschachtelte article
-Elemente wird ihr Bezug zum Elternartikel, innerhalb dessen sie einen eigenen Abschnitt (section
) einnehmen, deutlich.
Grundsätzlich wäre natürlich durchaus denkbar, die Metadaten des Kommentars auch hier als footer
des Kindartikels auszuzeichnen.
Eine weitere section
enthält das Kommentarformular. Es unterscheidet sich lediglich durch Feinheiten von gängigen Kommentarformularen.
<section id="kommentar-schreiben">
<header>
<h1>Kommentar schreiben</h1>
</header>
<p><strong>Hinweis:</strong> Hellgrün hinterlegte
Formularfelder sind Pflichtfelder.</p>
<form id="kommentar-formular" action="#">
<fieldset id="benutzer-daten">
<legend>Benutzerdaten</legend>
<label for="benutzer-name">Name</label>
<input id="benutzer-name"
name="benutzer-name" required="required"
size="22">
<label for="benutzer-email">Email</label>
<input id="benutzer-email"
name="benutzer-email" type="email"
required="required" size="22">
<label for="benutzer-url">
<abbr title="Uniform Resource Locator"
lang="en">
URL</abbr>
</label>
<input id="benutzer-url"
name="benutzer-url" type="url"
size="22">
</fieldset>
<fieldset id="benutzer-text">
<legend>Ihre Nachricht</legend>
<label for="benutzer-kommentar">
Kommentar</label>
<textarea id="benutzer-kommentar"
name="benutzer-kommentar" required="required"
rows="10" cols="30">
</textarea>
</fieldset>
<input type="submit"
value="Senden">
</form>
</section>
</article>
Über das Attribut required
sowie die neuen input
-Typen email
und url
stellt HTML5 Mechanismen zur Überprüfung des Formulares bereit, welche bislang über das auswertende Skript gelöst werden mussten. Auch die Ausgestaltung entsprechender Felder wird möglich gemacht, etwa durch CSS-Anweisungen wie input[required]
.
Da gängige Screenreader das neue Attribut required
noch nicht unterstützen, ist es empfehlenswert, einstweilen zusätzlich das entsprechende WAI-ARIA-Attribut aria-required
zu verwenden.
Die Archivseite
Der Inhalt der Archivseite schließlich ist relativ unspektakulär ausgezeichnet — beide Archivvarianten als Kindsektionen samt eigenem header
.
<header>
<h1>Archiv</h1>
</header>
<section id="nach-jahren">
<header>
<h1>Nach Jahren</h1>
</header>
<ul>
<li><a href="#">2009</a></li>
<li><a href="#">2008</a></li>
<li><a href="#">2007</a></li>
<li><a href="#">2006</a></li>
</ul>
</section>
<section id="nach-kategorien">
<header>
<h1>Nach Kategorien</h1>
</header>
<ul>
<li><a href="#">Dieses</a></li>
<li><a href="#">Jenes</a></li>
<li><a href="#">Welches</a></li>
</ul>
</section>
Hier stellt sich natürlich die Frage: section
oder article
? Die Spezifikation merkt dazu an, dass article
vorzuziehen sei, wenn der Inhalt in einem Newsfeed angeboten werden soll. Das ist bei solchen Archivlisten sinnfrei, daher wurde hier section
gewählt. Damit steht nun der grundsätzliche HTML5-Code für das neue Blog. Fehlen nur noch die Inhalte.
Zum Abschluss
In den anderen Teilen unserer Serie ist zu lesen, dass HTML5 noch nicht fertig ist. Wir werden gespannt beobachten, wie sich die Spezifikationen noch entwickeln werden. Neues über HTML5 gibt es in den kommenden Monaten sicher immer öfter zu lesen, unter anderem auch hier bei den Webkrauts.
Kommentare
Thomas Meinike
am 06.10.2009 - 19:48
Wäre es nicht konsequenter, die mit Klassen versehenen div-Elemente auch jeweils als section auszuzeichnen und warum stehen die Navigationslisten nicht innerhalb von nav?
Matthias Mees
am 06.10.2009 - 21:35
Zur section: Die Spezifikation sagt (unter anderem), section sei kein Element, welches zur bequemeren Gestaltung etc. zu benutzen sei. Des weiteren nennt sie Kapitel eines längeren Textes als Anwendungsbeispiel. Ich persönlich finde, der durchschnittliche Weblogbeitrag rechtfertigt keine Aufteilung in Kapitel bzw. sections, aber das ist sicherlich diskussionfähig. Zudem sollte eine jede section eine eigene Überschrift haben -- auch das ist in vielen Blogeinträge nicht gegeben.
Wenn Du mit Navigationslisten hier die Archivlisten meinst -- auch darüber kann man sicherlich streiten (ebenso könnte man z.B. diskutieren, ob ol nicht sinnvoller als ul sei). Die Spezifikation betont, dass nav für "major", also "wichtigere" Navigationslinks zu verwenden sei. Ich finde (subjektiv), man verwässert den Nutzen des nav-Elementes, wenn man es hier für die Archivlisten ebenfalls nav verwendet, da man dann insgesamt vier nav-Elemente auf der Archivseite hätte.
Thomas Meinike
am 06.10.2009 - 22:04
@Matthias: Aha, auch bei HTML5 Doctor wurde hinsichtlich section vs. div für den Content-Bereich nachgebessert.
Ich wusste noch nicht, dass sich die Interpretation von nav in Richtung "major" geändert hat. Vor wenigen Tagen galt noch "The nav element represents a section of a document that links to other documents or parts within the document itself; that is, a section of navigation links." Also IMHO durchaus im Sinne mehrerer nav-Elemente.
André
am 12.10.2009 - 22:13
Für die Archiv-Navigation hätte ich "menu" statt "ul" verwendet. Noch treffender wäre m. E. – zumindest im Bereich "Nach Jahren" – das "dir"-Element gewesen, aber das gibt's ja nicht mehr. In die Links selbst könnte man sowas wie rel="archive" setzen.
Ich finde auch die "header"-Schachteln überflüssig, da sie lediglich eine weitere Schachtel ("h1") enthalten – oder anders gesagt: "header" enthält einen Header (siehe das "h" in "h1").
André
Klaus
am 13.10.2009 - 20:41
Ich bin gerade dabei mich mich einzuarbeiten und die Entwicklungen der 5er liest sich sehr spannend und vielversprechend. Werde auch die folgenden Teile sehr genau studieren und hoffe, dass ich bei Fragen einfach mal ne Mail schicken kann. Gruß,
Klaus
markus
am 15.10.2009 - 18:20
warum du das element um das element gespannt hast erschließt sich mir auch nicht ganz?
nur so am rande:
wer lässt sich so unsinnige notationen wie - pubdate="pubdate" - einfallen, warum nicht - pubdate="" ? aber naja damit muss man sich abfinden..
Die Kommentare sind geschlossen.