<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Webkrauts &#187; HTML5-Einführung</title>
	<atom:link href="http://www.webkrauts.de/category/html5-einfuehrung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webkrauts.de</link>
	<description>Für mehr Qualität im Web</description>
	<lastBuildDate>Wed, 18 Jan 2012 19:04:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>HTML5 in der Praxis II</title>
		<link>http://www.webkrauts.de/2009/10/06/html5-in-der-praxis-2/</link>
		<comments>http://www.webkrauts.de/2009/10/06/html5-in-der-praxis-2/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 17:05:17 +0000</pubDate>
		<dc:creator>Matthias Mees</dc:creator>
				<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=634</guid>
		<description><![CDATA[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.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />Das Grundgerüst aus <a href="http://www.webkrauts.de/2009/10/05/html5-in-der-praxis-1">Teil 1</a> muss nun noch &#034;befüllt&#034; 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 <code>div</code> mit der ID #inhalt.</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/screenshot.png" width="450" height="250" alt="Screenshot des Beispielblogs zum Artikel" title="Beispielprojekt HTML5-Blog: Beispiel 1 &raquo; Webkrauts" /></p>
<h4>Die Startseite</h4>
<p>Die &#034;klassische&#034; Startseite eines Blogs listet üblicherweise die letzten Artikel auf, das passende Tag hierfür ist <code>article</code>.</p>
<pre><code>    &#60;article&#62;
      &#60;header&#62;
        &#60;h1&#62;Titel des ersten Artikels&#60;/h1&#62;
      &#60;/header&#62;
      &#60;div class=&#34;entry-content&#34;&#62;
        &#60;p&#62;Dies ist ein erster Beispielartikel im
           Beispielblog. Sein einziger und
           ausschlie&#38;szlig;licher Sinn ist es, nun ja, ein
           Beispielartikel zu sein. Mehr nicht. Keine wirklich
           schwere Aufgabe.&#60;/p&#62;
        &#60;p&#62;In weiteren Artikeln wird vermutlich mehr passieren
           als nur so ein bi&#38;szlig;chen Text wie hier. Wir
           werden sehen.&#60;/p&#62;
      &#60;/div&#62;
      &#60;footer&#62;
        &#60;p&#62;Geschrieben am
          &#60;time datetime=&#34;2009-08-24T16:02+01:00&#34;
            pubdate=&quot;pubdate&quot;&#62;
            24. August 2009 um 16:02
          &#60;/time&#62; Uhr von Autor.
          &#60;a href=&#34;#&#34;&#62;Kategorie 1&#60;/a&#62;
        &#60;/p&#62;
      &#60;/footer&#62;
    &#60;/article&#62;
</code></pre>
<p>Balsam für geschundene Semantikherzen von Webautoren: Im <code>header</code> des <code>article</code> findet sich der Artikel-Titel, jegliche Metainformation wandert in einen <code>footer</code> und dazwischen steht der eigentliche Artikelinhalt, hier zum Zweck der einfacheren Gestaltung in ein <code>div</code> verpackt.</p>
<p>Das Datum findet sich im neuen <code>time</code>-Element, durch <code>pubdate</code> wird gekennzeichnet, dass es das Veröffentlichungsdatum des Artikels ist.</p>
<h4>Die Artikelseite</h4>
<p>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.</p>
<p>Auf den <code>footer</code> im obigen Codebeispiel folgt dabei zunächst der Abschnitt, welcher die Kommentare zum Artikel darstellt:</p>
<pre><code>      &#60;section id=&#34;kommentare&#34;&#62;
        &#60;header&#62;
          &#60;h1&#62;Kommentare&#60;/h1&#62;
        &#60;/header&#62;
        &#60;article&#62;
          &#60;header&#62;
            &#60;h2&#62;Kommentator A schrieb am
              &#60;time datetime=&#34;2009-08-25T11:17+01:00&#34;
                pubdate=&#34;pubdate&#34;&#62;
                25.08. um 11:17&#60;/time&#62;:&#60;/h2&#62;
          &#60;/header&#62;
          &#60;div class=&#34;kommentar-content&#34;&#62;
            &#60;p&#62;Ein erster Testkommentar.&#60;/p&#62;
          &#60;/div&#62;
        &#60;/article&#62;
        &#60;article&#62;
          &#60;header&#62;
            &#60;h2&#62;Kommentator B schrieb am
              &#60;time datetime=&#34;2009-08-25T11:19+01:00&#34;
                pubdate=&#34;pubdate&#34;&#62;
                25.08. um 11:19&#60;/time&#62;:&#60;/h2&#62;
          &#60;/header&#62;
          &#60;div class=&#34;kommentar-content&#34;&#62;
            &#60;p&#62;Noch ein Testkommentar.&#60;/p&#62;
          &#60;/div&#62;
        &#60;/article&#62;
      &#60;/section&#62;
</code></pre>
<p>Die Auszeichnung der Kommentare ist im Wesentlichen analog zur Auszeichnung der Blogeinträge &#8212; als verschachtelte <code>article</code>-Elemente wird ihr Bezug zum Elternartikel, innerhalb dessen sie einen eigenen Abschnitt (<code>section</code>) einnehmen, deutlich.</p>
<p>Grundsätzlich wäre natürlich durchaus denkbar, die Metadaten des Kommentars auch hier als <code>footer</code> des Kindartikels auszuzeichnen.</p>
<p>Eine weitere <code>section</code> enthält das Kommentarformular. Es unterscheidet sich lediglich durch Feinheiten von gängigen Kommentarformularen. </p>
<pre><code>      &#60;section id=&#34;kommentar-schreiben&#34;&#62;
        &#60;header&#62;
          &#60;h1&#62;Kommentar schreiben&#60;/h1&#62;
        &#60;/header&#62;
        &#60;p&#62;&#60;strong&#62;Hinweis:&#60;/strong&#62; Hellgrün hinterlegte
          Formularfelder sind Pflichtfelder.&#60;/p&#62;
        &#60;form id=&#34;kommentar-formular&#34; action=&#34;#&#34;&#62;
          &#60;fieldset id=&#34;benutzer-daten&#34;&#62;
            &#60;legend&#62;Benutzerdaten&#60;/legend&#62;
            &#60;label for=&#34;benutzer-name&#34;&#62;Name&#60;/label&#62;
            &#60;input id=&#34;benutzer-name&#34;
              name=&#34;benutzer-name&#34; required=&#34;required&#34;
              size=&#34;22&#34;&#62;
            &#60;label for=&#34;benutzer-email&#34;&#62;Email&#60;/label&#62;
            &#60;input id=&#34;benutzer-email&#34;
              name=&#34;benutzer-email&#34; type=&#34;email&#34;
              required=&#34;required&#34; size=&#34;22&#34;&#62;
            &#60;label for=&#34;benutzer-url&#34;&#62;
              &#60;abbr title=&#34;Uniform Resource Locator&#34;
                lang=&#34;en&#34;&#62;
                URL&#60;/abbr&#62;
            &#60;/label&#62;
            &#60;input id=&#34;benutzer-url&#34;
              name=&#34;benutzer-url&#34; type=&#34;url&#34;
              size=&#34;22&#34;&#62;
          &#60;/fieldset&#62;
          &#60;fieldset id=&#34;benutzer-text&#34;&#62;
            &#60;legend&#62;Ihre Nachricht&#60;/legend&#62;
            &#60;label for=&#34;benutzer-kommentar&#34;&#62;
              Kommentar&#60;/label&#62;
            &#60;textarea id=&#34;benutzer-kommentar&#34;
              name=&#34;benutzer-kommentar&#34; required=&#34;required&#34;
              rows=&#34;10&#34; cols=&#34;30&#34;&#62;
            &#60;/textarea&#62;
          &#60;/fieldset&#62;
          &#60;input type=&#34;submit&#34;
            value=&#34;Senden&#34;&#62;
        &#60;/form&#62;
      &#60;/section&#62;
    &#60;/article&#62;
</code></pre>
<p>Über das Attribut <code>required</code> sowie die neuen <code>input</code>-Typen <code>email</code> und <code>url</code> 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 <code>input[required]</code>.</p>
<p>Da gängige Screenreader das neue Attribut <code>required</code> noch nicht unterstützen, ist es empfehlenswert, einstweilen zusätzlich das entsprechende <a href="http://www.zehe-edv.de/2008/02/29/einfaches-aria-tip-1-das-attribut-aria-required/">WAI-ARIA-Attribut <code>aria-required</code></a> zu verwenden.</p>
<h4>Die Archivseite</h4>
<p>Der Inhalt der Archivseite schließlich ist relativ unspektakulär ausgezeichnet &#8212; beide Archivvarianten als Kindsektionen samt eigenem <code>header</code>.</p>
<pre><code>      &#60;header&#62;
        &#60;h1&#62;Archiv&#60;/h1&#62;
      &#60;/header&#62;
      &#60;section id=&#34;nach-jahren&#34;&#62;
        &#60;header&#62;
          &#60;h1&#62;Nach Jahren&#60;/h1&#62;
        &#60;/header&#62;
        &#60;ul&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;2009&#60;/a&#62;&#60;/li&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;2008&#60;/a&#62;&#60;/li&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;2007&#60;/a&#62;&#60;/li&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;2006&#60;/a&#62;&#60;/li&#62;
        &#60;/ul&#62;
      &#60;/section&#62;
      &#60;section id=&#34;nach-kategorien&#34;&#62;
        &#60;header&#62;
          &#60;h1&#62;Nach Kategorien&#60;/h1&#62;
        &#60;/header&#62;
        &#60;ul&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Dieses&#60;/a&#62;&#60;/li&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Jenes&#60;/a&#62;&#60;/li&#62;
          &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Welches&#60;/a&#62;&#60;/li&#62;
        &#60;/ul&#62;
      &#60;/section&#62;
</code></pre>
<p>Hier stellt sich natürlich die Frage: <code>section</code> oder <code>article</code>? Die Spezifikation merkt dazu an, dass <code>article</code> vorzuziehen sei, wenn der Inhalt in einem Newsfeed angeboten werden soll. Das ist bei solchen Archivlisten sinnfrei, daher wurde hier <code>section</code> gewählt. Damit steht nun der grundsätzliche HTML5-Code für das neue Blog. Fehlen nur noch die Inhalte.</p>
<h4>Zum Abschluss</h4>
<p>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.</p>
<h4>Zum Autor:</h4>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/matthias-mees.jpg" alt="" width="60" height="60" class="bild-links" />Matthias Mees lebt in Eutin in Schleswig-Holstein – unter anderem auch davon, <a href="http://netzgestaltung.net">Webseiten zu gestalten</a>. Er fühlt sich im Texteditor deutlich wohler als im Grafikprogramm und ist auch, aber nicht nur deswegen, Linux-Enthusiast.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/10/06/html5-in-der-praxis-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>HTML5 in der Praxis I</title>
		<link>http://www.webkrauts.de/2009/10/05/html5-in-der-praxis-1/</link>
		<comments>http://www.webkrauts.de/2009/10/05/html5-in-der-praxis-1/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 12:05:57 +0000</pubDate>
		<dc:creator>Matthias Mees</dc:creator>
				<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=631</guid>
		<description><![CDATA[In der Theorie hören sich die neuen Elemente gut und nützlich an, in der der Praxis müssen wir Webworker uns erst an die neuen Strukturen gewöhnen. Welches Element ist an dieser oder jenen Stelle nun das Richtige? Am Beispiel eines neuen Blogs zeigt Matthias Mees, wie das Markup mit HTML5 geschrieben wird. ]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />Als abschließendes Beispielprojekt der HTML5-Reihe sollen Teile eines Blogs in HTML5 dienen. Die zentralen Elemente eines typischen Blogs lassen sich nahezu eins zu eins in die entsprechenden neu eingeführten HTML5-Elemente &#034;übersetzen&#034;, was allerdings <strong>nicht</strong> bedeutet, dass diese Elemente nur in Blogs verwendet werden dürfen.</p>
<p>So soll das <a href="http://webkrauts.de/beispiele/html5/blog/index.html">Beispielblog</a> aussehen:</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/screenshot.png" width="450" height="250" alt="Screenshot des Beispielblogs zum Artikel" title="Beispielprojekt HTML5-Blog: Beispiel 1 &raquo; Webkrauts" /></p>
<p>Der Beispielcode sowohl in diesem Artikel als auch im Beispielblog ist dabei bewußt auf das Wesentliche reduziert und lediglich sparsam mit <span class="caps">CSS</span> ausgestaltet. Auch auf &#034;verwendungsfähigen&#034; Code für ein Template für eines der gängigen Blogsysteme wurde verzichtet. Der Fokus soll auf der korrekten Wahl der HTML5-Elemente liegen.</p>
<p>Als Beispielseiten dienen die Übersichtsseite eines Blogs, eine Einzelansicht eines Artikels inklusive Kommentaren und Kommentarformular sowie eine (sehr einfach gehaltene) Archivseite.</p>
<h4>Das Grundgerüst</h4>
<p>Das Grundgerüst bildet den gemeinsamen Rahmen aller drei Beispielseiten. Gehen wir den Code schrittweise durch.</p>
<pre><code>&#60;!DOCTYPE html&#62;
&#60;html lang=&#34;de&#34;&#62;
&#60;head&#62;
  &#60;meta charset=&#34;utf-8&#34;&#62;
  &#60;title&#62;Beispielblog: HTML5 &#38;bull; Startseite&#60;/title&#62;
&#60;!--[if IE]&#62;
  &#60;script src=&#34;http://html5shiv.googlecode.com/
     svn/trunk/html5.js&#34; type=&#34;text/javascript&#34;&#62;
  &#60;/script&#62;
&#60;![endif]--&#62;
  &#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34;
     href=&#34;screen.css&#34; media=&#34;screen,projection&#34;&#62;
&#60;/head&#62;
</code></pre>
<p>Ein &#8212; stark vereinfachter &#8212; Kopfbereich mit <span class="caps">DOCTYPE</span>, Angabe der Sprache des Dokumentes sowie des verwendeten Zeichensatzes, Titel des Dokumentes und Einbindung eines Stylesheets.</p>
<p>Das über Conditional Comments nur für den Internet Explorer eingebundene Javascript ist das <a href="http://remysharp.com/2009/01/07/html5-enabling-script/">HTML5 enabling script</a> von Remy Sharp &#8212;  es sorgt dafür, dass auch der IE die neuen HTML5-Elemente erkennt.</p>
<pre><code>&#60;body&#62;
  &#60;header&#62;
    &#60;h1&#62;&#60;a href=&#34;index.html&#34;&#62;Beispielblog:
        &#60;abbr title=&#34;HyperText Markup Language&#34;&#62;HTML&#60;/abbr&#62;5
        &#60;/a&#62;&#60;/h1&#62;
    &#60;p&#62;Anhand eines Blogs den Einsatz von
       HTML5 demonstrieren&#60;/p&#62;
  &#60;/header&#62;
</code></pre>
<p>Auf das öffnende Tag des <code>body</code>-Elementes folgt mit <code>#kopfbereich</code> ein <code>header</code>-Element als Seitenkopf oder Banner, in welchem der Titel des Blogs als Überschrift erster Ordnung sowie eine Blogbeschreibung stehen.</p>
<pre><code>  &#60;div id=&#34;inhalt&#34;&#62;
  &#60;!-- Inhaltsbereich --&#62;
  &#60;/div&#62;
</code></pre>
<p>Dieser relativ unspektakuläre Teil bildet den Inhaltsbereich des Blogs, welcher im zweiten Teil dieses Artikel mit den eigentlichen Inhalten (abhängig von der betreffenden Seite des Blogs) befüllt werden wird. Es gibt derzeit kein semantisch passendes Element für den Hauptinhalt, also bedienen wir uns des bewährten <code>div</code>-Containers.</p>
<p>Die Spezifikation schlägt &#8212; derzeit &#8212; ausdrücklich vor, für Seitenleisten in Blogs das <code>aside</code>-Element als Container zu verwenden:</p>
<pre><code>&#60;aside id=&#34;seitenleiste&#34;&#62;
  &#60;nav&#62;
    &#60;h2&#62;Hauptnavigation&#60;/h2&#62;
    &#60;ul&#62;
      &#60;li&#62;&#60;a href=&#34;index.html&#34;&#62;Startseite&#60;/a&#62;&#60;/li&#62;
      &#60;li&#62;&#60;a href=&#34;einzel.html&#34;&#62;
          Einzelansicht eines Artikels&#60;/a&#62;&#60;/li&#62;
      &#60;li&#62;&#60;a href=&#34;archiv.html&#34;&#62;Archiv&#60;/a&#62;&#60;/li&#62;
    &#60;/ul&#62;
  &#60;/nav&#62;
</code></pre>
<p>Die Hauptnavigation wird als ungeordnete Liste ausgezeichnet, als Container-Element dient das neue <code>nav</code>-Element. Somit ist semantisch deutlich, dass es sich hier um die primäre Navigation des Blogs handelt.</p>
<p>Es folgt ein Suchformular.</p>
<pre><code>    &#60;form id=&#34;suchformular&#34;&#62;
      &#60;fieldset&#62;
        &#60;legend&#62;Suche&#60;/legend&#62;
        &#60;label for=&#34;suchbegriff&#34; class=&#34;invisible&#34;&#62;
          Suchbegriff(e) eingeben
        &#60;/label&#62;
        &#60;input name=&#34;suchbegriff&#34;
          id=&#34;suchbegriff&#34; type=&#34;search&#34;
          size=&#34;15&#34;&#62;
        &#60;input type=&#34;submit&#34; value=&#34;Suche&#34;&#62;
      &#60;/fieldset&#62;
    &#60;/form&#62;
</code></pre>
<p>Hier nutzen wir ein neuen <code>input</code>-Typ für die Suche. Im <code>form</code>-Element können <code>method=&#34;get&#34;</code> auslassen, da es automatisch eingesetzt wird, falls keine genauere Anweisung vorliegt.</p>
<p>Abschließend noch eine Liste der Kategorien als zusätzliche Navigationshilfe in der Seitenleiste &#8212; ebenfalls mit dem passenden Element <code>nav</code> ausgezeichnet.</p>
<pre><code>    &#60;nav&#62;
      &#60;h2&#62;Kategorien&#60;/h2&#62;
      &#60;ul&#62;
        &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Kategorie 1&#60;/a&#62;&#60;/li&#62;
        &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Kategorie 2&#60;/a&#62;&#60;/li&#62;
        &#60;li&#62;&#60;a href=&#34;#&#34;&#62;Kategorie 3&#60;/a&#62;&#60;/li&#62;
      &#60;/ul&#62;
    &#60;/nav&#62;
  &#60;/aside&#62;
</code></pre>
<p>Den Abschluss des Grundgerüstes bildet ein Seitenfuß, welcher mit dem neuen Element <code>footer</code> ausgezeichnet wird.</p>
<pre><code>  &#60;footer&#62;
    &lt;p&gt;&amp;copy; 2009 Autor &amp;bull; &lt;a href=&quot;#&quot;&gt;Impressum&lt;/a&gt;&lt;/p&gt;
  &#60;/footer&#62;
&#60;/body&#62;
&#60;/html&#62;
</code></pre>
<p>Im zweiten Teil wird dann der oben leer gelassene Inhaltsbereich abhängig von der jeweiligen Seite mit Inhalten befüllt.</p>
<h5>Zum Autor:</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/matthias-mees.jpg" alt="" width="60" height="60" class="bild-links" />Matthias Mees lebt in Eutin in Schleswig-Holstein – unter anderem auch davon, <a href="http://netzgestaltung.net">Webseiten zu gestalten</a>. Er fühlt sich im Texteditor deutlich wohler als im Grafikprogramm und ist auch, aber nicht nur deswegen, Linux-Enthusiast.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/10/05/html5-in-der-praxis-1/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Tipphilfen</title>
		<link>http://www.webkrauts.de/2009/10/01/tipphilfen/</link>
		<comments>http://www.webkrauts.de/2009/10/01/tipphilfen/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 12:00:54 +0000</pubDate>
		<dc:creator>Stefanie Rückert</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=607</guid>
		<description><![CDATA[Eingabefelder werden mit HTML5 den Anforderungen moderner Webseiten angepasst. Mit ihnen wird es möglich sein, zu überprüfen, ob Benutzer Daten, URLs oder E-Mail-Adressen richtig eingetippt haben. Stefanie Rückert führt die neuen input-Typen mit Opera vor; dem einzigen Browser, der bereits heute schon die meisten Typen unterstützt.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />In diesem Teil unserer HTML5-Reihe stellen wir die neuen <code><a title="Externer Link zur WHATWG Spezifikation des Elementes input" href="http://www.whatwg.org/specs/web-apps/current-work/#the-input-element">input</a></code>-Typen gemäß der der aktuellen HTML5-Spezifikation vor. Alle Typen funktionieren zur Zeit nur im neuesten Opera-Browser. Für alle anderen Browser gibt es eine automatische Fallback-Lösung; das Feld wird dabei wie ein bekanntes, einfaches Textfeld behandelt. Durch diese Lösung ist es möglich, die neuen <code>input</code>-Typen schon jetzt zu integrieren.</p>
<p>Die folgenden Codebeispiele gibt es gesammelt als <a href="/beispiele/html5/input/html5_input_code_beispiele.zip">zip-Datei</a>.</p>
<h4>Übersicht der neuen &lt;input&gt;-Typen</h4>
<p>Das <code>input</code>-Element ist ein Feld, in das der Nutzer einer Internetseite Daten eintragen kann. Das <code>type</code>-Attribut kontrolliert die Art der Dateneingabe und bedingt auch weitere mit diesem Typen verbundene Attribute. Die folgende Tabelle zeigt die neuen <code>input</code>-Typen gemäß des <a title="Externer Link zum Working Draft der WHATWG Spezifikation des Elements input" href="http://www.whatwg.org/specs/web-apps/current-work/#the-input-element">Working Draft der WHATWG Spezifikation</a>.</p>
<p>Viele der neuen <code>input</code>-Typen funktionieren bisher nur im Opera Browser Version 10: <code>url, email, datetime, date, month, week, time, datetime-local, number</code> und <code>range</code>. Die <code>input</code>-Typen <code>search</code> und <code>color</code> werden derzeit von keinem Browser unterstützt.</p>
<table class="tblattributes">
<thead>
<tr>
<th>Input-Typ
     </th>
<th>Ausdruck
     </th>
<th>Datentyp
     </th>
<th>Eingabetyp
   </th>
</tr>
</thead>
<tbody>
<tr class="blue">
<td> <dfn title="attr-input-type-search-keyword" id="attr-input-type-search-keyword"><code>search</code></dfn>
     </td>
<td> <a title="attr-input-type-search" href="http://www.whatwg.org/specs/web-apps/current-work/#text-state-and-search-state">Search</a>
     </td>
<td> Text ohne Zeilenumbruch
     </td>
<td> Suchfeld
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-url-keyword" id="attr-input-type-url-keyword"><code>url</code></dfn>
     </td>
<td> <a title="attr-input-type-url" href="http://www.whatwg.org/specs/web-apps/current-work/#url-state">URL</a>
     </td>
<td> Eine absolute URI
     </td>
<td> Textfeld
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-email-keyword" id="attr-input-type-email-keyword"><code>email</code></dfn>
     </td>
<td> <a title="attr-input-type-email" href="http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state">E-mail</a>
     </td>
<td> E-Mail-Adresse oder eine Liste von E-Mail-Adressen
     </td>
<td> Textfeld
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-datetime-keyword" id="attr-input-type-datetime-keyword"><code>datetime</code></dfn>
     </td>
<td> <a title="attr-input-type-datetime" href="http://www.whatwg.org/specs/web-apps/current-work/#date-and-time-state">Date and Time</a>
     </td>
<td> Ein Datum und eine Zeitangabe (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Bruchteil einer Sekunde) bei gesetzter UTC-Zeitzone
     </td>
<td> Datum- und Uhrzeit-Eingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-date-keyword" id="attr-input-type-date-keyword"><code>date</code></dfn>
     </td>
<td> <a title="attr-input-type-date" href="http://www.whatwg.org/specs/web-apps/current-work/#date-state">Date</a>
     </td>
<td> Datum, bestehend aus Jahres-, Monats- und Tagesangabe ohne Zeitzone
     </td>
<td> Eine Datumseingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-month-keyword" id="attr-input-type-month-keyword"><code>month</code></dfn>
     </td>
<td> <a title="attr-input-type-month" href="http://www.whatwg.org/specs/web-apps/current-work/#month-state">Month</a>
     </td>
<td> Datum, bestehend aus Jahres- und Monatsangabe ohne Zeitzone
     </td>
<td> Monatswert-Eingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-week-keyword" id="attr-input-type-week-keyword"><code>week</code></dfn>
     </td>
<td> <a title="attr-input-type-week" href="http://www.whatwg.org/specs/web-apps/current-work/#week-state">Week</a>
     </td>
<td> Ein Datum bestehend aus einer Woche-/Jahr-Eingabe &#8211; ohne Zeitzone
     </td>
<td> Wochenwert-Eingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-time-keyword" id="attr-input-type-time-keyword"><code>time</code></dfn>
     </td>
<td> <a title="attr-input-type-time" href="http://www.whatwg.org/specs/web-apps/current-work/#time-state">Time</a>
     </td>
<td> Zeitangabe (Stunde, Minute, Sekunde, Bruchteil einer Sekunde) ohne Zeitzone
     </td>
<td> Zeitwert-Eingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-datetime-local-keyword" id="attr-input-type-datetime-local-keyword"><code>datetime-local</code></dfn>
     </td>
<td> <a title="attr-input-type-datetime-local" href="http://www.whatwg.org/specs/web-apps/current-work/#local-date-and-time-state">Local Date and Time</a>
     </td>
<td> Datum und Zeiteingabe (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Bruchteil einer Sekunde) ohne Zeitzone
     </td>
<td> Datum- und Zeitwert-Eingabe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-number-keyword" id="attr-input-type-number-keyword"><code>number</code></dfn>
     </td>
<td> <a title="attr-input-type-number" href="http://www.whatwg.org/specs/web-apps/current-work/#number-state">Number</a>
     </td>
<td> Eine Zahl
     </td>
<td> Textfeld oder ein Art Drehscheibe
    </td>
</tr>
<tr class="grey">
<td> <dfn title="attr-input-type-range-keyword" id="attr-input-type-range-keyword"><code>range</code></dfn>
     </td>
<td> <a title="attr-input-type-range" href="http://www.whatwg.org/specs/web-apps/current-work/#range-state">Range</a>
     </td>
<td> Eine Zahl, wobei die exakte Zahl nicht wichtig ist
     </td>
<td> Ein Schieberegler oder ähnliches
    </td>
</tr>
<tr class="blue">
<td> <dfn title="attr-input-type-color-keyword" id="attr-input-type-color-keyword"><code>color</code></dfn>
     </td>
<td> <a title="attr-input-type-color" href="http://www.whatwg.org/specs/web-apps/current-work/#color-state">Color</a>
     </td>
<td> Eine sRGB Farbe mit 8-bit roten, grünen und blauen Komponenten
     </td>
<td> Eine Farbsteuerung
    </td>
</tr>
</tbody>
</table>
<h4>Übersicht der neuen Attribute</h4>
<p>Mit der Entwicklung von HTML5 wurden auch die Attribute aktuellen Anforderungen angepasst und neue Attribute geschaffen: <code>autocomplete, autofocus, form, inputmode, list, max, min, pattern, replace, required, step</code> und <code>template</code>.<br />
<br />Eine vollständige Liste aller Attribute wird bereitgestellt unter <a title="Externer Link zu der Übersicht des input Elements der W3Schools " href="http://www.w3schools.com/tags/html5_input.asp">w3schools.com</a>.</p>
<table class="tblattributes">
<tr>
<th>Attribut</th>
<th>Wertebereich</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>autocomplete</code></td>
<td>on|off</td>
<td>Dient der Autovervollständigung eines <code>input</code>-Feldes.</td>
</tr>
<tr>
<td><code>autofocus</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Definiert beim Laden der Internetseite das <code>input</code>-Feld als Ausgangspunkt.</p>
<div class="hint">
		<strong>Hinweis</strong>: Kann nicht mit <code>type=hidden</code> benutzt werden
	</div>
</td>
</tr>
<tr>
<td><code>form</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt ein oder mehrere Formulare fest, zu denen das <code>input</code>-Feld gehört.</td>
</tr>
<tr>
<td><code>inputmode</code></td>
<td>inputmode</td>
<td>Legt die Art der Eingabe fest.
	</td>
</tr>
<tr>
<td><code>list</code></td>
<td>ID einer Werteliste</td>
<td>Verweist auf ein <code>datalist</code>-Element. Wenn dieses vorhanden ist, kann eine DropDown-Liste zur Datenweitergabe für das <code>input</code>-Feld genutzt werden.</td>
</tr>
<tr>
<td><code>max</code></td>
<td>Zahlenwert</td>
<td>Legt den Höchstwert des <code>input</code>-Feldes fest.
	</td>
</tr>
<tr>
<td><code>min</code></td>
<td>Zahlenwert</td>
<td>Legt den Mindestwert des <code>input</code>-Feldes fest.</td>
</tr>
<tr>
<td><code>pattern</code></td>
<td></td>
<td>Definiert ein Muster von Zahlen oder Buchstaben, welches im <code>input</code>-Feld eingehalten werden soll.</td>
</tr>
<tr>
<td><code>replace</code></td>
<td>text</td>
<td>Legt fest, was mit dem <code>input</code>-Feld passieren soll, wenn das Formular abgeschickt wurde.</td>
</tr>
<tr>
<td><code>required</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob der Inhalt des <code>input</code>-Feldes ausgefüllt sein muss oder nicht, wenn das Formular abgeschickt wird.</p>
<div class="hint">
		<strong>Hinweis</strong>: Kann nicht mit <code>type:hidden, image, button, submit, reset</code> benutzt werden
	</div>
</td>
</tr>
<tr>
<td><code>step</code></td>
<td>Zahlenwert</td>
<td>Legt den Zählintervall fest.</td>
</tr>
<tr>
<td><code>template</code></td>
<td>template (URL/id)</td>
<td>Legt ein oder mehrere Templates fest. Das bedeutet, dass dieses Attribut eine Verbindung zu einem anderen Dokument oder einem anderen Teil des Dokumentes herstellt, welches von einem Element angesprochen werden sollte.</td>
</tr>
</table>
<p>Zwei dieser Attribute sind allen neuen <code>input</code>-Typen zugeordnet: <code>autocomplete</code> und <code>list</code>.</p>
<p>Ersteres, von Opera auch die <a title="Externer Link zu dem Artikel 'An HTML5-style 'Google Suggest'' von dev.opera" href="http://dev.opera.com/articles/view/an-html5-style-google-suggest/">»Google-Suggest-Funktion«</a> genannt, bietet die Möglichkeit der Autovervollständigung eines <code>input</code>-Feldes. Es ist per default aktiviert und lässt sich durch den Wert <code>off</code> deaktivieren. Das ist besonders beim <code>input type=&quot;search&quot;</code> interessant, da so im deaktivierten Zustand die Google-Suggest-Funktion umgangen werden kann. Das Attribut hilft im aktivierten Zustand aber auch bei der Vervollständigung der URL oder der E-Mail-Adresse.</p>
<p>Das <code>list</code>-Attribut steht im Zusammenhang mit einem DropDown-Menü, wie hier im Codebeispiel zu sehen und kann ebenso auf alle anderen <code>input</code>-Typen angewandt werden. So entstehen zum Beispiel Listen für Suchanfragen, URL-Listen, E-Mail-Listen oder auch diverse Listen für Zeitangaben.</p>
<pre><code>&lt;input list=&quot;input_types&quot; name=&quot;input_types&quot;&gt;
&lt;datalist id=&quot;input_types&quot;&gt;
  &lt;option value=&quot;search&quot;&gt;&lt;/option&gt;
  &lt;option value=&quot;url&quot;&gt;&lt;/option&gt;
  &lt;option value=&quot;email&quot;&gt;&lt;/option&gt;
&lt;/datalist&gt;</code></pre>
<h4>Der <code>input</code>-Typ <code>search</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="search"&gt;</code></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, maxlength, pattern, placeholder, readonly, required, size, selectedOption, select(), selectionStart, selectionEnd, setSelectionRange(), input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Da der Typ <code>search</code> noch in keinem Browser funktioniert, ist es noch nicht möglich Anwendungsbeispiele zu zeigen.</p>
<p>Sinn dieses Elements ist es jedoch, ein Suchfeld in einem Internetauftritt zu identifizieren und es so von einem normalen Textfeld zu unterscheiden. Vom Verhalten her gleicht der Typ <code>search</code> dem Typ <code>text</code>.</p>
<p>So könnte beispielsweise das Suchfeld mit dem Attribut <code>list</code> um eine Liste von häufigen Suchbegriffen erweitert oder durch das Attribut <code>pattern</code> einem Muster unterworfen werden, dem die Suchanfragen genügen sollten.</p>
<h4>Der <code>input</code>-Typ <code>url</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="url"&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_url.jpg" alt="Screenshot vom neuen Input Typ URL" title="html5_input_url" width="237" height="31" class="size-full wp-image-608" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, maxlength, pattern, placeholder, readonly, required, size, selectedOption, select(), selectionStart, selectionEnd, setSelectionRange(), input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Wird dem Typ <code>url</code> das <code>required</code>-Attribut hinzugefügt, überprüft der Browser automatisch die Semantik der eingegeben Internetadresse. Die Standardeinstellung erfordert ein http:// vor der eigentlichen Adresse. Jedes andere Format wird als Fehler ausgegeben.</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_url_fehlermeldung.gif" alt="Fehlermeldung eines Pflichtfelds" title="html5_input_url_fehlermeldung" width="230" height="76" class="size-full wp-image-610" /></p>
<p>Ebenso kann das Element mit dem <code>list</code>-Attribut durch eine Liste von vorgegeben Internetadressen erweitert werden. Diese werden angezeigt, sobald der User in das Feld hineinklickt.</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_url_liste.gif" alt="Erweiterung des URL Felds durch eine Liste" title="html5_input_url_liste" width="230" height="54" class="size-full wp-image-611" /></p>
<h4>Der <code>input</code>-Typ <code>email</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="email"&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_email.jpg" alt="Screenshot vom neuen Input Typ email" title="html5_input_email" width="209" height="33" class="size-full wp-image-612" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, maxlength, multiple, pattern, placeholder, readonly, required, size, selectedOption, select(), selectionStart, selectionEnd, setSelectionRange(), input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Durch Hinzufügen des Attibuts <code>required</code> wird das E-Mail-Feld zum Pflichtfeld und beim Abschicken des Formulars abgefragt. Ist es nicht ausgefüllt, erscheint eine Fehlermeldung:</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_email_fehlermeldung.gif" alt="Fehlermeldung eines Pflichtfelds" title="html5_input_email_fehlermeldung" width="200" height="61" class="size-full wp-image-613" /></p>
<p>Eine große Arbeitserleichterung ist meiner Meinung nach das Attribut <code>pattern</code>. Hiermit kann dem <code>input</code>-Element zusätzlich ein Muster zur Verfügung gestellt werden, welches abgefragt wird und so die Semantik der E-Mail-Adresse beeinflusst.</p>
<p>Hier das Codebeispiel inklusive des Screenshots mit der Fehlermeldung, die ausgelöst wird, wenn die Logik des Musters nicht eingehalten wird.</p>
<pre><code>&lt;input type="email" required="required"
  pattern="([\w]+)(([-\.][\w]+)?)
     *@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)
     |(([\w-]+\.)+))([a-zA-Z]{2,4}
     |[0-9]{1,3})(\]?)"
  name="email"&gt;</code></pre>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_email_pattern.gif" alt="Fehlermeldung bei Missachtung des vorgegebenen Patterns in einem E-Mail-Feld" title="html5_input_email_pattern" width="200" height="76" class="size-full wp-image-614" /></p>
<p>J. David Eisenberg nutzt das <code>pattern</code>-Attribut in dem Artikel <a href="http://www.alistapart.com/articles/get-ready-for-html-5/" title="Externer Link zum Artikel 'Get ready for HTML5' von a List apart">»Get ready for HTML5«</a> von A List Apart auch als Muster für ein Postleitzahlenfeld. Hierfür fügt er einfach einem normalen Textfeld das Attribut <code>pattern</code> hinzu und erweitert dieses noch durch ein Attribut <code>title</code>, das einen Hinweis auf die korrekte Schreibweise enthält. Das Hinzufügen des Attributs <code>title</code> ist allerdings nur bei einem normalen Textfeld möglich.</p>
<pre>
<code>&lt;p&gt;Enter a US or Canadian Postal Code:
&lt;input type="text" name="postCode"
required="required"
pattern="([0-9]{5}(-[0-9]{4})?)
  |([0-9][A-Z][0-9]\s+[A-Z][0-9][A-Z])"
title="US: 99999-1234; Canadian: 0A1&#160;B2C;" /&gt;
&lt;/p&gt; </code>
</pre>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_zip_code.jpg" alt="Fehlermeldung bei Missachtung des vorgegebenen Patterns in einem Textfeld" title="html5_input_zip_code" width="402" height="116" class="size-full wp-image-615" /></p>
<h4>Das Kalender-Widget</h4>
<p>Eine Kalenderfunktion auf der Internetseite ist eine sehr praktische Sache. Gleich fünf der neuen <code>input</code>-Typen warten mit diesem Feature auf. Schade ist nur, dass es sämtlichen Versuchen widersteht, sich grafisch anpassen zu lassen. Einzig elementare Dinge, wie die Schriftgröße und Farbe lassen sich ändern. Die Farbe allerdings auch nur im <code>input</code>-Feld direkt und nicht im Kalender-Widget selbst. Dort sind nur die Schaltflächen »Heute« und »Keins« betroffen.</p>
<p>Ob Designer sich mit diesen eingeschränkten Gestaltungsmöglichkeiten zufrieden geben werden ist fraglich. Vielleicht wird in der zukünftigen Entwicklung der <code>input</code>-Elemente noch die Möglichkeit berücksichtigt, die einzelnen Felder individuell gestalten zu können, aktuell ist es jedoch nicht so. Aus dem gestalterischen Blickwinkel stellt sich die Frage, ob die Typen <code>datetime</code>, <code>datetime-local</code>, <code>date</code>, <code>month</code> und <code>week</code> dann überhaupt angenommen werden.</p>
<p>Da die Entwicklung von HTML5 allerdings noch nicht abgeschlossen ist, besteht die Möglichkeit, dass die gestalterische Anpassung des Kalenders noch nachträglich hinzugefügt wird.</p>
<h4>Der <code>input</code>-Typ <code>datetime</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="datetime"&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_datetime_v1.jpg" alt="Screenshot vom neuen Input-Typ datetime" title="html5_input_datetime_v1" width="180" height="27" class="size-full wp-image-616" /><br /><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_datetime.jpg" alt="Screenshot vom neuen Input-Typ datetime" title="html5_input_datetime" width="182" height="202" class="size-full wp-image-617" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, readonly, required, step, valueAsDate, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>datetime</code> verfügt als einziges der neuen Zeit/Datum-Elemente über die Angabe einer Zeitzone. Diese bezieht das <code>input</code>-Element aus der Systemzeit. Die Möglichkeit, die aktuelle Zeit mitzugeben, funktioniert noch nicht.</p>
<h4>Der <code>input</code>-Typ <code>datetime-local</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="datetime-local"&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_datetime-local_v1.jpg" alt="Screenshot vom neuen Input-Typ datetime-local" title="html5_input_datetime-local_v1" width="150" height="27" class="size-full wp-image-619" /><br /><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_datetime-local.jpg" alt="Screenshot vom neuen Input-Typ datetime-local" title="html5_input_datetime-local" width="182" height="202" class="size-full wp-image-620" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, readonly, required, step, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>datetime-local</code> funktioniert analog zum Typ <code>datetime</code>, gibt aber nur die lokale Zeit aus &#8211; ohne die Nennung der Zeitzone. Es ist möglich, dass <code>datetime-local</code> im Laufe der Entwicklung von <code>HTML5</code> ein Teil von <code>datetime</code> wird und die Zeitzone als Attribut hinzugefügt werden kann, da sich die beiden Typen nur in der genannten Eigenschaft unterscheiden.</p>
<h4>Die <code>input</code>-Typen <code>date</code>, <code>month</code> und <code>week</code></h4>
<h5>Codebeispiele</h5>
<p><code>&lt;input type="date"&gt;</code><br /><code>&lt;input type="month"&gt;</code><br /><code>&lt;input type="week"&gt;</code></p>
<h5>Screenshots</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_date.jpg" alt="Screenshot vom neuen Input-Typ date" title="html5_input_date" width="74" height="20" class="size-full wp-image-621" /><br />Screenshot vom neuen Input-Typ date, month und week ohne Kalenderwidget
</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_date_v1.jpg" alt="Screenshot vom neuen Input-Typ date mit Kalenderwidget" title="html5_input_date_v1" width="166" height="189" class="size-full wp-image-622" /><br />Screenshot vom neuen Input-Typ date mit Kalenderwidget
</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_month_v1.jpg" alt="Screenshot vom neuen Input-Typ month" title="html5_input_month_v1" width="165" height="189" class="size-full wp-image-623" /><br />
Screenshot vom neuen Input-Typ month mit Kalenderwidget
</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_week_v1.jpg" alt="Screenshot vom neuen Input-Typ week" title="html5_input_week_v1" width="165" height="191" class="size-full wp-image-624" /><br />
Screenshot vom neuen Input-Typ week mit Kalenderwidget
</p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, readonly, required, step, valueAsDate, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>date</code> funktioniert analog zum Typ <code>datetime</code>, gibt aber anstelle eines Datums inklusive der Uhrzeit nur das Datum (Jahr-Monat-Tag) aus. Der Typ <code>month</code> funktioniert analog zum Typ <code>date</code>, ist aber auf den Monat und das Jahr beschränkt. Der Typ <code>week</code> schließlich funktioniert analog zum Typ <code>date</code>, gibt aber anstelle eines Datums die Kalenderwoche aus.</p>
<h4>Der <code>input</code>-Typ <code>time</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="time"&gt;</code></p>
<h5>Screenshots</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_time.jpg" alt="Screenshot vom neuen Input-Typ time" title="html5_input_time" width="55" height="22" class="size-full wp-image-625" /><br /><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_time_v1.jpg" alt="Screenshot vom neuen Input-Typ time mit step=0.01" title="html5_input_time_v1" width="105" height="22" class="size-full wp-image-626" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, readonly, required, step, valueAsDate, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>time</code> zeigt eine Uhrzeit an, die standardmäßig in Sekundenschritten hoch- oder runtergezählt wird. Mit dem Attribut <code>step</code> kann die Uhrzeit bis auf Millisekunden genau eingestellt werden und bietet so genügend Freiraum zur Modifizierung.</p>
<h4>Der <code>input</code>-Typ <code>number</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="number"&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_number.jpg" alt="Screenshot vom neuen Input-Typ number" title="html5_input_number" width="110" height="31" class="size-full wp-image-627" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, readonly, required, step, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>number</code> eignet sich für die Eingabe verschiedener Zahlenwerte. Durch das Attribut <code>step</code> kann das Zählintervall beeinflusst werden und durch die Attribute <code>min</code> und <code>max</code> kann der Bereich abgesteckt werden, in dem sich die ausgewählte Zahl befinden soll. </p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_number_v1.jpg" alt="Screenshot vom neuen Input-Typ number mit step=&#039;0.001&#039;" title="html5_input_number_v1" width="93" height="24" class="size-full wp-image-628" /><br />
Der Screenshot zeigt das <code>input</code>-Feld <code>number</code>, wenn das Attribut <code>step</code> den Wert 0.001 hat.<br />
Standardmäßig ist dem Attribut <code>step</code> der Wert 1 zugeordnet, sowie dem Attribut <code>min</code> 0 und dem Attribut <code>max</code> 100.
</p>
<h4>Der <code>input</code>-Typ <code>range</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="range" min="2000" max="2050" value="2009" onInput="year.value=value"&gt;<br />
&lt;output name="year"&gt;&lt;/output&gt;</code></p>
<h5>Screenshot</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/html5_input_range.jpg" alt="Screenshot vom neuen Input-Typ range" title="html5_input_range" width="201" height="33" class="size-full wp-image-629" /></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, max, min, step, valueAsNumber, selectedOption, stepDown, stepUp, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Der Typ <code>range</code> funktioniert analog zum Typ <code>number</code>, nur dass er zum einen weniger Attribute besitzt und zum anderen, wie im Screenshot zu sehen, eine andere grafische Ausgabe. Zudem kommt der Typ  mit dem neuen <code>output</code>-Element daher, das den durch den Schieberegler erzeugten Wert ausgibt.</p>
<p>Da dieser Typ auch in den Webforms2 von <a href="http://weston.ruter.net/about/" title="Externer Link zum Internetauftritt von Weston Ruter">Weston Ruter</a> nicht aufgegriffen wird (siehe unten) und auch das Element <code>output</code> dort keine Verwendung findet, kann man die Schiebereglerfunktion im Alltag noch nicht verwenden. Für die Zukunft bietet dieser Regler allerdings eine interessante grafische Variante zur Darstellung von Zahlenwerten. Da auch dieses Element noch nicht grafisch anpassbar ist, stellt sich allerdings auch hier die Frage, ob sich die Verwendung dieses Reglers durchsetzen wird.</p>
<h4>Der <code>input</code>-Typ <code>color</code></h4>
<h5>Codebeispiel</h5>
<p><code>&lt;input type="color"&gt;</code></p>
<h5>Attribute</h5>
<p><code>autocomplete, list, selectedOption, input event, change event</code></p>
<h5>Anwendungsbeispiele</h5>
<p>Da der Typ <code>color</code> noch in keinem Browser funktioniert, ist es noch nicht möglich, Anwendungsbeispiele zu zeigen. Gedacht ist dieser Typ als Farbauswahlfeld auf 8-bit-Basis. Das bedeutet, dass voreingestellte Hexadezimalwerte ausgewählt werden können, die einem bestimmten Farbwert entsprechen. Es ist immer automatisch ein Farbwert ausgewählt, denn dieses Feld darf per Definition niemals leer sein. Wird ein invalider Wert eingegeben, wird der Inhalt des Feldes automatisch auf <code>#000000</code> gesetzt.</p>
<h4>Und die anderen Browser?</h4>
<p>Da die neuen <code>input</code>-Typen bisher nur im Opera 10 funktionieren, stellt sich natürlich die berechtigte Frage, ob diese schon mit dem ein oder anderen Workaround in anderen Browsern genutzt werden können.</p>
<p><a href="http://weston.ruter.net/about/" title="Externer Link zum Internetauftritt von Weston Ruter">Weston Ruter</a> hat über Google Code die <a href="http://code.google.com/p/webforms2/" title="Externer Link zu Googles Webforms 2">Webforms2</a> zur Verfügung gestellt, welche es ermöglichen, die neuen Typen auch schon in folgenden Browsern zu nutzen:</p>
<ul>
<li>Mozilla Firefox 1.0.8 </li>
<li>Mozilla Firefox 1.5.0.9 </li>
<li>Mozilla Firefox 2 </li>
<li>Internet Explorer 6 </li>
<li>Internet Explorer 7 </li>
<li>Safari 2.0.4 </li>
<li>Safari 3 (Windows) </li>
</ul>
<p>Die oben genannten Browser wurden laut Weston Ruter getestet; ich kann hinzufügen, dass der Firefox 3.5 mit den Webforms2 kompatibel ist.</p>
<p>Obwohl diese Lösung natürlich unkompliziert und sehr vorteilhaft ist, ist sie dennoch bloß der Krückstock unter den Gehhilfen. Solange einem nichts besseres bekannt ist, ist es auch in Ordnung; hat der User aber den Vergleich im Opera 10 gesehen, ist der Unterschied offensichtlich. Es soll natürlich auch nur eine Übergangslösung sein, bis alle Browser die HTML5 Standards integriert haben. Dennoch gibt es genügend Kritikpunkte.</p>
<p>Zunächst einmal übernehmen die Webforms2 nicht die grafischen Unterscheidungen der <code>input</code>-Felder. Das bedeutet, dass jeder Typ wie ein normales Textfeld aussieht. Die einzelnen Widgets, zum Beispiel beim Typ <code>datetime</code> wurden auch noch nicht umgesetzt, was wiederum bedeutet, dass diese Felder wie ein normales Textfeld reagieren. Es gibt einen Workaround für den Typ <code>date</code>, der aber durch eine CSS-Datei erst gestylt werden muss, das heißt, dass das Webforms2-Standardmodell dem HTML5-Standardmodell nicht gerade ähnlich sieht. Hier ist noch viel Eigeninitiative gefragt. Ebenso wenig funktionieren die Typen <code>time</code>, <code>number</code> und <code>range</code>. Hierfür gibt es auch noch keine Javascript-Workarounds.</p>
<p>Die Fehlermeldungen sind standardmäßig in englischer Sprache. Sie können aber im Javascript in die gewünschte Sprache umgeschrieben werden. Javascript ist natürlich der nächste Punkt: Wer es ausgeschaltet hat, wird automatisch ausgeschlossen. Damit fallen die Webforms2 in einen experimentellen und nicht alltagstauglichen Bereich, der gegen eine offizielle Benutzung spricht.</p>
<p>Die Webforms2 unterstützen auch noch nicht alle neuen Attribute. Bisher integriert sind die Attribute <code>pattern</code>, <code>required</code>, <code>min</code> und <code>max</code>, <code>step</code> und das <code>autofocus</code>. Da das <code>list</code>-Attribut noch nicht unterstützt wird, funktioniert mein Beispiel dazu auch nur im Opera 10.</p>
<p>Das Einbinden der Webforms2 behindert die standardmäßige Interpretation des Opera 10 nicht, von daher kann dies bedenkenlos getan werden. Will der Webworker jedoch auf Nummer Sicher gehen und keinen Nutzer ausschließen, sollte er mit der Verwendung der neuen <code>input</code>-Typen besser bis zur Integration in allen Browser warten. Denn trotz aller schönen Neuerungen ist der Opera nur ein Nischenprodukt.</p>
<p>Diese Einschränkungen machen die neuen <code>input</code>-Typen und die Attribute zu Versuchsobjekten und verhindern eine weite Verbreitung und öffentliche Nutzung.</p>
<h4>Fazit:</h4>
<p>Die neuen <code>input</code>-Typen sind vielversprechend und kommen mit vielen neuen Features daher, die jeden Internetauftritt aufwerten können. Der Code ist schlank und durch die neuen Attribute können viele Javascript-Lösungen, etwa zur Pflichtfeldabfrage oder zur Syntax einer E-Mail-Adresse, eingespart werden.</p>
<p>Dennoch werden die neuen Typen wohl erst in ferner Zukunft vermehrt genutzt werden, denn der bisherige Workaround mit den Webforms2 ist alles andere als befriedigend. Hier bleibt einem nichts anderes übrig, als darauf zu warten, dass die <code>input</code>-Typen bald in allen gängigen Browsern integriert werden. Oder aber der ambitionierte Webworker schreibt sich auf Basis der Webforms2 einfach seine eigenen Workarounds.</p>
<p>Das kann jedoch nicht die Lösung sein und so wird es nun wohl zunächst nur zu einer Arbeitserleichterung durch die Attribute <code>required</code> und <code>pattern</code> kommen &#8211; und das auch nur durch ein Javascript-Workaround.</p>
<p>Ich persönlich bin gespannt, was die Zukunft in Sachen HTML5 noch bringen wird und bin mit meiner Spannung auch nicht allein. Sowohl in der neuen <a href="http://www.weave.de" title="Externer Link zur Zeitschrift Weave">Weave</a> als auch in dem Artikel von J. David Eisenberg auf <a href="http://www.alistapart.com/articles/get-ready-for-html-5/" title="Externer Link zum Artikel get ready for html 5">A List Apart</a> und auch noch in vielen anderen Diskussionen im World Wide Web, kann man lesen, dass Spannung in der Luft liegt.</p>
<blockquote><p>»Although some developers have <a href="http://blog.halindrome.com/2009/07/w3c-you-ignorant-slut.html" title="Externer Link zum Artikel W3C you ignorant slut">reservations</a> about the direction in which HTML5 is taking the web (and although I share these reservations), HTML5 has enough new and interesting features to be well worth exploring. So, start looking at other people’s markup, experiment on your own, and go wild with the new form validation and canvas features.«</p>
</blockquote>
<p>Und mit diesen Worten von J. David Eisenberg möchte ich auch schließen. Experimentiert selbst ein wenig mit den neuen <code>input</code>-Typen und bildet euch euer eigenes Urteil &ndash; ihr werdet es nicht bereuen.</p>
<h5>Zur Autorin:</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/10/stefanie_rueckert-60x60.jpg" alt="Autorin: Stefanie Rückert" title="stefanie_rueckert-60x60" width="60" height="60" class="size-full wp-image-630 bild-links" /><a href="http://www.hazelina.de" title="Externer Link zum Internetauftritt von Hazelina">Stefanie Rückert</a> macht sich mit ihrem Hang zur Usability auch gerne mal unbeliebt und engagiert sich, wann immer es geht, für Webstandards.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/10/01/tipphilfen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Malen nach Zahlen</title>
		<link>http://www.webkrauts.de/2009/09/29/malen-nach-zahlen/</link>
		<comments>http://www.webkrauts.de/2009/09/29/malen-nach-zahlen/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 14:14:12 +0000</pubDate>
		<dc:creator>Olaf Gleba</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[HTML5-Einführung]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=598</guid>
		<description><![CDATA[Mit dem neuen HTML5-Element &#60;canvas&#62; gesellt sich eine experimentelle Spielwiese zum Markup. Per JavaScript lassen sich Grafiken auf die Webseite zeichnen. Wie das geht und was es bringen kann, beschreibt Olaf Gleba.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />Das Element <code>canvas</code> ist sicherlich eines der am interessantesten neuen Elemente der Spezifikation und durch seine vielfältigen Anwendungsbereiche zugleich auch eines der komplexesten. Ehemals eingeführt von Apple und in Safari und MacOS X integriert, hat es schon bald in Gecko-basierten Browsern und dem aktuellen Google-Browser Chrome Einzug gehalten.</p>
<p>Das Element ermöglicht Zeichenoperationen, mit Hilfe derer wir (fast) beliebige geometrische Formen und Pfade zeichnen können. Dies ermöglicht beispielsweise die Erstellung von Charts und/oder Diagrammen, die durch dynamische Werteangaben beim Laden einer Seite unmittelbar erstellt werden. Zum anderen bietet das Element umfangreiche Möglichkeiten zur Komposition, Animation und Manipulation von Bilder und Grafiken und auch Filmen.</p>
<p>Sozusagen zum Leben erweckt wird das initial leere Element durch die DOM Methoden, die das Element in großer Anzahl bereitstellt. Diese sind über eine Script-Schnittstelle (Javascript) ansprechbar.</p>
<p>Die Komplexität der Anwendungsmöglichkeiten bedingt es dann auch, dass in diesem Artikel nur grundlegende Beispiele beschrieben werden und am Ende auf <a href="#links">lesens- und sehenswerte Seiten</a> verwiesen wird.</p>
<h4>Browser-Unterstützung</h4>
<p>Alle Browser mit mind. Gecko 1.8 Engine (Firefox ab 1.5), Safari ab 3.x, Opera ab 9.x und der aktuelle Google-Browser Chrome unterstützen das <code>canvas</code> Element. Der Internet Explorer interpretiert das Element noch nicht. Über eine <a title="Externer Link zur Google Code Projektseite ExplorerCanvas" href="http://code.google.com/p/explorercanvas/">Javascript Lösung</a> kann man dem IE hier Beine machen.</p>
<h4>Einbindung</h4>
<p>Quelltext: Einbindung des Element <code>canvas</code></p>
<pre><code>&lt;canvas id=&quot;sample&quot; width=&quot;290&quot; height=&quot;150&quot;&gt;
  Ihr Browser unterstützt das Element
    &lt;code&gt;canvas&lt;/code&gt; nicht.
&lt;/canvas&gt;
</code></pre>
<p>Das Element<a href="#canvasimplement"><sup>1</sup></a> hat lediglich zwei optionale Attribute (<code>width</code>, <code>height</code>). Werden diese nicht gesetzt, wird es mit einer Weite von 300 Pixel und einer Höhe von 150 Pixel initialisiert. Die Definition des <a title="Externer Link WHATWG zu globalen Attributen"  href="http://www.whatwg.org/specs/web-apps/current-work/#global-attributes">globalen Attributes</a> <code>id</code> ist diesem Zusammenhang sinnvoll, um das Element in einem Scriptkontext gezielt ansprechen zu können.</p>
<p>Das Element <code>canvas</code> kann über CSS gestylt werden. Die Deklarationen beziehen sich dabei alleine auf den Element-<span lang="en" xml:lang="en">Container</span>. Die innerhalb des Elementes ausgeführten Operationen bleiben hiervon unberührt. In seinem Standardzustand wird das Element transparent angezeigt.</p>
<p>Wie bei den Elementen <code>video</code> und <code>audio</code> wird ein Fallback unterstützt. Ist einem Browser das Element unbekannt, wird der innerhalb des Start- und End-Tag liegende Inhalt angezeigt. Unterstützt der Browser das Element, wird der alternative Inhalt ignoriert und die Operationen innerhalb des Elementes werden ausgeführt.</p>
<h4>Raster und Koordinatensystem</h4>
<p>Bevor wir anfangen, uns konkreten Beispielen zuzuwenden, ein paar Worte zum Raster, auf das sich sämtliche Koordinaten unserer späteren Anwendungen beziehen.</p>
<p>Bild: Grafische Darstellung des Rasters/Koordinatensystems</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/canvas-koordinaten.png" alt="Abbildung: Canvas-Koordinaten" class="alignnone size-full" />
</div>
<p>Ausgangspunkt der Positionierung aller Elementen ist immer die obere linke Ecke des Rasters (0,0). So beschreibt X immer den Abstand zum linken, Y den zum oberen Rand des Rasters. Da dies für einige Anwendungen nicht wirklich ausreichend ist, gehe ich zu einem <a href="#moveTo">späteren Zeitpunkt</a> auf die Möglichkeit ein, diese relative Fixierung zu umgehen.</p>
<h4>Formen und Pfade</h4>
<p>Das <code>canvas</code> Element stellt eine oder mehrere pixelbasierte Zeichenebenen bereit, die in einem drei- oder zweidimensionalen Kontext gerendert werden. Hiermit ist es unter anderen möglich, Tabellen und Diagramme dynamisiert zu zeichnen, aber auch einfache Animationen zu erstellen. Aufgrund einer bislang nicht eindeutigen Spezifikation der Schnittstelle für den 3D Kontext, konzentriere ich mich im folgenden auf die Möglichkeiten der zweidimensionalen Darstellung.</p>
<p>Quelltext: Initialisieren des Elementes <code>canvas</code> im Script-Kontext</p>
<pre><code>&lt;script&gt;
var canvas = document.getElementById('sample');
var ctx = canvas.getContext('2d');
}
&lt;/script&gt;
</code></pre>
<p>Um Operationen auszuführen, muss in einem ersten Schritt über die bereitgestellten DOM Methode <code>getContext()</code> des Elementes <code>canvas</code> der Darstellungskontext definiert werden. Die genannte DOM Methode benötigt als Paramenter den Typ des Darstellungkontextes. Hier setzen wir das Definitionskürzel für den zweidimensionalen Kontext ein.</p>
<h4>Rechtecke</h4>
<p><code>canvas</code> unterstützt &nbsp;&ndash; im Gegensatz zu <a title="Externer Link SVG Seite des W3C"  href="http://www.w3.org/Graphics/SVG/">SVG</a> &nbsp;&ndash; nur das <strong>Rechteck</strong> als unmittelbar zu zeichnende Form. Um daraus ableitende geometrische Formen zu ermöglichen wie Kreise, Dreiecke und komplexe Kombinationen aus beiden, müssen Pfade kombiniert werden. Hierzu weiter unten im Artikel mehr.</p>
<p>Rechtecke werden über folgende DOM Methoden des Elementes <code>canvas</code> erstellt:</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>fillRect(x,y,width,height)</code></td>
<td>Zeichnet ein Rechteck</td>
</tr>
<tr>
<td><code>clearRect(x,y,width,height)</code></td>
<td>Bezieht sich auf das unmittelbar zuvor definierte Rechteck und überlagert dieses transparent.</td>
</tr>
<tr>
<td><code>strokeRect(x,y,width,height)</code></td>
<td>Zeichnet ein Rechteck mit Kontur</td>
</tr>
</table>
<p>Quelltext Beispiel 1: Rechtecke zeichnen</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;script type="text/javascript"&gt;
function zeichne() {
  var canvas = document.getElementById('sample');
  if (canvas.getContext) {
  var ctx = canvas.getContext('2d');

    ctx.fillStyle = "rgba(30,144,255,0.5)";
    ctx.fillRect (10, 10, 120, 120);

    ctx.fillStyle = "rgba(30,144,255,0.7)";
    ctx.fillRect (70, 30, 120, 120);

    ctx.fillStyle = "#1E90FF";
    ctx.fillRect(230, 10, 120, 120);
    ctx.clearRect(250, 30, 80, 80);
    ctx.strokeRect(255, 35, 70, 70);
  }
}
&lt;/script&gt;
&lt;/head&gt;

&lt;body onload="zeichne();"&gt;

&lt;canvas id=&quot;sample&quot; width=&quot;460&quot; height=&quot;150&quot;&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;canvas&lt;/code&gt; nicht.
&lt;/canvas&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Beispiel 1: Rechtecke zeichnen</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/draw-rectangles.png" alt="Abbildung: Rechtecke zeichnen" class="alignnone size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/draw-rectangles.html.zip">Beispiel 1: &quot;Rechtecke zeichnen&quot; herunterladen</a></p>
</div>
<p>Für die Beispiele des Artikels nutzen wir im <code>head</code> einen <span lang="en" xml:lang="en">Script-Tag</span>. Dort legen wir eine Funktion <code>zeichne()</code> an und überprüfen als Erstes, ob das Element <code>canvas</code> dem Browser bekannt ist, in dem wir stellvertretend das Vorhandensein der Methode <code>getContext()</code> abfragen. Anschließend initialisieren wir das Element <code>canvas</code> mit dem zuvor erwähnten zweidimensionalen Kontext, um als nächstes die Anweisungen der Funktion zu schreiben. Um sie unmittelbar nach dem Laden der Seite auszuführen, nutzen wir das <code>onload</code> Event des Body-Tags. In den nachfolgenden Beispielen wird auf die wiederholte Listung dieses Grundaufbaus verzichtet.</p>
<p>Wie im Quelltext zu sehen, wird zusätzlich noch die Methode <code>fillStyle()</code> einsetzt. Hiermit wird die Füllfarbe des gezeichneten Objektes angegeben. Im Abschnitt <a href="#colors">Farben und Transparenzen</a> gehe ich näher auf Methoden ein, die sich mit der farblichen Gestaltung der Objekte befassen.</p>
<h4>Pfade</h4>
<p>Während die Methoden zur Erstellung von Rechtecken das gezeichnete Element ohne weitere, explizite Anweisungen zeichnen, ist es beim Zeichnen von Pfaden erforderlich, dem Element <code>canvas</code> deutlich zu machen, wo ein Pfad beginnt, wo er aufhört und in welcher Art und Weise er schließlich gezeichnet werden soll. Hierzu dienen folgende, parameterlose Funktionaufrufe:</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>beginPath()</code></td>
<td>Methode zum Beginnen eines neuen Pfades.</td>
</tr>
<tr>
<td><code>closePath()</code></td>
<td>Methode zum Schließen eines Pfades.</td>
</tr>
<tr>
<td><code>stroke()</code></td>
<td>Zeichnet den zuvor definierten Pfad unter Anwendung einer Kontur.</td>
</tr>
<tr>
<td><code>fill()</code></td>
<td>Zeichnet den zuvor definierten Pfad unter Anwendung einer vollflächigen Anzeige.</td>
</tr>
</table>
<p>Mit <code>beginPath()</code> wird ein neuer Pfad eingeleitet. Zu beachten ist hierbei, dass der Pfad zu dem Zeitpunkt noch nicht tatsächlich gezeichnet wird. Hierzu nutzt man im Anschluß die Methode <code>stroke()</code> oder/und <code>fill()</code>. Wird <code>fill()</code> eingesetzt, ist ein dezidiertes Schließen des Pfades über <code>closePath()</code> nicht erforderlich, da die Methode die Zeichenoperationen automatisch beendet.</p>
<p>Zeichnen wir als erstes Beispiel eine einfaches Dreieck.</p>
<p>Quelltext Beispiel 2: Pfad zeichnen (Dreieck)</p>
<pre><code>ctx.beginPath();
ctx.fillStyle = "rgb(30,144,255)";
ctx.moveTo(10,10);
ctx.lineTo(100,10);
ctx.lineTo(10,100);
ctx.fill();
</code></pre>
<p>Beispiel 2: Pfad zeichnen (Dreieck)</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/draw-triangle.png" alt="Abbildung: Pfad zeichnen (Dreieck)" class="alignnone size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/draw-triangle.html.zip">Beispiel 2: &quot;Pfad zeichnen (Dreieck)&quot;  herunterladen</a></p>
</div>
<p>Schauen wir uns das letzte Beispiel an, sehen wir, dass zwei noch unbekannte Methoden verwandt werden:</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>moveTo(x,y)</code></td>
<td>Ansatzpunkt auf dem Raster der Leinwand.</td>
</tr>
<tr>
<td><code>lineTo(x,y)</code></td>
<td>Methode zum zeichnen einer Linie. Die Parameter (x,y) bestimmen jeweils den Start- und Endpunkt der Linie.</td>
</tr>
</table>
<p id="moveTo">Mit <code>moveTo(x,y)</code> wird festgelegt, an welcher Koordinate (x,y) die nachfolgende Zeichenoperation begonnen werden soll. Der Startpunkt des aktuellen Pfades schließt automatisch an dem Endpunkt des vorherigen Pfades an. Gleichzeitig definiert der Endpunkt des aktuellen Pfades immer auch den Startpunkt eines nachfolgenden Pfades. Mit der Funktion <code>lineTo(x,y)</code> wird die eigentliche Linie gezeichnet.</p>
<p>Neben <strong>Linien</strong> gibt es dankenswerter Weise auch eine direkte Methode zur Definition von <strong>Kreisen</strong> (oder besser: gebogenen Linien), die mit <code>arc()</code> benannt ist.</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>arc(x,y,radius,startAngle, endAngle,anticlockwise)</code></td>
<td>Methode zum zeichnen eines Kreises oder einer gebogenen Linie.</td>
</tr>
</table>
<p>Parameter <code>x</code> und <code>y</code> beschreiben die Koordination des Kreises bezogen auf den Mittelpunkt des Kreis. Der <code>radius</code> bestimmt den Umfang des Kreises, <code>startAngle</code> und <code>endAngle</code> legen den Beginn und das Ende des Kreispfades anhand der X-Koordinate fest. Der boolsche Paramenter <code>anticlockwise</code> bestimmt, ob unser Kreis im oder gegen den Uhrzeigersinn gezeichnet wird.</p>
<p>Quelltext Beispiel 3: Kreis zeichnen</p>
<pre><code>ctx.beginPath();
ctx.fillStyle = "rgba(30,144,255,0.5)";
ctx.strokeStyle = "rgba(30,144,255,1)";
ctx.arc(70,80,65,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
ctx.stroke();
</code></pre>
<p>Beispiel 3: Kreis zeichnen</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/draw-circle.png" alt="Abbildung: Kreis zeichnen" class="alignnone size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/draw-circle.html.zip">Beispiel 3: &quot;Kreis zeichnen&quot;  herunterladen</a></p>
</div>
<p><strong>Hinweis</strong>: Durch die Parameterangabe <code>Math.PI*2</code> wird ein geschlossener Kreis erzeugt. Um  Teilkreise zu erstellen, kann dieser Parameter angepasst werden.</p>
<p>Auch <strong>Bezier-Kurven</strong> (<code>quadraticCurveTo()</code>, <code>bezierCurveTo()</code>) können über bereitgestellte Methoden gezeichnet werden. Deren detailierte Anwendung wird hier aber nicht beschrieben, da dieses den Rahmen des Artikels sprengen würde. Details zu Anwendung und Parameter findest du auf den am Ende des Artikels <a href="#links">gelisteten Seiten</a>.</p>
<p>Gleiches gilt für weitere, hier nicht erwähnte Methoden, die das Element <code>canvas</code> bereitstellt. Zu erwähnen sind hier besonders die Möglichkeit Verläufe zu definieren, Schatten zu erzeugen und Methoden um Objekte zu transformatieren und skalieren.</p>
<h4>Bilder und Grafiken</h4>
<p>Spannend ist auch die Fähigkeit des Elementes <code>canvas</code>, Bilder/Grafiken und Zeichenoperationen zu kombinieren und sie zu einer Ansicht zusammenzufügen. Methoden zum Schneiden und Skalieren eines Bildes oder einer Grafik werden ebenfalls bereitgestellt.</p>
<p>Um ein Bild oder eine Grafik innerhalb des <code>canvas</code> zu referenzieren, gibt es verschiedene Methoden. Eine davon ist die Erzeugung eines neues Bildes über das DOM Objekt <code>Image</code>.</p>
<p>Quelltext: Erstellen eines Bildes anhand des DOM Objekt <code>Image</code></p>
<pre><code>var img = new Image();
img.onload = function(){
  Hier definieren wir später die Funktionen/Methoden
}
img.src = 'koordinaten-hintergrund.png';
</code></pre>
<p>Da unsere Funktion nicht vor dem vollständigen Laden des neuen Bildes ausgeführt werden sollen, wird deren Ausführung an den <code>onload</code> Event Handler des Image Elementes gebunden. Die hier genutzte Grafik <code>koordinaten-hintergrund.png</code> ist in dem Fall unsere Bezugsdatei, über die wir unseren Pfad zeichen wollen. Zur Einbindung nutzen wir die Methode <code>drawImage()</code>.</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>drawImage(image,x,y)</code></td>
<td>Referenziert ein Bild oder eine Grafik.</td>
</tr>
</table>
<p>Während die Koordinaten <code>x</code> und <code>y</code> für die Positionierung auf der Leinwand zuständig sind, beinhaltet der Parameter <code>image</code> die Referenz unseres Bildes/unserer Grafik oder eines anderen <code>canvas</code> Objektes.</p>
<p>Zu Beispiel 4: Referenzierte Grafik</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/koordinaten-hintergrund.png" alt="Abbildung: Referenzierte Grafik als Hintergrund" class="size-full" />
</div>
<p>Quelltext Beispiel 4: Bild/Grafik und Pfad kombinieren</p>
<pre><code>function zeichne() {
  var canvas = document.getElementById('sample');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');
    var img = new Image();
    img.onload = function(){
      ctx.drawImage(img,0,0);
      ctx.beginPath();
      ctx.strokeStyle = "rgb(30,144,255)";
      ctx.moveTo(40,146);
      ctx.lineTo(100,96);
      ctx.lineTo(140,126);
      ctx.lineTo(170,62);
      ctx.lineTo(210,100);
      ctx.lineTo(240,32);
      ctx.stroke();
    }
    img.src = 'koordinaten-hintergrund.png';
  }
}
</code></pre>
<p>Beispiel 4: Bild/Grafik und Pfad kombinieren</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/draw-image-and-path.png" alt="Abbildung: Bild und Pfad kombinieren" class="size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/draw-image-and-path.html.zip">Beispiel 4: &quot;Bild/Grafik und Pfad kombinieren&quot;  herunterladen</a></p>
</div>
<h4 id="colors">Farben und Transparenzen</h4>
<p>In nahezu allen bisherigen Beispielen werden die Methoden <code>fillStyle()</code> oder/und <code>strokeStyle()</code> verwandt. Hiermit geben wir unseren Formen und Pfaden den farblichen Anstrich.</p>
<p>Verschiedene Notationen der Farben sind möglich, die auf der Spezifikation des <a title="Externer Link zur W3C Spezifikation des Farbmoduls" href="http://www.w3.org/TR/2003/CR-css3-color-20030514/#numerical">W3C Farbmoduls</a> basieren. Folgende Notationen sind in Ihrer Ausgabe identisch:</p>
<p>Quelltext: Werteangaben und Notationen für Farben</p>
<pre><code>ctx.fillStyle = "dodgerblue";
ctx.fillStyle = "#1E90FF";
ctx.fillStyle = "rgb(30,144,255)";
ctx.fillStyle = "rgba(30,144,255,1)";
</code></pre>
<p>Das W3C Farbmodul erlaubt auch eine Notation im <a title="Externer Link zur W3C Spezifikation der Farbnotation HSL(A)" href="http://www.w3.org/TR/2003/CR-css3-color-20030514/#hsl-color">HSL(A)</a> Format. Dieses wird aber bislang nur unzureichend von wichtigen Browsern unterstützt.</p>
<p><strong>Hinweis</strong>: Definiert man eine Farbangabe, ist diese für alle Elemente gültig. Möchte man verschiedenfarbige Elemente haben, muss sie explizit für jedes Element überschrieben, respektive neu gesetzt werden.</p>
<p>Über <code>rgba</code> und der <code>canvas</code> Methode <code>globalAlpha</code> haben wir zwei Möglichkeiten, Transparenzen zu nutzen. Schauen wir uns zuerst die <code>rgba</code> Notation an.</p>
<p>Quelltext: Transparenzen über die <code>rgba</code> Notation</p>
<pre><code>ctx.fillStyle = "rgba(30,144,255,0.5)";
ctx.fillStyle = "rgba(30,144,255,1)";
</code></pre>
<p>Die Notation innerhalb <code>rgba</code> ist identisch mit der von <code>rgb</code>, hat aber einen zusätzlichen Parameter am Ende der Notation. Der letzte Parameter bestimmt die <em>Sichtbarkeit</em> des Elementes, wobei <strong>1.0</strong> vollständige Deckung, <strong>0.0</strong> vollständige Transparenz bedeutet.</p>
<p>Quelltext Beispiel 5: Transparente Kreise mit <code>rgba</code> Notation</p>
<pre><code>ctx.beginPath();
ctx.fillStyle = "rgba(30,144,255,0.4)";
ctx.arc(70,75,65,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();

ctx.beginPath();
ctx.fillStyle = "rgba(30,144,255,0.7)";
ctx.arc(120,75,65,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
</code></pre>
<p>Beispiel 5: Transparente Kreise mit <code>rgba</code> Notation</p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/transparency-rgba.png" alt="Abbildung: Transparente Kreise mit rgba Notation" class="size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/transparency-rgba.html.zip">Beispiel 5: &quot;Transparente Kreise mit <code>rgba</code> Notation&quot;  herunterladen</a></p>
</div>
<p>Die zweite Möglichkeit, die elementunabhängige Definition über die Methode <code>globalAlpha()</code>, macht es möglich, übergreifend für alle Elemente der Leinwand einen Standardwert für Transparenzen zu setzen, der alle Farbangaben beeinflußt.</p>
<table class="tblattributes">
<tr>
<th>Name</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>globalAlpha(Wert&nbsp;der&nbsp;Transparenz)</code></td>
<td>Setzt den Standardwert für Transparenzen.</td>
</tr>
</table>
<p>Der Wertebereich liegt auch hier zwischen <strong>1.0</strong> (vollständige Deckung) und <strong>0.0</strong> (vollständige Transparenz).</p>
<p>Quelltext Beispiel 6: Transparente Kreise mit Methode <code>globalAlpha()</code></p>
<pre><code>ctx.globalAlpha = 0.5;

ctx.beginPath();
ctx.fillStyle = "#1E90FF";
ctx.arc(70,75,65,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();

ctx.beginPath();
ctx.fillStyle = "#1E90FF";
ctx.arc(120,75,65,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
</code></pre>
<p>Beispiel 6: Transparente Kreise mit Methode <code>globalAlpha()</code></p>
<div class="videoContainer">
<img src="http://www.webkrauts.de/wp-content/uploads/2009/09/transparency-globalalpha.png" alt="Abbildung: Transparente Kreise mit Methode globalAlpha()" class="size-full" />
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/canvas/transparency-globalalpha.html.zip">Beispiel 6: &quot;Transparente Kreise mit Methode <code>globalAlpha()</code>&quot;  herunterladen</a></p>
</div>
<h4>Animationen</h4>
<p>Durch die Bindung des Elementes <code>canvas</code> an DOM Methoden, die über eine Script-Schnittelle nutzbar sind, ist es grundsätzlich möglich, Objekte zu animieren. Dass das Element nicht konzipiert wurde um komplexer Animations-Software wie Flash oder Silverlight Konkurrenz zu machen, lässt sich an einigen Limitierungen erkennen. Nicht nur aufgrund der Komplexität und der damit notwendigen Ausführlichkeit in der Beschreibung, möchte ich auf die im Anschluß an den Artikel <a href="#links">verlinkten Seiten</a> verweisen. Dort findet man detailierte Beschreibungen, Beispiele und vieles mehr.</p>
<h4>Zugänglichkeit (<span lang="en" xml:lang="en">Accessibility</span>)</h4>
<p>Momentan können Inhalte des Elementes <code>canvas</code> ausschließlich über die Script-API erreicht werden. Auch der Umstand, dass als Fallback beliebige Elemente innerhalb der Element-Tags plaziert werden können, kann dem generierten Inhalt nicht in jeden Fall entsprechen, bzw. ihn nicht alternativ abbilden. Das W3C scheint sich dieses Problems bewusst zu sein und arbeitet <a href="http://lists.w3.org/Archives/Public/public-html/2009Jul/0562.html">an einem Fahrplan</a>, wie eine erhöhte Zugänglichkeit für das Element erreicht werden kann.</p>
<h4 id="links">Weiterführende Informationen zum Element <code>canvas</code></h4>
<h5>Spezifikation</h5>
<ul>
<li><a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element">WHATWG &ndash; Element <code>canvas</code></a></li>
<li><a href="http://www.w3.org/Bugs/Public/enter_bug.cgi?product=HTML%20WG&amp;component=HTML5+spec+bugs">W3C &ndash; Bugtracker um Fehler zu melden (Anmeldung erforderlich)</a></li>
</ul>
<h5>Tutorials und Informationen</h5>
<ul>
<li><a href="https://developer.mozilla.org/en/Canvas_tutorial">Mozilla Development Center Tutorial &#8211; Canvas</a></li>
<li><a href="http://html5doctor.com/">HTML5 Doctor &ndash; Informationen zu den HTML5 Specs und deren Anwendung</a></li>
</ul>
<h5>Beispiele</h5>
<ul>
<li><a href="http://randomibis.com/coolclock/">Animationen &ndash; Uhren</a></li>
<li><a href="http://9elements.com/io/projects/html5/canvas/">Animationsexperiment</a></li>
<li><a href="http://www.chromeexperiments.com/">Chrome Experiments &ndash; Komplexe Experimente unter Einsatz verschiedener Technologien</a></li>
<li><a href="http://mozilla.doslash.org/stuff/canvas/shell.html">Testoberfläche um die Möglichkeiten von Canvas interaktiv zu testen</a></li>
</ul>
<h4>Fazit</h4>
<p>Meine Bewertung der aktuellen Implementierung des Elementes <code>canvas</code> ist ambivalent. Zum einen bietet es interessante Merkmale und Methoden um Webseiten zukünftig mit neuen, im jeweiligen Kontext sinnvollen Funktionen zu bestücken und zu erweitern. Auf der anderen Seite schaue ich ein wenig sorgenvoll auf die Tatsache, dass der Einsatz des Elementes im Moment vollständig abhängig ist von aktivierten Javascript. Mag man auch der Meinung sein, dass zusätzliche Funktionalität mit zusätzlicher Technik <em>erkauft</em> werden muss, ist die augenblicklich <strong>unzureichende Zugänglichkeit</strong> der Inhalte für Nutzerkreise, denen diese Technik nicht zur Verfügung steht, in meinen Augen durchaus eine Kritikpunkt.</p>
<p>Erfreulicherweise ist dieses Problem dem W3C bereits bewusst, und es wird an einer Lösung gearbeitet.</p>
<div class="footnotes">
<p id="canvasimplement"><sup>1</sup> Während Apple in seiner Implementation des Elementes <code>canvas</code> keinen Endtag vorschreibt, hat die Mozilla Foundation dessen Vorhandensein als zwingend notwendig definiert.</p>
</div>
<h5>Zum Autor:</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/07/olaf_gleba_60x601.jpg" alt="Autor: Olaf Gleba" title="olaf_gleba_60x601" width="60" height="60" class="size-full bild-links" /><a href="http://creatics.de">Olaf Gleba</a> ist selbständiger Frontend- und Software-Entwickler in Köln, Autor des WCMS <a href="http://welcompose.de">Welcompose</a> und engagiert sich in der täglichen Arbeit für Webstandards.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/09/29/malen-nach-zahlen/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Sehen und Hören</title>
		<link>http://www.webkrauts.de/2009/09/28/sehen-und-hoeren/</link>
		<comments>http://www.webkrauts.de/2009/09/28/sehen-und-hoeren/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 11:16:45 +0000</pubDate>
		<dc:creator>Olaf Gleba</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=596</guid>
		<description><![CDATA[Mit HTML5 sollte es einfacher werden, Video- und Audio-Dateien in seine Webseiten einzubauen. Ob das – beim aktuellen Stand – wirklich gelungen ist oder nicht, zeigt Olaf Gleba im heutigen Teil unserer HTML5-Reihe: Er stellt die Elemente &#60;video&#62; und &#60;audio&#62; vor.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />
<p>Im heutigen Teil unserer HTML5-Serie geht es um die Elemente &lt;video&gt; und &lt;audio&gt;.</p>
<h4>1. Element &lt;video&gt;</h4>
</p>
<p>Filme im Web bereitzustellen ist momentan mit enormen Aufwand verbunden, will man möglichst alle Besucher einer Seite in den Genuß der Filme bringen. Neben mehrfacher Konvertierung und Einbindung verschiedener Formate, muss die unterschiedliche Einbindungs-Syntax der Browser berücksichtigt werden. Oftmals ist der einzig gangbare Weg der Einsatz zusätzlicher Funktionalitäten und Techniken in Form von Plugins und <span lang="en" xml:lang="en">Script</span>-Sprachen (Flash, Javascript).</p>
<p>Mit dem Element <code>video</code> verspricht die HTML5 Spezifikation eine native, also von zusätzlicher Technik und Software unabhängige, Einbindung von Filmen in Webseiten.</p>
<h4>1.1 Browser-Unterstützung</h4>
<p>Neben Firefox ab Version 3.5 und Safari ab 3.2 unterstützt der aktuelle Google Chrome Browser (Version 3.x) das HTML5 Element <code>video</code> insofern, als dass erste Tests mit diesen Versionen möglich sind. Opera hat für Version 10.1 eine Unterstützung des Elementes <code>video</code> angekündigt. Redmonder Browser (IE) bleiben augenblicklich komplett außen vor.</p>
<p>Man sollte immer im Hinterkopf behalten, dass die Implementierung von HTML5 Elementen bis zur endgültigen Verabschiedung des Standards (oder sich die normative Kraft des Faktischen durchsetzt) immer nur vorläufigen Charakter hat. So unterscheidet sich momentan die Art und Weise der Implementierung, und es gibt keine Gewähr, dass und in welcher Form die Elemente in zukünftigen Versionen der Browser verfügbar sein werden.</p>
<h4>1.2 Codecs und Formate</h4>
<p>Mit der Einführung des neuen Elementes <code>video</code> verband sich bei vielen Entwicklern sicherlich die Hoffnung, dass man sich auf einen einheitlichen Codec einigen würde, den alle Browser unterstützen und das Bereitstellen verschiedener Formate überflüssig macht. Dass Weihnachten und Geburtstage aber in der Regel nicht auf einen Tag fallen, scheint sich leider auch in diesen Fall zu bewahrheiten, wie der <a title="Externer Link zum Posting von Ian Hicks auf der whatwg Mailingliste" href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-June/020620.html">Beitrag von Ian Hicks (englisch)</a> auf der WHATWG-Mailingliste andeutet.</p>
<p>Während die Browser der Mozilla Foundation und Opera ausschließlich <a title="Externer Link zur Ogg Projektseite " href="http://www.xiph.org/ogg/">Ogg Media Container</a>(.ogg, .ogv) und den <a title="Externer Link zur Projektseite Theora Video Codec" href="http://www.theora.org/">Theora Video Codec</a> unterstützen, bedient sich Apple&#039;s Safari<a href="#xiphqt"><sup>1</sup></a> des <a title="Externer Link zur Wikipedia Seite" href="http://de.wikipedia.org/wiki/H.264">H.264</a> Codec (.mp4, .mp4v), der Google Browser Chrome wiederum unterstützt beide, lässt sich aber eine Hintertür (siehe Ian Hicks&#039; Beitrag) offen. Redmond schweigt momentan komplett zu einen zukünftig unterstützten Codec.</p>
<h4>1.3 Einbindung</h4>
<p>Die Syntax, um filmische Inhalte in eine Seite einzubinden, ist schlicht und einfach:</p>
<p>Quelltext Beispiel 1: Einbindung einer .ogg/Theora Filmdatei</p>
<pre><code>&lt;video src=&quot;sample.ogg&quot; controls&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;video&lt;/code&gt; nicht
  oder erkennt das Format der Datei nicht.
&lt;/video&gt;
</code></pre>
<p>Beispiel 1: Einbindung einer Ogg/Theora (.ogg) Filmdatei</p>
<div class="videoContainer">
<video src="http://webkrauts.de/beispiele/html5/video/sample.ogg" controls><br />
  <strong>Ihr Browser unterstützt das Element<br />
  <code>video</code> nicht oder erkennt das Format der Filmdatei<br />
  nicht</strong>.<br />
</video>
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/video/embed-ogg-media.html.zip">Beispiel 1: »Einbindung einer Ogg/Theora (.ogg) Filmdatei« herunterladen</a></p>
</div>
<p>Quelltext Beispiel 2: Einbindung einer MPEG-4/H.264 (.mp4) Filmdatei</p>
<pre><code>&lt;video src=&quot;sample.mp4&quot; controls&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;video&lt;/code&gt; nicht
  oder erkennt das Format der Datei nicht.
&lt;/video&gt;
</code></pre>
<p>Beispiel 2: Einbindung einer MPEG-4/H.264 (.mp4) Filmdatei</p>
<div class="videoContainer">
<video src="http://webkrauts.de/beispiele/html5/video/sample.mp4" controls><br />
  <strong>Ihr Browser unterstützt das Element<br />
  <code>video</code> nicht oder erkennt das Format der Filmdatei<br />
  nicht</strong>.<br />
</video>
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/video/embed-mpeg4-media.html.zip">Beispiel 2: »Einbindung einer MPEG-4/H.264 (.mp4) Filmdatei« herunterladen</a></p>
</div>
<p>Neben dem Attribut <code>src</code>, das den Pfad zur Quelldatei angibt, fügt das optionale Attribut <code>controls</code>  dem Film die notwendigen Steuerungselemente hinzu. Erkennt der Browser das Format der Filmdatei nicht oder ist ihm das Element <code>video</code> unbekannt, wird der Inhalt zwischen dem öffnenden und schließenden Tag angezeigt, bzw. gerendert. Dieses Verhalten bedeutet zum Einen eine attributlose, textliche Fallbacklösung<a href="#fallbackview"><sup>2</sup></a>, zum Anderen ermöglicht es aber auch, die Filmdatei an dieser Stelle konventionell in einem Flash-Container über das <code>object</code> Element einzubinden.</p>
<p>Beispiel: Fallback unter Anwendung des <code>object</code> Elementes</p>
<pre><code>&lt;video src=&quot;sample.mp4&quot; controls&gt;
  &lt;object data="flvplayer.swf"
      type="application/x-shockwave-flash"&gt;
    &lt;param value="flvplayer.swf" name="movie"/&gt;
  &lt;/object&gt;
&lt;/video&gt;
</code></pre>
<p>Um Filmdateien mit unterschiedlichen Formaten einzubinden, wird das generische <code>source</code> Element genutzt:</p>
<p>Quelltext Beispiel 3: Einbindung multipler Formate</p>
<pre><code>&lt;video controls&gt;
  &lt;source src="sample.ogg" type=&quot;video/ogg&quot; /&gt;
  &lt;source src="sample.mp4" type='video/mp4';
     codecs=&quot;mp4v.20.240&quot;' /&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;video&lt;/code&gt; nicht oder beide Formate
  (mp4, ogg) der Filmdatei(en) sind unbekannt.
&lt;/video&gt;
</code></pre>
<p>Beispiel 3: Einbindung multipler Formate</p>
<div class="videoContainer">
<video controls><br />
  <source src="http://webkrauts.de/beispiele/html5/video/sample.ogg" type="video/ogg" /><br />
  <source src="http://webkrauts.de/beispiele/html5/video/sample.mp4" type='video/mp4; codecs="mp4v.20.240"' /><br />
  <strong>Ihr Browser unterstützt das Element <code>video</code> nicht<br />
  oder beide Formate (mp4, ogg) der Filmdatei(en) sind unbekannt</strong>.<br />
</video>
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/video/embed-multiple-media.html.zip">Beispiel 3: »Einbindung multipler Formate«  herunterladen</a></p>
</div>
<p>Unterstützt der Browser das Ogg Container Format nicht, wird er versuchen den MPEG4 Film abzuspielen. Kennt er keines der beiden Formate/Codecs oder ist ihm das HTML5 Element <code>video</code> unbekannt, wird der sonstige Inhalt zwischen dem öffnenden und schließenden Tag angezeigt <a href="#fallbackview"><sup>2</sup></a>.</p>
<p><a id="mime-type"></a>Das Attribut <code>type</code> des Elementes <code>source</code> ist optional. Neben dem MIME-Typ kann zusätzlich über den Parameter <code>codecs</code> ein dezidierter Codec angegeben werden. Ist dem Browser dieser Codec nicht bekannt, wird der Film nicht angezeigt.</p>
<p>Wird das Attribut <code>type</code> nicht gesetzt, erhält der Browser die MIME-Information vom Server und gleicht sie mit den Möglichkeiten des Browsers ab. Gibt man das Attribut <code>type</code> an, wird der Browser ohne Rücksprache mit dem Server versuchen den MIME-Typ zu interpretieren. Um Bandbreite zu sparen, empfehle ich den MIME-Typ grundsätzlich anzugeben, da damit eine unnötige Kommunikation zwischen Client und Server vermieden wird.</p>
<p>Wird der MIME-Typ dennoch weggelassen, sollte darauf geachtet werden, dass der Server die Dateien mit dem korrekten MIME-Typ ausliefert. Ist dies nicht in der Konfigurationsdatei des Webservers angegeben, kann dies mit der folgenden Angabe in einer .htaccess Datei nachgereicht werden (Voraussetzung hier ist natürlich die Berechtigung die Direktive in einer .htaccess Datei editieren zu können).</p>
<p>Quelltext: Server die relevanten Mime-Typen in einer .htaccess bekannt machen:</p>
<pre><code>AddType video/ogg .ogg
AddType video/mp4 .mp4
</code></pre>
<h4>1.4 Attribute<a id="attribute"></a></h4>
<table class="tblattributes">
<tr>
<th>Attribut</th>
<th>Wertebereich</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>src</code></td>
<td>url</td>
<td>Der Pfad zum Film.</td>
</tr>
<tr>
<td><code>controls</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob die Steuerelemente für den Film angezeigt werden.</p>
<div class="hint">
		<strong>Hinweis</strong>: Im Gegensatz zu sonstigen Verhalten einer booleschen Werteangabe wird die Eigenschaft nicht über </p>
<pre>controls="true|false"</pre>
<p>an oder abgeschaltet. Um das Attribut zu verwenden, fügt man dem Element das Attribut einfach wertelos hinzu:
<pre>controls</pre>
</p></div>
</td>
</tr>
<tr>
<td><code>poster<a href="#attributeposter"><sup>3</sup></a></code></td>
<td>url</td>
<td>Der Pfad zur Grafik, die angezeigt wird, während der Film geladen wird und/oder wenn es generelle Probleme (bspw. nicht vorhanden sein der Filmdatei) mit der Anzeige des Film gibt.</td>
</tr>
<tr>
<td><code>autoplay</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob der Film nach dem Laden automatisch abgespielt werden soll. Hier gilt ebenfalls der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.
	</td>
</tr>
<tr>
<td><code>autobuffer</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Wird dieses Attribut gesetzt, wird der Film direkt beim Aufruf der Seite geladen. Normalerweise wird ein Film erst geladen, wenn die Wiedergabe gestartet wird oder das Attribut <code>autoplay</code> gesetzt ist. Auch hier gilt der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.</td>
</tr>
<tr>
<td><code>loop<a href="#attributeloop"><sup>4</sup></a></code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob die Datei wiederholend abgespielt werden soll. Auch hier der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.
	</td>
</tr>
<tr>
<td><code>height</code></td>
<td>Pixel</td>
<td>Die Anzeigehöhe des Films. In der Regel sollte dies die Originalhöhe des Films sein.</td>
</tr>
<tr>
<td><code>width</code></td>
<td>Pixel</td>
<td>Die Anzeigeweite des Films. In der Regel sollte dies die Originalweite des Films sein.</td>
</tr>
</table>
<h4>1.5 Media Elemente und Attribute</h4>
<p>Wie an anderer Stelle schon erwähnt, blendet das Attribut <code>controls</code> die Steuerelemente eines Films ein oder aus. Das Aussehen, Anzahl und Position dieser Elemente ist abhängig von der Implementierung des Attributes in den verschiedenen Browsern und Betriebssystemen. Dankenswerterweise stellt die HTML5 Spezifikation über eine Script-Schnittstelle eine Vielzahl von <a title="Externer Link zur WHATWG Spezifikation von Media Elementen" href="http://www.whatwg.org/specs/web-apps/current-work/#media-element">Media Elementen und Attributen</a> zur Verfügung, so dass unter Anwendung von Javascript die Steuerung und Anzeige eines Films individuell gestaltet werden kann.</p>
<p>Quelltext: Individuellen Wiedergabe/Pause Button programmieren</p>
<pre><code>&lt;script&gt;
function playPause() {
  var meinFilm = document.getElementsByTagName('video')[0];
  if (meinFilm.paused)
    meinFilm.play();
  else
    meinFilm.pause();
}
&lt;/script&gt;

&lt;input type=button onclick="playPause()"
  value="Wiedergabe/Pause" /&gt;
</code></pre>
<p>Quelltext: Öffne ein Alert-Fenster, wenn das Event <code>ended</code> einen Status zurückliefert.</p>
<pre><code>&lt;script&gt;
meinFilm.addEventListener('ended', function () {
  alert('Das Ende des Films ist erreicht')
});
&lt;/script&gt;
</code></pre>
<p>Auch hier ist es wichtig im Hinterkopf zu behalten, dass die Anzahl und Benennung der Media Elemente und Attribute noch nicht in Stein gemeißelt sind und das ein oder andere Element/Attribut hinzukommen oder auch ersatzlos wegfallen kann.</p>
<h4>1.6 Fazit</h4>
<p>Während alleine nur die Aussicht auf Nutzbarkeit des Elementes <code>video</code> ein Leuchten in die Augen von Frontend-Entwicklern zaubert, fällt die Enttäuschung über die (bisher &nbsp;&ndash; die Hoffnung stirbt zumindest ziemlich weit hinten) verpasste Chance einen einheitlichen Codec zum originären Teil der Spezifikation zu machen, dann umso größer aus. Dies ist allerdings weniger der WHATWG anzulasten, sondern auf die Süppchen der einzelnen Browserhersteller und Lizenzgeber der Codecs zurückzuführen.</p>
<p>Ohne konkret auf die lizenzrechtlichen Probleme einzugehen, ist es aus Sicht eines  Entwicklers einfach schade, dass ein Konsens zwischen WHATWG, Browserherstellen und Codec-Lizenzgebern auch zu einem späteren Zeitpunkt eher unwahrscheinlich ist. So wird viel Potential des neuen Elementes verschenkt.</p>
<p>Zieht Microsoft in den nächsten Monaten nach, bleibt zumindest der Vorteil einer einheitlichen Syntax, die zukünftig übergreifend in allen aktuellen Browsern ohne Redundanz von Quelltext und zusätzlichen Techniken eingesetzt werden kann.</p>
<h4>2. Element &lt;audio&gt;</h4>
<p>Auch hier stehen wir momentan vor der gleichen Ausgangslage. Um möglichst viele Besucher zu erreichen, müssen bisher multiple Formate erstellt werden und die Anzeige und Einbindung in die Webseite unter zur Hilfenahme weiterer Techniken (Flash) und Funktionalitäten (Javascript) realisiert werden.</p>
<p>Durch das Element <code>audio</code> verspricht die HTML5 Spezifikation auch hier eine native Einbindung von Audio Dateien in Webseiten.</p>
<h4>2.1 Browser-Unterstützung</h4>
<p>Neben Firefox ab Version 3.5, Safari ab 3.2 unterstützt der aktuelle Google Chrome Browser (Version 3.x) das HTML5 Element <code>audio</code> in einer Art und Weise, die sich für erste Tests eignet. Opera hat für Version 10.1 &ndash; zeitgleich mit der <code>video</code> Unterstützung &ndash; die Verfügbarkeit des Elementes <code>audio</code> angekündigt. Der Internet Explorer steht auch hier in der Ecke mit dem Gesicht zur Wand.</p>
<p>Auch gilt das Gesagte zur Vorläufigkeit der Implementierung in den einzelnen Browsern. Sicher ist, dass nichts sicher ist.</p>
<h4>2.2 Codecs und Formate</h4>
<p>Browser der Mozilla Foundation unterstützen <a title="Externer Link zur Ogg Projektseite " href="http://www.xiph.org/ogg/">Ogg Media Container</a> (.ogg) verbunden mit dem <a title="Externer Link zur Projektseite Vorbis Audio Codec" href="http://www.vorbis.com/">Vorbis Audio Codec</a>, Apple&#039;s Safari das <a title="Externer Link zur Wikipedia Seite" href="http://de.wikipedia.org/wiki/MP3">MPEG-1, Audio Layer 3</a> Format (.mp3), der Google Browser Chrome erkennt beide Formate/Codecs. Das <a title="Externer Link zur Wikipedia Seite" href="http://de.wikipedia.org/wiki/WAV_(Format)">Wave</a> (.wav) Format wird von FF ab 3.1, Safari ab 3.x und zukünftig Opera ab 10.1 (für letztgenannten vorläufig als einziges Format) unterstützt.</p>
<h4>2.3 Einbindung</h4>
<p>Quelltext Beispiel 1: Einbindung einer Wave (.wav) Audiodatei</p>
<pre><code>&lt;audio src=&quot;sample-audio.wav&quot; controls&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;audio&lt;/code&gt;
  oder erkennt das Format der Datei nicht.
&lt;/audio&gt;
</code></pre>
<p>Beispiel 1: Einbindung einer Wave (.wav) Audiodatei</p>
<div class="videoContainer">
<audio src="http://webkrauts.de/beispiele/html5/audio/sample-audio.wav" controls><br />
  <strong>Ihr Browser unterstützt das Element<br />
  <code>audio</code> nicht oder das Format der Audiodatei<br />
  nicht</strong>.<br />
</audio>
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/audio/embed-wave-media.html.zip">Beispiel 1: »Einbindung einer Wave (.wav) Audiodatei« herunterladen</a></p>
</div>
<p>Um Audiodateien mit unterschiedlichen Formaten einzubinden, wird das generische <code>source</code><a href="#sourcebug"><sup>5</sup></a> Element genutzt:</p>
<p>Quelltext Beispiel 2: Einbindung multipler Formate</p>
<pre><code>&lt;audio controls&gt;
  &lt;source src="sample-audio.ogg" type=&quot;audio/ogg&quot; /&gt;
  &lt;source src="sample-audio.mp3" type=&quot;audio/mpeg&quot; /&gt;
  Ihr Browser unterstützt das Element
  &lt;code&gt;audio&lt;/code&gt; nicht oder beide Formate
  (Ogg/Vorbis, MPEG3) der Audiodatei(en) sind unbekannt.
&lt;/audio&gt;
</code></pre>
<p>Beispiel 2: Einbindung multipler Formate</p>
<div class="videoContainer">
<audio controls><br />
  <source src="http://webkrauts.de/beispiele/html5/audio/sample-audio.ogg" type="audio/ogg" /><br />
  <source src="http://webkrauts.de/beispiele/html5/audio/sample-audio.mp3" type="audio/mpeg" /><br />
  <strong>Ihr Browser unterstützt das Element <code>audio</code> nicht<br />
  oder beide Formate (Ogg/Vorbis, MPEG-1/Layer 3) der Datei(en) sind unbekannt</strong>.<br />
</audio>
</div>
<div class="exampleDownload">
<p><a href="http://webkrauts.de/beispiele/html5/audio/embed-multiple-media.html.zip">Beispiel 2: »Einbindung multipler Formate« herunterladen</a></p>
</div>
<p>Es sollte grundsätzlich darauf geachtet werden, dass der Server die Datei(en) mit dem korrekten MIME-Typ überträgt. Hier gelten die gleichen Hinweise die zuvor in der Beschreibung des Elementes <code>video</code> <a href="#mime-type">erwähnt</a> wurden. Mime-Typen für Audiodateien:</p>
<p>Quelltext: Server die relevanten (Audio) Mime-Typen in einer .htaccess bekannt machen:</p>
<pre><code>AddType audio/x-wav .wav
AddType audio/ogg .ogg
AddType audio/mpeg .mp3
</code></pre>
<h4>2.4 Attribute<a id="attribute"></a></h4>
<table class="tblattributes">
<tr>
<th>Attribut</th>
<th>Wertebereich</th>
<th>Beschreibung</th>
</tr>
<tr>
<td><code>src</code></td>
<td>url</td>
<td>Der Pfad zur Audiodatei.</td>
</tr>
<tr>
<td><code>controls</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob die Steuerelemente für die Audiodatei angezeigt werden.</p>
<div class="hint">
		<strong>Hinweis</strong>: Im Gegensatz zu sonstigen Verhalten einer booleschen Werteangabe wird die Eigenschaft nicht über </p>
<pre>controls="true|false"</pre>
<p>an oder abgeschaltet. Um das Attribut zu verwenden, fügt man dem Element das Attribut einfach wertelos hinzu:
<pre>controls</pre>
</p></div>
</td>
</tr>
<tr>
<td><code>autoplay</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob die Datei nach dem Laden automatisch abgespielt werden soll. Hier gilt ebenfalls der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.
	</td>
</tr>
<tr>
<td><code>autobuffer</code></td>
<td>boolesche Angabe (true|false)</td>
<td>Wird dieses Attribut gesetzt, wird die Datei direkt beim Aufruf der Seite geladen. Normalerweise wird sie erst geladen, wenn die Wiedergabe gestartet wird oder das Attribut <code>autoplay</code> gesetzt ist. Auch hier gilt der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.</td>
</tr>
<tr>
<td><code>loop<a href="#attributeloop"><sup>4</sup></a></code></td>
<td>boolesche Angabe (true|false)</td>
<td>Legt fest, ob die Datei wiederholend abgespielt werden soll. Auch hier der Hinweis, dass das Attribut wertelos hinzugefügt wird, wenn es verwendet werden soll.
	</td>
</tr>
</table>
<h4>2.5 Media Elemente und Attribute</h4>
<p>Die HTML5 Spezifikation stellt über eine Script-Schnittstelle <a title="Externer Link zur WHATWG Spezifikation von Media Elementen" href="http://www.whatwg.org/specs/web-apps/current-work/#media-element">Media Elemente und Attribute</a> zur Verfügung, mit deren Hilfe man individuell die Steuerung und Anzeige einer Audiodatei beeinflußen kann.</p>
<p>Beispiel 3: Individuellen Wiedergabe Button anlegen</p>
<pre><code>&lt;script&gt;
function playFile() {
  var audioobj = new Audio("sample.mp3");
  audioobj.play();
}
&lt;/script&gt;

&lt;input type=button onclick="playFile()" value="Wiedergabe" /&gt;
</code></pre>
<p>Die Vorläufigkeit der Anzahl, Benennung einzelner Elemente und Attributen wurde ja schon mehrfach erwähnt, aber ein erneuter Hinweis hierauf soll deutlich machen, dass man die Glac&#233;-Handschuhe beim Coden anbehalten sollte&#8230;</p>
<h4>2.6 Fazit</h4>
<p>Auch hier ist die (Vor)Freude aufgrund des Format- und Codecs Durcheinanders nicht ungetrübt. Zur Freude, zukünftig ein standardisiertes Element unter den Händen zu haben, gesellt sich eine gewisse Enttäuschung über die Aussagen und Pläne der Browserhersteller zur Format/Codec Implementierung in Ihren Produkten.</p>
<h4>3. Weiterführende Informationen zu den Elementen <code>video</code> und <code>audio</code><a id="links"</a></a></h4>
<h4>Spezifikation</h4>
<ul>
<li><a title="Externer Link zur WHATWG Spezifikation des Elementes video" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#video">WHATWG &ndash; Element <code>video</code></a></li>
<li><a title="Externer Link zur WHATWG Spezifikation des Elementes audio" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#audio">WHATWG &ndash; Element <code>audio</code></a></li>
<li><a title="Externer Link zur WHATWG Spezifikation von Media Elementen" href="http://www.whatwg.org/specs/web-apps/current-work/#media-elements">WHATWG &ndash; Media Elemente</a></li>
<li><a title="Externer Link zum W3C Bugzilla für HTML5 um Fehler zu melden" href="http://www.w3.org/Bugs/Public/enter_bug.cgi?product=HTML%20WG&amp;component=HTML5+spec+bugs">W3C &ndash; Bugtracker um Fehler zu melden (Anmeldung erforderlich)</a></li>
</ul>
<h4>Tutorials und Informationen</h4>
<ul>
<li><a title="Externer Link zum Mozilla Development Center" href="https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox">MDC Tutorial &#8211; Using audio and video in Firefox (en)</a></li>
<li><a title="Externer Link zu den Seiten von html5 doctor" href="http://html5doctor.com/">HTML5 Doctor &ndash; Informationen zu den HTML5 Specs und deren Anwendung (en)</a></li>
</ul>
<h4>Anwendungen</h4>
<ul>
<li><a title="Externer Link zur Daringfireball Webseite" href="http://daringfireball.net/2009/07/ffmpeg2theora">Theora Ogg Dateien erstellen auf Mac OS X (en)</a></li>
</ul>
<div class="footnotes">
<p><a id="xiphqt"><sup>1</sup></a> Man kann Safari allerdings recht problemlos das ogg/Theora Format beibringen, in dem man die <a title="Externer Link zu Xiph Downloadseite" href="http://www.xiph.org/quicktime/download.html">universale Quicktime-Komponente</a> der <span lang="en" xml:lang="en">Xiph Open Source Community</span> installiert.</p>
<p><a id="fallbackview"><sup>2</sup></a> Soweit die Theorie. Aktuell verhalten sich weder Firefox noch Safari so, wie es die Spezifikation vorsieht, wenn es um die Anzeige des Inhalts innerhalb des Tags geht. Während Firefox eine graue Box mit einem dicken &quot;X&quot; in der Mitte rendert sobald das Attribute <code>controls</code> angegeben und der Format/Codec nicht bekannt ist, zeigt Safari statt der grauen Box eine weißen oder transparente Fläche und auch die Steuerungselemente des Films an.</p>
<p><a id="attributeposter"><sup>3</sup></a> In Firefox ist dieses Attribut noch nicht implementiert.</p>
<p><a id="attributeloop"><sup>4</sup></a> In Firefox ist dieses Attribut noch nicht implementiert.</p>
<p><a id="sourcebug"><sup>5</sup></a> Hier ist ein fehlerhaftes Verhalten von Firefox zu berücksichtigen: Bindet man als Erstes eine Datei ein, deren Format Firefox unbekannt ist, bricht Firefox die Ausführung des Elementes ab. Umgehen kann man diesen Fehler, in dem die Referenzierung mehrerer <code>source</code> Elemente mit einer Datei beginnt, deren Format/Codec Firefox bekannt ist.</p>
<h5>Zum Autor</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/07/olaf_gleba_60x601.jpg" alt="Autor: Olaf Gleba" title="olaf_gleba_60x601" width="60" height="60" class="size-full bild-links" /><a href="http://creatics.de" title="Externer Link zur Agenturseite von Olaf Gleba">Olaf Gleba</a> ist selbständiger Frontend- und Software-Entwickler in Köln, Autor des WCMS <a href="http://welcompose.de" title="Externer Link zur Projektseite CMS Welcompose">Welcompose</a> und engagiert sich in der täglichen Arbeit für Webstandards.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/09/28/sehen-und-hoeren/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
<enclosure url="http://webkrauts.de/beispiele/html5/audio/sample-audio.wav" length="663308" type="audio/x-wav" />
<enclosure url="http://webkrauts.de/beispiele/html5/audio/sample-audio.mp3" length="55589" type="audio/mpeg" />
		</item>
		<item>
		<title>Das Endoskelett einer Webseite</title>
		<link>http://www.webkrauts.de/2009/09/24/das-endoskelett-einer-webseite/</link>
		<comments>http://www.webkrauts.de/2009/09/24/das-endoskelett-einer-webseite/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 12:00:14 +0000</pubDate>
		<dc:creator>Michael Jendryschik</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=591</guid>
		<description><![CDATA[Webworker nutzen zur Zeit div-Konstrukte, um ihre Webseite zu unterteilen. Mit HTML5 kommen eine Reihe neuer Elemente ins Spiel, die einzelne Bereiche einer Webseite endlich auch semantisch sinnvoll auszeichnen. Michael Jendryschik stellt die neuen Typen anhand zahlreicher Beispiele vor.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />
<p>Viele Webdesigner beginnen ihre Entwürfe mit der Entwicklung eines <a href="http://www.webkrauts.de/2007/12/22/wireframes/">Wireframes</a> (Drahtgitter, Gittermodell). Damit wird ein sehr früher konzeptueller Prototyp einer Website bezeichnet, der die wichtigsten Bereiche wie Header, Navigation, Spaltenraster und Footer schematisch darstellt, häufig in Form verschiedenfarbiger oder in verschiedenen Grautönen abgestufter Kästen. Dabei reicht es aus, den grundlegenden konzeptuellen Entwurf nur sehr rudimentär abzubilden, um die Platzierung der einzelnen Bereiche zu verdeutlichen, und anschließend Schritt für Schritt zu verfeinern. <a href="#abb1">Abbildung 1</a> zeigt, wie ein Wireframe in einem fortgeschrittenen Stadium aussehen könnte.</p>
<p id="abb1"><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/html5-wireframe.gif" alt="Wireframe" title="html5-wireframe" width="460" height="378" /><br />
Abb. 1: Ein Wireframe veranschaulicht Größe, Position und Wirkung der Hauptelemente einer Website</p>
<p>Webautoren gehen so ähnlich vor, wenn sie beginnen, das Markup für eine Webseite aufzubauen. Auch sie arbeiten sich von außen nach innen vor. Am Anfang steht die Auszeichnung der groben Struktur, deren Inhalte im Anschluss Schritt für Schritt ausgezeichnet werden. In Ermangelung geeigneter Elemente für Seitenbereiche wie Header, Logo, Suche, Hauptmenü, Seitenspalte oder Footer greifen Webautoren auf <code>div</code>-Elemente zurück und vergeben geeignete Bezeichner und Klassen. Ein solches »Grundskelett« einer Website zeigt <a href="#lst1">Listing 1</a>.</p>
<div id="lst1">
<pre><code>&lt;body&gt;
  &lt;div id="header"&gt;
    &lt;div id="logo"&gt;Logo&lt;/div&gt;
    &lt;div id="search"&gt;Suche&lt;/div&gt;
    &lt;div id="nav"&gt;Hauptmenü&lt;/div&gt;
  &lt;/div&gt;

  &lt;div id="content"&gt;
    &lt;h1&gt;Hauptbereich&lt;/h1&gt;

    &lt;div class="section"&gt;
      &lt;h2&gt;Sektion&lt;/h2&gt;
      &lt;h3&gt;Abschnitt&lt;/h3&gt;

      &lt;!-- Content --&gt;
    &lt;/div&gt;

    &lt;div class="section"&gt;
      &lt;h2&gt;Sektion&lt;/h2&gt;

      &lt;!-- Content --&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id="sidebar"&gt;
    &lt;div id="subnav"&gt;Bereichsmenü&lt;/div&gt;
  &lt;/div&gt;

  &lt;div id="footer"&gt;Footer&lt;/div&gt;
&lt;/body&gt;</code></pre>
<p>Listing 1: Grundskelett einer Website mit <code>div</code>-Suppe</div>
<p>Je nach den persönlichen Vorlieben des Webautoren oder den Vorgaben des eingesetzten Frameworks unterscheiden sich die Namen der Bezeichner und Klassen, im Wesentlichen haben wir es aber stets mit denselben Strukturen zu tun.</p>
<h4>Neue Elementtypen und neue Konzepte</h4>
<p>Die HTML5-Arbeitsgruppe hat sich dieser Problematik angenommen und eine Reihe <a href="http://dev.w3.org/html5/spec/Overview.html#sections">neuer Sektionselemente</a> eingeführt, die Webautoren die Möglichkeit an die Hand geben, den Aufbau des Endoskeletts ihrer Webseiten zu standardisieren, darunter <code>header</code>, <code>nav</code>, <code>article</code>, <code>section</code>, <code>aside</code> und <code>footer</code>. <a href="#lst2">Listing 2</a> zeigt die Übersetzung von <a href="#lst1">Listing 1</a> in HTML5.</p>
<div id="lst2">
<pre><code>&lt;body&gt;
  &lt;header&gt;
    &lt;div id="logo"&gt;Logo&lt;/div&gt;
    &lt;div id="search"&gt;Suche&lt;/div&gt;
    &lt;nav&gt;Hauptmenü&lt;/nav&gt;
  &lt;/header&gt;

  &lt;article&gt;
    &lt;h1&gt;Hauptbereich&lt;/h1&gt;

    &lt;section&gt;
      &lt;h2&gt;Sektion&lt;/h2&gt;
      &lt;h3&gt;Abschnitt&lt;/h3&gt;

      &lt;!-- Content --&gt;
    &lt;/section&gt;

    &lt;section&gt;
      &lt;h2&gt;Sektion&lt;/h2&gt;

      &lt;!-- Content --&gt;
    &lt;/section&gt;
  &lt;/article&gt;

  &lt;aside&gt;
    &lt;nav&gt;Bereichsmenü&lt;/nav&gt;
  &lt;/aside&gt;

  &lt;footer&gt;Footer&lt;/footer&gt;
&lt;/body&gt;</code></pre>
<p>Listing 2: Grundskelett einer Website mit den neuen strukturierenden Elementen aus HTML5</p></div>
<h5>Sektionen: Der Elementtyp <code>section</code></h5>
<p class="definition">Das Element <code>section</code> zeichnet eine Sektion in einem Dokument oder einer Web-Applikation aus.</p>
<p>Eine Sektion ist eine Gruppe von Elementen, die thematisch zusammengehören. Beispiele dafür sind Abschnitte eines Textes, einzelne Register (Tabs) in einer registerbasierten Benutzeroberfläche oder einzelne Bereiche einer Website wie die Einleitung, der Newsbereich oder Kontaktinformationen. Sektionen enthalten häufig eine Überschrift und gelegentlich einen Footer, der (sichtbare) Metainformationen zur Sektion enthält.</p>
<p>Sektionen eignen sich dazu, Inhalte und deren Überschriften in einem gemeinsamen Element zusammenzufassen. Das geht in HTML5 über die reine Auzeichnungsebene hinaus; dazu später mehr. <code>section</code> ist kein semantisch leeres, bedeutungsloses Element; ebenso wenig wie die anderen in diesem Artikel vorgestellten Elemente. Wer einen Container benötigt, um Elemente fürs Styling zusammenzufassen, der sollte weiterhin <code>div</code> verwenden.</p>
<h5>Kopfbereiche: Der Elementtyp <code>header</code></h5>
<p class="definition">Das Element <code>header</code> definiert den »Kopfbereich« einer Webseite oder eines Sektionselements.</p>
<p>Als Auszeichnung des Kopfbereichs einer Webseite enthält es Elemente wie die Hauptüberschrift, das Logo, das Suchfeld oder die Hauptnavigation. Innerhalb eines Sektionselements enthält es Überschriften oder Elemente wie das Inhaltsverzeichnis oder die Einleitung der Sektion.</p>
<h5>Navigationsbereich: Der Elementtyp <code>nav</code></h5>
<p class="definition">Das Element <code>nav</code> zeichnet einen Bereich mit Navigationslinks aus, entweder mit Links zu anderen Seiten oder zu Sprungankern innerhalb derselben Seite.</p>
<p>Webautoren sollten nicht jede Gruppe von Links mit <code>nav</code> auszeichnen, sondern nur zentrale Navigationsbereiche wie das Haupt- und das Bereichsmenü. Typischerweise enthält das <code>nav</code>-Element Listen, welche die Navigation repräsentieren.</p>
<div id="lst3">
<pre><code>&lt;nav&gt;
  &lt;h2&gt;Navigation&lt;/h2&gt;

  &lt;ul&gt;
   &lt;li class="home"&gt;&lt;strong title="Hier befinden Sie sich
     gerade."&gt;Startseite&lt;/strong&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="/adventskalender/"&gt;Adventskalender&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="/mission-statement/"&gt;Mission Statement&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="/linkliste/"&gt;Linkliste&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="/krautcosmos/"&gt;KrautCosmos &lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="/impressum/"&gt;Impressum&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</code></pre>
<p>Listing 3: Navigationsbereich mit Hauptmenü</p></div>
<h5>Eigenständige Bereiche: Der Elementtyp <code>article</code></h5>
<p class="definition">Das Element <code>article</code> zeichnet einen inhaltlich eigenständigen Bereich auf einer Webseite aus, der zwar im Kontext der Seite steht, aber für sich unabhängig ist.</p>
<p>Ein Inhalt ist dann eigenständig, wenn er auch außerhalb der Seite für sich allein Sinn ergibt, beispielsweise wenn er in einem anderen Kontext wiedergeben oder in einem Portal als eigenständige Komponente dargestellt wird. Das kann ein Weblog-Eintrag sein, ein Artikel, ein Forumsbeitrag oder ein interaktives Widget.</p>
<div id="lst4">
<pre><code>&lt;article>
  &lt;header>
    &lt;h1>Frontendentwicklung ist nicht einfach!&lt;/h1>
    &lt;p class="postmetadata">31. Juli 2009 | Abgelegt in
    &lt;a href="/category/artikel/" rel="category tag">Artikel&lt;/a>
    | Tags: &lt;a href="/tag/css/">CSS&lt;/a>, &lt;a href="/tag/html/">
    HTML&lt;/a>&lt;/p>
  &lt;/header>

  &lt;p>»Aber CSS ist doch einfach!« Man könnte stattdessen auch
  »Frontendentwicklung« oder »HTML« setzen. (...) Lasst es
  Euch nicht einreden: Frontendentwicklung ist nicht einfach,
  sondern eine ständige Herausforderung!&lt;/p>

  &lt;section>
    &lt;h2>Keine Kommentare&lt;/h2>

    &lt;p>Du kannst einen Kommentar hinterlassen oder einen
    Trackback auf deiner Website einrichten.&lt;/p>
  &lt;/section>
&lt;/article></code></pre>
<p>Listing 4: Auszeichnung eines Weblog-Eintrags mit <code>article</code></div>
<p><code>article</code>-Elemente können verschachtelt werden. In diesem Fall repräsentieren die inneren <code>article</code>-Elemente Bereiche, die zwar im Kontext des äußeren stehen, aber eigenständig sind. Ein häufiger Anwendungsfall sind Weblog-Einträge mit Kommentaren, wobei jeder Kommentar in ein eigenes <code>article</code>-Element eingeschlossen wird.</p>
<div id="lst5">
<pre><code>&lt;article>
  &lt;header>
    &lt;h1>Frontendentwicklung ist nicht einfach!&lt;/h1>
    &lt;p class="postmetadata">31. Juli 2009 | Abgelegt in
    &lt;a href="/category/artikel/" rel="category tag">Artikel&lt;/a>
    | Tags: &lt;a href="/tag/css/">CSS&lt;/a>,
    &lt;a href="/tag/html/">HTML&lt;/a>&lt;/p>
  &lt;/header>

  &lt;p>»Aber CSS ist doch einfach!« Man könnte stattdessen
  auch »Frontendentwicklung« oder »HTML« setzen. (...) Lasst
  es Euch nicht einreden: Frontendentwicklung ist nicht
  einfach, sondern eine ständige Herausforderung!&lt;/p>

  &lt;section>
    &lt;h2>1 Kommentar&lt;/h2>

    &lt;p>Du kannst einen Kommentar hinterlassen oder einen
    Trackback auf deiner Website einrichten.&lt;/p>

    &lt;article id="comment-42">
      &lt;header>
        &lt;h3>&lt;cite>Kommentar von Max Mustermann&lt;/cite>&lt;/h3>
        &lt;p class="commentmetadata">02. August 2009&lt;/p>
      &lt;/header>

      &lt;p>Toller Artikel! Danke!&lt;/p>
    &lt;/article>
  &lt;/section>
&lt;/article></code></pre>
<p>Listing 5: Auszeichnung eines Kommentars als verschachteltes <code>article</code>-Element
</div>
<h5>Marginalien und Randbereiche: Der Elementtyp <code>aside</code></h5>
<p class="definition">Das Element <code>aside</code> enthält erläuternde und weiterführende Informationen, welche die Hauptinhalte ergänzen. </p>
<p>Gute Beispiele für den richtigen Einsatz dieses Elements sind Marginalien mit Definitionen oder Erläuterungen, Querverweise zu anderen relevanten Ressourcen oder Kästen mit Hintergrundinformationen, aber häufig wird <code>aside</code> auch einfach zur Auszeichnung von Randspalten mit Navigationsbereichen, Kommentaren etc. verwendet werden. In einem Artikel über Webstandards und das diesbezügliche Engagement der Webkrauts könnten wir wie folgt vorgestellt werden.</p>
<div id="lst6">
<pre><code>&lt;aside&gt;
  &lt;h1&gt;Webkrauts Mission Statement&lt;/h1&gt;

  &lt;p&gt;Die Webkrauts setzen sich dafür ein, die Vorteile der
  Webstandards auch im deutschsprachigen Raum stärker zur
  Geltung zu bringen.&lt;/p&gt;

  &lt;p&gt;Sie leisten Aufklärungsarbeit durch Veröffentlichungen
  im Netz und in anderen Medien.&lt;/p&gt;
&lt;/aside&gt;</code></pre>
<p>Listing 6: Informationen über die Webkrauts als erläuternder Kasten</p></div>
<h5>Fußbereiche: Der Elementtyp <code>footer</code></h5>
<p class="definition">Das Element <code>footer</code> enthält sichtbare Metainformationen über eine Webseite oder ein Sektionselement.</p>
<p>Typische Inhalte sind Informationen darüber, wer den Inhalt der Seite oder Sektion verfasst hat (wobei diese mit <code>address</code> ausgezeichnet werden), oder Links zu anderen Dokumenten, beispielsweise das Impressum oder Angaben zum Datenschutz. Der Footer muss nicht unbedingt am Ende der Sektion stehen, aber üblicherweise tut er das (daher der Name). <code>footer</code>-Elemente können <code>section</code>-Elemente enthalten, um die Inhalte zu unterteilen.</p>
<div id="lst7">
<pre><code>&lt;footer>
  &lt;section>
    &lt;h1>Systemlinks&lt;/h1>

    &lt;ul>
      &lt;li>&lt;a href="/login/">Anmelden&lt;/a>&lt;/li>
      &lt;li>&lt;a href="/login/?action=register">
         Registrieren&lt;/a>&lt;/li>
    &lt;/ul>
  &lt;/section>

  &lt;section>
    &lt;h1>Lizenzbestimmungen&lt;/h1>

    &lt;p>© Webkrauts 2005-2009. Alle Rechte vorbehalten.&lt;/p>
  &lt;/section>
&lt;/footer></code></pre>
<p>Listing 7: Systemlinks und Copyrighthinweise gehören in <code>footer</code>-Elemente</div>
<h4>Sektionen und Überschriften</h4>
<p>Bisher stehen Webautoren die Elemente <code>h1</code> bis <code>h6</code> zur Verfügung, um Überschriften auszuzeichnen. Dokumente enthalten ein oder mehrere <code>h1</code>, die die Hauptüberschriften (Überschriften der ersten Ordnung) der jeweiligen Abschnitte auszeichnen. Die Überschriften <code>h2</code> sind dann die gering weniger wichtigen Überschriften (die Überschriften zweiter Ordnung) der Unterabschnitte. Überschriften dritter Ordnung <code>h3</code> unterteilen wiederum diese Unterabschnitte. Dieses Prinzip lässt sich hierarchisch weiter fortführen bis zur Überschrift <code>h6</code>, der geringstwichtigen Überschrift. Allerdings gibt es dabei zwei Nachteile:</p>
<ul>
<li>Sechs Überschriftebenen sind mehr, als Webautoren in den (aller)meisten Fällen benötigen. Aber was ist, wenn doch einmal weitere Ebenen notwendig sind, beispielsweise in sehr langen, für den Druck aufbereiteten Dokumenten? Es gibt kein Element <code>h7</code>, kein Element <code>h8</code> und so weiter, also müssen Webautoren sich mit Hilfskonstruktionen behelfen.</li>
<li>In seinem Artikel <a href="http://www.einfach-fuer-alle.de/artikel/ueberschriften-strukturen-in-html/">Passende Überschrift hier einsetzen</a> beschreibt Webkraut Tomas Caspers ein weiteres Problem: Darf man Überschriftenebenen auslassen oder müssen diese immer streng hierarchisch und ohne Lücken aufgebaut sein? Der HTML-Standard ist diesbezüglich sehr schwammig, aber die gängige Praxis hat die Frage längst beantwortet. In vielen Fällen lässt es sich nämlich nicht vermeiden, Überschriftenebenen zu überspringen, beispielsweise wenn Webseiten auf Content-Management-Systemen basieren und dieselben Inhalte in verschiedenen Kontexten verwendet werden, wobei deren Überschriftebene nicht angepasst werden kann.</li>
</ul>
<p>HTML5 löst beide Probleme dadurch, dass Überschriften stets einer Sektion zugeordnet werden, wobei Sektionen beliebig tief verschachtelt werden können und so die Ebene einer Überschrift definieren; unabhängig davon, um welche Überschrift welcher Ordnung es sich handelt. <strong>Jede Sektion bringt ihren eigenen Überschriftenkontext mit.</strong> Im folgenden Beispiel enthält jedes <code>section</code>-Element ein eigenes <code>h1</code>, obwohl die einzelnen Apfelsorten eigentlich der Hauptüberschrift »Äpfel« untergeordnet wären.</p>
<div id="lst8">
<pre><code>&lt;article&gt;
  &lt;h1&gt;Äpfel&lt;/h1&gt;

  &lt;p&gt;Der Apfel bildet eine Gattung der Kernobstgewächse aus der
  Familie der Rosengewächse.&lt;/p&gt;

  &lt;section&gt;
    &lt;h1&gt;Red Delicious&lt;/h1&gt;

    &lt;p&gt;Der Red Delicious ist einer der beliebtesten Tafeläpfel,
       vor allem in den USA, und weltweit die meist angebaute
       Sorte. &lt;/p&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h1&gt;Granny Smith&lt;/h1&gt;

    &lt;p&gt; Der Granny Smith gehört zu den sauersten
      Apfelarten überhaupt. Er wird gern zum Backen und
      Kochen verwendet. &lt;/p&gt;
  &lt;/section&gt;
&lt;/article&gt;</code></pre>
<p>Listing 8: Aufbau einer Überschriftenhierarchie über <code>section</code>-Elemente</div>
<p>Der HTML5-Arbeitsentwurf spricht von der »Outline« eines Dokuments. Die Outline besteht aus einer Liste von verschachtelten Sektionen und deren Überschrift. Der Outline-Algorithmus assoziiert jeden DOM-Knoten mit einer speziellen Sektion und (falls vorhanden) deren Überschrift.</p>
<p>Sektionen können explizit im Dokument stehen (<code>section</code>-Element) oder implizit eingeleitet werden durch eine Überschrift. Folgendes HTML-Fragment soll dies deutlich machen:</p>
<div id="lst9">
<pre><code>&lt;article&gt;
  &lt;h1&gt;Überschrift A&lt;/h1&gt;
  &lt;p&gt;Absatz B&lt;/p&gt;

  &lt;h2&gt;Überschrift C&lt;/h2&gt;
  &lt;p&gt;Absatz D&lt;/p&gt;

  &lt;h2&gt;Überschrift E&lt;/h2&gt;
  &lt;p&gt;Absatz F&lt;/p&gt;
&lt;/article&gt;</code></pre>
<p>Listing 9: Implizite Sektionen</p></div>
<p>Das Element <code>h1</code> leitet eine Sektion ein, ebenso die Elemente <code>h2</code>, deren Sektionen in der ersten Sektion verschachtelt sind. <a href="#abb2">Abbildung 2</a> visualisiert dies.</p>
<p id="abb2"><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/html5-sections1.gif" alt="Implizite Sektionen" title="html5-sections1" width="460" height="209" /><br />
  Abb. 2: Überschriften leiten implizite Sektionen ein</p>
<p>Betrachten wir ein komplizierteres Beispiel:</p>
<div id="lst10">
<pre><code>&lt;article&gt;
  &lt;h1&gt;Foo&lt;/h1&gt;

  &lt;h2&gt;Bar&lt;/h2&gt;

  &lt;p&gt;Baz&lt;/p&gt;

  &lt;h2&gt;Quux&lt;/h2&gt;

  &lt;section&gt;
    &lt;h4&gt;Thud&lt;/h4&gt;
  &lt;/section&gt;

  &lt;p&gt;Grunt&lt;/p&gt;
&lt;/article&gt;</code></pre>
<p>Listing 10: Explizite und implizite Sektionen</p></div>
<p>In diesem gibt es folgende Sektionen (siehe auch <a href="#abb3">Abbildung 3</a>:</p>
<ul>
<li>Die implizite Hauptsektion mit der Überschrift »Foo« <strong>und</strong> dem Absatz »Grunt«.</li>
<li>Eine implizite Sektion zweiter Ebene, die von der Überschrift »Bar« eingeleitet wird und den Absatz »Baz« enthält.</li>
<li>Eine weitere implizite Sektion zweiter Ebene, die von der Überschrift »Quux« eingeleitet wird.</li>
<li>Eine explizite Sektion <strong>zweiter</strong> Ebene mit der Überschrift »Thud«.</li>
</ul>
<p id="abb3"><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/html5-sections2.gif" alt="Sektionsgerüst mit expliziten und impliziten Sektionen" title="html5-sections2" width="460" height="238" /><br />
  Abb. 3: Sektionsgerüst eines Fragments mit expliziten und impliziten Sektionen</p>
<p>In diesem Beispiel gibt es einige Besonderheiten, die mit folgender Regel zusammenhängen: <strong>Explizite Sektionen, die durch das <code>section</code>-Element ausgezeichnet werden, schließen implizite Sektionen ab.</strong> In diesem Beispiel hat das folgende Auswirkungen:</p>
<ul>
<li>Die Sektionen Bar, Quux und Thud sind gleichberechtigt auf einer Ebene. Die Outline ist unabhängig davon, welche Hierarchie die Überschriften (<code>h1</code> bis <code>h6</code>) im Dokument tatsächlich haben. <code>&lt;h4&gt;Thud&lt;/h4&gt;</code> wird in der Outline zu einer Überschrift derselben Ebene wie <code>&lt;h2&gt;Bar&lt;/h2&gt;</code>!</li>
<li>Die explizite Sektion Thud schließt alle impliziten Sektionen ab. Der Absatz Grunt gehört damit wieder zur Hauptsektion!</li>
</ul>
<p>Dies zeigt, wie mächtig das neue Outline-Konzept in HTML5 ist und wie schnell es Verwirrung stiften kann. Überschriften haben nicht immer die Ebene, die das Markup vermuten lässt, und Elemente stehen manchmal in einem anderen Kontext als es auf den ersten Blick aussieht. Der HTML5-Entwurf empfiehlt daher,</p>
<ul>
<li>entweder nur Überschriften erster Ordnung (<code>h1</code>) zu verwenden oder darauf zu achten, dass die Überschriftenebenen korrekt sind, und</li>
<li>Sektionen explizit mit <code>section</code>-Elementen auszuzeichnen und sich nicht auf implizite Sektionen zu verlassen.</li>
</ul>
<p>So ist das folgendes <a href="#lst11">Listing 11</a> zwar korrekt im Sinne von HTML5, aber besseres, semantisch hochwertigeres Markup zeigt <a href="#lst12">Listing 12</a> (obwohl die Outline exakt dieselbe ist):</p>
<div id="lst11">
<pre><code>&lt;body&gt;
  &lt;h4&gt;Äpfel&lt;/h4&gt;

  &lt;p&gt;Äpfel sind Früchte.&lt;/p&gt;

  &lt;section&gt;
    &lt;h2&gt;Geschmack&lt;/h2&gt;
    &lt;p&gt;Sie schmecken toll.&lt;/p&gt;

    &lt;h6&gt;Süße&lt;/h6&gt;
    &lt;p&gt;Rote Äpfel sind süßer als grüne.&lt;/p&gt;

    &lt;h1&gt;Farbe&lt;/h1&gt;
    &lt;p&gt;Äpfel gibt es in verschiedenen Farben.&lt;/p&gt;
  &lt;/section&gt;
&lt;/body&gt;</code></pre>
<p>Listing 11: Schlechtes HTML5-Markup mit falschen Überschriftenebenen und impliziten Sektionen</p></div>
<div id="lst12">
<pre><code>&lt;body&gt;
  &lt;h1&gt;Äpfel&lt;/h1&gt;

  &lt;p&gt;Äpfel sind Früchte.&lt;/p&gt;

  &lt;section&gt;
    &lt;h2&gt;Geschmack&lt;/h2&gt;
    &lt;p&gt;Sie schmecken toll.&lt;/p&gt;

    &lt;section&gt;
      &lt;h3&gt;Süße&lt;/h3&gt;
      &lt;p&gt;Rote Äpfel sind süßer als grüne.&lt;/p&gt;
    &lt;/section&gt;
  &lt;/section&gt;

  &lt;section&gt;
    &lt;h2&gt;Farbe&lt;/h2&gt;
    &lt;p&gt;Äpfel gibt es in verschiedenen Farben.&lt;/p&gt;
  &lt;/section&gt;
&lt;/body&gt;</code></pre>
<p>Listing 12: Gutes HTML5-Markup mit passenden Überschriftenebenen und vollständigem Sektionsgerüst</p></div>
<h5>Überschriftengruppen: Der Elementtyp <code>hgroup</code></h5>
<p class="definition">Das Element <code>hgroup</code> gruppiert Elemente vom Typ <code>h1</code> bis <code>h6</code> und fasst diese zu einem Element zusammen.</p>
<p>Ein typischer Anwendungsfall sind Titel und Untertitel wie in folgendem Beispiel:</p>
<div id="lst13">
<pre><code>&lt;hgroup&gt;
 &lt;h1&gt;Einführung in XHTML, CSS und Webdesign&lt;/h1&gt;
 &lt;h2&gt;Standardkonforme, moderne und barrierefreie Websites
    erstellen&lt;/h2&gt;
&lt;/hgroup&gt;</code></pre>
<p>Listing 13: Überschriften mit <code>hgroup</code> zusammenfassen</div>
<p>Die Ordnung des <code>hgroup</code>-Elements entspricht der Ordnung der höchsten darin enthaltenen Überschrift, im oberen Fall repräsentiert das <code>hgroup</code>-Element eine Überschrift erster Ordnung. Die weiterne Überschriften werden für die Berechnung der Outline ignoriert – sie öffnen somit keine weiteren Sektionen.</p>
<h4>Und die Browser? Praktischer Einsatz der neuen Elemente</h4>
<p>Aktuelle Versionen von Opera, Safari und Firefox stellen alle in diesem Artikel vorgestellten Elemente wie gewünscht dar. Lediglich ein</p>
<pre><code>article, aside, footer, header, hgroup, nav, section
  { display: block; }</code></pre>
<p>ist notwendig, damit die neuen Elemente sich so verhalten, wie man es erwarten könnte. Ältere Browser haben allerdings einige Probleme.</p>
<ul>
<li>Firefox 2 (und jeder andere Browser mit einer Gecko-Version kleiner als 1.9b5) schließt unbekannte Elemente, sobald er auf ein Blockelement stößt wie <code>p</code>, <code>h1</code>, <code>div</code> und so weiter. Auf diese Browser brauchen Webentwickler allerdings heute nicht mehr zu achten. Die Mozilla Foundation hat die Unterstützung für Firefox 2 mittlerweile eingestellt – und auch wir sollten das tun.</li>
<li>Im Internet Explorer gibt es ein ähnliches Problem, und das zieht sich durch sämtliche Versionen, die heute noch relevant sind – leider sind das alle Versionen bis hinab zum IE 6. Der IE schließt unbekannte Elemente <em>stets</em> sofort, ganz gleich, welches Element dem unbekannten Element nachfolgt.</li>
</ul>
<p>Im DOM (Document Object Model) dieser Browser wird aus</p>
<pre><code>&lt;section class="sektion"&gt;
  &lt;h1&gt;Foo&lt;/h1&gt;

  &lt;p&gt;Bar&lt;/p&gt;
&lt;/section&gt;

&lt;p&gt;Baz&lt;/p&gt;
</code></pre>
<p>folgendes:</p>
<pre><code>&lt;section class="sektion"&gt;&lt;/section&gt;
&lt;h1&gt;Foo&lt;/h1&gt;
&lt;p&gt;Bar&lt;/p&gt;
&lt;/section&gt;&lt;//section&gt;
&lt;p&gt;Baz&lt;/p&gt;</code></pre>
<p><code>&lt;section&gt;</code> und <code>&lt;/section&gt;</code>; werden also nicht als öffnenden und schließenden Tag eines Elements erkannt, sondern in beiden Fällen als Start-Tag eines eigenen Elements, dem jeweils ein schließender Tag hinzugefügt wird. So entsteht <code>&lt;//section&gt;</code> als schließendes Tag für <code>&lt;/section&gt;</code>. Aus Container-Elementen, die sich per CSS stylen oder per Scripting ansprechen lassen, werden so leere Elemente, mit denen Webautoren nichts mehr anfangen können.</p>
<p>Dieses Problem können Webautoren nicht ignorieren. Peter Kröner schlägt daher in einem <a href="http://www.peterkroener.de/html5-was-geht-heute-schon-was-geht-nicht-der-grosse-ueberblick/">lesenswerten Artikel</a> einige Workarounds vor.</p>
<p>Die beste Lösung stellt dabei das <a href="http://remysharp.com/2009/01/07/html5-enabling-script/">HTML5 enabling script</a> von Remy Sharp dar. Darüber kann jedes (unbekannte) Element beim Browser per JavaScript angemeldet werden. Für das <code>section</code>-Element sieht das beispielsweise so aus:</p>
<pre><code>document.createElement('section');</code></pre>
<p>Die angemeldeten Elemente werden dann wie bekannte Elemente behandelt, d.h. Webautoren können mit ihnen in allen Belangen arbeiten. Das HTML5 enabling script meldet alle neuen HTML5-Elemente an und wird im Gleichschritt mit dem HTML5-Entwurf aktualisiert. Gewissenhafte Webautoren sehen jedoch sofort das Problem an dieser Methode: Wenn im Browser JavaScript nicht aktiviert ist, funktioniert das Skript und somit vermutlich die gesamte Website nicht. Im professionellen Einsatz ist diese Methode folglich untauglich, da es schlichtweg schlechter Stil ist, aktiviertes JavaScript vorauszusetzen.</p>
<h4>Fazit</h4>
<p>Die neuen Elemente geben Webautoren die Möglichkeit, semantische Strukturen aufzubauen, wo sie bisher auf <code>div</code>-Container zurückgreifen mussten. Die Anzahl und Namen der neuen Elemente sind gut durchdacht, dennoch gibt es Stimmen, die das anders sehen und denen dieser Teil der HTML5-Empfehlung nicht weit genug geht, darunter Adrian Bateman von Microsoft. Er kritisiert in seinem <a href="http://lists.w3.org/Archives/Public/public-html/2009Aug/0389.html">Posting an die HTML-Mailingliste des W3C</a> unter anderem, dass die neuen Elemente zu unspezifisch seien und keinen Fortschritt gegenüber bewährten Auszeichnungen darstellten. Er schreibt:</p>
<blockquote lang="en" cite="http://lists.w3.org/Archives/Public/public-html/2009Aug/0389.html">
<p>»It&#039;s not clear why these new elements in particular are necessary. Those that use HTMLElement for their interface provide no extra functionality beyond <code>&lt;div class="xxx"&gt;</code> or <code>&lt;span class=""&gt;</code>. If they are necessary, do we know if this is the correct set? Are there any missing?</p>
</blockquote>
<p>Wer würde ihm nicht widersprechen und klarstellen wollen, dass <code>&lt;header&gt;</code> gegenüber <code>&lt;div class="header"&gt;</code> definitiv ein Fortschritt ist? Es liegt auf der Hand, dass HTML als Auszeichnungssprache, die nur auf eine Handvoll Elemente beschränkt ist, nicht für jeden denkbaren Fall das richtige Element parat hat. Hilfskonstruktionen mit semantisch bedeutungslosen <code>div</code>- und <code>span</code>-Elementen werden Webautoren in Zukunft weiter nutzen müssen, mit HTML5 allerdings weit weniger als bisher.</p>
<p>Das Outline-Konzept, das die Hierarchie von Überschriften unabhängig vom tatsächlichen Markup auf der Basis von (expliziten und impliziten) Sektionen berechnet, ist eine gute Idee und löst einige Probleme, die Webautoren und Programmierer derzeit mit Überschriften haben. Allerdings fügt es eine Komplexität auf einer neuen Ebene hinzu, die womöglich andere Probleme mit sich bringt.</p>
<p>In Zukunft werden sich – wie es ja bereits heute mit dem bisherigen Sprachumfang der Fall ist – typische Muster herausbilden, die das Markup für Standardauszeichnungen vorgeben. Es wird weniger die Frage sein, <em>wie</em> die neuen Elemente einzusetzen sind, sondern eher, <em>ob</em> Webautoren sie einsetzen sollten. Heute gibt es noch keine Möglichkeit sicherzustellen, dass die neuen Elemente in allen Browsern funktionieren, die derzeit in relevantem Umfang im Einsatz sind. Alle Lösungen haben einen Haken. Ich persönlich würde die neuen Elemente (und somit HTML5) heute im privaten Umfeld bereits einsetzen, aber keinesfalls in Kundenprojekten oder auf Websites, die sich nicht erlauben können, Nutzer veralteter Browser mit eigenwilligen Konfigurationen auszuschließen. Eric Eggert hat das auf seiner (privaten) Website <a href="http://yatil.de/Weblog/wer-heute-schon-html5-einsetzen-sollte">auf den Punkt gebracht</a>:</p>
<blockquote>
<p>»HTML5 wird von keinem Browser aktiv unterstützt, es geht im Moment nur nichts kaputt. Das ist eine tolle Sache, eignet es sich doch für Experimente wie diese Seite hier oder für das ein oder andere Experiment zum Beispiel mit den audio und video-Elementen. Alle, die nicht experimentieren wollen oder können, zum Beispiel bei Projekten für Kunden oder den Arbeitgeber, sollten HTML5-Features nur ganz, ganz sparsam einsetzen und nur Teile, die sicher sind.«</p>
</blockquote>
<h5>Zum Autor</h5>
<p><img id="image149" src="http://www.webkrauts.de/wp-content/uploads/2006/12/mj_60x60.jpg" alt="Michael Jendryschik" class="bild-links"/>Michael Jendryschik konzipiert und entwickelt Websites. Er leitet den Bereich Webentwicklung bei der <a href="http://www.itemis.de/">itemis AG</a> in Lünen. Er ist Buchautor (<a href="http://jendryschik.de/wsdev/einfuehrung/">Einführung in XHTML, CSS und Webdesign</a>), <a href="http://jendryschik.de/publikationen/buecher-und-fachartikel/">schreibt Fachartikel</a> und <a href="http://jendryschik.de/publikationen/schulungen-und-vortraege/">hält Vorträge</a>, hauptsächlich zu Web-Frontend-Themen. Seine Arbeitsschwerpunkte sind XML-Technologien, Web-Usability und vor allem professionelles Webdesign mit (X)HTML und CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/09/24/das-endoskelett-einer-webseite/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Moderne Semantik</title>
		<link>http://www.webkrauts.de/2009/09/21/moderne-semantik/</link>
		<comments>http://www.webkrauts.de/2009/09/21/moderne-semantik/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 14:55:48 +0000</pubDate>
		<dc:creator>Eric Eggert</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[HTML5-Einführung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=587</guid>
		<description><![CDATA[Auch wenn bisher nur ein Entwurf vorliegt, ist klar: HTML5 wird der neue Standard für Markup. Die Webkrauts widmen sich dem Thema deshalb in einer mehrteiligen Serie. Eric Eggert eröffnet die Reihe und fragt nach dem Weshalb, Was und Wann.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.webkrauts.de/wp-content/uploads/2009/09/webkrauts-html5-reihe1.gif" alt="" class="bild-rechts" />
<p><span class="caps">HTML5</span> wird der neue Markup-Standard, daran gibt es <a href="http://www.webkrauts.de/2009/07/24/xhtml-2-outsourcing-2-0/">mittlerweile keinen Zweifel mehr</a>. Grund genug einmal zu schauen was eigentlich dahinter steckt.</p>
<h4>Weshalb wurde <span class="caps">HTML5</span> entwickelt?</h4>
<p>Das Web hat sich seit 1999, als <span class="caps">HTML4</span>/XHTML1 entwickelt wurde, grundlegend verändert. Aus einem Web von statischen Dokumenten wurden hochkomplexe Applikationen, für die aber kaum semantisches Fundament vorhanden ist. Das soll sich in <span class="caps">HTML5</span> ändern.</p>
<p>Die Entwicklung begann bei der <a href="http://whatwg.org"><span class="caps">WHATWG</span></a>, einer Gruppe von Browserherstellern, die mit dem <span class="caps">W3C</span>-Prozess nicht einverstanden waren. Dort wurde der (zu vorigen (X)HTML-Versionen inkompatible) <span class="caps">XHTML2</span>-Standard entwickelt, der aber auf keinerlei Akzeptanz bei den Browserherstellern stieß. 2006 sah das <span class="caps">W3C</span> ein, dass <span class="caps">HTML5</span> eine gute Sache ist und reaktivierte die alte <a href="http://www.w3.org/html/wg/"><span class="caps">HTML</span>-Arbeitsgruppe</a>. Beide Organisationen existieren heute nebeneinander und arbeiten an einer gemeinsamen Spezifikation, Editor <a href="http://ln.hixie.ch/">Ian Hickson</a> (Google) sammelt die Vorschläge und führt sie zusammen.</p>
<h4>Was sind die Prinzipen und Ziele der <span class="caps">HTML5</span>-Entwicklung?</h4>
<ol>
<li><strong>Unterstütze existierende Inhalte</strong>: Parser (nicht Autoren!) sollen mit alten, aber dennoch existierenden Techniken umgehen können, auch wenn sie nicht in <span class="caps">HTML5</span> festgelegt sind. So werden bspw. fehlerhaft verschachtelte Elemente (<code>&lt;b&gt;a&lt;i&gt;b&lt;/b&gt;c&lt;/i&gt;</code>) genauso unterstützt wie Elemente, die nicht mehr zum Standard gehören (<code>&lt;u&gt;</code> etwa).</li>
<li><strong>Graceful degradation</strong> (etwa: „Schrittweises Zurückfallen“): Wird eine Komponente in <span class="caps">HTML5</span> nicht von einem Browser unterstützt, so darf das nicht dazu führen, dass die gesamte Webseite unzugänglich wird. <em>Beispiel:</em> Das (vorgeschlagene) <code>irrelevant</code>-Attribut kann per <span class="caps">CSS</span> emuliert werden: <code>[irrelevant] {display:none;}</code></li>
<li><strong>Das Rad nicht neu erfinden</strong>: Wenn es schon eine weit verbreitete und implementierte Technik gibt, dann sollte sie übernommen werden statt etwas komplett neues zu entwickeln. <em>Beispiel:</em> <code>contenteditable=""</code> (um Bereiche der Seite bearbeitbar zu machen) ist bereits in vielen Browsern vorhanden und wird daher übernommen.</li>
<li><strong>Paving the Cowpaths</strong> (etwa: „Trampelpfade pflastern“): Wenn es schon weit verbreitete Techniken gibt, dann sollte in Erwägung gezogen werden diese zu nutzen. <em>Beispiel:</em> <code>&lt;br /&gt;</code> kommt oft in <span class="caps">HTML</span> statt <code>&lt;br&gt;</code> vor und es schadet niemandem, wenn man die Nutzung erlaubt.</li>
<li><strong>Evolution statt Revolution</strong>: <span class="caps">HTML5</span> entwickelt (X)HTML weiter und wirft altbekannte Grundsätze nicht weg. Das bedeutet, dass Webentwickler nichts komplett neues erlernen müssen, sondern nach und nach neue Features einbauen können. Das gilt natürlich auch für die Hersteller von Browsern.</li>
</ol>
<h4>Muss ich jetzt <span class="caps">HTML</span> statt <span class="caps">XHTML</span> schreiben?</h4>
<p><strong>Nein.</strong> HTML5 verfügt über beide Serialisationen (Schreibweisen), kann also sowohl als X(HT)ML als auch als <span class="caps">HTML</span> geschrieben und interpretiert werden. Wichtig ist: Beide  verfügen nach dem Parsen über den <em>selben</em> DOM-Baum. Es wird also tendenziell einfacher JavaScripts für <span class="caps">HTML</span> und <span class="caps">XHTML</span> zu schreiben.</p>
<p>Der <span class="caps">DOM</span>-Baum von <span class="caps">HTML4</span> und <span class="caps">XHTML1</span>-Dokumenten konnte zuvor trotz gleicher Schreibweise unterschiedlich sein. Bei einem <span class="caps">HTML4</span>-Dokument wird zum Beispiel bei folgender Tabelle ein <code>&lt;tbody&gt;</code> explizit in das <span class="caps">DOM</span> eingefügt, bei <span class="caps">XHTML</span> nicht:</p>
<pre><code>&lt;table&gt;&lt;tr&gt;&lt;td&gt;Text&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</code></pre>
<p>Das bedeutet, dass <span class="caps">CSS</span> wie <code>table &gt; tr &gt; td</code> in <span class="caps">HTML4</span> keine Wirkung zeigt.</p>
<p>Zum anderen erlaubt <span class="caps">HTML5</span> ausdrücklich die Nutzung der <span class="caps">XML</span>-Syntax für Elemente ohne End-Tag: <code>&lt;img … /&gt;</code> führt nicht mehr zu Validierungsfehlern, auch wenn man ein <span class="caps">HTML</span>-Dokument benutzt.</p>
<h4>Wann wird <span class="caps">HTML5</span> fertig?</h4>
<p>„Fertig“ ist im aktuellen <span class="caps">W3C</span>-Prozess ein sehr dehnbarer Begriff. Ein (vorgeschlagener) Standard muss heute viele Tests überstehen und Bedingungen erfüllen, um vom <span class="caps">W3C</span> final abgesegnet werden. Für <span class="caps">HTML5</span> wird dafür extra eine Testsuite erstellt, die dann auch noch von 2&nbsp;Browsern (oder vom Marktführer) bestanden werden müssen. Dieser letzte Teil, der sich bis 2022 hinziehen könnte, ist aber in der Praxis für Webentwickler relativ uninteressant – wir nutzen ja auch <span class="caps">CSS2</span>.1, das sich seit Jahren in der Entwicklung befindet, weitgehend implementiert ist, aber eben noch keine <span class="caps">W3C</span>-Empfehlung ist. Trotzdem würde kein Webentwickler sagen <span class="caps">CSS2</span>.1 sei nicht „fertig“.</p>
<p>Die <span class="caps">HTML5</span>-Arbeitsgruppe im <span class="caps">W3C</span> bereitet gerade die Veröffentlichung eines ersten Last Call vor, die im Oktober erscheinen soll. <span class="caps">HTML5</span> definiert dann praktisch eine Todo-Liste für die Browserhersteller.</p>
<p>Gerade in den letzten Wochen hat sich mit der Gründung der <a href="http://www.zeldman.com/superfriends/"><span class="caps">HTML5</span> Super Friends</a>, unter der Führung von <a href="http://www.zeldman.com/">Jeffrey Zeldman</a>, und der Einreichung <a href="http://www.zeldman.com/superfriends/guide/">ihrer Anregungen</a> einiges an der Spezifikation geändert, was Autoren betrifft.</p>
<h4>Sollte man <span class="caps">HTML5</span> jetzt verwenden?</h4>
<p>Das kommt auf das Projekt an. Es schadet nichts, gewohntes (X)HTML zu nutzen und den neuen Doctype drüber zu schreiben, doch es hat auch keine wirklichen Vorteile. Die neuen Elemente (<code>&lt;nav&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;section&gt;</code>) funktionieren in vielen Browsern noch nicht (IEs, Firefox 2) und haben dort wo sie funktionieren auch noch keine semantischere Bedeutung als <code>div</code>s. Will man alle Browser mit im Boot haben und die IEs auch ohne JavaScript unterstützen, so kommt man um Hilfkonstruktionen und mehrfachverschachtelte <code>div</code>s wohl nicht herum.</p>
<p>Für kleine, private Seiten, die nicht den Anspruch haben unter jeder Konfiguration gleich (gut) auszusehen, lohnt sich der Blick über den Tellerrand aber bereits, erst recht wenn man auch mit den neuen JavaScript-APIs spielen möchte. Für die alltägliche Arbeit sollte man aber vielleicht heute noch auf altbekannte Elemente setzen und eine <a href="http://forabeautifulweb.com/blog/about/more_on_developing_naming_conventions_microformats_and_html5/">Namenskonvention mit Klassen einführen</a>, die <span class="caps">HTML5</span>-Elemente widerspiegelt.</p>
<h4>Wie geht’s hier weiter?</h4>
<p>In den nächsten zwei Wochen stellen euch einige unserer Autoren auf <a href="http://webkrauts.de/">webkrauts.de</a> die wichtigsten neuen Elemente im Detail vor &#8211; ausgehend vom aktuellen Entwurf. Es wird um die semantische Grundaufteilung einer Webseite gehen, um Elemente für Video- und Audiodateien, um Spielereien mit  und um die neuen Möglichkeiten für das <code>input</code>-Element. Den Abschluss bildet ein Beispiel aus der Praxis: Wir nutzen HTML5 für ein Blog-Projekt.</p>
<h5>Zum Autor</h5>
<p><img id="image341" src="http://www.webkrauts.de/wp-content/uploads/2008/12/3049822615_220a0ee962_bigger.jpg" alt="" class="bild-links" />Eric Eggert glaubt an das offene und für jeden zugängliche Web. Deshalb setzt er sich im W3C mit dem neuen HTML5-Standard auseinander und hilft der BAD TF dabei gute Beispiele für Barrierefreie Webseiten zu entwickeln. Er bloggt (von Zeit zu Zeit) auf <a href="http://yatil.de/">yatil.de</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2009/09/21/moderne-semantik/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

