<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Tobias Otte - Essays</title>
        <link>http://tobias-otte.de/</link>
        <description></description>
        <language>de</language>
        <copyright>Copyright 2010</copyright>
        <lastBuildDate>Wed, 15 Apr 2009 23:33:49 +0100</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Semantik in HTML 5</title>
            <description><![CDATA[<p class="eyecatcher_box">Dieser Artikel ist eine freie Übersetzung von <a href="http://www.alistapart.com/articles/semanticsinhtml5">Semantics in HTML 5</a>, geschrieben im Januar 2009 von <a href="http://johnfallsopp.com/">John Allsopp</a> für <a href="http://www.alistapart.com/">A List Apart</a>.</p>

<p>Ich werde nun eine mutige Vorhersage machen. Lange nachdem wir nicht mehr auf dieser Erde verweilen wird <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> immer noch da sein. Nicht nur in Milliarden archivierter Seiten unserer Ära, sondern als ein lebendiges, atmendes Wesen. Zu viel Anstrengungen, Energie und Investitionen wurden in die Entwicklung von Webtools, Protokollen und Plattformen gesteckt um es so leicht aufzugeben.</p>

<p>Lasst uns über unsere Verantwortung nachdenken. Durch einen Zufall der Geschichte sind wir mit der Entwicklung eines der wichtigsten Kommunikationswerkzeuge unserer Zivilisation für die nächsten Jahrzehnte verbunden. Also, wenn wir, ob träumerisch oder ernsthaft, darüber nachdenken <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> zu verbessern müssen wir verstehen wie weitreichend die Verzweigungen unserer heutigen Entscheidungen sein könnten.</p>

<p><a href="http://dev.w3.org/html5/spec/Overview.html"><abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr></a>, das <abbr xml:lang="en" title="World Wide Web Consortium">W3C</abbr> verdoppelte kürzlich die Anstrengungen um die nächste Generation von HTML in Form zu bringen, hat im letzten Jahr erheblich an Schwung gewonnen. Es ist ein gewaltiges Projekt, es umfasst nicht einfach nur die Struktur von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> sondern auch das <abbr xml:lang="en" title="Document Object Model">DOM</abbr>, Algorithmen für Resourcenfetching, Mediainhalte, 2D Zeichnungen, Datentemplating, clientseitige Datenspeicherung, Modelle für Syntaxanalyse, Ausnahmebehandlung, Sicherheit und Pageloading und vieles mehr.</p>

<p>Es gibt außerdem Verbesserungen der Struktur, Syntax und Semantik von denen einige in &#8222;<a href="http://www.alistapart.com/articles/previewofhtml5">A Preview of <abbr xml:lang="en" title="Hypertext Markup Language">HTML 5</abbr></a>.&#8220; von Lachlan Hunt gezeigt werden.</p>

<p>Aber in diesem Artikel wollen wir uns auf die Semantik konzentrieren. Sie ist etwas was mich seit vielen Jahren beschäftigt und sie ist meiner Meinung nach fundamental wichtig für die Zukunft von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr>.</p>

<p>Die <abbr xml:lang="en" title="British Broadcasting Corporation">BBC</abbr> kündigte vor kurzem an, dass sie, aufgrund von Zugänglich- und Nutzbarkeitsüberschneidungen bei dem <a href="http://microformats.org/wiki/abbr-design-pattern"><code>abbr</code>-design-pattern</a>, <a href="http://www.bbc.co.uk/blogs/radiolabs/2008/06/removing_microformats_from_bbc.shtml">das hCalender Microformat aus ihren Programmübersichten entfernen wird</a>. Dies zeigt das wir ohne jeden Zweifel die Semantik von HTML weit weg von dem was wir eigentlich wollten und auch weit weg von dem was eigentlich mit der Sprache möglich ist gebracht haben. Wir haben einfach die Kontrolle über die <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> Elemente und Attribute mit denen wir semantische Dokumente auszeichnen verloren. Wenn wir weiterhin so geschickt mit dem existierenden Konstrukt umgehen werden noch mehr Probleme wie dieses entstehen. Aber <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> leidet als semantische Auszeichnungssprache unter einem grundlegenden Mangel &#8212; die Semantik ist fest und nicht austauschbar.</p>

<p>Dies ist nicht einfach nur ein theoretisches Problem. Hunderttausende Entwickler nutzen das <code>class</code> und <code>id</code> Attribut um die Semantik Ihrer Dokumente zu verbessern. (Sie nutzen sie auch als &#8222;Haken&#8220; für das Styling mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> aber das ist eine andere Baustelle.) Fast ausnahmslos verwenden diese Entwickler zum Inhalt passende Begriffe &#8212; diese sind, anstatt Werte von existierenden Schemas zu nutzten, selbst ausgedacht. Es ist bestenfalls pseudosemantisches Markup.</p>

<p>Viele Seiten im Web nutzen Microformate um mehr strukturierte Semantik einzusetzen als eigentlich in <a href="http://westciv.com/style_master/house/good_oil/semantics/htmlsemantics.html"><abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr>s dürftigen Satz von Elementen und Attributen</a> vorhanden ist. In diesem Fall sind die Werte die für das <code>class</code> Attribut genutzt werden  festgelegte Begriffe, manchmal übernommen aus vorhandenen Standards wie <a href="http://en.wikipedia.org/wiki/VCard">vCard</a>, machmal sind es neu erdachte Begriffe für die vorher kein stabiler Standard vorhanden war (wie im Fall von <a href="http://en.wikipedia.org/wiki/HReview">hReview</a>).</p>

<h2>Erweiterbare Semantik</h2>

<p>Es ist ein sehr reales Problem welches gelöst werden muss. Wir brauchen einen Mechanismus in <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> welcher Entwicklern die Möglichkeit geben muss klar und unzweideutig bessere und aussagekräftigere Semantik, nicht Pseudosemantik, in ihr Markup zu integrieren. Die ist vielleicht das dringlichste Ziel für das <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> Projekt.</p>

<p>Aber es ist nicht so einfach einen neuen Mechanismus zu entwickeln: Es gibt bedeutende Einschränkungen für jede Lösung. Die vielleicht größte ist die Rückwärtskompatibilität. Die Lösung kann nicht Millionen an vorhandene und auch in den kommenden Jahren genutzten Seiten unbenutzbar machen. Jede Lösung die nicht rückwärtskompatibel ist wird aus Angst vor dem Ausschließen von Nutzern nicht weit genug von den Entwicklern angenommen. Sie würde schnell untergehen.</p>

<p>Die Lösung muss aber auch vorwärtskompatibel sein. Nicht in dem Sinne das sie in zukünftigen Browsern funktionieren muss &#8212; das liegt in der Verantwortung der Browserentwickler &#8212; aber sie muss <strong>erweiterbar</strong> sein. Wir können nicht erwarten das eine einzige Lösung die wir jetzt entwickeln alle vorstellbaren und unvorstellbaren semantischen Notwendigkeiten der Zukunft abdeckt. Wir <strong>können</strong> eine Lösung entwickeln die erweiterbar ist um zukünftigen Anforderungen entgegen zu kommen.</p>

<p>Diese zwei Aufgaben zusammen sind eine große Herausforderung. Aber im Kontext einer Sprache deren nächste große Überarbeitung in einem Jahrzehnt kommt und deren Einfluss auf eine globale Plattform für Kommunikation überragend ist muss diese Herausforderung gelöst werden.</p>

<p>Also wie löst <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> dieses Problem? <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> führt neue Elemente ein. Einige davon sind das was ich als &#8222;strukturell bedingt&#8220; bezeichne &#8212; <code>section</code>, <code>nav</code>, <code>aside</code>, <code>header</code>, und <code>footer</code>. Das <code>dialog</code> Element ist eine Art Content-Element in Anlehnung an <code>blockquote</code>. Es gibt außerdem einige Datenelemente wie zum Beispiel <code>meter</code> und das <code>time</code> Element welches ein Datum und/oder eine Zeit markiert.</p>

<p>Auch wenn die Elemente nützlich sein können und auch schon einiges Interesse auf sich gezogen haben, lösen sie wirklich die Probleme die wir identifiziert haben, besonders in Anbetracht der Vor- und Rückwertskompatiblität?</p>

<p>Lasst uns jede Bedingung einzeln betrachten.</p>

<h3>Rückwärtskompatibilität</h3>

<p>Wie gehen gegenwärtige Browser mit neuen Elementen wie dem <code>section</code> Element um? Gut, die aktuellen Versionen von Safari, Opera, Mozilla, und auch der <abbr xml:lang="en" title="Internet Explorer 7">IE7</abbr> wird die Seite wie folgt rendern.</p>

<p class="eyecatcher_box">
<code>
&lt;h1&gt;Top Level Heading&lt;/h1&gt;<br />
<br />
&lt;section&gt;<br />
&nbsp;&nbsp;&lt;h1&gt;Second Level Heading&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;this is text in a section element&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;section&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Third Level Heading&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/section&gt;<br />
 &lt;/section&gt;
</code>
</p>

<p>Sieht nach einem guten Start aus. Aber wenn wir versuchen zu stylen, zum Beispiel das <code>section</code> Elemente mit diesem <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr>:</p>
<p class="eyecatcher_box">
<code>
section {color: red}
</code>
</p>
<p>&#133; können zwar die meisten der oben erwähnten Browsers das Element stylen aber der <abbr xml:lang="en" title="Internet Explorer 7">IE7</abbr> (und somit vermutlich auch der 6) können es nicht.</p>

<p>Also haben wir ein ernsthaftes Problem mit der Rückwärtskompatibilität in 75% der momentan genutzten Browser. Wenn wir uns die Halbwertszeit des Internet Explorers ansehen können wir voraussagen das auch noch in einigen Jahren die meisten Nutzer den <abbr xml:lang="en" title="Internet Explorer 6">IE6</abbr> oder den <abbr xml:lang="en" title="Internet Explorer 7">IE7</abbr> nutzen werden.</p>

<p>Wenn <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> diese neuen Elemente einführt, wie hoch ist die Wahrscheinlich das die Mehrheit der Entwickler sie auch nutzen &#151; das Wissen vorausgesetzt das sie im wesentlichen inkompatibel mit der Mehrheit der genutzten Browser sind?</p>

<p>Wenn wir nach einer alternativen Lösung für das <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> Problem schauen, das Setzen eines <code>class</code> Attributs für die <code>section</code> Elemente um sie dann über die Klasse zu stylen funktioniert es unglücklicherweise auch nicht im <abbr xml:lang="en" title="Internet Explorer">IE</abbr>. Es gibt vielleicht einige Workarounds aber diese stellen auch keine praktikable Lösung da.</p>

<p>Weiter geht es mit der Vorwärtskompatibilität, der zweiten Bedingung.</p>

<h3>Vorwärtskompatibilität</h3>

<p>Starten wir mit der Frage: &#8222;Warum erfinden wir diese neuen Elemente?&#8220; Eine begründete Antwort könnte sein: &#8222;Weil <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> nicht semantisch genug ist und durch die neuen Elemente steigern wir die Semantik&#8220; &#8212; das kann nicht falsch sein, oder?</p>

<p>Durch das Hinzufügen dieser Elemente zeigen wir das <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> mehr semantische Fähigkeiten braucht. Aber nur in einem engen Anwendungsbereich. Egal wie viele Elemente wir aussieben wir werden immer denken das es nicht ausreicht. Also, wir können so viele Elemente hinzufügen wie wir wollen, es wird das Problem nicht lösen. Wir brauchen nicht <strong>spezielle Ausdrücke</strong> zu den Begriffen von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> hinzufügen, wir müssen eine <strong>Mechanismus</strong> einbauen der es uns erlaubt einem Dokument so viel semantische Fülle zu geben wie es braucht. Wir müssen <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> <strong>erweiterbar</strong> machen. <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> enthält keinen Mechanismus für Erweiterbarkeit.</p>

<p><abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> implementiert Dinge die in einem großen Prozentsatz der aktuellen Browser nicht funktionieren und uns somit überhaupt nicht erlaubt wirklich die Semantik zu erweitern.</p>

<p>Verschiedene Fragen betreffend dieser neuen Elemente bleiben über. Woher kommen die Namen? Wie wurde es entschieden das es ein Element für die Navigation gibt das "nav" genannt wird? Warum sollen die selbe Bedingung auch auf andere Navigationen zutreffen?</p>

<p>Warum keine Begriffe aus existierenden Systemen, so wie <a href="http://www.docbook.org/">Docbook</a>, übernehmen? Seine Dokumentstruktur ist viel reichhaltiger und es wurde über viele Jahre von Puplishing-Experten entwickelt. Dies ist kein Argument zugunsten von Docbook speziell: Der Punkt ist das die extrem wichtige Aufgabe die Semantik von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> zu erweitern sich nicht plötzlich stellt weshalb sich ein Blick auf die besten Arbeiten der letzten 30 Jahre lohnt. (Ursprünglich begann die Arbeit an <abbr xml:lang="en" title="Geography Markup Language">GML</abbr> in den frühen Siebzigern).</p>

<h2>Einige Gedanken über eine Lösung</h2>

<p>So, ich kritisiere die gegenwärtigen Bemühungen, habe ich auch eine praktische Lösung für das Problem? Nun, ich habe zumindest einen Anfang.</p>

<p>Wenn das Hinzufügen neuer Elemente in <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> nicht in Frage kommt, zumindest nicht innerhalb dieser Diskussion, sind logischerweise die Attribute der Bereich von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> auf den wir uns konzentrieren sollten. Für fast ein Jahrzehnt haben wir <code>class</code> und <code>id</code> Attribute zur Erweiterung von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> genutzt. Ein Großteil der Entwickler sind den Umgang mit diesen gewohnt. Das <a href="http://microformats.org/wiki/Main_Page">Microformat Projekt</a> zeigt das die existierenden Attribute von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> nicht ausreichen um die Semantik von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> zu erweitern. Also, wenn wir Attribute zur Lösung dieses Problems nutzen möchten, müssen wir ein oder mehr neue Attribute hervorbringen. Bevor wir darauf eingehen wie das funktioniert ist es nur fair wenn wir für diesen Vorschlag die gleichen Anforderungen stellen die wir auch an die neuen <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> Elemente stellen. Das Wichtigste, ist die Einführung neuer Attribute rückwärtskompatibel? Und wenn sie es ist, bietet sie einen funktionierenden Mechanismus um die Semantik zu erweitern?</p>

<p>Erfinden wir ein neues Attribut. Ich nenne es &#8222;structure,&#8220; aber der genaue Name ist nicht von Bedeutung. Wir können es so nutzen:</p>

<p class="eyecatcher_box">
<code>
&lt;div structure="header"&gt;
</code>
</p>

<p>Schauen wir wie unsere Browser damit umgehen.</p>

<p>Natürlich werden alle Browser diese Elemente mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> gestalten.</p>

<p class="eyecatcher_box">
<code>
div {color: red}
</code>
</p>

<p>Aber wie ist es hiermit?</p>

<p class="eyecatcher_box">
<code>
div[structure] {font-weight: bold}
</code>
</p>

<p>Beinahe alle Browser, einschließlich des <abbr xml:lang="en" title="Internet Explorer 7">IE7</abbr>, stylen das <code>div</code> tatsächlich obwohl das <code>structure</code> Attribut überhaupt nicht existiert! Leider verlässt uns unser Glück nun, der <abbr xml:lang="en" title="Internet Explorer 6">IE6</abbr> tut es nicht. Aber wir können das Attribut in <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> nutzen und alle Browser können damit umgehen. Wir können sogar mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> unser <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> für alle modernen Browser stylen. Und wenn wir einen Workaround für alte Browser brauchen können wir ein <code>class</code> Attribut anfügen und darüber stylen. Vergleicht das mit der <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> Lösung welche neue Elemente hinzufügt die nicht im Internet Explorer 6 oder 7 gestyled werden können und ihr seht das dies eine definitiv rückwärtskompatiblere Lösung ist.</p>

<h2>Erweiterbarkeit der Attribute</h2>

<p>Anstelle von neuen Elementen sollte <abbr xml:lang="en" title="Hypertext Markup Language">HTML 5</abbr> einige neue Attribute hinzufügen. Jedes dieser Attribute würde Bezug zu einer bestimmten semantischen Kategorie oder einem Typ haben. Zum Beispiel, <a href="http://microformatique.com/?p=83">wie ich in einem anderen Artikel detailliert beschreibe</a>, umfasst <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> strukturelle Semantik, rhetorische Semantik, funktionsbezogene Semantik (übernommen von <abbr xml:lang="en" title="Hypertext Markup Language">XHTML</abbr>) und andere Klassen oder Kategorien.</p>

<p>Diese neuen Attribute können genau so genutzt werden wie das <code>class</code> Attribut: Um dem Element Angaben hinzuzufügen die es beschreiben oder ergänzendes  zum Inhalt enthalten.</p>

<p>Dies ist nicht unähnlich dem <a href="http://www.w3.org/TR/xhtml-role"><code>role</code> Attribut von <abbr xml:lang="en" title="Hypertext Markup Language">XHTML</abbr></a> aber anstatt nur ein Attribut &#8222;Behältnis&#8220; zu haben sollten wir die verschiedenen semantischen Typen separieren.</p>

<p>Das <abbr xml:lang="en" title="Hypertext Markup Language">XHTML</abbr> <code>role</code> Attribut arbeitet zum Beispiel so:</p>

<p class="eyecatcher_box">
<code>
&lt;ul role="navigation sitemap"&gt;<br />
&nbsp;&nbsp;&lt;li href="downloads"&gt;Downloads&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li href="docs"&gt;Documentation&lt;/li&gt;<br />
&nbsp;&nbsp;&lt;li href="news"&gt;News&lt;/li&gt;<br />
&lt;/ul&gt;
</code>
</p>

<p>Die Werte des <code>role</code> Attributs sind eine durch Leerzeichen getrennte Liste aus den <a href="http://www.w3.org/1999/xhtml/vocab/">vorgegebenen Begriffen</a>.</p>

<p>Warum nicht das <code>role</code> Attribut übernehmen so wie es ist? Nun, es gibt noch andere Arten von Semantik für die die Bezeichnung &#8222;role&#8220; nicht passt. Zum Beispiel:</p>

<p class="eyecatcher_box">
<code>
&lt;p rhetoric="irony"&gt;He&#8217;s a fantastic person.&lt;/p&gt;
</code>
</p>

<p>Dies zeigt einen theoretischen Typ von Semantik &#8212; &#8222;rhetoric&#8220; &#8212; welcher eingesetzt werden könnte um die rhetorische Beschaffenheit zu beschreiben. Dieses Element hat natürlich nicht die Aufgabe &#8222;Ironie&#8220; in dem Dokument, vielmehr ist der Inhalt des Elements ironisch.</p>

<p>Hier ein anderes Beispiel. Es zeigt sich immer mehr das <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> die Möglichkeit fehlt um maschinenlesbare Angaben an für Menschen optimierte Inhalte anzufügen, wie <abbr xml:lang="de" title="zum Beispiel">z.B.</abbr> bei einer Zeitangabe. Dies ist das Hauptproblem das die <abbr xml:lang="en" title="British Broadcasting Corporation">BBC</abbr> wie bereits erwähnt mit dem hCalendar Microformat hatte. Während <code>&lt;span role="2009-05-01"&gt;May Day next year&lt;/span&gt;</code> nicht wirklich sinngemäß ist, ist <code>&lt;span equivalent="2009-05-01"&gt;May Day next year&lt;/span&gt;</code> durchaus sinnvoll.</p>

<p>Auch hier ist es egal ob wir &#8222;equivalent&#8220; nutzen oder eine andere Bezeichnung. Wichtig zu wissen ist nur das es nicht so simpel ist wie das <code>class</code> Attribut oder das <code>role</code> Attribut als Einheitsbehältnis für alle semantischen Informationen zu nutzen. Für eine sauber erweiterbare Lösung die Rückwärtskompatiblität und genügend Flexibilität gewährleistet wäre eine Lösung in die oben beschriebene Richtung zumindest in Betracht zu ziehen.</p>

<p>Ich habe diesen Absatz mit &#8222;Einige Gedanken über eine Lösung&#8220; betitelt weil der wichtige Teil der Arbeit das Entwickeln einer durchführbaren Lösung ist. Offene Fragen sind folgende.</p>

<ul>
<li>Wie viele unterschiedliche Semantik-Attribute soll es geben? Sollen diese Kategorien erweiterbar sein und wenn ja, wie?</li>
<li>Wie werden die Begriffe festgelegt?</li>
<li>Sollen wir die Werte die wir brauchen einfach erfinden, so wie die Entwickler es bei den <code>class</code> Werten tun oder sollen alle Werte in einer standardisierten Spezifikation festgelegt werden? Oder soll es eine Technik geben um, über eine Art Profil, Begriffe zu erfinden (und hoffentlich auch zu teilen)?</li>
<li>Wenn ein Konflikt zwischen zwei Begriffen auftritt, beispielsweise wenn zwei identische Ausdrücke durch zwei verschiedene Begriffe definiert werden, wie wird er gelöst?</li>
<li>Brauchen wir eine Form von Namensraum oder existiert eine andere Technik? </li>
</ul>
<p>Anstelle von einer gehetzter Beantwortung dieser Fragen werfe ich sie auf um die Aufgaben die erfüllt werden müssen hervorzuheben. Und um einen Dialog zu starten. Die Verzweigungen und der Umfang der Entscheidungen die für <abbr xml:lang="en" title="Hypertext Markup Language Version 5">HTML 5</abbr> getroffen werden müssen sind zu groß um sie ohne tiefgreifende Kenntnisse über Linguistik, Semantik, Semiotik und verwandte Bereiche zu treffen.</p>

<p>Hoffentlich ist es, wenn schon sonst nichts, klar, dass einfaches Erfinden neuer Elemente die Semantik von <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> nicht erweitert.</p>

<p>Lasst uns diese Entscheidungen nicht leichtfertig treffen &#8212; mit dem Klimawandel haben wir unsere Enkel schon genug belastet. Lasst uns ihnen das bestmögliche <abbr xml:lang="en" title="Hypertext Markup Language">HTML</abbr> hinterlassen.</p>

<p class="eyecatcher_box"><a href="http://www.alistapart.com/comments/semanticsinhtml5/">Kommentare &amp; Diskussion</a></p>]]></description>
            <link>http://tobias-otte.de/essays/semantik-in-html-5/</link>
            <guid>http://tobias-otte.de/essays/semantik-in-html-5/</guid>
            <pubDate>Tue, 17 Feb 2009 23:43:58 +0100</pubDate>
        </item>
        
        <item>
            <title>Web Accessibility Checkliste</title>
            <description><![CDATA[<p class="eyecatcher_box">Diese Liste ist eine freie Übersetzung der <a href="http://northtemple.com/1608">Web Accessibility Checklist</a> von Aaron Cannon. Anmerkungen, Diskussion und weitere Links bitte als Kommentar in <a href="http://tobias-otte.de/2008/07/neues-essay-accessibility-chec/">diesem Beitrag</a> oder via <a href="/kontakt/">Mail</a>.</p>

<h2>Markup</h2>
<ul class="li-space">
<li>Trennen Sie Inhalt vom Layout und nutzen Sie passende Auszeichnungen für die Struktur Ihrer Seite. Nutzen Sie beispielsweise Listen (<code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;dl&gt;</code>) anstelle von Text mit einem <code>&lt;br&gt;</code> nach jedem Punkt.
<ul>
<li><a href="http://www.vorsprungdurchwebstandards.de/theory/semantischer-code/">Semantischer Code - Definitionen, Methoden, Zweifel</a></li>
<li><a href="http://css-tricks.com/what-beautiful-html-code-looks-like/" lang="en">What Beautiful <abbr title="Hypertext Markup Language" xml:lang="en">HTML</abbr> Code Looks Like [en]</a></li>
</ul>
</li>
<li>Markieren Sie sorgfältig die Abschnitte Ihrer Seite mit Überschriften (wie <code>&lt;h1&gt;</code>) anstelle von Elementen wie <code>&lt;p&gt;</code> die mit <abbr title="Cascading Style Sheets" xml:lang="en">CSS</abbr> wie Überschriften gestaltet sind.
<ul>
<li><a href="http://meiert.com/de/publications/articles/20070106/">Hinweise zu Überschriften und Hierarchien</a></li>
<li><a href="http://www.sprungmarker.de/2008/studie_ueberschriften_und_barrierefreiheit_einleitung/">Studie: Überschriften und Barrierefreiheit</a></li>
</ul>
</li>
<li>Geben Sie Ihren Seiten durch das <code>&lt;title&gt;</code> Element klar verständliche Titel.</li>
<li>Geben Sie die primäre Sprache Ihres Dokumentes über das <code>lang</code> Attribut im <code>&lt;html&gt;</code> Element an. Wenn einzelne Passagen Ihres Inhaltes in einer anderen Sprache sind wenden Sie das <code>lang</code> Attribut auf das umschließende Element an (z.B. <code>"&lt;span lang="es"&gt;Hola&lt;/span&gt; bedeutet Hallo&#8221;</code>).
<ul>
<li><a href="http://bs-markup.de/blog/archiv/2005/04/01/das-lang-attribut/">Das lang-Attribut</a></li>
<li><a href="http://www.w3.org/TR/REC-html40/struct/dirlang.html" lang="en">Language information and text direction [en]</a></li>
</ul>
</li>
<li>Wenn Ihre Seite noch vor dem Inhalt sehr viele Navigationslinks hat nutzen Sie Sprunglinks am Anfang Ihres <code>&lt;body&gt;</code>.
<ul>
<li><a href="http://www.webnauts.net/skip-to-main-content.html" lang="en">Skip to Main Content Links are Important [en]</a></li>
</ul>
</li>
<li>In Datentabellen müssen Überschriften mit <code>&lt;th&gt;</code> gekennzeichnet und mit den Tabellenzellen eindeutig verbunden werden.
<ul>
<li><a href="http://macx.de/essays/barrierefrei/casestudies/tabellen.html">Barrierefreie Tabellen</a></li>
</ul>
</li>
<li>Wenn es nötig ist stellen Sie sicher das Ihre Tab-Ordnung durch <code>tabindex</code> logisch aufgebaut ist (Sind Ihre <abbr title="Hypertext Markup Language" xml:lang="en">HTML</abbr> Elemente in der richtigen Reinfolge ist der Gebrauch von <code>tabindex</code> nicht nicht notwendig).
<ul>
<li><a href="http://www.barrierefreies-webdesign.de/knowhow/tabindex/index.php">Tabben statt Klicken</a></li>
<li><a href="http://bs-markup.de/blog/archiv/2005/05/10/tabindex-zweitrangig/">Tabindex zweitrangig</a></li>
</ul>
</li>
</ul>

<h2>Äussere Erscheinung und Inhalte</h2>
<ul class="li-space">
<li>Ihre Seite sollte auch mit deaktivierten Bildern nutzbar sein (das schließt ein das noch genügend Kontrast vorhanden ist wenn ein Hintergrundbild genutzt wird und selbiges entfernt wurde).
<ul>
<li><a href="http://www.lankau.de/dpunkt/uebungen/lehmann/bf/css/bilder.html#dekorative_bilder">Gestaltung mit Bildern - Dekorative Bilder</a></li>
</ul>
</li>
<li>Stellen Sie sicher das Ihre Seite nutzbar bleibt wenn der Text auf das doppelte seiner originalen Größe vergrößert wird.</li>
<li>Jedes Element Ihrer Seite sollte auch mit der Tastatur erreich- und änderbar sein.
<ul>
<li><a href="http://www.barrierefreies-webdesign.de/knowhow/accesskey/index.html">Navigieren ohne Maus</a></li>
</ul>
</li>
<li>Nutzen Sie, wann immer es möglich ist, sinnvolle Überschriften und Linktexte die auch ohne den Kontext verstanden werden (z.B. keine &#8220;Klick hier&#8221; Links).
<ul>
<li><a href="http://www.barrierefreies-webdesign.de/knowhow/redakteure/index.html#sprechende-links">Was Content-Management-Systeme nicht leisten können - Treffende Linkbezeichnungen</a></li>
</ul>
</li>
<li>Ihre Seite sollte auch für Farbblinde und Nutzer mit eingeschränkter Sehkraft ausreichend Kontrast bieten.
<ul>
<li><a href="http://www.blog.mediaprojekte.de/grafik-design/farb-kontrast-analyse-die-accessibility-der-farben-testen/">Farb Kontrast Analyse - Accessibility der Farben</a></li>
</ul>
</li>
<li>Setzten Sie keine Inhalte ein die öfter als 3 mal in der Sekunde (auf)blinken.</li>
<li>Sorgen Sie dafür das die Fokus-Anzeige sichtbar bleibt. Wenn ein Nutzer mit der Tastatur von einem Element zum Nächsten navigiert sollte er immer wissen wo er sich befindet.
<ul>
<li><a href="http://accessites.org/site/2007/05/keyboard-friendly-link-focus/" lang="en">Keyboard-Friendly Link Focus [en]</a></li>
</ul>
</li>
<li>Der Inhalt sollte für den Nutzer auch ohne besondere Kennzeichnung durch Schriftart, Farben oder sonstige gestalterische Mittel verstehbar sein. Schreiben Sie zum Beispiel nicht "Das hervorgehobene Wort in diesem Absatz ist das Wichtigste" oder "Die rot markierten Punkte sind Fehler und sollten berichtigt werden" wenn das Wort oder der Punkt auch anders angezeigt werden könnte.</li>
</ul>

<h2>Dynamische Inhalte</h2>
<ul class="li-space">
<li>Benutzen sie Javascript Ereignisse nicht, die den Inhalt der kompletten Seite ändern oder automatisch eine neue Seite laden.
<ul>
<li><a href="http://ichwill.net/">Barrierefreies JavaScript</a></li>
</ul>
</li>
</ul>

<h2>Bilder und Multimedia</h2>
<ul class="li-space">
<li>Stellen Sie sicher das alle Bilder über ein <code>alt</code> Attribut verfügen, bei Grafiken, die nur dem Layout dienen, vergeben Sie keinen Wert.
<ul>
<li><a href="http://www.sprungmarker.de/2006/sinnvoller-gebrauch-des-alt-attributs/">Sinnvoller Gebrauch des ALT-Attributs</a></li>
</ul>
</li>
<li>Halten Sie den <code>alt</code> Text kurz und prägnant (z.B. &#8220;Der Hauptbahnhof Berlin") aber gehen Sie ins Detail wenn es das Verständnis verbessert (z.B. Familie Meier am Gleis 15 im Hauptbahnhof Berline").</li>
<li>Stellen Sie für alle Audio und Video Inhalte mit Sprachanteilen eine Abschrift, Untertitel und/oder eine Übersetzung in Gebärdensprache zur Verfügung.
<ul>
<li><a href="http://www.stero.de/multimedia.htm">Multimedia-Inhalte (Video-Filme) barrierefrei im Internet präsentieren</a></li>
</ul>
</li>
<li>Stellen Sie, wenn nötig, eine Audiobeschreibung der Inhalte eines Videos die für blinde Nutzer allein durch den Ton nicht vermittelt werden (z.B. Herr A. bewegt sich durch eine Tür und nickt) zur Verfügung.</li>
<li>Alle Videos sollten zumindest zugängliche Bedienelemente haben.
<ul>
<li><a href="http://www.stero.de/multimedia_transcript.htm">Audio-Beschreibung oder Transcript für blinde Menschen?</a></li>
</ul>
</li>
<li>Wenn Text vom Browser ohne Probleme gerendert werden kann vermeiden Sie die Verwendung von Bilder anstelle von Text.
<ul>
<li><a href="http://tobias-otte.de/essays/web-fonts/">Web Fonts</a></li>
</ul>
</li>
<li>Vermeiden Sie <abbr title="Completely Automated Public Turing test to tell Computers and Humans Apart" xml:lang="en">CAPTCHA</abbr>s es sei den Sie haben keine andere Wahl und auch dann sollten Sie vermieden werden. Wenn sie unumgänglich sind stellen sie eine Audio Alternative zur Verfügung.
<ul>
<li><a href="http://www.einfach-fuer-alle.de/artikel/captcha/">Grafische Zugangscodes sperren blinde Internetnutzer aus</a></li>
</ul>
</li>
</ul>

<h2>Formulare</h2>
<ul class="li-space">
<li>Bezeichnen Sie alle Ihre Formularfelder mit dem <code>&lt;label&gt;</code> Element. Wenn für ein Feld keine spezielle Bezeichnung nötig ist fügen Sie trotzdem eine ein und verstecken Sie sie mit <abbr title="Cascading Style Sheets" xml:lang="en">CSS</abbr> oder nutzen Sie das <code>title</code> Attribut.
<ul>
<li><a href="http://www.barrierefreies-webdesign.de/knowhow/formulare/label.html">Die explizite Bezeichnung von Eingabefeldern und Auswahlmenüs (mit dem <code>&lt;label&gt;</code>-Element)</a></li>
</ul>
</li>
<li>Nutzen Sie Feldgruppe (<code>&lt;fieldset&gt;</code>) mit Legenden (<code>&lt;legend&gt;</code>) um inhaltliche Blöcke zu bilden.
<ul>
<li><a href="http://www.rnib.org.uk/wacblog/articles/too-much-accessibility/too-much-accessibility-fieldset-legends/" lang="en">Too much accessibility - <code>&lt;fieldset&gt;</code> <code>&lt;legend&gt;</code> [en]</a></li>
</ul>
</li>
<li>Geben Sie alle Eingabefehler in Text aus (gegebenfalls mit einem zusätzlichen Bild oder Icon) und platzieren Sie die Fehlermeldung direkt bei dem betroffenen Feld oder in an einer hervorstehenden Position wie dem Seitenanfang zusammen mit einem Ankerlink zu dem betroffenen Feld.</li>
<li>Wenn es nötig ist versehen Sie Ihre Formularfelder mit Anleitungen oder Hilfe-Links.</li>
<li>Erlauben Sie dem Benutzer nicht wichtige Aktionen zu beenden ohne sie zu bestätigen oder einer Möglichkeit sie rückgängig zu machen.</li>
<li>Vermeiden Sie es <abbr title="Hypertext Markup Language" xml:lang="en">HTML</abbr> Elemente für etwas anderes als ihre eigentliche Aufgabe zu nutzen (z.B. Formulare für die Navigation, Links zum Absenden eines Formulars, etc.)</li>
</ul>
<h2>Testen</h2>
<ul>
<li>Alle Seiten sollten mit dem <abbr title="World Wide Web Consortium
" xml:lang="en">W3C</abbr> Validator (<a href="http://validator.w3.org/" lang="en">http://validator.w3.org/ [en]</a>) getestet werden.</li>
<li>Schauen Sie, mit Hilfe von Simulatoren oder Browser-Erweiterungen (Empfehlung: <a href="http://colororacle.cartography.ch" lang="en">http://colororacle.cartography.ch [en]</a> oder <a href="http://www.vischeck.com" lang="en">http://www.vischeck.com [en]</a>), ob Ihre Seiten auch für Farbenblinde nutzbar sind.</li>
<li>Testen Sie alle Ihrer Seiten auf Zugänglichkeit (<a href="http://wave.webaim.org/" lang="en">WAVE Web-Accessibility Auswertung [en]</a>).</li>
<li>Lassen Sie Ihre Seiten von einem Accessibility Experten überprüfen.</li>
</ul>]]></description>
            <link>http://tobias-otte.de/essays/accessibility-checkliste/</link>
            <guid>http://tobias-otte.de/essays/accessibility-checkliste/</guid>
            <pubDate>Sat, 26 Jul 2008 22:05:05 +0100</pubDate>
        </item>
        
        <item>
            <title>Suchmaschinenoptimiertes HTML</title>
            <description><![CDATA[        <p>Suchmaschinen lesen und bewerten HTML Code. Im Normalfall interessieren sie Angaben die sich nicht auf den wiedergebaren Inhalt beziehen nicht. Darum sollte sich der HTML Code möglichst auf seine eigentliche Aufgabe zu reduzieren - Der Strukturierung von Inhalten. Durch die Trennung von Inhalt und Layout via CSS ist dies ohne Einschränkungen möglich.</p>

        <p>Leider war es nicht immer so. In Zeiten von Tabellen-Layouts und Spacer-GIFs war HTML einfach nur Mittel zu Zweck. An den Folgen haben wir bis heute zu leiden. Leider sieht man, auch bei aktuellen Seiten, dass häufig alte Tabellen-Layouts einfach durch vielfach verschachtelte DIVs ersetzt werden. Jedem Element wird eine Klasse oder eine ID zugewiesen, Styleangaben werden direkt in das Dokument geschrieben, viele Inhalte werden durch nichtssagende DIV oder SPAN Container umschlossen.</p>

        <p>Doch damit bleibt man weit hinter den Möglichkeiten. HTML ist eine Auszeichnungssprache und sollte auch so genutzt werden. Angaben zum Layout müssen, wann immer es möglich ist, in die CSS Dateien verlagert werden. Leider sind sich viele Web-Entwickler nicht bewusst welche Möglichkeiten sich durch CSS ergeben.</p>
        <p>Des weiteren ist es wichtig das die Inhalte mit den <a href="http://de.selfhtml.org/html/referenz/elemente.htm">dafür vorgesehenen HTML Tags</a> ausgezeichnet werden. Nur so kann eine Maschine die Inhalte vollständig auswerten. Dieser Einsatz reduziert sich im übrigen nicht nur auf die Überschriften (H1 - H6). Auch andere andere Elemente wie Listen und Zitate sollten genutzt werden.</p>
        <p>Die Verwendung von semantisch korrekten Elementen ist keine zusätzliche Arbeit. Und auch die effektive Vergabe von IDs und Klassen verbessert die Übersichtlichkeit des Quellcodes deutlich.</p>
        <p>Ein kleines (natürlich etwas überspitzes) Beispiel sollte verdeutlichen dass mit wenigen Änderungen viel erreicht werden kann:</p>
        <h2>Beispiel</h2>

        <h3>Vorher:</h3>
        <h4>HTML</h4>
        <p class="eyecatcher_box">
        <code>
        &lt;div id="nav_box"&gt;<br />
        &nbsp;&nbsp;&lt;div id="liste"&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="listen_punkt"&gt;<br />

        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class="link" href="#"&gt;Link&lt;/a&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="listen_punkt" id="aktiv&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class="link" id="link_aktiv" href="#"&gt;Link&lt;/a&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;<br />

        &nbsp;&nbsp;&lt;/div&gt;<br />
        &lt;/div&gt;
        </code>
        </p>
        <h4>CSS</h4>
        <p class="eyecatcher_box">
        <code>

        #nav { ... }<br />
        #list { ... }<br />
        .link { ... }<br />
        .aktiv { ... }<br />
        #aktiv { ... }<br />
        #link_aktiv { ... }
        </code>

        </p>
        
        <h3>Nachher</h3>
        <h4>HTML</h4>
        <p class="eyecatcher_box">        
        <code>
        &lt;div id="nav"&gt;<br />
        &nbsp;&nbsp;&lt;ul&gt;<br />

        &nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;a href=""&gt;Link&lt;/a&gt;&lt;/li&gt;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;li class="aktiv"&gt;&lt;a href=""&gt;Link&lt;/a&gt;&lt;/li&gt;<br />
        &nbsp;&nbsp;&lt;/ul&gt;<br />

        &lt;/div&gt;
        </code>
        </p>
        <h4>CSS</h4>
        <p class="eyecatcher_box">
        <code>
        #nav { ... }<br />

        #nav ul { ... }<br />
        #nav li { ... }<br />
        #nav li a { ... }<br />
        #nav li.aktiv { ... }<br />
        #nav li.aktiv a { ... }
        </code>
        </p>

        
        <h2>Fazit</h2>
        <p>Wer seine Inhalte mit den semantisch passenden Elementen versieht erleichtert sich nicht nur die Arbeit sondern kommt auch bei den Suchmaschinen besser an. Durch die geschickte Verschachtelung von CSS Regeln kann man den Einsatz von Layout bezogenen Angaben stark reduzieren.</p>
]]></description>
            <link>http://tobias-otte.de/essays/suchmaschinenoptimiertes-html/</link>
            <guid>http://tobias-otte.de/essays/suchmaschinenoptimiertes-html/</guid>
            <pubDate>Mon, 05 May 2008 22:41:18 +0100</pubDate>
        </item>
        
        <item>
            <title>Web Fonts - @font-face im Einsatz</title>
            <description><![CDATA[<p>Das Internet besteht aus Texten. Auch wenn multimediale Inhalte wie Videos, Sounds oder Bilder mittlerweile feste Bestandteile sind, nimmt ist das Geschriebene immer noch den Löwenanteil ein. Nur der Text einer Seite ist wirklich durchsuchbar, nur mit Worten kann man Inhalte unmissverständlich vermitteln.</p>

<p>Darum ist bei der Gestaltung von Webseiten die Typografie eine zentrale Herausforderung. Leider ist der Gestalter, anders als bei Printprodukten, durch technische Vorgaben stark eingeschränkt. Auch wenn verschiedene Techniken wie <a href="http://www.mikeindustries.com/blog/sifr/">SIFR</a> oder <a href="http://meiert.com/de/publications/articles/20050513/">Image-Replacement</a> es theoretisch möglich machen jede Schrift zu verwenden bleibt am Ende doch nur die Gestaltung mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr>.</p>

<p>Mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> kann der Autor durch verschiedene Eigenschaften einfluss auf das angezeigte Schriftbild nehmen. In <abbr xml:lang="en" title="Cascading Style Sheets Level 1">CSS1</abbr> mussten alle Schriften auf dem Client System vorhanden sein, sie wurden nur anhand ihres Namens ausgewählt. Alternative Schriften konnten zwar in den Eigenschaften angegeben werden aber abgesehen davon hatten Browser keine Möglichkeit dem User eine andere Schrift als die allgemein verbreiteten Schriften vorzuschlagen.</p>

<p>Dies sollte sich eigentlich mit <abbr xml:lang="en" title="Cascading Style Sheets Level 2">CSS2</abbr> ändern. Nach der <abbr xml:lang="en" title="Cascading Style Sheets Level 2">CSS2</abbr> Recommendation könnten die Stylesheet Autoren genau angeben welche Schrift verwendet werden soll:</p>

<h2 id="font-face">Die @font-face Regel</h2>
<p>Jeder Browser enthält eine &bdquo;Schriftdatenbank&ldquo;. Diese Schriftdatenbank enthält die Schriften die der User in seinem System aktiviert hat. Auf diese Schriften kann man mit <abbr xml:lang="en" title="Cascading Style Sheets">CSS</abbr> zugreifen. Da diese Schriften aber je nach Betriebssystem stark variieren hat das W3C, um den Autoren die größtmögliche Freiheit zu geben, die At-Regel <code>@font-face</code> erarbeitet. Mit dieser Regel hat man die Möglichkeit dieser Datenbank Schriften hinzuzufügen.</p>

<p>Leider gehörte die Regel zu den Teiltechniken die von den Browserherstellern nur unzureichend umgesetzt wurden, weshalb sie in der Zwischenversion <abbr xml:lang="en" title="Cascading Style Sheets Level 2 Revision 1">CSS 2.1</abbr> nicht mehr vorhanden war.</p>

<p>Nun wurde diese Technik schon im Jahre 2002 wieder aufgegriffen und in das <abbr xml:lang="en" title="Cascading Style Sheets Level 3">CSS3</abbr> Modul <a href="http://www.w3.org/TR/css3-webfonts/">Web Fonts</a> eingesetzt. Leider hat es bis jetzt (Stand April 2008) gedauert bis die ersten Browserhersteller diese Funktion in ihre Programme eingebaut haben. Der Safari 3.1 ist der erste stabile Release der mit der @font-face Regel umgehen kann.</p>

<p><strong>Update:</strong> Firefox 3.1 wird @font-face ebenfalls unterstützen. <a href="http://opentype.info/blog/2008/10/25/sneak-peek-font-face-in-firefox-31/">Ein Sneak Peek kann man bei Ralf Herrmann betrachten</a>.</p>

<p><strong>Update 2:</strong> <a href="http://tobias-otte.de/2009/04/aktuelles-zur-webtypografie/">Status Browserunterstützung 04/09</a></p>

<p>Die Technische Umsetzung ist relativ einfach. Mit der @font-face Regel hat man die Möglichkeit jeweils einen Schriftschnitt einzubinden sowie ihn genauer zu beschreiben. Die Beschreibung erfolgt durch die bereits weitläufig bekannt und eingesetzten Schrifteigenschaften:</p>

<ul>
  <li><code>font-family</code> - Deklariert den Namen der Schriftfamilie. Außerdem kann eine generische Schriftfamilie angegeben werden</li>
  <li><code>src</code> - Verweißt auf tatsächliche Schriftdaten, egal ob herunterzuladen oder lokal installiert</li>
  <li><code>font-style</code> - Gibt an ob die Darstellungen normal (manchmal auch als „roman&#8220; oder „upright&#8220; bezeichnet), kursiv oder geneigt ist</li>
  <li><code>font-variant</code> - Bezeichnet einen Kapitälchenschnitt</li>
  <li><code>font-weight</code> - Legt das Gewicht des Schriftschnittes fest</li>
  <li><code>font-stretch</code> - Bezeichnet die Ausdehnung des Schriftschnittes</li>
 <li><code>font-size</code> - Ist der Deskriptor für die durch diese Schrift unterstützten Größen. Es sind, im Gegensatz zur Eigenschaft <code>font-size</code>, nur absolute Längeneinheiten erlaubt </li>
</ul>

<p><strong>Zu beachten ist das bei allen Deklarationen Mehrfachnennungen durch Kommaseparation möglich sind.</strong></p>

<h3>Übersicht der Eigenschaften sowie der zugelassenen Werte</h3>

<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th>Eigenschaft</th>
<th>Zugelassene Werte</th>
<th>Standardwert</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>font-family</code></td>
<td>Name des Schriftschnittes, <code>serif</code>, <code>sans-serif</code>, <code>cursive</code>, <code>fantasy</code>, <code>monospace</code></td>
<td>Bestimmt der User Agent</td>
</tr>
<tr>
<td><code>src</code></td>
<td><code>url("uri_zur_schrift") format("name_des_formats")</code>, <code>local("Name der Schrift") format("name_des_formats")</code></td>
<td>-</td>
</tr>
<tr>
<td><code>font-style</code></td>
<td><code>all</code>, <code>normal</code>, <code>italic</code>, <code>oblique</code></td>
<td><code>all</code></td>
</tr>
<tr>
<td><code>font-variant</code></td>
<td><code>all</code>, <code>normal</code>, <code>small-caps</code></td>
<td><code>all</code></td>
</tr>
<tr>
<td><code>font-weight</code></td>
<td><code>all</code>, <code>normal</code>, <code>bold</code>, <code>100</code> bis <code>900</code> in Hunderterschritten</td>
<td><code>all</code></td>
</tr>
<tr>
<td><code>font-stretch</code></td>
<td><code>all</code>, <code>normal</code>, <code>ultra-condensed</code>, <code>extra-condensed</code>, <code>condensed</code>, <code>semi-condensed</code>, <code>semi-expanded</code>, <code>expanded</code>, <code>extra-expanded</code>, <code>ultra-expanded</code></td>
<td><code>normal</code></td>
</tr>
<tr>
<td><code>font-size</code></td>
<td>Absolute Längenangabe (<code>in</code>, <code>cm</code>, <code>mm</code>, <code>pt</code>, <code>pc</code>)</td>
<td><code>all</code></td>
</tr>
</tbody>
</table>

<h2>Beispiel</h2>

<h3><a class="big" href="http://tobias-otte.de/labor/web-fonts/">Die @font-face Regel  im Einsatz </a></h3>

<p>Als Schriftfamilie muss die <a href="http://www.josbuivenga.demon.nl/delicious.html">Delicious</a> von Jos Buivenga  herhalten.</p>

<p class="important">Da die Implementierung der Regel im Safari 3.1 anscheinend fehlerbehaftet ist (<a href="http://tobias-otte.de/2008/04/safari-und-fontface-wie-viel-k/">Details</a>) habe ich mich auf die Schriftschnitte Roman, <strong>Bold</strong>, <em>Italic</em> und <em><strong>Bold Italic</strong></em> beschränkt. Small-Caps und Heavy haben Einfluss auf den Roman Schnitt, hier muss wohl noch nachgebessert werden.</p>

<h3>Erläuterung</h3>
<h4>Definition der Schriftschnitte</h4>
<p class="eyecatcher_box"><code>@font-face {<br />
font-family: Delicious;<br />
src: url('fonts/delicious/Delicious-Roman.otf') format("opentype");<br />
}<br />
<br />
@font-face {<br />
font-family: Delicious;<br />
src: url('fonts/delicious/Delicious-Bold.otf') format("opentype");<br />
font-weight: bold;<br />
}<br />
<br />
@font-face {<br />
font-family: Delicious;<br />
src: url('fonts/delicious/Delicious-Italic.otf') format("opentype");<br />
font-style: italic;<br />
}<br />
<br />
@font-face {<br />
font-family: Delicious;<br />
src: url('fonts/delicious/Delicious-BoldItalic.otf') format("opentype");<br />
font-style: italic;<br />
font-weight: bold;<br />
}</code></p>

<p>Diese Regeln fügen die Schriftfamilie Delicious der Schriftdatenbank des Browsers hinzu wobei die erste Regel für den allgemeinen Schnitt (Roman) und die folgenden für die speziellen Schnitte zuständig sind. Das heißt sobald keine Spezifikation über eine der angegebenen Eigenschaften vorliegt wird automatisch auf den Roman Schnitt zugegriffen.</p> 

<p>Aus Gründen der Übersichtlichkeit, und da sie vom Validator momentan noch als Fehler erkannt werden, empfiehlt es sich die @font-face Regeln in eine gesonderte Datei zu schreiben und via @import in die eigentlich CSS Datei einzubinden.</p>

<h4>Einsatz der Schriftfamilie</h4>

<p>Um die hinzugefügte Schriftfamilie zu nutzen reicht es aus sie einfach wie gewohnt in der <code>font-family</code> anzugeben.</p>

<p class="eyecatcher_box"><code>font-family: Delicious, Arial, sans-serif;</code></p>

<p>Browser die @font-face Regel nicht beherrschen greifen so einfach auf die nächste Angabe zu. Die jeweiligen Schriftschnitte werden übernommen sobald eine der Bedingungen (z.B. <code>font-weight: bold;</code>) erfüllt ist.</p>

<h2>Anhang</h2>
<h3>Links</h3>
<ul>
  <li><a href="http://www.fonts.info/info/press/font-face-embedding-demo.htm">Demo Seite von fonts.info</a></li>
 <li><a href="http://www.typografie.info/typowiki/index.php?title=The_Next_Big_Thing:_Fonteinbettung_in_Webseiten">Eintrag in der Typowiki von typografie.info</a></li>
  <li><a href="http://www.alistapart.com/articles/cssatten">Artikel bei A List Apart</a></li>
  <li><a href="http://twitter.com/font">@font-face Twitter Account</a></li>
</ul>

<h3>Schriften die die Nutzung in @font-face erlauben (Lizenzbedingungen beachten!)</h3>
<ul>
  <li><a href="http://www.josbuivenga.demon.nl/delicious.html">Delicious</a></li>
  <li><a href="http://www.fonts.info/info/press/kostenlose-Fonts-zur-Einbettung-in-Webseiten-per-font-face.htm">Graublau Sans Web</a></li>
  <li><a href="http://www.grafikfritze.de/?p=43">Vollkorn</a></li>
</ul>]]></description>
            <link>http://tobias-otte.de/essays/web-fonts/</link>
            <guid>http://tobias-otte.de/essays/web-fonts/</guid>
            <pubDate>Sun, 06 Apr 2008 19:38:25 +0100</pubDate>
        </item>
        
        <item>
            <title>CSS Transparenz</title>
            <description><![CDATA[<p>Ein nettes stilistisches Mittel um langweilige Webseiten-Layouts aufzupeppen sind halbtransparente Boxen auf einem komplexem Hintergrund wie z.B. einem Foto. Das Problem hierbei, sollte man kein Flash oder JavaScript einsetzen wollen, stellt lediglich die Umsetzung da.</p>
<p>Methoden gibt es einige. Nur leider ist keine davon universell einsetzbar.</p>
<h2>opacity</h2>
<p><a href="http://www.w3.org/TR/css3-color/#transparency">Opacity</a> ist eine Eigenschaften welche eigentlich erst mit CSS3 in die Browser implementiert werden sollen. Zul&#228;ssig sind  Werte zwischen 0.00 (totale Transparenz) und 1.00 (keine Transparenz). Um z.B. ein Bild zur H&#228;lfte transparent zu machen reicht dieser Code in der dazugeh&#246;rigen Regel:</p>

<p><code>opacity: 0.5;</code></p>
<p><a class="big" href="/labor/css-transparenz/opacity-beispiel.html">Beispiel</a></p>
<div class="eyecatcher_box">
<h3>Vorteile</h3>
<ul>
<li>Funktioniert bei gesch&#228;tzten 25% der Besucher</li>
</ul>
<h3>Nachteile:</h3>
<ul>
<li>Es wird gnadenlos alles transparent - Rahmen und Text nicht ausgeschlossen</li>
<li>Wird nur von modernen, aktuellen Browsern unterst&#252;tzt (Somit nicht vom Internet Explorer)</li>

<li>Die Arbeit an CSS3 ist noch nicht abgeschlossen und somit ist diese Eigenschaft nicht vom W3C festgelegt. Daraus folgt auch das der CSS-Validator sie nicht akzeptiert.</li>
</ul>
</div>
<h2>filter:Alpha()</h2>
<p>Nicht alles an Microsofts Browser ist schlecht. Er hat zum Beispiel seit der Version 4.0 einige nette <a href="http://de.selfhtml.org/css/eigenschaften/filter.htm">CSS Eigenschaften</a> welche man eigentlich nur aus dem Bereich der Bildbearbeitung kennt. Auch f&#252;r die Transparenz gibt es eine <a href="http://de.selfhtml.org/css/eigenschaften/filter.htm#alpha">Eigenschaft</a>. Dieser Code bewirkt eine halbe Transparenz:</p>
<p><code>filter: alpha(opacity=50);</code></p>

<p><strong>Update für den IE 8:</strong> <a href="http://tobias-otte.de/2008/09/css3-im-ie8/#filter">Für den neuen, standardkonformen, CSS Parser musste die Syntax leicht angepasst werden</a>.</p>

<p><a class="big" href="/labor/css-transparenz/filter-beispiel.html">Beispiel</a></p>

<div class="eyecatcher_box">
<h3>Vorteile</h3>
<ul>
<li>Funktioniert bei gesch&#228;tzten 75% der Besucher</li>
</ul>
<h3>Nachteile:</h3>
<ul>
<li>Wird nur vom Internet Eyplorer 4+ unterst&#252;tzt</li>
<li>Auch hier wird die komplette Box transparent</li>
<li>Nicht valide</li>
</ul>
</div>

<h2>Halbtransparentes PNG</h2>
<p>Anders als in bei JPEG&#8217;s und GIF&#8217;s kann man bei PNG&#8217;s einem Pixel eine bestimmte Transparenz zuweisen. In Photoshop geht das so:</p>
<ol>
<li>10&#215;10 Pixel gro&#223;es Bild mit transparentem Hintergrund erstellen</li>
<li>Eine neu Ebene erstellen und mit der gew&#252;nschten Farbe f&#252;llen</li>

<li>Dieser Ebene die gew&#252;nschte Transparenz geben</li>
<li>F&#252;r Web speichern und PNG ausw&#228;hlen</li>
</ol>
<p><a class="big" href="/labor/css-transparenz/png-beispiel.html">Beispiel</a></p>

<div class="eyecatcher_box">
<h3>Vorteile</h3>
<ul>
<li>L&#228;uft auf allen modernen Browsern einschlie&#223;lich dem IE 7</li>

<li>Valider Code</li>
<li>Nur der Hintergrund wird transparent. Rahmen, Text usw. bleiben voll sichtbar</li>
</ul>
<h3>Nachteile</h3>
<ul>
<li>Der IE 6 und abw&#228;rts machen nicht mit</li>
</ul>
</div>

<p>Wie man sieht gibt es keine perfekte M&#246;glichkeit. Wer auf validen Code Wert legt muss wohl oder &#252;bel auf den IE 6 verzichten welcher ja leider noch sehr weit verbreitet ist. Aber da der IE 7 nun endlich auch halbtransparente PNG&#8217;s unterst&#252;tzt ist sieht die Zukunft um einiges besser aus.</p>]]></description>
            <link>http://tobias-otte.de/essays/css-transparenz/</link>
            <guid>http://tobias-otte.de/essays/css-transparenz/</guid>
            <pubDate>Fri, 04 Apr 2008 23:38:41 +0100</pubDate>
        </item>
        
        <item>
            <title>HDR Fotografie in 8 Schritten</title>
            <description><![CDATA[<p>Spiegel Online hat kürzlich eine kurze Abhandlung über das Gebiet der HDR Fotografie veröffentlicht, mit dabei eine durchaus eindrucksvolle Fotostrecke sowie ein Link auf die Website von HDRSoft, die Entwickler eines bekannten und grundsoliden HDR Programms namens &#8220;Photomatix&#8221;.</p>
<p>Leider belässt der Spiegel es beim theoretischen Teil - mit diesem Tutorial will ich deshalb auf die Praxis der HDR-Fotografie eingehen:</p>
<p>HDR Fotografie ist das &#8220;Übereinanderlegen&#8221; von unterschiedlich belichteten Fotos ein und desselben Motivs. Durch Überbelichten treten Schatten hervor, durch Unterbelichten werden helle Stellen (z.B. der Himmel) besser erkennbar:</p>
<p><a title="HDR, 6" href="/labor/hdr/p1010256-1024x768.JPG"><img alt="HDR, 6"  src="/labor/hdr/p1010256-1024x768.thumbnail.JPG" /></a>
<a title="HDR, 5" href="/labor/hdr/p1010255-1024x768.JPG"><img alt="HDR, 5" src="/labor/hdr/p1010255-1024x768.thumbnail.JPG" /></a>
<a title="HDR, 4" href="/labor/hdr/p1010254-1024x768.JPG"><img alt="HDR, 4" src="/labor/hdr/p1010254-1024x768.thumbnail.JPG" /></a>
<a title="HDR, 3" href="/labor/hdr/p1010253-1024x768.JPG"><img alt="HDR, 3" src="/labor/hdr/p1010253-1024x768.thumbnail.JPG" /></a>
<a title="HDR, 2" href="/labor/hdr/p1010252-1024x768.JPG"><img alt="HDR, 2"src="/labor/hdr/p1010252-1024x768.thumbnail.JPG" /></a>
<a title="HDR, 1" href="/labor/hdr/p1010251-1024x768.JPG"><img alt="HDR, 1" src="/labor/hdr/p1010251-1024x768.thumbnail.JPG" /></a>
<a title="HDR, Final" href="/labor/hdr/haus2-1024x768.jpg"><img alt="HDR, Final" src="/labor/hdr/haus2-1024x768.thumbnail.jpg" /></a></p>


<ol>
<li><strong>Motiv</strong>: Bewegte Objekte sind grunds&#228;tzlich tabu. F&#252;rs erste HDR Bild eignet sich besonders ein Sonnenuntergang, wegen der dunklen Schlagschatten und der vereinzelt grellen Farben, wer von den ewigen Sonnenunterg&#228;ngen genug hat sollte zumindest auf besagte Hellifgkeitsunterschiede achten.</li>
<li><strong>Kamera: </strong>Die Anforderungen an die Kamera selbst sind vergleichsweise gering: Sie sollte &#252;ber einen manuellen Modus verf&#252;gen, alternativ reicht auch eine Belichtungsreihen-Funktion (&#8221;Bracketing&#8221;). Idealerweise setzt man den Wei&#223;abgleich fest um jeder Verf&#228;rbung vorzubeugen. Besitzer von analogen Kameras haben es ausnahmsweise besonders einfach.</li>

<li><strong>Aufbau:</strong> Die Kamera muss sicher stehen. Nachtr&#228;gliche &#196;nderungen an Belichtungszeit und Blenden&#246;ffnung m&#252;ssen ohne Verschiebung des Ger&#228;ts m&#246;glich sein. Ein schweres Stativ und ein sicher befestigter Fotoapparat eignen sich daher besonders gut. Abz&#252;ge gibts f&#252;r weiche B&#246;den (Gras) und wacklige Kugelstative ohne ausreichende Fixierung.</li>
<li><strong>Bilderserie: </strong>HDR Bilder zeichnen sich vorallem durch Farb- und Detailgetreue aus, daher ist es w&#252;nschenswert die Blenden&#246;ffnung hoch zu setzen (also die Blende m&#246;glichst weit zu schlie&#223;en). Nachdem die Blende gesetzt wurde f&#228;ngt man mit einer enorm unterbelichteten Aufnahme (-3.0) and und geht dann in 3-10 Bildern zu einer stark &#252;berbelichteten Aufnahme (+3.0) &#252;ber. Die Anzahl der Bilder ist dabei nicht begrenzt - meist gen&#252;gen jedoch 3 Bilder, mit 5 ist man auf der sicheren Seite. Vereinzelt findet man Verfechter des RAW-Formats, dabei wird das Rohbild direkt vom CCD abgespeichert, Wei&#223;abgleich oder ggf. auch Nachsch&#228;rfung m&#252;ssen dann per Software vom Fotografen erledigt werden. Als Belohnung f&#252;r die M&#252;hen enth&#228;lt das RAW-Format daf&#252;r wesentlich mehr Bildinformation als beispielsweise ein *.jpeg.</li>

<li><strong>&#220;berpr&#252;fen der Bilder: </strong>Am einfachsten l&#228;d man die Bilder auf den heimischen Rechner und anschlie&#223;end in eine Dia-Show (Windows Bildanzeige, bzw Linux- oder Mac-Equivalent) und achtet auf m&#246;gliche Verschiebungen w&#228;hrend die Bilder wechseln. Sollte alles in Ordnung sein gehts direkt zum n&#228;chsten Schritt, falls nicht muss man entweder einzelne Ausrutscher l&#246;schen oder den ganzen Prozess wiederholen.</li>
<li><strong>HDR Bild:</strong> Ein Bild im .hdr Format enth&#228;lt alle Bildinformationen von s&#228;mtlichen Einzelbildern. Die <a href="http://www.hdrsoft.com/de/download.html">Trial Version von Photomatix</a> erzeugt solche Bilder (Im Menu unter HDR > Generieren) ohne Einschr&#228;nkungen. Aber auch Photoshop ab Version CS2 weis mit HDR umzugehen (Datei > Automatisieren > HDR).</li>

<li><strong>Tone Mapping: </strong>Der eigentliche Teil der Arbeit ist das Extrahieren der &#8220;n&#252;tzlichen&#8221; Bildinformationen aus dem HDR-Wust. Das oben genannte Photomatix kann eben das, allerdings wird das Bild in der Trial Version mit Wasserzeichen verunstaltet. Aternativ gibt es die kostenlose <a href="http://www.fdrtools.com/fdrtools_basic_e.php">Basic Version</a> von FDRSoft.</li>
<li><strong>Nachbearbeitung:</strong> In den meisten F&#228;llen reicht Tonemapping bereits aus um ein sehr brauchbares Ergebnis zu erhalten. Dennoch ist es sinnvoll das HDR Bild in einem Grafikprogramm nachtr&#228;glich in Helligkeit und Kurven zu ver&#228;ndern. Dazu &#246;ffnet man z.B. in Photoshop das Bild, selektiert die gesamte Bildfl&#228;che (Strg + A), kopiert den Inhalt (Strg + C) und f&#252;gt das Kopierte unter Datei > Neu in ein &#8220;normales&#8221; Bild ein. Ein Anheben der Kontraste ist oft nicht notwendig, stattdessen sollte man die Farbverteilung anpassen und mit den Kurven experimentieren.</li>
</ol>

<p>Viele m&#246;gliche Ausg&#228;nge dieses Vorgangs sind auf <a href="http://flickr.com/photos/tags/hdr/">Flickr</a> ausgestellt.</p>
	]]></description>
            <link>http://tobias-otte.de/essays/hdr-fotografie-in-8-schritten/</link>
            <guid>http://tobias-otte.de/essays/hdr-fotografie-in-8-schritten/</guid>
            <pubDate>Tue, 13 Feb 2007 00:18:25 +0100</pubDate>
        </item>
        
    </channel>
</rss>
