<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Webkrauts</title>
	
	<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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/webkrauts/iXSU" /><feedburner:info uri="webkrauts/ixsu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Vorschau auf einen Relaunch</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/do4ohxjoseI/</link>
		<comments>http://www.webkrauts.de/2011/12/24/vorschau-auf-einen-relaunch/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 07:00:55 +0000</pubDate>
		<dc:creator>Nicolai Schwarz</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[Relaunch]]></category>
		<category><![CDATA[Webkrauts]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1186</guid>
		<description><![CDATA[<div class="advent advent-24">24. Türchen des Webkrauts-Adventskalenders</div>
<p>Der diesjährige Adventskalender neigt sich dem Ende, da wirft die nächste größere Aktion bereits ihre Schatten voraus. Unter der Haube kann webkrauts.de nicht mehr mit dem Stand der Technik mithalten. Hinter dem heutigen Türchen erwartet euch daher ein Vorgeschmack auf den nötigen Relaunch. Nicolai Schwarz lädt ein zu einem ersten Blick in die Zukunft von webkrauts.de.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-24">24. Türchen des Webkrauts-Adventskalenders</div>
<p>Es ist für jeden auf den ersten Blick zu erkennen: Unsere Webseite ist mittlerweile etwas, sagen wir mal, in die Jahre gekommen. Wir sind 2005 mit WordPress und den ersten Inhalten gestartet. Im Laufe der letzten Jahre gab es &#8211; mehr oder weniger  &#8211; regelmäßig neue Artikel und einige Serien. Für ein Projekt, das wir alle in unserer Freizeit mit Inhalten füllen, schon nicht schlecht. Aber die Unterschiede zwischen den Inhalten der Artikel und der eigenen Webseite werden immer größer. Wissen wir.<br />Nun starten wir einen neuen Anlauf für einen Relaunch. Die Umsetzung soll im Februar/März erfolgen, heute öffnen wir bereits ein Türchen für eine besinnliche Vorschau auf das Design. Zunächst aber ein paar inhaltliche Überlegungen:</p>
<h4>Inhalte finden</h4>
<p>Wir haben hier auf webkrauts.de eine Menge älterer Artikel gesammelt, die nach wie vor gut und aktuell sind. Allein: das Blogformat macht es schwierig, diese Artikel auch zu finden. Bisher gibt es vier Möglichkeiten, zu den Inhalten zu kommen: Besucher können die Seiten einzeln durchblättern, die Suche bemühen, über die Serien gehen oder es über die (derzeit unstrukturierten) Tags versuchen. Wir werden zwei weitere Optionen hinzufügen und unsere Inhalte auch über Rubriken (HTML, CSS, Usability, Accessibility &hellip;) und Schwierigkeitsgrad (Anfänger, Fortgeschrittene, Experten) zugänglich machen. Bei der Gelegenheit bringen wir dann auch die Tags in eine ordentliche Struktur.</p>
<h4>Neue Inhalte ermöglichen</h4>
<p>Wir kümmern uns zwar gerne um neue Inhalte, können aber als Nebenprojekt kein regelmäßiges Magazin bieten. Das wollen und müssen wir auch nicht, schließlich gibt es andere Webseiten, die das viel besser leisten. Andererseits reduzieren sich die Aktivitäten der Webkrauts nicht nur auf Artikel hier auf der Webseite. Wir sind auf BarCamps und Konferenzen unterwegs, halten Sessions und Vorträge, schreiben Fachartikel und -bücher.</p>
<p>Auf diese Aktivitäten können wir besser hinweisen; deshalb erweitern wir unsere Inhalte. Unter dem neuen Menüpunkt »Bücher« werden wir sowohl echte Rezensionen von Fachbüchern als auch Bücher von Webkrauts (mit reinem Klappentext) vorstellen. Es wird für alle Besucher die Möglichkeit geben, passende Web-Termine anzulegen, Webkrauts können auf eigene Vorträge verweisen. Außerdem können wir kleine Hinweise auf Artikel in Magazinen, im eigenen Blog oder auf anderen Webseiten eintragen (»Kurz notiert«). Also eine Art internes Twittern, was wir übrigens absichtlich nicht durch automatische Feeds der Twitter-Accounts von Webkrauts regeln.</p>
<h4>Vorschau der Startseite</h4>
<p>Aus diesen Überlegungen heraus haben wie die Startseite umgearbeitet. Im Header besteht nun neben der Suche die Möglichkeit, unsere Inhalte nach Rubrik, Serie oder Schwierigkeit zu durchstöbern. Außerdem ein übliches Hauptmenü und Links zu Twitter und dem RSS-Feed. Darunter &#8211; hell hervorgehoben &#8211; unsere Hauptinhalte: aktuelle und in der Regel exklusive Artikel für webkrauts.de in einem jQuery-Slider. Es folgen die kurzen Notizen, Termine und Vorträge sowie ein größerer Footer.</p>
<div id="attachment_1188" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/webkrauts_relaunch_preview_startseite.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/webkrauts_relaunch_preview_startseite-460x493.png" alt="Screenshot der Startseite" title="webkrauts_relaunch_preview_startseite" width="460" height="493" class="size-medium wp-image-1188" /></a><p class="wp-caption-text">Siehe auch den <a href="http://webkrauts.de/beispiele/advent2011/relaunch/index.html">Klickdummy der Startseite</a></p></div>
<h4>Vorschau eines Artikels</h4>
<p>Bei den Artikeln passen wir die Typografie an und sorgen für eine bessere Lesbarkeit. Wir stellen unsere Autoren deutlicher in den Vordergrund, indem die Autoreninfo nun oben neben dem Artikel und nicht mehr am Ende angezeigt wird. Dazu kommen übliche soziale Links und Hinweise auf andere Artikel desselben Autors.</p>
<div id="attachment_1189" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/webkrauts_relaunch_preview_artikel.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/webkrauts_relaunch_preview_artikel-460x335.png" alt="Screenshot einer Artikel-Seite" title="webkrauts_relaunch_preview_artikel" width="460" height="335" class="size-medium wp-image-1189" /></a><p class="wp-caption-text">Siehe auch den <a href="http://webkrauts.de/beispiele/advent2011/relaunch/artikel.html">Klickdummy der Artikelseite</a></p></div>
<h3>Alles im Fluss</h3>
<p>Bevor ihr euch der Kritik hingebt: Dies ist eine Vorschau. Bestimmte Elemente werden wir erst bei der Umsetzung im Zusammenspiel mit dem CMS hinzufügen. Das betrifft vor allem Dinge wie Responsive Design, barrierefreie Aspekte oder einige Details am Design (etwa die Kontraste oder die finale Typografie). Insofern lohnt sich im Moment eigentlich kein Blick auf das Markup.</p>
<p>Ansonsten sind wir auf eure Anmerkungen gespannt. Bis zum Relaunch sind es noch ein paar Wochen hin, so dass wir gute Ideen gerne noch mit aufnehmen können.<br />
Vielleicht werden einzelne Elemente nicht allen gefallen, aber eines dürfte sicher sein: Mit diesem Ansatz sind wir inhaltlich, technisch und gestalterisch schon mal zwei, drei Schritte vorangekommen.</p>
<h5>Zum Autor</h5>
<p><img id="image125" src="http://www.webkrauts.de/wp-content/uploads/2006/11/nicolai_schwarz_60x60.jpg" alt="Autorenfoto: Nicolai Schwarz" class="bild-links"/>Nicolai Schwarz arbeitet unter dem Namen textformer mediendesign als selbstständiger Designer und Webentwickler in Dortmund. Hauptsächlich arbeitet er an Drupal-Projekten. Gelegentlich schreibt er darüber, zum Beispiel für das Webstandards-Magazin, t3n oder eben auf webkrauts.de. Im September hat er »Drupal 7: Das Praxisbuch für Ein- und Umsteiger« beim Galileo Verlag veröffentlicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/24/vorschau-auf-einen-relaunch/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/24/vorschau-auf-einen-relaunch/</feedburner:origLink></item>
		<item>
		<title>Bauen wie die Ameisen</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/XMkq8cUhZGw/</link>
		<comments>http://www.webkrauts.de/2011/12/23/bauen-wie-die-ameisen/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 07:00:17 +0000</pubDate>
		<dc:creator>Matthias Mees</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[HTML5 Boilerplate]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1053</guid>
		<description><![CDATA[<div class="advent advent-23">23. Türchen des Webkrauts-Adventskalenders</div>
<p>Das HTML5 Boilerplate liefert nicht nur eine sinnvolle Vorlage, um zeitgemäße Webseiten zu entwickeln, es gibt Webentwicklern auch ein Werkzeug, diese optimiert auszuliefern. Matthias Mees erklärt, was das build-Skript leistet.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-23">23. Türchen des Webkrauts-Adventskalenders</div>
<p>Das <a href="http://h5bp.com">HTML5 Boilerplate</a> ist eine solide Vorlage für zeitgemäße Webseiten. Webentwickler finden nicht nur Vorgaben für HTML und CSS vor, sondern auch bereits integrierte Javascript-Helfer wie jQuery und <a href="http://modernizr.com">Modernizr</a> sowie viele intelligente Voreinstellungen in der .htaccess. Passende Muster für favicon und auf Smartphones verwendete Icons, eine robots.txt sowie eine QUnit-Suite, um Javascript-Code zu testen, machen das Boilerplate zu einer umfangreichen Universalvorlage für neue Webprojekte. Es handelt sich dabei ausdrücklich nicht um eine klassisches Framework, zumal das HTML5 Boilerplate keinerlei Layout-Vorlagen mitbringt. Viel mehr bündelt und dokumentiert es bewährte und sinnvolle Vorgaben zentral und erspart Webworkern, diese von Hand zusammenstellen zu müssen.</p>
<p>Gleichzeitig liefert das Boilerplate aber auch ein Skript, um Webseiten vor der Auslieferung auf den Server automatisiert zu optimieren und zu prüfen.</p>
<h4>Baustellen-Besichtigung</h4>
<p>Das build-Skript samt aller benötigten Werkzeuge liegt im Verzeichnis build einer Kopie des Boilerplates. Die Datei build.xml ist dabei das eigentliche Skript, das mittels des Java-basierten Tools ant ausgeführt wird. Dieses funktioniert  <strong>nur</strong> innerhalb des build-Verzeichnisses.</p>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/11/H5BP-Build-Skript-Beispiel-1.png" alt="Der Inhalt der Wurzelverzeichnisses des HTML5 Boilerplates" width="450" height="300" class="alignnone size-full wp-image-1051" /></p>
<p>Die Batch-Datei runbuildscript.bat im build-Verzeichnis dient zur Ausführung des Skriptes unter Windows – sie stellt lediglich sicher, dass eine notwendige Pfadangabe gesetzt wird und ruft dann das eigentliche build-Skript auf. Webworker, die das Boilerplate als Fork aus dem <a href="https://github.com/h5bp/html5-boilerplate">GitHub-Repository</a> gezogen haben, können mit dem bash-Skript createproject.sh eine lokale Arbeitskopie in einem separaten Verzeichnis erzeugen, die nur die tatsächlich benötigten Dateien, nicht aber die von git erzeugten enthält. Im »normalen« Download-Archiv sind diese bereits entfernt.</p>
<p>Im Verzeichnis config liegen die Konfigurationsdateien zur Einrichtung des Bauvorhabens, einerseits für Standardeinstellungen, andererseits projektspezifisch. Das Verzeichnis tools beinhaltet kleine Helferprogramme wie etwa den YUI Compressor oder Tools zur Bildoptimierung und Codeprüfung.</p>
<h4>Vor dem ersten Bau</h4>
<p>Auf aktuellen OSX- oder Linux-Systemen sollte das build-Skript ohne weitere Schritte funktionieren, bestenfalls müsst ihr über die jeweilige Paketverwaltung das Paket ant-contrib nachinstallieren. Windows-Systeme benötigen <a href="http://code.google.com/p/winant/">Win Ant</a>, wofür zunächst das <a href="http://www.oracle.com/technetwork/java/javase/downloads/">Java Development Kit</a> installiert sein sollte. <strong>Wichtig:</strong> Das Java Runtime Environment reicht nicht aus. Alle weiteren zum Einsatz des build-Skriptes notwendigen Werkzeuge sind im Download-Archiv des HTML5 Boilerplates enthalten.</p>
<h4>Was leistet das build-Skript?</h4>
<p>In erster Linie optimiert es die zum Projekt gehörenden HTML-, CSS- und Javascript-Dateien, insbesondere in Sachen Performance. Es kombiniert und minifiziert eingebundenes CSS und JS, fügt also jeweils mehrere Dateien zu einer zusammen und entfernt aus dieser im Produktivbetrieb unnötige Leerzeichen und Kommentare. Kommentare entfernt es auch aus HTML-Dateien, optional beseitigt es auch in diesen unnötige Leerzeichen. Das verschlankt zum einen alle ausgelieferten Dateien, zum anderen reduziert es die Zahl der angefragten Dateien, also die Zahl der HTTP-Requests.</p>
<p>Um den Cache-Mechanismus von Browsern auszutricksen, ändert das build-Skript zudem bei jedem Durchlauf die Dateinamen der kombinierten CSS- und JS-Dateien nach dem Zufallsprinzip und aktualisiert die Referenzen zu diesen in den HTML-Dateien entsprechend. Da die .htaccess-Datei des Boilerplates für diese relativ lange Cache-Zeiten vorgibt, würden diese bei gleichbleibendem Dateinamen ansonsten womöglich erst Monate nach Auslieferung neu geladen.</p>
<p>Der Befehl <kbd>ant css-split</kbd> teilt die style.css des Boilerplates in fünf Dateien auf, die über @import-Anweisungen von der style.css eingebunden werden. Konkret trennt es Normalisierung, primäre Styles, @media-Queries, Helferklassen und Print-Styles in übersichtliche Module. Selbstverständlich setzt das build-Skript diese wieder zu einer kombinierten Datei zusammen. Ebenso der sauberen Trennung dient die Aufteilung des JS-Codes in plugins.js (z.B. für externe jQuery-Plugins) und script.js (für eigenen Code), auch diese fügt das build-Skript zu einer Datei zusammen.</p>
<p>Über die Tools jpegtran und optipng verringert das build-Skript die Dateigröße der zum Projekt gehörenden JPG- und PNG-Grafiken, u.a. indem es überflüssige Metadaten aus den Dateien entfernt. Ähnliches erledigt natürlich bereits die »Save for web«-Funktion gängiger Grafikprogramme – wundert euch hier also nicht vorschnell über mangelnde Effizienz, eventuell <em>sind</em> die Dateien bereits optimiert. Dazu entfernt das build-Skript Code, der nur in der Entwicklungsphase benötigt wird, sowie Referenzen auf in der Produktivumgebung überflüssige Dateien.</p>
<p>Zudem kann das build-Skript optional ein sogenanntes <a href="http://www.w3.org/TR/html5/offline.html">cache manifest</a> generieren. Diese Textdatei ermöglicht es, Web-Applikationen auch offline ausführen zu können. Sie enthält eine Liste der zur Ausführung notwendigen Dateien und weist den Browser an, diese für Offline-Nutzung zu speichern.</p>
<p>Weitere Helferchen im tools-Verzeichnis dienen der Qualitätssicherung des CSS- und JS-Codes. <a href="http://jshint.com">JS Hint</a>, <a href="http://www.jslint.com/lint.html">JS Lint</a> und <a href="http://csslint.net">CSS Lint</a> prüfen den Code auf Fehler und mögliche Performance-Bremsen. Diese laufen auf der ebenfalls auf Java basierenden Javascript-Engine rhino. JS Hint und JS Lint könnt ihr über die Konfigurationsdateien des build-Skriptes genauer konfigurieren.</p>
<h4>Ausführung</h4>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/11/H5BP-Build-Skript-Beispiel-2.png" alt="Ausgabe der Ausführung des build-Skriptes in einem Terminal" width="450" height="300" class="alignnone size-full wp-image-1052" /></p>
<p>Neben dem bereits erwähnten Kommando zum Aufteilen der CSS-Datei bietet das build-Skript verschiedene »Ziele«, also unterschiedliche Aufgabengruppen für verschiedene Stufen der Entwicklung. Der Zweck der unterschiedlichen Stufen (Entwicklung, Testen, Produktion) ebenso wie der verschiedenen Ziele ist es, Zeit im Ablauf der build-Vorgangs zu sparen, indem zeitaufwändige Schritte wie etwa die Bildoptimierung übersprungen werden. In den meisten Fällen genügt es, wenn ihr ein <kbd>ant build</kbd> ausführt, soll zusätzlich der HTML-Code minifiziert werden, ist <kbd>ant minify</kbd> die richtige Wahl. Über <kbd>ant text</kbd> überspringt das build-Skript die relativ zeitraubende Optimierung von JPG- und PNG-Grafiken.</p>
<p>Zur Ausführung von JS Hint, JS Lint und CSS Lint müsst ihr lediglich den betreffenden Befehl an das build-Kommando anhängen, also z.B. <kbd>ant build jshint</kbd>. Alle drei Tools bremsen den build-Durchlauf merklich aus, Entwickler sollten sie also nicht unbedingt bei jedem build-Lauf mit ausführen lassen – JS Lint und JS Hint aber unbedingt dann, wenn sie das Javascript eines Projekts überarbeitet haben, denn dann zeigen beide zuverlässig Fehler auf.</p>
<h4>Etwas Handarbeit</h4>
<p>Einige Dinge kann das build-Skript (noch) nicht automatisieren. So müsst ihr jede zum Projekt gehörende HTML-Datei von Hand in die Konfigurationsdatei project.properties eintragen. Ebenfalls »bekannt machen« sollten Webworker Dateien und Verzeichnisse, die aus der Produktivumgebung ausgeschlossen werden sollen, etwa im Projektverzeichnis liegende Originale von Grafikdateien oder Stylesheets für einen CSS-Präprozessor wie SASS oder LESS.</p>
<p>Das build-Skript bietet eine Vielzahl weiterer Möglichkeiten, um die Arbeit mit dem HTML5 Boilerplate zu automatisieren und zu vereinfachen. Es ist im <a href="https://github.com/paulirish/html5-boilerplate/wiki/Build-script">Wiki des Projektes auf GitHub</a> ausführlich dokumentiert.</p>
<h5>Zum Autor</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/11/matthias_mees_60x60.jpg" alt="Matthias Mees" width="60" height="60" class="bild-links" /> Matthias Mees lebt und <a href="http://netzgestaltung.net">arbeitet</a> in Eutin in Schleswig-Holstein. 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/2011/12/23/bauen-wie-die-ameisen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/23/bauen-wie-die-ameisen/</feedburner:origLink></item>
		<item>
		<title>Dreimal CSS4 zum Mitnehmen</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/QHSLOVoG_NY/</link>
		<comments>http://www.webkrauts.de/2011/12/22/dreimal-css4-zum-mitnehmen/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 07:00:02 +0000</pubDate>
		<dc:creator>Sandra Kallmeyer</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[css4]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1178</guid>
		<description><![CDATA[<div class="advent advent-22">22. Türchen des Webkrauts-Adventskalenders</div><p>Advent, Advent, ein Lichtlein brennt. Erst 1, dann 2, jetzt 3, bald 4, steht neues CSS vor der Tür. Lange bevor CSS3 als Standard verabschiedet wird, brüten schlaue Köpfe dessen Nachfolger aus. Sandra Kallmeyer zeigt drei CSS4-Tricks, die bereits jetzt einsetzbar sind.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-22">22. Türchen des Webkrauts-Adventskalenders</div>
<p>Beim Rückblick auf das Jahr 2011 fällt positiv auf, dass HTML5 und CSS3 sich langsam auch hier in Deutschland in der Breite durchsetzen. Mit Progressive Enhancement, <a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills">Polyfills</a> und nützlichen Frameworks wie dem <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a> und <a href="http://www.stuffandnonsense.co.uk/projects/320andup/">320 and up</a> sind wir gut aufgestellt, die neuesten Features in unseren Projekten sinnvoll einzusetzen.</p>
<p>Unterstützung erfahren wir dabei von den Browserherstellern, die nach einem (teilweise) langen Dornröschenschlaf aufgewacht sind und mit großer Begeisterung Feature um Feature implementieren. Es ist ein kleines Wettrennen, das wir in diesem Jahr beobachten konnten und das uns reichlich kreativen Aufwind beschert hat. Daher ist es nur passend, zum Jahreswechsel einen Ausblick zu wagen: Was kommt Neues mit CSS4? Gibt es schon Ansätze für Implementierungen einzelner Features in den Browsern? Können wir vielleicht schon irgendwas verwenden? Dies soll keine vollständige Abhandlung über sämtliche Neuerungen sein, sondern vielmehr eine Zusammenstellung von kleinen Tricks, die ihr jetzt schon einsetzen könnt.</p>
<p>Doch Obacht! Um die verlinkten Beispiele nachvollziehen zu können, braucht ihr die Nightlies der jeweiligen Browser. Wer also nicht nur lesen, sondern auch ausprobieren möchte, installiert jetzt:</p>
<ul>
<li><a href="http://nightly.mozilla.org/">Firefox Nightly</a></li>
<li><a href="http://nightly.webkit.org/">Webkit Nightly</a></li>
<li><a href="http://www.opera.com/browser/next/">Opera Next</a></li>
</ul>
<p>Da Webkit nur eine Engine ist und kein kompletter Browser, müsst ihr vorab Safari installieren, der dann die Webkit Nightly als Engine nutzt. Tipp: Ihr könnt alle drei Browser in eine <a href="https://www.virtualbox.org/">virtuelle Maschine</a> installieren. So haltet ihr alles schön separat von eurem Produktivsystem.</p>
<p>Fertig? Prima. Auf geht’s!</p>
<h4>Mischen possible: cross-fade()</h4>
<p>Die CSS4-Meldung, die bislang am meisten Aufsehen erregt hat, ist, dass Webkit eine teilweise Unterstützung für das Cross-Fading von Hintergrundbildern implementiert hat. Mit eurem frisch installierten Webkit Nightly könnt ihr euch zunächst das Live-Demo dazu ansehen:</p>
<p><a href="http://peter.sh/files/examples/cross-fading.html">Demo: cross-fade()</a></p>
<p>Hier ein Screenshot für alle, die noch keinen Webkit Nightly installiert haben:</p>
<p><img class="alignnone size-full wp-image-1179" src="http://www.webkrauts.de/wp-content/uploads/2011/12/crossfade.jpg" alt="0%, 50% und 100% Crossfading-Zustände" width="682" height="295" /></p>
<p>Mit cross-fade könnt ihr zwei Hintergrundbilder ineinander überblenden. Dazu gebt ihr die URLs für zwei Hintergrundbilder an, sowie einen Prozentsatz, mit dem das vordere Bild in das hintere geblendet werden soll. Bei 0% ist nur das hintere Bild sichtbar, bei 100% nur das vordere. Dazwischen könnt ihr beliebig abstufen. 50% blendet die Bilder 1:1 ineinander. Im Demo liest sich das so:</p>
<pre><code>background-image: cross-fade(
    url("logo-box.png"),
    url("logo-bare.png"),
    50%);</code></pre>
<p>Dies ist besonders spannend für die Kreativen unter uns, die nun nicht mehr jedes Mal PhotoShop oder Gimp öffnen müssen, um zwei Hintergrund-Texturen miteinander zu kombinieren. Ihr könnt direkt im Browser experimentieren.</p>
<p>Das beste daran: Ihr könnt diesen Effekt bereits jetzt verwenden. Solange ihr ein herkömmliches Hintergrundbild als Fallback einbindet, das den anderen Browsern angezeigt wird, könnt ihr nach Belieben mit Cross-Fading spielen. Eine Holztextur mit einer Kratzertextur verbinden? Kein Problem! Und wie üblich gilt: Je mehr ihr euch mit den Features beschäftigt, die ein Browserhersteller implementiert hat, umso größer der Anreiz für die anderen Hersteller nachzuziehen. Und je mehr Browser ein Feature implementiert haben, umso größer die Wahrscheinlichkeit, dass es seinen Weg in die Spezifikation findet.</p>
<p>Momentan funktioniert das vierte Beispiel des Demos noch nicht, da Webkit noch keine Animation für cross-fade verwirklichen konnte. Ein animiertes Cross-Fading sieht theoretisch so aus:</p>
<pre><code>background-image: cross-fade(
    url("logo-box.png"),
    url("logo-bare.png"),
    0%);
animation: fading 3s infinite;</code></pre>
<p>Hier sollten die Bilder innerhalb von drei Sekunden ineinander überblenden, und die Animation würde sich unendlich oft wiederholen. Sobald dieses Feature implementiert ist, eröffnet es völlig neue Möglichkeiten für interaktive Elemente, Slideshows und vieles mehr. Das Naheliegendste ist sicher eine einmalige cross-fade-Animation bei hover/focus auf ein Element. Die Entwürfe zur Spezifikation sehen zudem vor, dass cross-fade für alle Bilder implementiert werden soll, also zum Beispiel auch für border-image. Entdecke die Möglichkeiten!</p>
<p>Die erste Implementierung von cross-fade wird voraussichtlich mit <a href="http://en.wikipedia.org/wiki/Google_Chrome#Release_history">Chrome 17</a> auf den Markt kommen. Also wahrscheinlich gleichzeitig mit dem Projekt, an dem ihr gerade arbeitet.</p>
<h4>Schnell im Bilde mit image-rendering</h4>
<p>Bleiben wir noch einen Moment bei den Bildern. Diejenigen von uns, die bereits mit großer Begeisterung Responsive Designs konzipieren, haben sicher festgestellt, dass das Rendering von Bildern, die im Browser vergrößert oder verkleinert werden, in letzter Zeit unheimlich an Qualität gewonnen hat. Erinnert ihr euch noch an die Zeit, als jeder sofort sehen konnte, dass ein Bild im Browser verkleinert wurde? Die hakelig verpixelte Katastrophe, die dabei herauskam? Genau! Gleiches gilt für Transformationen wie Drehen oder Stauchen von Bildern. Wo anfangs noch Mausezähnchen blitzten, gibt’s heute schöne glatte Bilder, denen wir die Manipulation im Browser kaum mehr ansehen können.</p>
<p>Mittlerweile haben nämlich alle Browser Methoden implementiert, die in solchen Fällen die Bildqualität optimieren. Bilineares Filtern nennt sich das und entspricht dem, was in professionellen Bildbearbeitungsprogrammen beim Manipulieren von Bildern geschieht. Diese Art der Bildoptimierung ist inzwischen in allen Browsern die Standardeinstellung und sorgt dafür, dass Kanten geglättet werden und alles schön ansehnlich bleibt. Responsive Design Win!</p>
<p>Allerdings schlägt die Optimierung der Bildqualität auch auf die Performance: je anspruchsvoller die Bildoptimierung, desto langsamer das Rendering. Bei einem einzelnen Bild wird das kaum zu Buche schlagen. Bei einem flotten Browserspiel oder einer komplexen Canvas-Animation kann sich die Performance-Einbuße aber durchaus bemerkbar machen. Ein weiteres Problem entsteht immer dann, wenn scharfkantige Elemente auch bei der Bildmanipulation im Browser scharfkantig bleiben sollen. Das kann ein Logo sein, eine Infografik usw. – bilineares Filtern glättet auch hier die Kanten und alles wird unabsichtlich verwaschen.</p>
<p>Wir benötigen also einen Mechanismus, um die Voreinstellung wieder zu überschreiben. Hier kommt crisp-edges ins Spiel.</p>
<p>Kleiner Einschub: Zunächst sahen die Entwürfe zur Spezifikation vor, dass es für image-rendering die Optionen optimizeSpeed und optimizeQuality geben solle. Diese sind nun bereits wieder als »deprecated« gekennzeichnet. Die neuen Optionen heißen auto (Standardeinstellung, Optimierung auf Qualität) und crisp-edges (Option, Optimierung auf Detailschärfe und Geschwindigkeit). Befassen wir uns also im Folgenden mit crisp-edges.</p>
<p>Das Gute: alle relevanten Browser unterstützen diese Eigenschaft bereits jetzt! Firefox ist bereits seit Version 3.6 dabei, also seit 2009! Internet Explorer hatte bis Version 7 die geschwindigkeitsoptimierte Variante als Voreinstellung, seit IE8 setzt man auf Qualität. Schnelles Rendering und scharfe Kanten entlockt man aber auch dem IE8 noch mit -ms-interpolation-mode: nearest-neighbor. <a href="http://my.opera.com/ODIN/blog/2011/11/07/what-s-new-in-opera-development-snapshots-4-november-2011-edition">Opera hat vor wenigen Wochen nachgezogen</a> und die <a href="http://dev.w3.org/csswg/css4-images/Overview.src.html">in CSS4 vorgesehenen image-rendering Optionen</a> implementiert.</p>
<p>Die Syntax lautet derzeit:</p>
<ul>
<li>Mozilla: -moz-crisp-edges</li>
<li>Opera: -o-crisp-edges</li>
<li>Webkit: -webkit-optimize-contrast</li>
<li>Internet Explorer: -ms-interpolation-mode: nearest-neighbor</li>
</ul>
<p>crisp-edges ist also ein weiteres Beispiel für eine Technik, die schon weit vor der Veröffentlichung als Spezifikation flächendeckend einsetzbar ist.</p>
<p>Die <a href="https://developer.mozilla.org/En/CSS/Image-rendering#Live_Examples">Beispiele von Mozilla</a> und das <a href="http://jsfiddle.net/zda24/">interaktive Demo</a>, auf das Opera verweist, verdeutlichen crisp-edges in der Theorie ganz gut, sind aber insgesamt etwas blutleer und wenig anschaulich. Wo sind Projekte, bei denen durch den Rendering-Modus echte Probleme gelöst werden?</p>
<p>Ein gutes Beispiel ist Pixel-Art; eine Kunstform, in der Bilder aus einzelnen, scharf voneinander abgegrenzten Pixeln zusammengesetzt werden. Man könnte es auch Mosaik nennen. Wenn ich nun ein solches Kunstwerk vergrößere oder verkleinere, sei es, um hineinzuzoomen, sei es, weil das Webdesign responsive sein soll, greift sofort der qualitätsoptimierte Renderingmodus der Browser. Die Folge ist, dass die Kanten geglättet werden und die einzelnen Pixel verwischen. Sinn und Zweck der Kunstform sind damit hinüber. Ärgerlich.</p>
<p>Die Plattform <a href="http://www.pixeljoint.com/">Pixeljoint</a> wurde von der plötzlichen Bildoptimierung seitens der Browserhersteller überrumpelt und <a href="http://www.pixeljoint.com/2009/06/14/2854/Bilinear_Filtering_is_over_sorta_%3BP.htm">suchte nach Lösungen</a>. Schnell entdeckte man die bis dahin proprietäre Mozilla-Lösung im Mozilla Developer Network und band sie (und das IE-Äquivalent) ins CSS ein.</p>
<pre><code>img[src$=".gif"], img[src$=".png"] {
                   image-rendering: -moz-crisp-edges;         /* Firefox */
                   -ms-interpolation-mode: nearest-neighbor;  /* IE */
                 }</code></pre>
<p>Wenn ihr <a href="http://www.pixeljoint.com/pixelart/17123.htm">ein beliebiges Pixel-Art-Bild</a> auf der Pixeljoint-Webseite mit dem Firefox aufruft und mit dem + darunter vergrößert, seht ihr, dass die Pixel schön scharfkantig erhalten bleiben. Nehmt ihr das -moz-crisp-edges jedoch z.B. mit der Developer Toolbar heraus, verwischen die Pixel sofort.</p>
<p><img class="size-full wp-image-1181 alignnone" src="http://www.webkrauts.de/wp-content/uploads/2011/12/imagerendering.jpg" alt="Monstergesicht einmal mit und einmal ohne crisp-edges" width="682" height="329" /></p>
<p>Wir merken uns: image-rendering ist dein Freund, wenn du Responsive Space Invaders basteln möchtest.</p>
<h4>Den Rahmen sprengen mit full-screen</h4>
<p>Der Pseudo-Selektor full-screen ist zwar noch nicht Teil der CSS4-Entwürfe, sondern wird im Rahmen der Fullscreen JavaScript API entwickelt. Aufgrund der bereits weit verbreiteten Implementierung wird er aber sicher Eingang in CSS4 finden. Doch worum geht es hier genau?</p>
<p>Jeder von uns kennt den Fullscreenmodus eines Browsers. Beim einen ist er mit F11 erreichbar, beim anderen mit CMD+Shift+F – in jedem Falle bewirkt er, dass das Browserchrome ausgeblendet wird und der eigentliche Inhalt den gesamten Bildschirm füllt. Wir alle nutzen das gern, um Filme anzuschauen oder Spiele zu spielen oder Webseiten zu lesen, die für größere Bildschirme »optimiert« wurden als der, den wir gerade nutzen. Es ist aber ein bisschen wie bei der Knoff-Hoff-Show: man muss erstmal wissen, dass und wie es geht.</p>
<p>Mit der Fullscreen API gibt es nun einen Weg, die Fullscreen-Ansicht über einen simplen Button als Option bereitzustellen. Aber damit nicht genug! Was z.B. F11 macht ist, sämtlichen Inhalt einer Website im Fullscreenmodus anzuzeigen. Mit der Fullscreen API habt ihr ab sofort die Möglichkeit, einzelne Elemente wie ein Foto oder Video in den Fullscreenmodus zu heben. Denkt ihr auch gerade an eine Lightbox? Genau, sowas in der Art.</p>
<p>Mit dieser simplen Syntax zeigt ihr ein div im Fullscreenmodus an:</p>
<pre><code>div.webkitRequestFullScreen();
div.mozRequestFullScreen();</code></pre>
<p>Und mit dieser Syntax beendet ihr den Spuk wieder:</p>
<pre><code>document.webkitCancelFullScreen();
document.mozCancelFullScreen();</code></pre>
<p>Zugegebenermaßen hat das noch nichts mit CSS zu tun. Nun kommt aber wieder der Pseudo-Selektor full-screen ins Spiel. Und Achtung, jetzt wird’s mächtig! Mit full-screen könnt ihr nämlich alle Elemente anfassen, die sich in dem Moment im Fullscreenmodus befinden.</p>
<p>Denkbar ist, einen Mediaplayer Fullscreen anzuzeigen, aber im Fullscreenmodus die Bedienelemente zu verbergen. Möglich ist auch eine Bildergalerie, bei der die Bilder im Fullscreenmodus einen aufwändigen Rahmen haben, der in der normalen Ansicht nicht sichtbar ist. Der Pseudo-Selektor full-screen macht’s möglich. Unser Element kann im Fullscreenmodus komplett anders aussehen als in der normalen Ansicht.</p>
<p>Ihr könnt das in <a href="http://html5-demos.appspot.com/static/fullscreen.html">diesem Beispiel</a> z. B. mit dem Google Chrome nachvollziehen: Der iFrame mit dem schönen Text »I am a lame frame« blüht im Fullscreenmodus mit Formen, Bildern und Farben auf.</p>
<p><a rel="attachment wp-att-1182" href="http://www.webkrauts.de/2011/12/22/dreimal-css4-zum-mitnehmen/fullscreen/"><img class="alignnone size-full wp-image-1182" src="http://www.webkrauts.de/wp-content/uploads/2011/12/fullscreen.jpg" alt="derselbe iframe mit unterschiedlichen Stilen" width="682" height="238" /></a></p>
<p>Das alles mag wie Spielerei klingen, aber es gibt sogar Möglichkeiten, die Barrierefreiheit einer Webseite damit zu verbessern: Denkbar ist, eine Tabelle, die sich selbst mit <a href="http://lab.yatil.de/wsm11/demo.html">cleveren Tricks</a> nur sperrig in unser schickes Responsive Design einpassen lässt, bei Bedarf in den Fullscreenmodus zu schicken und ihr dort ein Zebramuster, einen anderen Font und eine größere Schriftgröße zu verpassen. Denkt beispielsweise an Stundenpläne, komplexe Datentabellen und so weiter.</p>
<p>Nicht nur das: Mit dem Pseudo-Selektor full-screen-ancestor könnt ihr darüber hinaus das Elternelement des Elementes ansprechen, das ihr in den Fullscreenmodus schickt. Dieses dann in der Art einer Lightbox einzufärben ist ein Leichtes. Und voilá, da habt ihr eine Zweizeiler-Lightbox.</p>
<p>Natürlich geht das alles erstmal wieder nur in den künftigen Webkit- und Mozilla-Browsern, aber was soll’s? Eine klassische Lightbox als Fallback einbinden ist auch keine große Sache. Oder ihr bietet keinen Fallback an und zeigt den Usern des IE einfach gar keine Fullscreen-Ansicht. Das hängt vom jeweilige Projekt ab. Wichtig ist nur zu wissen: es geht schon! Und andere tun es auch! Eine Implementierung des Fullscreenmodus findet ihr z. B. im <a href="http://mediaelementjs.com/">Mediaplayer MediaElements.js</a>.</p>
<h4>CSS4 Selektoren</h4>
<p>Im Bereich Selektoren wird sich auch einiges bewegen, z.B. werden wir endlich einen Parent-Selektor bekommen, yay! Wir werden künftig nth-columns aus Datentabellen ansprechen können, wir werden local-links stylen können und :link und :visited zu any-link zusammenfassen. Der bereits in Mozilla und Webkit implementierte Selektor :any wird seinen Einzug als :matches feiern und sicherlich bald auch mit einem Polyfill nutzbar sein, es gibt erste Überlegungen zu border-clip und vieles mehr … aber das ist ein neues Thema. Hier und heute habe ich mich auf Neuerungen beschränkt, die ihr jetzt schon einsetzen könnt.</p>
<p>Welche Ideen habt ihr zu den drei vorgestellten Techniken? Oder habt ihr sogar schon die eine oder andere Technik eingesetzt? Ich freue mich auf eure Kommentare!</p>
<h5>Zur Autorin</h5>
<p><a href="http://www.outlinewebdesign.com/"><img class="bild-links" src="http://www.webkrauts.de/wp-content/uploads/2011/12/sandra-kallmeyer-70x70.jpg" alt="Autorenfoto Sandra Kallmeyer" />Sandra Kallmeyer</a> ist Frontendentwicklerin aus Leidenschaft. Neuerungen in den HTML- und CSS-Entwürfen erwartet sie daher mit Spannung, vor allem dann, wenn praxisnahe Tricks dabei sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/22/dreimal-css4-zum-mitnehmen/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/22/dreimal-css4-zum-mitnehmen/</feedburner:origLink></item>
		<item>
		<title>Ein Blick durch den Viewport</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/LEpIpquCb30/</link>
		<comments>http://www.webkrauts.de/2011/12/21/ein-blick-durch-den-viewport/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 07:00:24 +0000</pubDate>
		<dc:creator>Patrick Lauke</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[mobile web]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1162</guid>
		<description><![CDATA[<div class="advent advent-21">21. Türchen des Webkrauts-Adventskalenders</div>
<p>Es ist gar nicht so einfach, Webseiten auf mobilen Geräten auch wirklich so anzeigen zu lassen, wie Webworker das wollen. Handys und Tablets haben mitunter ihre ganz eigenen Vorstellungen davon, wie eine Webseite gerendert werden sollte. Patrick Lauke erklärt, wie Layouts auf mobilen Geräten berechnet werden &#8211; und wie Webworker diese Prozesse beeinflussen können.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-21">21. Türchen des Webkrauts-Adventskalenders</div>
<p>Prinzipiell verhalten sich Browser auf mobilen Geräten genau so wie ihre großen Brüder auf dem Desktop. Vorbei sind die Zeiten, in denen eine mobile Webseite eine vereinfachte, abgespeckte Version der »echten« Webseite war. Trotzdem gibt es, bedingt durch die verschiedenen Formfaktoren von Handys und Tablets, ein paar Eigenheiten, auf die wir achten müssen, damit unsere User auch auf mobile Geräten eine gute User Experience bekommen.</p>
<p>Eine dieser Eigenheiten ist die Layout-Berechnung, die regelt, wie Seiten ausgelegt und angezeigt werden. Um zu verstehen, was auf mobilen Geräten passiert, und wie wir das Layout besser kontrollieren können, schauen wir uns zuerst mal an, was auf dem Desktop vor sich geht.</p>
<h4>Layout im Desktop-Browser</h4>
<p>Auf dem Desktop sind im Grunde genommen nur zwei Aspekte ausschlaggebend dafür, wie eine Seite ausgelegt wird: die Bildschirmgröße und die eigentliche Größe des Browser-Fensters.</p>
<p>Die Bildschirmgröße hängt nicht nur vom Bildschirm ab (der eine »native resolution« hat, bedingt durch die Anzahl von ansteuerbaren physischen Pixeln), sondern auch von der Auflösung, die im Betriebssystem eingestellt ist und das Verhältnis von »echten» und »virtuellen» Pixeln festlegt. Denn selbst wenn ein Monitor z.B. 1920&#215;1080 Pixel anzeigen kann, gibt es User, die ihre Auflösung auf 1280&#215;768 setzen &ndash; das Betriebssystem skaliert dann intern diese virtuelle Auflösung auf die physischen Pixel hoch.</p>
<p>Mit der Fenstergröße kennen sich Designer wohl schon gut aus: die Höhe und Breite des Browsers gibt unseren Layouts die anfänglichen Werte, die dann zur Berechnung von prozent-basierten Layouts verwendet werden. Wenn unsere Seite absolute Pixel-Dimensionen verwendet (z.B. in CSS, oder durch Elemente wie Grafiken im HTML), werden diese eins-zu-eins auf die Pixel des Betriebssystems übertragen. Ein CSS-Pixel entspricht einem Pixel im Betriebssystem. Und falls die Seiteninhalte breiter oder höher als das Fenster sind, ergeben sich Scroll-Balken.</p>
<p>Die Übersetzung von physischen und virtuellen Pixeln lässt sich auf dem Desktop nicht beinflussen &ndash; sie bleibt die Domäne vom Betriebssystem. Wie wir aber sehen werden, ist das Verhältnis von CSS-Pixeln und Betriebssystem-Pixeln ausschlaggebend in mobilen Browsern.</p>
<h4>Der Kleinbildschirm der mobilen Geräte</h4>
<p>Obwohl es mittlerweile eine Vielzahl an mobilen Geräten mit unterschiedlichen Bildschirmgrößen gibt, ist es noch immer der Fall, dass Smartphones und Handys generell ein relativ kleines Display haben. Ältere Devices wie das HTC Hero oder iPhone 3Gs haben zudem eine niedrige Pixeldichte, mit 320&#215;480 »echten« physischen Pixeln.</p>
<div id="attachment_1164" class="wp-caption alignnone" style="width: 338px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/htc-hero-webkrauts-eingezoomt.png" alt="So würde das Web auf Handys aussehen, wenn Browser sich nur an »echte« Pixel halten würden" title="htc-hero-webkrauts-eingezoomt" width="328" height="507" class="size-full wp-image-1164" /><p class="wp-caption-text">So würde das Web auf Handys aussehen, wenn Browser sich nur an »echte« Pixel halten würden</p></div>
<p>Wenn mobile Browser sich in diesem Fall wie auf dem Desktop verhalten würden, wäre das Surfen auf Handys eher ein Blick durch ein kleines Schlüsselloch. Und wenn das Layout die eigentliche Fenstergröße zur Berechnung von Prozent-basierten Werten berücksichtigen würde, wären die meisten Webseiten arg verzerrt und zerdrückt.<br />
Aus diesem Grund benutzen mobile Browser eine andere Strategie, um Webseiten anzuzeigen.</p>
<h4>Mobile Browser lügen</h4>
<p>Mobile Browser benutzen im Vergleich zu Desktop-Browsern einen seitenabhängigen Zoom-Faktor. Das Layout an sich wird auf ein »virtuelles« Fenster, dem Layout-Viewport, mit einer Standardbreite von ungefähr 980px ausgelegt.</p>
<div id="attachment_1165" class="wp-caption alignnone" style="width: 338px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/htc-hero-test1-ohne-meta.png" alt="Standard Layout-Viewport von 980px" title="htc-hero-test1-ohne-meta" width="328" height="507" class="size-full wp-image-1165" /><p class="wp-caption-text">Standard Layout-Viewport von 980px (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/test1-ohne-meta.html">Viewport Test: Standardverhalten ohne <code>meta</code></a>)</p></div>
<p>Dieser Layout-Viewport wird dann soweit verkleinert, bis er auf die physische Breite des Displays passt &ndash; dem sichtbaren Viewport für den User. Falls Inhalte größer als der anfängliche Layout-Viewport sind, wird der Layout-Viewport dementsprechend vergrößert &ndash; aber der sichtbare Viewport zoomt standardmäßig nur so weit aus, dass 980px Breite angezeigt werden. Das führt zu Scrollbalken im sichtbaren Viewport. Inhalte, die schmaler ausgelegt sind, führen zu vergeudetem Leerraum im Design.</p>
<p>Wo auf dem Desktop nur das Betriebssystem für die Umsetzung von physischen und virtuellen Pixeln zuständig ist, verwalten mobile Browser diese Verhältnisse selbst. Dadurch erscheinen die meisten Webseiten auch auf einem kleinen Display korrekt, aber halt &ndash; je nach Inhalt &ndash; recht klein. User müssen meistens von der anfänglichen, »ausgezoomten» Übersicht in die Seite zoomen, bevor sie diese auch lesen und benutzen können.</p>
<div id="attachment_1166" class="wp-caption alignnone" style="width: 338px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/htc-hero-webkrauts-uebersicht.png" alt="Das Web, wie es mobile Browser mit dem Standard-Layout-Viewport von 980px anzeigen" title="htc-hero-webkrauts-uebersicht" width="328" height="507" class="size-full wp-image-1166" /><p class="wp-caption-text">Das Web, wie es mobile Browser mit dem Standard-Layout-Viewport von 980px anzeigen</p></div>
<p>Diese recht komplexe Eigenheit der mobilen Browser hat wohl schon einige Designer verwirrt, die versucht haben, mittels Media Queries ein Layout auch für kleine Displays zu optimieren. Als Beispiel nehmen wir eine recht simple, zweispaltige Seite. Ohne jetzt groß in die Materie »Responsive Web Design« eintauchen zu müssen, wollen wir einfach unser Layout auf schmalen Displays einspaltig anzeigen, was wir mittels eines banalen <code>@media (min-width: 820px) { ... }</code> Blocks definieren. Wenn wir nun das Ganze in einem Desktopbrowser testen, sehen wir, dass bei einer schmalen Fensterbreite das Layout auf eine einzige Spalte kollabiert. Toll. Aber auf mobilen Geräten &ndash; die von Haus aus die Seite auf einen Layout-Viewport von 980px auslegen &ndash; klappt das ganze leider nicht.</p>
<div id="attachment_1167" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/media-query-ohne-viewport.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/media-query-ohne-viewport-460x185.png" alt="Trotz @media bleibt das Layout auf dem mobile Browser zweispaltig" title="media-query-ohne-viewport" width="460" height="185" class="size-medium wp-image-1167" /></a><p class="wp-caption-text">Trotz <code>@media (min-width: 820px) { ... }</code> bleibt das Layout auf dem mobile Browser zweispaltig (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/demo1-mediaquery-ohne-viewport.html">Test: Media Query ohne <code>viewport</code></a>)</p></div>
<p>Dieses Standardverhalten mag wohl für die meisten Webseiten gut genug sein, aber als Designer wollen wir natürlich mehr Kontrolle darüber, wie unsere Layouts auch auf mobilen Geräten aussehen.</p>
<h4>Kontrolle über den <code>viewport</code></h4>
<p>Wie groß der »virtuelle« Layout-Viewport ist und welchen Zoom-Faktor der Browser für unsere Seite benutzen soll, kann mittels des <code>viewport</code>-Meta-Elements festgelegt werden. Dazu können wir eine Handvoll an Attributen festlegen:</p>
<dl>
<dt><code>width</code> und <code>height</code></dt>
<dd>die Größe des virtuellen Fensters</dd>
<dt><code>minimum-scale</code>, <code>maximum-scale</code> und <code>initial-scale</code></dt>
<dd>minimaler, maximaler und anfänglicher Zoom-Faktor</dd>
<dt><code>user-scalable</code></dt>
<dd>kann das manuelle Zoomen seitens des Users unterbinden</dd>
</dl>
<p>Wenn wir also eine Webseite haben, die spezifisch auf eine Breite von 500px ausgelegt ist, sieht unser Markup konkret so aus:</p>
<pre><code>&lt;meta name="viewport" content="width=500"></code></pre>
<p>Der Viewport kann mit einer Kombination von diesen Attributen sehr spezifisch definiert werden. Es ist aber zu beachten, das Browser immer versuchen werden, die verschiedenen Werte möglichst sinnvoll umzusetzen &ndash; was dazu führen kann, dass einige Attribute schlichtweg ignoriert werden. So wird zum Beispiel bei dem recht unsinnigen</p>
<pre><code>&lt;meta name="viewport" content="width=500,height=100"></code></pre>
<p>das <code>height</code> Attribut ignoriert. Darüber muss man sich aber normalerweise keine Gedanken machen: in den meisten Fällen beschränkt sich die Benutzung des <code>viewport</code>s lediglich darauf, die Breite der Seite festzulegen.</p>
<p>Um auf unser einfaches Media-Query-Beispiel von vorher zurückzukommen, sehen wir, dass wir mit <code>&lt;meta name="viewport" content="width=520"></code> das erwünschte Resultat erzielen können.</p>
<div id="attachment_1168" class="wp-caption alignnone" style="width: 498px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-mediaquery-mit-viewport.png" alt="Dank viewport funktioniert nun auch die Media Query" title="galaxy-mediaquery-mit-viewport" width="488" height="827" class="size-full wp-image-1168" /><p class="wp-caption-text">Dank <code>viewport</code> funktioniert nun auch die Media Query (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/demo2-mediaquery-mit-viewport.html">Test: Media Query mit <code>viewport</code></a>)</p></div>
<h4>Probleme bei portrait/landscape und Tablets</h4>
<p>Nun können wir also festlegen, wie breit unsere Webseite in mobilen Browsern angezeigt wird. Leider kann uns diese explizite Kontrolle auch zum Verhängnis werden.</p>
<p>Nehmen wir mal als Beispiel eine einspaltige Webseite &ndash; jetzt mal ohne Media Queries, um es einfach zu halten &ndash; mit einem fixen Layout von 560px Breite. Ohne jegliche <code>viewport</code>-Angaben wird diese Seite auf dem standardmäßig 980px breitem Layout-Viewport angezeigt.</p>
<div id="attachment_1169" class="wp-caption alignnone" style="width: 498px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-karen-ohne-viewport.png" alt="Unsere Seite ohne viewport" title="galaxy-karen-ohne-viewport" width="488" height="827" class="size-full wp-image-1169" /><p class="wp-caption-text">Unsere Seite ohne <code>viewport</code> (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/demo3-ohne-viewport.html">Demo Seite ohne viewport</a>)</p></div>
<p>Um das Layout nun passgenau auf unserem Handy anzeigen zu lassen, fügen wir unser <code>&lt;meta name="viewport" content="width=560px"></code> Meta-Element hinzu.</p>
<div id="attachment_1170" class="wp-caption alignnone" style="width: 498px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-karen-width-560.png" alt="Unsere Seite mit meta name=viewport content=width=560" title="galaxy-karen-width-560" width="488" height="827" class="size-full wp-image-1170" /><p class="wp-caption-text">Unsere Seite mit <code>&lt;meta name="viewport" content="width=560"></code> (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/demo4-width-560.html">Demo-Seite mit viewport width 560px</a>)</p></div>
<p>Soweit, so gut. Was passiert aber nun, wenn wir unser Handy auf »landscape« Orientierung setzen? Der Browser hält sich immer noch strikt an unsere Anweisungen, und zoomt weiter in unsere Seite, um unsere 560px Breite auf die neue Displaybreite anzupassen.</p>
<div id="attachment_1171" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-karen-width-560-landscape.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-karen-width-560-landscape-460x288.png" alt="Der 560px-viewport in »landscape«" title="galaxy-karen-width-560-landscape" width="460" height="288" class="size-medium wp-image-1171" /></a><p class="wp-caption-text">Der 560px-<code>viewport</code> in »landscape«</p></div>
<p>Problematischer wird es dann, wenn wir nicht nur Handys, sondern auch Tablets betrachten. Diese halten sich auch an die <code>viewport</code>-Angaben, was aber auf den größeren Bildschirmen von Tablet-Devices zu einem viel zu extremen Zoom-Faktor führt.</p>
<div id="attachment_1172" class="wp-caption alignnone" style="width: 654px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-tab-karen-width-560-landscape.png" alt="Der 560px-viewport tritt auch auf Tablets in Kraft" title="galaxy-tab-karen-width-560-landscape" width="644" height="414" class="size-full wp-image-1172" /><p class="wp-caption-text">Der 560px-<code>viewport</code> tritt auch auf Tablets in Kraft</p></div>
<p>Über spezifische Pixeldimensionen hinaus, können wir bei den <code>width</code> und <code>height</code>-Attributen spezielle Konstanten verwenden: <code>device-width</code> und <code>device-height</code>. So sehen wir zum Beispiel, dass</p>
<pre><code>&lt;meta name="viewport" content="width=device-width"></code></pre>
<p>unseren Viewport auf verschiedene Breiten für Handys und Tablets setzt.</p>
<div id="attachment_1173" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-phone-tab-device-width.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-phone-tab-device-width-460x145.png" alt="device-widthKonstante hat auf Handys und Tablets verschiedene Werte" title="galaxy-phone-tab-device-width" width="460" height="145" class="size-medium wp-image-1173" /></a><p class="wp-caption-text"><code>device-width</code> Konstante hat auf Handys und Tablets verschiedene Werte (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/test2-mit-meta.html">Viewport Test: <code>device-width</code></a>)</p></div>
<p>Natürlich heist das jetzt, dass unser Layout sich wieder (wie wir es schon vom Desktop her kennen) auf eine Vielzahl an verschiedenen Displaydimensionen anpassen muss &ndash; Thema Media Queries und »Responsive Web Design«. Eigentlich wollten wir nur unser fixed-width Layout etwas formschöner auf Handys bringen, und nicht das ganze Design umkrempeln.</p>
<p>Darüber hinaus muss auch noch angemerkt werden, dass, obwohl dieser etwas device-unabhängigere Ansatz gut ist, es trotzdem noch einige Tücken gibt.</p>
<p>Safari auf iOS setzt <code>device-width</code> immer auf die schmalere, und <code>device-height</code> immer auf die längere Seite eines iPhones oder iPads, selbst wenn das Gerät in »landscape» ist &ndash; meiner Ansicht nach ein Bug. Andere mobile Browser verhalten sich logischer &ndash; <code>device-width</code> und <code>device-height</code> beziehen sich hier auf die horizontale oder vertikale Seite, und verändern sich je nach Orientierung.</p>
<div id="attachment_1174" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/iphone-device-width.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/iphone-device-width-460x274.png" alt="device-width bezieht sich in iOS immer auf die schmalere Seite, selbst in »portrait«-Orientierung" title="iphone-device-width" width="460" height="274" class="size-medium wp-image-1174" /></a><p class="wp-caption-text"><code>device-width</code> bezieht sich in iOS immer auf die schmalere Seite, selbst in »portrait«-Orientierung</p></div>
<p>Devices wie das iPhone 4 und die neue Generation an Android Handys haben, im Vergleich zu ihren Vorgängern, immer höhere Pixeldichten &ndash; das Display beinhaltet eine größere Anzahl an physischen, ansteuerbaren Pixeln. Wenn wir aber <code>device-width</code> und <code>device-height</code> verwenden, stellen wir fest, dass diese höhere Pixeldichte nicht miteinbezogen wird. Beispielsweise wird selbst auf einem iPhone 4, das eine physische Auflösung von 640&#215;960 hat, <code>device-width</code> und <code>device-height</code> auf 320&#215;480 gesetzt &ndash; die gleichen Werte wie auf einem iPhone 3Gs. Das liegt daran, dass Browser auf high-dpi Devices noch einen zusätzlichen internen Zoom-Faktor verwenden.</p>
<p>Normalerweise sollte diese Eigenheit von high-dpi Geräten den Designern eigentlich egal sein. Der zusätzliche Zoom-Faktor soll auf diesen Devices verhindern, dass Layouts, Texte und Bilder nicht arg zu klein angezeigt werden &ndash; was ja wieder dazu führen würde, dass User erstmal wieder in eine Seite reinzoomen müssen, um sie überhaupt nutzbar zu machen. Wenn wir aber trotzdem diesen extra Zoom-Faktor unterdrücken wollen (um beispielsweise sicherzustellen, dass Strichgrafiken so scharf wie möglich &ndash; mit einem eins-zu-eins Verhältniss von CSS- und Device-Pixeln &ndash; angezeigt werden), können wir auf Android ein zusätzliches <code>target-densitydpi</code> Attribut in unserem <code>viewport</code> Meta verwenden:</p>
<pre><code>&lt;meta name="viewport" content="width=device-width,target-densitydpi=device-dpi"></code></pre>
<div id="attachment_1175" class="wp-caption alignnone" style="width: 499px"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/galaxy-device-width-dpi.png" alt="device-widthauf high-dpi Android Handys, ohne und mit target-densitydpi=device-dpi " title="galaxy-device-width-dpi" width="489" height="414" class="size-full wp-image-1175" /><p class="wp-caption-text"><code>device-width</code> auf high-dpi Android Handys, ohne und mit <code>target-densitydpi=device-dpi</code> (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/test3-mit-meta-dpi.html">Viewport Test: <code>device-width</code> und dpi</a>)</p></div>
<h4>Neue Ansätze &#8211; <code>viewport</code> per CSS</h4>
<p>Das fundamentale Problem mit dem <code>viewport</code> Meta-Element ist, dass es sich im eigentlichen HTML-Dokument aufhält, obwohl es sich hier eigentlich eher um eine Styling-Angelegenheit handelt. Es gibt zwar verkappte Ansätze, um den Viewport mittels JavaScript doch noch auf verschiedene Situationen (»landscape« Orientierung auf Handys, grössere Displays auf Tablets, usw.) anzupassen (siehe z.B. die Diskussion hier: <a href="http://www.blog.highub.com/mobile-2/a-fix-for-iphone-viewport-scale-bug/"><cite>A fix for iPhone viewport scale bug</cite></a>), aber das scheint mir wirklich nicht die rechte Lösung zu sein.</p>
<p>Einen möglichen Ausweg aus diesem Schlamassel soll die <a href="http://www.w3.org/TR/css-device-adapt/"><cite>CSS Device Adaptation</cite></a> Spezifikation bieten. Diese übernimmt und erweitert die Funktionalität vom <code>viewport</code> Meta, lagert diese aber ins CSS aus. Zur Zeit wird diese Spezifikation leider nur in Operas mobilen Browsern unterstützt (und da nur mittels <code>-o-</code> Vendor-Prefix), aber sie lässt erahnen, wie wir Situationen wie bei unserer Demo-Seite doch eleganter anpacken können.</p>
<p>So lässt sich beispielsweise nicht nur eine bestimmte Breite angeben, sondern obere und untere Grenzen mittels <code>min-width</code> und <code>max-width</code>, oder mit der <code>width: [min] [max];</code> Kurzschreibweise setzen.</p>
<div id="attachment_1176" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/css-viewport-test.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/css-viewport-test-460x261.png" alt="CSS @viewport setzt nur bei kleinen Displays die minimale Breite" title="css-viewport-test" width="460" height="261" class="size-medium wp-image-1176" /></a><p class="wp-caption-text">CSS <code>@viewport</code> setzt nur bei kleinen Displays die minimale Breite (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/test4-css-viewport.html">Viewport Test: <code>viewport</code> mittels CSS</a>)</p></div>
<p>Somit lässt sich unsere einspaltige Seite, die wir nur auf kleinen Displays etwas passender anzeigen wollen, recht einfach umdefinieren:</p>
<pre><code>@-o-viewport { width: 560px auto; resolution: device; }</code></pre>
<p>Auf Handys wird der Viewport auf eine minimale Breite von 560px festgelegt. Sobald das Display größer als diese untere Grenze ist (z.B. ein Handy im »landscape« Modus oder ein Tablet), überlassen wir die Wahl des besten Layout-Viewports einfach dem standardmäßigen Verhalten des Browsers. Um sicherzustellen, dass auf high-dpi Geräten die Pixel nicht nochmal skaliert werden, erzwingen wir auch noch mittels <code>resolution:device</code> ein eins-zu-eins Verhältnis von physischen und CSS Pixeln.</p>
<div id="attachment_1177" class="wp-caption alignnone" style="width: 470px"><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/css-viewport-karen.png"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/css-viewport-karen-460x261.png" alt="Unsere Demo-Seite, jetzt mit CSS @viewport" title="css-viewport-karen" width="460" height="261" class="size-medium wp-image-1177" /></a><p class="wp-caption-text">Unsere Demo-Seite, jetzt mit CSS <code>@viewport</code> (<a href="http://webkrauts.de/beispiele/advent2011/lauke/demo/demo5-css-viewport.html">Demo-Seite mit CSS viewport</a>)</p></div>
<h4>Fazit</h4>
<p>Mobile Browser sind von Haus aus so ausgerichtet, dass sie die meisten Webseiten im wilden Web relativ korrekt anzeigen können. Designer können mit dem <code>viewport</code> Meta-Element beinflussen, wie ihre Seiten angezeigt werden, aber es kann schnell zu Problemen führen, wenn wir jenseits von Handys im Portrait-Modus gehen. Viewport-Definition mittels CSS ist zwar momentan nur in Opera möglich, aber wenn andere Browser diese neue Spezifikation  umsetzten, werden uns hoffentlich bessere Tools zur Verfügung stehen, um unsere Layouts doch gezielter an eine Vielzahl an Geräten bestens anzupassen.</p>
<h4>Weiterführende Link</h4>
<ul>
<li><a href="http://www.quirksmode.org/mobile/viewports2.html">Peter-Paul Koch: A tale of two viewports – part two</a></li>
<li><a href="http://tripleodeon.com/2011/12/first-understand-your-screen/">James Pearce: First, understand your screen</a></li>
<li><a href="http://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/">Andreas Bovens: An introduction to meta viewport and @viewport</a></li>
</ul>
<h5>Zum Autor</h5>
<p><a href="http://www.webkrauts.de/wp-content/uploads/2011/12/patrick_h_lauke_60x60.jpg"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/patrick_h_lauke_60x60.jpg" alt="AUtorenfoto: Patrick H. Lauke" title="patrick_h_lauke_60x60" width="60" height="60" class="alignleft size-full wp-image-1183 bild-links" /></a>Patrick H. Lauke ist Web Evangelist im Developer Relations team von <a href="http://www.opera.com" title="http://www.opera.com">Opera Software ASA</a>. In einem früheren Leben arbeitete er als Web Editor an einer britischen Universität, wo er in 2003 im Alleingang eine der ersten Standards-basierten Websites des Sektors implementiert hat. Patrick ist seit 2001 in der Diskussion rund um Standards und Barrierefreiheit engagiert &#8211; mit regelmässigen Vorträgen auf Konferenzen und Teilnahme an einer Veilzahl von Webentwicklungs- und Accessibility-Mailinglisten und Initiativen wie das Web Standards Project und die Webkrauts. Seine persönliche Ecke im Netz findet man unter <a href="http://www.splintered.co.uk" title="http://www.splintered.co.uk">http://www.splintered.co.uk</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/21/ein-blick-durch-den-viewport/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/21/ein-blick-durch-den-viewport/</feedburner:origLink></item>
		<item>
		<title>CSS 3 im Praxistest: Transition</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/w6ax6H0L-fE/</link>
		<comments>http://www.webkrauts.de/2011/12/20/css-3-im-praxistest-transition/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 07:00:27 +0000</pubDate>
		<dc:creator>Stephan Heller</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Webstandards]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1117</guid>
		<description><![CDATA[<div class="advent advent-20">20. Türchen des Webkrauts-Adventskalenders</div><p>CSS 3 bietet verschiedene Optionen, die Darstellung im Browser lebendig zu machen, zu dynamisieren. Neben &#187;Animations&#171; und &#187;Transforms&#171; sind &#187;Transitions&#171; (&#220;berg&#228;nge) die einfachste Möglichkeit, das Layout mit optischen Effekten zu versehen. Stephan Heller hat die CSS-Eigenschaften rund um &#187;Transition&#171; unter die Lupe genommen, getestet, was in der Praxis funktioniert und wo die Vor- und Nachteile liegen.</p>
]]></description>
			<content:encoded><![CDATA[<div class="advent advent-20">20. Türchen des Webkrauts-Adventskalenders</div>
<p>Im Adventskalender 2009 hat Eric Eggert über <a href="http://www.webkrauts.de/2009/12/21/von-transitionen-und-animationen/">&raquo;Transitionen und Animationen&laquo;</a> geschrieben und darüber, was in der Zukunft mit neuen CSS-3-Eigenschaften möglich sein wird. Vor zwei Jahren waren Webworker auf die Webkit-Browser Safari und Chrome beschränkt, wenn sie eine Transition umsetzen wollten. Opera und Firefox haben nachgezogen und unterstützen heute ebenfalls animierte Inhalte. Für den aktuellen Praxistest wurden die Versionen Opera 11, Internet Explorer 9, Firefox 8, Safari 5 und Google Chrome 14 berücksichtigt.<img src="http://vg02.met.vgwort.de/na/8c155f374ddd43fd95b919cd4dc3cae4" width="1" height="1" alt="" /></p>
<p>Das Transitions-Modul des CSS-3-Standards ist mit f&uuml;nf Eigenschaften &uuml;berschaubar. Im Gegensatz zu Animationen und Transformationen ist der Einsatz einfach, die einzelnen Eigenschaften intuitiv und sicher der leichteste Einstieg in den Bereich der animierten Inhalte.</p>
<p>Eine Transition <a href="#wortwahl">*)</a> ist als die flie&szlig;ende Ver&auml;nderung einer CSS-Eigenschaft auf einer Zeitachse zu verstehen. Wo sich bislang bei einem Mouseover eine Farbe wie auf Knopfdruck &auml;nderte, kann sich diese &uuml;ber eine Transition langsam in die andere Farbe verwandeln.</p>
<h4>Mindestangaben f&uuml;r eine Transition</h4>
<p>Pflichtparameter sind <code>transition-property</code> und <code>transition-duration</code>. &Uuml;ber <code>transition-property</code> geben Webworker die CSS-Eigenschaft an, die sie mit einer Transition versehen wollen. &Uuml;ber <code>transition-duration</code> definiert er die Zeit, die eine flie&szlig;ende Ver&auml;nderung dauern soll. Eine Minimalangabe sieht beispielsweise so aus (weiter unten findet ihr die Schreibweisen f&uuml;r die einzelnen Browser. Alle Eigenschaften sind erst mal in der Standardschreibweise des W3C gezeigt):</p>
<pre><code>div {
    background-color: red;
    transition-property: background-color;
    transition-duration: 1.5s;
}</code></pre>
<p>oder auch als Kurzschreibweise (Shorthand):</p>
<pre><code>div {
    background-color: red;
    transition: background-color 1.5s;
}</code></pre>
<p>F&uuml;r die Transition ist immer ein Anfangs- und Endzustand notwendig. In diesem Beispiel ist der Endzustand  &uuml;ber das Pseudo-Attribut :hover definiert, kann aber auch &uuml;ber eine Klasse angegeben sein, die &uuml;ber JavaScript einem HTML-Element zugewiesen wird.</p>
<pre><code>div:hover {
    background-color: blue;
}</code></pre>
<div class="beispiel-1">
<pre>
   transition: background-color
</pre>
</div>
<p><strong>.beispiel-1:</strong> Die Hintergrundfarbe der Box wechselt beim &uuml;berfahren mit der Maus in 1,5 Sekunden von rot auf blau (im Internet Explorer ohne &Uuml;bergang, da Transitions nicht unterst&uuml;tzt werden).</p>
<h4>Parameter f&uuml;r eine Start-Verz&ouml;gerung</h4>
<p>Als weitere Eigenschaft steht <code>transition-delay</code> zur Verf&uuml;gung, welche die Transition entsprechend verz&ouml;gert.</p>
<p>Sowohl f&uuml;r <code>transition-duration</code> als auch f&uuml;r <code>transition-delay</code> werden Zeitwerte erwartet, entweder in Sekunden oder Millisekunden mit den Abk&uuml;rzungen f&uuml;r die Einheiten <strong>s</strong> oder <strong>ms</strong>, z.B. <code>1.5s</code> oder <code>1500ms</code> (was hier dieselbe Zeit ist). Das W3C hat eine Liste mit Zeitangaben zusammengestellt: <a href="http://www.w3.org/TR/css3-values/#time">http://www.w3.org/TR/css3-values/#time</a>.</p>
<h4>Unterschiedliche Geschwindigkeiten auf der Zeitachse</h4>
<p>Die wahrscheinlich umfangreichste Eigenschaft ist <code>transition-timing-function</code>. Dar&uuml;ber wird das Geschwindigkeitsverhalten bestimmt, mit der sich die Transition verh&auml;lt. F&uuml;r die &raquo;Zeitfunktion&laquo; stehen folgende Werte zur Verf&uuml;gung:</p>
<ul>
<li><strong>Schl&uuml;sselworte (Keywords)</strong>
<ul>
<li><strong><code>ease</code></strong> (Standard): Die Transition beginnt verlangsamt, nimmt schnell Geschwindigkeit auf und endet langsam. Zwei Drittel der Transition ist nach der halben Zeit dargestellt.</li>
<li><code>ease-in</code>: Die Transition beginnt langsam, endet schnell.</li>
<li><code>ease-out</code>: Die Transition startet schnell,  endet langsam.</li>
<li><code>ease-in-out</code>: Die Transition beginnt und endet langsam, in der Mitte ist die Geschwindigkeit am h&ouml;chsten.</li>
<li><code>linear</code>: Gleichbleibende Geschwindigkeit, keine Verlangsamung am Anfang oder Ende der Transition.</li>
</ul>
</li>
<li><strong><code>cubic-bezier()</code></strong>
<ul>
<li><code>cubic-bezier(x1, y1, x2, y2)</code> steuert die Transition nach eigenen Angaben. Die ersten zwei Werte bestimmen die Startgeschwindigkeit, der dritte und vierte Wert die Endgeschwindigkeit. Der Geschwindigkeitsverlauf ergibt sich aus der Kurve, welche Start- und Endpunkt verbindet<!-- [Grafik] -->. Alle vier Parameter sind Pflichtparameter.</li>
<li><code>cubic-bezier()</code> ist die Formel, auf deren Grundlage der Geschwindigkeitsverlauf berechnet wird. Hinter allen Schl&uuml;sselworten verbirgt sich eine <code>cubic-bezier()</code>-Definition mit konkreten Werten. Webdesigner, die sich f&uuml;r das mathematische Modell von <code>cubic-bezier()</code> interessieren, finden unter folgendem Link weiterf&uuml;hrende Information: <a href="https://developer.mozilla.org/en/CSS/timing-function">developer.mozilla.org/en/CSS/timing-function</a></li>
</ul>
</li>
<li><strong><code>steps()</code></strong>
<ul>
<li>bestimmt keinen flie&szlig;enden, sondern einen &Uuml;bergang &uuml;ber Zwischenstadien, vergleichbar mit einer Uhr, die von Sekunde zu Sekunde springt, und dort jeweils eine Sekunde verharrt.</li>
<li><code>steps(nr, [start|end])</code> ben&ouml;tigt immer zwei Parameter:
<ul>
<li>Als erster wird die Anzahl der Schritte definiert, in denen die Transition angezeigt werden soll.
                    </li>
<li>Der zweite Parameter hat die m&ouml;glichen Werte <code>start</code> oder <code>end</code>. Damit wird bestimmt, ob ein Schritt vor oder nach einem Zeitintervall dargestellt werden soll. Was kompliziert klingt, ist anhand eines Beispiels leichter zu erkl&auml;ren: Ihr habt einen Lichtschalter, den ihr in f&uuml;nf Sekunden anschalten sollt. Allerdings nur am Anfang oder Ende der f&uuml;nf Sekunden. <code>step (1, start)</code> bedeutet, ihr schaltest den Schalter sofort an und es ist sofort hell. Oder ihr wartet f&uuml;nf Sekunden und schaltest das Licht dann an, das w&auml;re <code>step(1,end)</code>. Beides Mal ist es nach f&uuml;nf Sekunden hell, nur das &raquo;ab wann&laquo; wird durch den zweiten Parameter in <code>steps()</code> bestimmt.</li>
<li><code>step-start</code> ist ein Schl&uuml;sselwort und entspricht <code>steps (1,start)</code></li>
<li><code>step-end</code> ist ebenfalls ein &raquo;Keyword&laquo; und entspricht <code>steps (1,end)</code>. Beide Schl&uuml;sselworte sind also fest definiert auf einen Schritt in der Transition.</li>
</ul>
</li>
<li> <code>steps()</code> ist W3C nur im Entwicklungsbereich des Standards zu finden, im &raquo;Working Draft&laquo; des W3C taucht dieser Parameter f&uuml;r die <code>transition-timing-function</code> noch nicht auf. Allerdings werden sie bereits von Firefox, Safari und Chrome unterst&uuml;tzt.</li>
</ul>
</li>
<li>Eine sehr anschauliche Darstellung der <code>transition-timing-function</code> ist unter <a href="http://peter.sh/experiments/css3-transition-timing-functions/">http://peter.sh/experiments/css3-transition-timing-functions/</a> zu finden.</li>
</ul>
<h4>Beispiel für steps()</h4>
<p>An folgendem Beispiel wird das Verhalten von <code>steps()</code> deutlich (die Mehrfachangabe innerhalb einer Eigenschaft wird weiter unten beschrieben).</p>
<pre><code>.beispiel-2 {
    background-color: #FFFF00;
    width: 200px;
    transition-property: width, background-color;
    transition-duration: 5s, 5s;
    transition-timing-function: steps(10,start), steps(5,end);
}
.beispiel-2:hover {
    width: 600px;
    background-color: #ff0000;
}
</code></pre>
<div class="beispiel-2">steps(10,start)</div>
<p><strong>.beispiel-2:</strong> Die gelbe Box wird in 10 Einzelschritten auf eine Breite von 600px gedehnt, die Farbe wechselt in 5 Steps. Internet Explorer unterstützt generell keine Transition, Opera kennt die <code>steps()</code> nicht und stellt den &Uuml;bergang mit der Zeitfunktion <code>ease</code> dar.</p>
<h4>Kurzschreibweise  <code>transition</code></h4>
<p>&Uuml;ber die Kurzschreibweise <code>transition</code> werden die Werte f&uuml;r Eigenschaft, Dauer, Zeitfunktion und Verz&ouml;gerung in einem Ausdruck geschrieben. Die einzelnen Parameter werden durch Leerzeichen voneinander getrennt. Dabei k&ouml;nnen die einzelnen Parameter fast in beliebiger Ordnung notiert werden. Lediglich die Reihenfolge der Zeitangaben ist nicht beliebig und f&uuml;r die Darstellung relevant: Der erste Zeitwert in der Kurzschreibweise wird als Dauer, der zweite wird als Verz&ouml;gerung umgesetzt.</p>
<p>G&uuml;ltige &raquo;shorthand&laquo;-Beispiele k&ouml;nnen so aussehen:</p>
<pre><code>transition: width 3s linear100ms;

/* oder */
transition: 1s 1.5s padding-bottom ease-in;

/* oder auch nur */
transition: color 2s;
</code></pre>
<p>Pflichtangabe ist die CSS-Eigenschaft, die mit einer Transition versehen werden soll, Sinn macht die Angabe erst mit der Zeitangabe. Ohne diese wird die Transition mit einer Zeit von 0 Sekunden (Standard f&uuml;r <code>transition-duration</code>) angezeigt, der Endzustand w&auml;re also sofort erreicht.</p>
<h4>Mehrere Transitions gleichzeitig definieren</h4>
<p>Neben der Kurzschreibweise ist es m&ouml;glich, mehrere Transitions in einem Ausdruck zu definieren.</p>
<p>Dabei werden die einzelnen Werte &uuml;ber ein Komma (,) getrennt geschrieben. Sind die Angaben &uuml;ber die einzelnen Eigenschaften definiert, werden die Werte entsprechen ihrer Position in der Definition zusammengef&uuml;hrt: Die erste CSS-Eigenschaft aus <code>transition-property</code> wird mit einer Dauer des ersten Eintrags  aus <code>transition-duration</code>  und jeweils den ersten Werten f&uuml;r Zeitfunktion und Verz&ouml;gerung dargestellt. Gleiches gilt f&uuml;r die jeweils zweiten und dritten Angaben.</p>
<pre><code>div {
    background-color: #caffee;
    color: blue;
    width: 200px;
    transition-property: background-color, color, width;
    transition-duration: 3s, 2s, 3000ms ;
    transition-timing-function: linear, ease-in, ease;
    transition-delay: 0s, 2500ms, 0s;
}
div:hover {
    background-color: blue;
    color: yellow;
    width: 100%;
}
</code></pre>
<div class="beispiel-3">
<pre>

    transition-property: background-color, color, width;
    transition-duration: 3s, 2s, 3000ms ;
    transition-timing-function: linear, ease-in, ease;
    transition-delay: 0s, 2500ms, 0s;
    
</pre>
</div>
<p><strong>.beispiel-3:</strong> Kombination mehrerer Transitions: Der Hintergrund verf&auml;rbt sich sofort von rot in blau, die Ver&auml;nderung des Textes selber ist mit einer Verz&ouml;gerung konfiguriert. Bei der Breite schafft es nur der Firefox, diese von einem Pixel-Wert zu einem Prozent-Wert umzuwandeln &#8211; Opera, Safari und Chrome ignorieren beim Wechsel der Einheiten die Transition für <code>width</code>.</p>
<h4>Kurz und knapp: Mehrfachangaben in Kurzschreibweisen</h4>
<p>In der Kurzschreibweise wird eine Transition &uuml;ber [Eigenschaft][Dauer][Timing-Funktion][Verz&ouml;gerung] definiert, eine zweite Transition mit allen Angaben wird auch hier mit einem Komma (,) von der ersten Definition getrennt, so k&ouml;nnen (theoretisch) beliebig viele &Uuml;berg&auml;nge &uuml;ber nur ein <code>transition</code> definiert werden:</p>
<pre><code>div {
    transition: background-color 3s linear ,  color 2s linear 2s ;
}</code></pre>
<h4>Unterschiedliche Geschwindigkeit f&uuml;r &raquo;hin und zur&uuml;ck&laquo;</h4>
<p>Die Darstellung der Transition l&auml;uft in beide Richtungen mit den gleichen Einstellungen. Allerdings können unterschiedliche Parameter die Darstellung zur Enddefiniton hin und für die rückläufige Transition definiert werden. Wie ihr im folgenden Beispiel sehen könnt, stehen im Endstatus <code>div:hover</code> andere Zeiten als im <code>div</code>, in dem die Ausgangssitution definiert ist.</p>
<pre><code>div {
    padding: 10px;
    background-color: white;
    transition: padding 300ms ,background-color linear  300ms 0s;
}
div:hover {
    padding: 10px 200px;
    background-color: #00f000;
    transition: padding 3s ,background-color linear  1s 2s;
}</code></pre>
<div class="beispiel-4">Transition</div>
<p><strong>.beispiel-4:</strong> Beim Mouseover werden die Zeitwerte aus der :hover-Angabe verwendet, die Box zieht sich langsam auf und &auml;ndert mit einer Verz&ouml;gerung die Hintergrundfarbe. Bein Mouseout greifen die Werte aus der ersten Regel, Box und Farbe schnellen in 0.3 Sekunden auf die Ursprungsdarstellung zur&uuml;ck.</p>
<h4>Browserunterst&uuml;tzung</h4>
<p>Transition-Eigenschaften werden in der Standardschreibweise von noch keinem Browser unterst&uuml;tzt. Internet Explorer bis zur Version 9 unterst&uuml;tzt Transition gar nicht, die anderen ben&ouml;tigen das jeweilige Vendor-Pr&auml;fix:</p>
<ul>
<li>Firefox: <strong><code>-moz-</code></strong></li>
<li>Opera: <strong><code>-o-</code></strong></li>
<li>Safari und Google Chrome: <strong><code>-webkit-</code></strong></li>
<li>Internet Explorer: <strong><code>-ms-</code></strong> (ab Version 10)</li>
</ul>
<p>So kann eine komplette Regel, um alle potentiellen Browser zu &raquo;erwischen&laquo;, schon mal recht umfangreich sein:</p>
<pre><code>#beispiel {
    margin-top: 100px;
    opacity: 0;

    /* Firefox */
    -moz-transition-property:    margin-top, opacity;
    -moz-transition-duration:    1s,0.5s;
    -moz-transition-delay:       1.0s,0s;

    /* Safari / Chrome */
    -webkit-transition-property: margin-top, opacity;
    -webkit-transition-duration: 1s,0.5s;
    -webkit-transition-delay:    1.5s,0s;

    /* Opera */
    -o-transition-property:      margin-top, opacity;
    -o-transition-duration:      1s,0.5s;
    -o-transition-delay:         1.5s,0s;

    /* Standard */
    transition-property:         margin-top, opacity;
    transition-duration:         1s,0.5s;
    transition-delay:            1.5s,0s;
}
</code></pre>
<p>Auch wenn die Standardschreibweise noch nicht unterstützt wird, sollte sie in der Regel nicht fehlen. Dieser Ausdruck sollte am Ende stehen, damit dieser greift, sobald ein Browser die Implementierung auf die Standardschreibweise umstellt.</p>
<p>Neben der Frage, welche Browser Transition unterst&uuml;tzen, steht aktuell aber auch wie Frage, welche CSS-Eigenschaften konkret unterstützt werden.</p>
<h4>Was kann mit einem Übergang versehen werden?</h4>
<p>Eine Liste der Eigenschaften, die mit einer Transition versehen werden k&ouml;nnen, ist <a href="http://www.w3.org/TR/css3-transitions/#properties-from-css-">beim W3C</a> zu finden. Dabei werden die meisten Eigenschaften tats&auml;chlich unterst&uuml;tzt. Ausnahmen sind beispielsweise <code>vertical-algin</code> oder <code>border-spacing</code>. Dort finden sich Eigenschaften wie <code>visibility</code> oder <code>z-index</code>, f&uuml;r die erst mal kein flie&szlig;ender &Uuml;bergang sinnvoll klingt. <code>visibility</code> zum Beispiel springt bei einer Transition von <code>visible</code> zu <code>hidden</code> am Ende der Zeit auf <code>hidden</code> um. Im Zusammenhang mit anderen Transitions ist aber das Umschalten nach einer bestimmten Zeit oder Verz&ouml;gerung durchaus denkbar.</p>
<p>Auf der <a href="http://www.css-wiki.com/listings/all-transition-properties.html">&Uuml;bersicht von transitionierbaren Eigenschaften</a> ist jede Box mit einer anderen CSS-Eigenschaft zu sehen. Dort könnt ihr euch einen Eindruck verschaffen, wie sich die Transitions auswirken.</p>
<p>Was wie unterst&uuml;tzt wird, kann nur in einer Tendenz ausgedr&uuml;ckt werden: Alle Browser (au&szlig;er dem Internet Explorer) unterst&uuml;tzen weitgehend alle definierten Eigenschaften. Safari, Chrome und Firefox sind dabei sicher am st&auml;rksten. Einschr&auml;nkungen tauchen dann auf, wenn Regeln nicht sauber definiert sind. Opera, Safari und Chrome schaffen es beispielsweise nicht, eine Breite von 200px auf 100% umzuwandeln.</p>
<p>Kurzschreibweisen wie <code>padding</code> oder <code>margin</code> stellen f&uuml;r Opera Probleme dar. Obwohl Opera Eigenschaften wie <code>margin-left</code> oder <code>padding-bottom</code> in einer Transition darstellen kann, scheitert er bei der Angabe von <code>margin</code> bzw. <code>padding</code> in der Angabe von <code>-o-transition-property</code>. Die Webkitbrowser und Firefox haben mit Kurzschreibweisen keine  Probleme.</p>
<p>Viele Transitions gleichzeitig zwingen den Browser gerne etwas in die Knie. Die komplexen Beispiele am Seitenende lassen Opera &raquo;stark arbeiten&laquo;, die Transition werden nicht in der Geschwindigkeit angezeigt, wie dort angegeben. Auch hier kommen Firefox und vor allem Safari und Chrome wesentlich besser hinterher.</p>
<p>Je nach Eigenschaft entsteht der Eindruck des Ruckelns. Dies h&auml;ngt allerdings auch von der Eigenschaft ab. Ein <code>font-weight</code> kann zwar mit einer Transition versehen werden, allerdings sind die meisten Schriften auf den Rechnern in &raquo;normal&laquo; und &raquo;bold&laquo; hinterlegt. Eine Transition f&uuml;r <code>font-weight</code> von <code>100</code> zu <code>900</code> kann zwar definiert werden, wenn die Schrift jedoch nur in zwei Varianten vorliegt, kann eine Transition auch nur zwei Zust&auml;nde darstellen. Ein flie&szlig;ender &Uuml;bergang wird hier nicht entstehen.</p>
<p>An den Ausf&uuml;hrungen wird deutlich, dass ein Urteil &uuml;ber &raquo;richtig&laquo; oder &raquo;falsch&laquo; nicht eindeutig getroffen werden kann. Vieles ist m&ouml;glich, im Einzelfall muss der Webworker browser&uuml;bergreifend intensiv testen.</p>
<h4>Vorteile von Transition</h4>
<ul>
<li>Es ist ein reines Layout-Modul und kann von daher als &raquo;h&uuml;bsche&laquo; Erg&auml;nzung eingesetzt werden, ohne dass ein Browser, der keine Transition unterst&uuml;tzt (mit Ausnahmen des Surf-Erlebnisses) in der Funktionalit&auml;t eingeschr&auml;nkt ist.</li>
<li>Transition erfordert kein JavaScript und kein Flash-Plugin, und hat von daher das Potential, (auf einen Browser beschr&auml;nkt) 100% der Darstellung anzubieten, ohne dass sich der Frontendler Gedanken &uuml;ber das (l&auml;stige) Fallback f&uuml;r die 3% oder 5% machen muss, die JavaScript eventuell deaktiviert haben.</li>
</ul>
<h4>Nachteile von Transition</h4>
<ul>
<li>Der Nachteil liegt in der heute noch mangelnden Browserunterst&uuml;tzung, vor allem durch den Internet-Explorer. Solange ein gro&szlig;er Teil aller Surfer (und das unabh&auml;ngig davon, welcher Browser das ist) eine Eigenschaft nicht unterst&uuml;tzt.</li>
</ul>
<h4>Experiment &#8211; Navigation mit Transition</h4>
<p>Das komplette CSS-File mit den vollständigen Angaben für die folgenden, aber auch die Transtions auf dieser Seite, sind im <a href="http://css-wiki.com/_css/transition.css">transition.css</a> zu finden.</p>
<p>Über eine <code>UL</code> wird folgende Navigation aufgebaut:</p>
<div class="beispiel-5">
<ul>
<li><a class="link-1" href="#">Home<span>Home</span></a></li>
<li><a class="link-2" href="#">History<span>History</span></a></li>
<li><a class="link-3" href="#">Offers<span>Offers</span></a></li>
<li><a class="link-4" href="#">Imprint<span>Imprint</span></a></li>
</ul>
</div>
<p><strong>.beispiel-5:</strong> Auf Mouseover wird der Linkstext über ein <code>text-indent</code> nach links raus gezogen. Im link ist ein <code>span</code> mit dem gleichen Text, dieses wird über die Kaskade <code>.beispiel-5 ul li a:focus span, .beispiel-5 ul li a:hover span</code> ausgelöst und nach oben gezogen. Der Effekt klappt auch mit der Tastatur. Das funktionert gut im Firefox, Safari und dem Chrome; Opera verliert schon mal die H&ouml;hen, wenn die Navigation schnell und h&auml;ufig mit der Mouse &uuml;berfahren wird.</p>
<h4>Experiment &#8211; Bilderr&auml;tsel</h4>
<p>Das folgende Foto ist mit 150 <code>DIV</code>s überlagert, die jeweils 30 Pixel hoch und breit sind.</p>
<div class="beispiel-6">
<div class="foto"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/american-football.jpg" alt="American Football Spieler" />
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
</div>
</div>
<p><strong>.beispiel-6:</strong> Beim überfahren mit der Maus werden die DIVs durchsichtbar (<code>opacity</code>) und werden über 7.5 Sekunden wieder schwarz. Das CSS dafür besteht nur aus wenigen Zeilen. Auch hier kommt der Opera in der Darstellung der Transitions nicht hinterher. Das Beispiel funktioniert nicht über die Tastatur.</p>
<h4>Weiterführende Links</h4>
<ul>
<li>Umfangreiche Beispielsammlung: <a href="http://www.olivergast.de/wp-content/demos/transitions/index.html">http://www.olivergast.de/wp-content/demos/transitions/index.html</a></li>
<li>Beispielsammlung für Safari und Chrome: <a href="http://www.html5-portal.de/css3-special.html">http://www.html5-portal.de/css3-special.html</a></li>
<li>W3C Working Draft: <a href="http://www.w3.org/TR/2009/WD-css3-transitions-20091201/">http://www.w3.org/TR/2009/WD-css3-transitions-20091201/</a></li>
<li>W3C Editor&#039;s Draft: <a href="http://dev.w3.org/csswg/css3-transitions/#transition-timing-function">http://dev.w3.org/csswg/css3-transitions/#transition-timing-function</a></li>
</ul>
<hr />
<p><a name="wortwahl"></a>*) Transition ist mit &raquo;&Uuml;bergang&laquo;, &raquo;&Uuml;berleitung&laquo; oder &raquo;Wechsel&laquo; zu &uuml;bersetzen. Im Gegensatz zu den verwandten Modulen Animations und Transformations, die im Deutschen auch ohne &Uuml;bersetzung verst&auml;ndlich klingen &#8211; und vor allem auch als Verb ausgedr&uuml;ckt werden  k&ouml;nnen (ein HTML-Element wird animiert oder transformiert), ist es schwierig, f&uuml;r Transition einen vergleichbaren Ausdruck in Deutsch zu finden, geschweige denn ein Verb, welches das Verhalten treffend beschreibt.<br />Gleichzeitig ist es wichtig, die drei Module klar voneinander zu trennen. Klar, eine Transition animiert ebenfalls ein HTML-Element, im Kontext von CSS ist es jedoch sinnvoll, auch sprachlich die klare Abgrenzung zu ber&uuml;cksichtigen. Von daher wird auf dieser Seite das Verb &raquo;animiert&laquo; gemieden und der Ausdr&uuml;cke wie &raquo;mit einer Transition versehen&laquo; verwendet &#8211; auch wenn es etwas umst&auml;ndlich klingt.</p>
<h4>Autoreninfo</h4>
<p><a href="http://daik.de/"><img class="bild-links" src="http://www.webkrauts.de/wp-content/uploads/2011/12/stephan-heller-daik.de_.jpg" alt="Autorenfoto Stephan Heller [daik.de]" />Stephan Heller [daik.de]</a> arbeitet seit 2004 als Freelancer. Er bietet als HTML und CSS Spezialist Frontend-Entwicklung, als ZEND Certified Engineer ebenso Backend-Entwicklung mit PHP und MySQL an.<br />Aktuell arbeitet er an einer umfassenden CSS-Referenz, welche alle CSS 2.1 und CSS 3 Eigenschaften bündelt: <a href="http://www.css-wiki.com/">www.css-wiki.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/20/css-3-im-praxistest-transition/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/20/css-3-im-praxistest-transition/</feedburner:origLink></item>
		<item>
		<title>CSS3 PIE | Dekoratives mit und ohne CSS3</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/OOcftJ07q4w/</link>
		<comments>http://www.webkrauts.de/2011/12/19/css3-pie-dekoratives-mit-und-ohne-css3/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 07:00:46 +0000</pubDate>
		<dc:creator>Henry Zeitler</dc:creator>
				<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1155</guid>
		<description><![CDATA[<div class="advent advent-19">19. Türchen des Webkrauts-Adventskalenders</div>
<p>Mit Schlagschatten, runden Ecken und Verläufen können Webworker ihre Seiten durch einfache CSS3-Anweisungen hübscher gestalten. Doch es gibt immer noch alte <span lang="en">Browser</span>, die CSS3 nicht verstehen können, und den Internet Explorer, der es nicht verstehen will. Um nicht ganz auf die neuen Möglichkeiten verzichten zu müssen, haben sich Lösungen wie CSS3 PIE etabliert, die zumindest dem IE mit Javascript auf die Sprünge helfen können. Henry Zeitler zeigt, was hinter CSS3 PIE steckt.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-19">19. Türchen des Webkrauts-Adventskalenders</div>
<p>
Webseiten mit CSS3-Eigenschaften aufzuhübschen, ist gerade groß in Mode. Reden wir an dieser Stelle von solchen <em>dekorativen Eigenschaften</em>, sind in erster Linie <code>border-radius</code>, <code>box-shadow</code>, <code>border-image</code>, <code>linear-gradient</code>, <code>text-shadow</code>, multiple <span lang="en">Backgrounds</span> und rgba-Farbwerte gemeint. Deren Verwendung kann dem Webdesigner einige Stunden Arbeitszeit ersparen. Die Wartbarkeit der Projekte nimmt enorm zu, denn der Webworker muss im Falle einer Änderung oder Anpassung nicht mehr diverse Grafiken erneuern, sondern lediglich ein paar Zeilen <span lang="en">Code</span> ändern.
</p>
<p>
Aber CSS3 sollte mit Bedacht implementiert werden, damit die Internetseiten in alten Browsern nicht unbrauchbar werden. Ältere Browser können zwar diverse Effekte mit Javascript-Bibliotheken nachempfinden, diese können jedoch den <span lang="en">Browser</span> ausbremsen. Daher solltet ihr immer überlegen, ob eine intelligente Fallback-Lösung nicht die bessere Alternative ist.
 </p>
<h3>Vorüberlegung: <span lang="en">Progressive Enhancement</span> und <span lang="en">Fallback</span>-Lösungen</h3>
<p>
Jeder <span lang="en">Webdesigner</span>, der CSS3 in seinem Projekt einsetzen will, wird sich vorher über die <span lang="en">Browser</span>kompabilität der entsprechenden Eigenschaften informieren wollen. Dafür gibt es eine Vielzahl von Checklisten im Internet &ndash;&nbsp;eine sehr ausführliche, übersichtliche und aktuelle Liste ist <a href="http://caniuse.com/" title="Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers.">When can I use&#8230;</a>.</p>
<p>Beim Studieren der Browserkompabilitäten wird schnell klar, dass ihr CSS3 zur Zeit nur unter Vorbehalt eingesetzen könnt. Zuviele alte <span lang="en">Browser</span> sind noch im Umlauf, die CSS3 nur teilweise oder gar nicht interpretieren. <br /> Ob nun runde Ecken im alten <span lang="en">Browser</span> eckig erscheinen, dürfte der Benutzbarkeit der Internetseite keinen Abbruch tun; allerdings könnte das bei einem verschwundenen halbtransparenten Hintergrund und der Lesbarkeit des darüber liegenden Textes schon anders aussehen. Das Prinzip von <span lang="en">Progressive Enhancement</span> bietet sich hier an: die Internetseite für Browser ohne CSS3 konzipieren und für die modernen Browser mit CSS3 erweitern.<br />
Die andere Variante stellen durchdachte Fallback-Lösungen dar. Hier ein Beispiel:
</p>
<p><img src="https://lh3.googleusercontent.com/-CFHczJiO7ho/TtUyOeT11KI/AAAAAAAAAHk/BjmWwEhMSh0/s545/screen_modern_browser.png" alt="Freizeitler.de in einem modernen Browser" /><br /><em>Freizeitler.de in einem modernen Browser</em></p>
<p><img src="https://lh3.googleusercontent.com/-IbUDTqNgHD0/TtUyKHLAeLI/AAAAAAAAAHc/Of_kB3-L4zs/s545/screen_old_browser.png" alt="Freizeitler.de in einem alten Browser" /><br /><em>Freizeitler.de ohne Unterstützung von rgba im IE 8</em></p>
<h3>CSS3 PIE &ndash; Progressive Internet Explorer</h3>
<p>Für den Fall, dass Fallback-Lösungen nicht ausreichen und der IE ebenfalls ein adäquates Ergebnis abliefern soll, besteht die Option, auf Javascript-Lösungen zurückzugreifen. Eine, die sich etabliert hat, ist <a href="http://css3pie.com/" target="_blank" title="zur Seite von CSS3 PIE">CSS3 PIE</a> von <span lang="en">Jason Johnston</span>.  CSS3 PIE befindet sich zu diesem Zeitpunkt noch in der Version 1.0beta5.</p>
<p><a href="http://css3pie.com/" target="_blank" title="zur Seite von CSS3 PIE"><img src="http://css3pie.com/forum/styles/serenity/imageset/logo.png" alt="Logo von CSS3 PIE" /></a></p>
<p><span lang="en">PIE</span> ist unkompremiert 40K groß (mit Gzip nur noch 16K) und unterstützt folgende, dekorative CSS3-Eigenschaften:</p>
<ul>
<li>Border-Radius</li>
<li>Box-Shadow</li>
<li>Border-Image</li>
<li>Multiple Background Images</li>
<li>Linear-Gradient (gerade Verläufe) als Background Image</li>
</ul>
<h4>CSS3 PIE richtig ins Stylesheet einbinden</h4>
<p>
 Die Einbindung ist denkbar einfach und geschieht im <span lang="en">Stylesheet</span>. Über <code>behavior: url(Pfad/PIE.htc);</code> wird die Datei asynchron aufgerufen und das dann auch nur vom Internet Explorer selbst, denn andere <span lang="en">Browser</span> interpretieren <code>behavior</code> gar nicht. Der Pfad muss immer relativ zur HTML-Datei angegeben werden, da das Javascript im DOM des HTML arbeitet. Die Implementierung im <span lang="en">Stylesheet</span> sieht dann zum Beispiel so aus, wenn die HTML-Datei und die PIE.htc im selben Verzeichnis liegen:</p>
<p>
<pre><code>
#adventskalender {
	-moz-border-radius: 10px;
    	-webkit-border-radius: 10px;
    	border-radius: 10px;
	}
#krippe {
	-moz-box-shadow: 6px 6px 12px #222222;
	-webkit-box-shadow: 6px 6px 12px #222222;
	box-shadow: 6px 6px 12px #222222;
}
#adventskalender, #krippe {
	behavior: url(PIE.htc);
	}
</code></pre>
</p>
<p>Den Aufruf der .htc-Datei hängt ihr einfach an den Block der CSS3-Anweisungen an.  <span lang="en">PIE</span>  reagiert nur auf die standard-konformen Angaben &ndash;&nbsp;Eigenschaften mit Vendor-Prefixes dürfen nie am Schluss des CSS3-Blocks stehen. <br />Der veranwortungsvolle Anwender von PIE sollte außerdem immer darauf achten, dass die Anzahl der Aufrufe der .htc-Datei so gering wie möglich gehalten wird und wirklich nur die unmittelbar betroffenen Elemente behandelt werden. Immerhin haben wir es hier mit einem Javascript zu tun, das den Explorer extrem ausbremsen wird. </p>
<p>Weil der IE nicht alle Werte beim Parsen von einigen CSS-Eigenschaften Preis gibt, muss für diese ein eigenes Präfix geschaffen werden. Für CSS3-Background-Eigenschaften zum Beispiel lautet das PIE-Präfix  <code>-pie-background: linear-gradient(#CCC, #EEE);</code>.</p>
<h4>CSS3 PIE verstehen und die Schwächen kennen</h4>
<p>Um die simulierten CSS3-Eigenschaften zu rendern, erstellt das Javascript von PIE über das <abbr title="Document Object Model">DOM</abbr> einen Container (<code>&lt;css3-container/&gt;</code>). Dieses neue Element wird als <span lang="en">Sibling</span> (Schwestern-Element) vor dem Zielelement kreiert und mit <code>position: absolute</code> auf denselben Koordinaten und mit demselben <code>z-index</code> platziert. Da PIE die nicht unterstützten CSS3-Eigenschaften mit <a href="http://www.w3.org/TR/NOTE-VML" title="Was ist VML?">VML-Objekten</a> nachzeichnet, werden diese in dem neuen Container untergebracht. </p>
<p>Aus dieser Vorgehensweise resultieren auch die meisten <a href="http://css3pie.com/documentation/known-issues/" title="Known Issues von CSS3 PIE">bekannten Probleme</a> wie z. B. verschwundene Hintergründe, Border oder Schlagschatten. Das hängt mit der Tatsache zusammen, dass der generierte Container mit <code>position: absolute</code> hinter dem Zielcontainer mit <code>position: static</code> verschwindet. In diesem Fall müsst ihr dann den statischen in einen relativ positionierten Container umgewandeln und mit <code>z-index: -1</code> nach hinten schieben. Wieder einmal wird <code>position: relative</code> zum Problemlöser des Internet Explorers.
</p>
<p>Für CSS3-Background-Eigenschaften wendet ihr das oben beschriebene Präfix von PIE an. Sollen mehrere Hintergründe eingebunden werden (<span lang="en">multiple backgrounds</span>), muss der Pfad zu den Bildern immer relativ zur HTML-Datei angegeben werden. </p>
<p>
Ein bekannter <span lang="en">Bug</span> tritt auf, wenn transparente Hintergründe in Tateinheit mit Schlagschatten verwendet werden. Der Schlagschatten wird von <span lang="en">PIE</span> nämlich auf den gesamten Hintergrund des Containers gelegt und scheint dann durch die transparente Fläche hindurch. In diesem Fall sollte sich der Webdesigner gegen PIE und für pures CSS3 mit einer <span lang="en">Fallback</span>-Lösung entscheiden &ndash;&nbsp;die Angabe einer <em>blickdichten</em> Hintergrundfarbe auf herkömmliche Weise, die von allen <span lang="en">Browsern</span> interpretiert wird. In diesem Beispiel in Verbindung mit <a href="http://www.modernizr.com/" title="zur Seite von Modernizr">Modernizr.js</a> (vgl. die Klasse <code>.rgba</code>):</p>
<p>
<pre><code>
#adventskalender 	{
	background: #fff;
	-moz-box-shadow: 5px 4px 4px rgba(0, 0, 0, .1);
	-webkit-box-shadow: 5px 4px 4px rgba(0, 0, 0, .1);
	box-shadow: 5px 4px 4px rgba(0, 0, 0, .1);
	-moz-border-radius: 40px 10px 10px 10px;
	border-radius: 40px 10px 10px 10px;
	position: relative;
	}
.rgba #adventskalender {
	background: rgba(255, 255, 255, 0.5);
	}
#adventskalender {
	behavior: url(PIE.htc);
	}
</code></pre>
</p>
<p> Hier werden die CSS3-Angaben von den alten <span lang="en">Browsern</span> ignoriert und die Eigenschaft <code>background: #fff;</code> kommt zum Tragen. Die Lesbarkeit des Textes wäre gerettet.</p>
<p>PIE bringt neben den oben erwähnten noch ein paar bemerkenswerte zusätzliche <span lang="en">Features</span> mit: </p>
<dl>
<dt><strong>-pie-watch-ancestors</strong></dt>
<dd>Erkennt <span lang="en">On-The-Fly</span>-Änderungen an Objekten (z. B. durch <span lang="en">JavaScript</span>) und kann diese umsetzen.</dd>
<dt><strong>PNG-Alpha-Transparenz</strong></dt>
<dd>Rendert die Alpha-Transparenz von .png-Dateien im Internet Explorer 6. Sie wird ebenfalls einfach über das PIE.htc script initiiert. Macht die Verwendung anderer Alpha-Transparenz-Skripte überflüssig (z. B. <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" title="zur Homepage von DD_belatedPNG">DD_belatedPNG</a>)</dd>
<dt><strong>Lazy Initialization (-pie-lazy-init)</strong></dt>
<dd>Gibt man Elementen die <code>-pie-lazy-init:true;</code> Eigenschaft, so werden sie zu Gunsten der <span lang="en">Performance</span> erst gerendert, wenn sie in den <span lang="en">Viewport</span> wandern.</dd>
<dt><strong>Layout Polling (-pie-poll)</strong></dt>
<dd>Mit <code>-pie-poll:true;</code> wird die Abfrage für Zustandsänderungen eines Elements erhöht, um so Rendering-Fehler durch Größen- und Positionsänderungen zu vermeiden.</dd>
</dl>
<h4><span lang="en">CSS3 PIE</span> Implementierungen</h4>
<p>CSS3 PIE wird von dem CSS Authoring Framework <a href="http://compass-style.org/" title="Compass is an open-source CSS Authoring Framework.">Compass</a> implementiert. Das <a href="http://compass-style.org/reference/compass/css3/pie/" title="CSS3 Pie in Compass">Modul</a> befindet sich aktuell noch in der Beta.</p>
<h4>Zum Schluß noch ein Hinweis auf IE-CSS3</h4>
<p>Eine Alternative zu <span lang="en">PIE</span> ist <a href="http://fetchak.com/ie-css3/" title="Zur Homepage von IE-CSS3">IE-CSS3</a> von Nick Fetchak. Dieses Skript arbeitet zwar ähnlich wie <span lang="en">PIE</span> &ndash;&nbsp;am Ende der CSS3-Deklarationen wird mit <code>behavior: url(ie-css3.htc);</code> die Datei aufgerufen&nbsp;&ndash; aber IE-CSS3 unterstützt zur Zeit nur <code>border-radius</code>, <code>box-shadow</code> und sogar zusätzlich <code>text-shadow</code>. Wer also nicht das volle Programm von <span lang="en">PIE</span> und/oder lediglich <code>text-shadow</code> benötigt, ist mit dieser Lösung sicher auch ganz gut beraten.  Sie ist auf jeden Fall wesentlich schlanker.</p>
<h5>Über den Autor</h5>
<p><img src="http://de.gravatar.com/userimage/4728257/199260ac5c74d384542123da900b69ce.jpg" alt="Foto des Autors" class="bild-links" width="60" />Henry Zeitler ist gelernter Mediengestalter und arbeitet seit 2006 als Webproducer und HTML-Trainer in Düsseldorf. Frontend-Entwicklung, Codeoptimierung, Semantik und Zugänglichkeit  haben sich zu seiner Leidenschaft entwickelt, die über das berufliche Engagement hinaus geht. Unter <a href="http://www.freizeitler.de" title="Freizeitler.de">www.freizeitler.de</a> veröffentlicht er Experimente und Erkenntnisse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/19/css3-pie-dekoratives-mit-und-ohne-css3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/19/css3-pie-dekoratives-mit-und-ohne-css3/</feedburner:origLink></item>
		<item>
		<title>Zwei, die zusammengehören: SEO und Informationsarchitektur (Teil 2)</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/7TUndh3-V9I/</link>
		<comments>http://www.webkrauts.de/2011/12/18/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-2/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 07:00:02 +0000</pubDate>
		<dc:creator>Michael van Laar</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[Informationsarchitektur]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[suchmaschinenoptimierung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1138</guid>
		<description><![CDATA[<div class="advent advent-18">18. Türchen des Webkrauts-Adventskalenders</div><p>Die Suchbegriffe, auf die eine neue Website optimiert werden soll, stehen fest. Jetzt geht es an die Umsetzung. Im zweiten Teil des Adventskalender-Artikels über SEO und Informationsarchitektur zeigt Michael van Laar, wie aus Suchbegriffen und Inhaltsideen ein suchmaschnenoptimierter und angenehm zu bedienender Internetauftritt wird.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-18">18. Türchen des Webkrauts-Adventskalenders</div>
<p>Suchmaschinenoptimierung ist ein wichtiger Aspekt bei vielen Webprojekten. Deswegen lohnt es sich für Webworker, diejenigen SEO-Basics zu kennen, die Einfluss auf grundlegende Webseiten-Aspekte wie die Informationsarchitektur haben. Im <a href="http://www.webkrauts.de/2011/12/17/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-1/">ersten Teil des Artikels</a> ging es um den ersten der vier Schritten für einen suchmaschinenoptimierten Internetauftritt: die Keyword-Analyse. Im zweiten Teil erfahrt ihr, wie Keywords und Inhalte zu einer sinnvollen Informationsarchitektur zusammenfinden.</p>
<h4>Schritt 2: Keywords und Inhalte zusammenbringen</h4>
<p>Aus der Keywordliste eine funktionierende Struktur für den Internetauftritt zu entwickeln, ist häufig gar nicht so leicht. Denn schließlich ist Suchmaschinenoptimierung nicht der einzige Faktor, der bei der Informationsarchitektur berücksichtigt werden muss. Die Ziele und ggf. die Geschäftsprozesse des Webseitenbetreibers wollen ebenso abgebildet werden. Dazu kommen Usability-Überlegungen und in vielen Fällen die Conversion-Optimierung. Gibt es bereits Wünsche oder Vorgaben für das Design der Webseite, so spielen auch diese eine Rolle, besonders im Hinblick auf Navigationselemente.</p>
<p>Meiner Erfahrung nach ist es sinnvoll, erst einmal die Anforderungen aller beteiligten Disziplinen zu sammeln. Beginnen wir mit dem SEO-Part. Suchmaschinen mögen am liebsten monothematische Inhaltsseiten, bei denen der Bewertungsalgorithmus einer Suchmaschine klar »erkennen« kann, um welches Thema sich die Seite dreht. Das bedeutet: Eine einzelne Inhaltsseite sollte im Idealfall nur auf ein Keyword bzw. eine Keyword-Kombination hin optimiert werden. In der Praxis ist allerdings oft auch die Optimierung auf mehrere, thematisch verwandte Keywords möglich. Mehr als drei Keywords pro Seite sollten es dennoch nicht sein. Unter Berücksichtigung dieser Faustregeln ist es nicht schwer, aus der finalen Keyword-Auswahl eine Liste der (aus SEO-Sicht) benötigten Inhaltsseiten zu erstellen.</p>
<p>Als nächstes kommt die interne Sicht des Kunden bzw. Webseitenbetreibers an die Reihe. Die Vorgehensweise ist hier sehr unterschiedlich. Denn manche Kunden haben nur eine vage Ahnung von den aus ihrer Sicht notwendigen Inhalten ihres Internetauftritts. Andere Kunden dagegen haben eine sehr genaue Vorstellung von der Art und Strukturierung ihrer Inhalte und kommen bereits mit detailliert ausgearbeiteten Sitemap-Vorschlägen in eine Besprechung zur Webseitenstruktur. Eine Sitemap, die die Anforderungen und Wünsche des Kunden bzw. Webseitenbetreibers widerspiegelt, sollte das Ziel dieses Projektschritts sein. Für die weitere Bearbeitung ist die Erstellung der Sitemap mit einer Mindmap-Software am praktischsten.</p>
<p><img class="alignnone size-full wp-image-1140" src="http://www.webkrauts.de/wp-content/uploads/2011/12/sitemap-beispiel-mit-keywords.png" alt="Sitemap-Beispiel mit Keywords" width="680" height="315" /></p>
<p>Nun kommt der spannende Teil. Es ist in den meisten Fällen ein langsames Vortasten und Ausprobieren: Welche aus SEO-Sicht notwendige Inhaltsseiten sind in der Sitemap bereits enthalten oder müssen noch hinzugefügt werden? Lassen sie sich integrieren oder wäre aus SEO-Sicht ein anderer struktureller Aufbau sinnvoller? Finden in diesem Struktur-Gegenvorschlag noch immer alle Inhalte aus der ursprünglichen Sitemap ein geeignetes Plätzchen? Was ist mit herausragenden Seiten, wie der Startseite? Sie sollten auf keinen Fall »unoptimiert« bleiben und damit Potenzial verschenken.</p>
<p>Ob ihr während dieses ganzen Ausprobierens und Hin- und Herschiebens auch gleich Usability- und Design-Aspekte im Hinterkopf haben wollt, bleibt euch überlassen. Ich blende diesen Teil der Informationsarchitektur zu diesem Zeitpunkt bewusst aus. Zunächst möchte ich zu einer Sitemap gelangen, die eine sinnvolle Struktur widergibt und bei der hinter den meisten Seiten Keywords für die spätere Optimierung vermerkt sind. Danach wird erarbeitet, wie sich dieses Konstrukt in eine angenehm bedienbare Webseite überführen lässt.</p>
<h4>Schritt 3: Technische Optimierung</h4>
<p>An dieser Stelle gehe ich nur auf einige Punkte der technischen Suchmaschinenoptimierung ein, die in engem Zusammenhang mit der Informationsarchitektur stehen. Viele weitere Anregungen findet ihr in Moritz Gießmanns Artikel <a href="http://www.webkrauts.de/2008/12/17/on-site-suchmaschinenoptimierung/">»On-Site-Suchmaschinenoptimierung«</a> sowie im bereits erwähnten E-Book <a href="http://www.seo-news.de/grundlagen-der-suchmaschinenoptimierung/488/">»Grundlagen der Suchmaschinenoptimierung«</a> von Thomas Promny.</p>
<p>Besondere Aufmerksamkeit sollte bei der technischen Suchmaschinenoptimierung der JavaScript-Verwendung geschenkt werden. Bis vor kurzem konnten Suchmaschinen-Crawler mit JavaScript nicht viel anfangen. Inhalte, vor allem natürlich Texte und Links, die nicht direkt im HTML-Quellcode standen, waren für Suchmaschinen praktisch unsichtbar. Erst vor kurzem konnte ich mitverfolgen, wie eine Internetagentur die frisch renovierte Agentur-Webseite dank exzessiver und alternativloser JavaScript-Spielereien nahezu komplett aus dem Google-Index befördert hat. Das soll jetzt anders werden: Am 10. November 2011 gab Google offiziell bekannt, ab jetzt AJAX-Requests auszuführen, um Internetseiten komplett darstellen zu können. Details und Best-Practice-Beispiele könnt ihr <a href="http://googlewebmastercentral-de.blogspot.com/2011/11/get-vs-post-methode-und-die-erfassung.html">im deutschen Google Webmaster Central Blog</a> nachlesen.</p>
<p>Neben der technischen Zugänglichkeit der Inhalte ist die interne Verlinkung der einzelnen Inhaltsseiten ein wichtiges Thema. Denn die internen Links sorgen einerseits dafür, dass Suchmaschinen-Crawler auch wirklich alle Inhaltsseiten finden. Andererseits gilt für interne Links dasselbe wie für Links von anderen Webseiten: Der Linktext sollte möglichst gut zur Zielseite passen, das heißt deren Keyword enthalten. Beispielsweise können nichtssagende Produktbezeichnungen in Navigationen oft recht einfach um solche Gattungsbegriffe oder erklärende Zusätze ergänzt werden, auf die die Zielseiten optimiert wurden. Positiver Nebeneffekt: Auch Nicht-Fachleute finden sich besser auf der Webseite zurecht.</p>
<p>Gerade bei umfangreichen Internetauftritten mit tiefen Navigationsstrukturen empfiehlt es sich, zusätzlich zur Hauptnavigation möglichst viele thematisch passende Querverweise einzufügen. Denn das erleichtert dem Suchmaschinen-Crawler die Arbeit beim Durchdringen der Struktur. Außerdem sorgt es für zusätzliche Keyword-relevante Verlinkung. Neben Links aus Fließtexten heraus sind Boxen mit »Verwandten Artikeln« sehr gut geeignet – in Blogs und Seiten mit vielen redaktionellen Inhalten auch Kategorie- und Tag-Seiten, denn sie werden häufig Keyword-relevant verlinkt. Wichtig ist dabei jedoch, dass solche Artikel-Auflistungen immer nur Teaser-Texte beinhalten. Die vollständigen Artikel gehören ausschließlich auf die Artikel-Einzelseiten. Denn Google mag keine doppelten Inhalte. Wenn von zehn Artikel-Teasern einer Kategorieseite nur jeder zweite das Kategorie-Keyword in der Überschrift oder im Teaser-Text enthält, ist die Seite so gut wie von selbst optimiert.</p>
<h4>Schritt 4: Inhaltliche Optimierung</h4>
<p>Diesen Punkt möchte ich nur kurz anschneiden, denn die redaktionelle Befüllung gehört nicht mehr zur Informationsarchitektur. Kurz gesagt: Bei der Optimierung der Inhalte geht es darum, die Keywords, für die eine Seite optimiert werden soll, an bestimmten Stellen unterzubringen.</p>
<p>Das Keyword einer Seite sollte im Seitentitel enthalten sein und je weiter vorne desto besser. Denn einem Keyword im Title-Element misst Google bei der Bewertung der Seite mehr Gewicht zu als einem Keyword, das im Fließtext steht. Gleiches gilt für Haupt- und Zwischenüberschriften, die natürlich korrekt mit <code>h1</code> bis <code>h6</code> ausgezeichnet sein müssen. Auch Keywords, die über <code>strong</code> oder <code>em</code> ausgezeichnet sind, zählen etwas mehr. Natürlich soll die Leserlichkeit nicht darunter leiden. In diesem Zusammenhang schadet es nicht, sich mit den auf Blickverläufen basierenden Gestaltungsempfehlungen für Werbebriefe vertraut zu machen. Im klassischen Direktmarketing gibt es nämlich umfangreiche Erfahrungen mit dem richtigen Maß an Hervorhebungen in einem Text. In den Texten einer Seite sollte das Keyword der Seite einige Male enthalten sein, am besten möglichst gleichmäßig über den Text verteilt. Nicht mehr so eng gesehen wird die <a href="http://de.wikipedia.org/wiki/Suchwortdichte">Keyword-Dichte</a>. Eine gute Faustregel ist immer drei bis fünf Prozent.</p>
<p>Mit ein wenig Fantasie lassen sich außerhalb des Hauptinhalts viele Stellen finden, an denen das Einfügen von Keywords nicht nur aus SEO-Sicht sinnvoll ist. Ein Beispiel: Nehmen wir an, ein Hersteller von Gartengeräten pflegt in seinem Internetauftritt für jeden Gerätetyp eine eigene Inhaltsseite. In der Seitenspalte gibt es eine Box mit den Kontaktinfos des jeweiligen Produktmanagers. Ist diese Kontaktinfo-Box nicht nur mit »Ihr Ansprechpartner« betitelt, sondern beispielsweise mit »Ihr Ansprechpartner für Rasenmäher«, ist die Seite ohne großen Aufwand um eine weitere Keyword-Erwähnung in einer Überschrift reicher. Solche Keyword-Einschübe lassen sich im Übrigen mithilfe von Zusatzfeldern im CMS-Backend und entsprechend gestalteten Templates recht gut automatisieren. Das nimmt Webseitenredakteuren ein wenig Arbeit ab. Webentwickler, die diese Technik einsetzen, müssen lediglich darauf achten, dass die automatisch eingefügten Keyword-Nennungen so umgesetzt sind, dass sie auf der Seite nicht unnatürlich oder störend wirken.</p>
<h5>Zum Autor</h5>
<p><img class="alignleft size-full wp-image-914 bild-links" src="http://www.webkrauts.de/wp-content/uploads/2010/12/michael-van-laar_60x60.jpg" alt="Autorenfoto: Michael van Laar" width="60" height="60" />Michael van Laar arbeitet als Online-Kommunikationsberater und Webentwickler bei <a href="http://www.talkabout.de/">talkabout communications</a> in München. Wenn er sich nicht gerade über WordPress und TYPO3 ärgert oder über MODX freut, ist er <a href="http://www.michael-van-laar.de/blog/">Ab-und-zu-Blogger</a> und Gelegenheitsmusiker.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/18/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/18/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-2/</feedburner:origLink></item>
		<item>
		<title>Zwei, die zusammengehören: SEO und Informationsarchitektur (Teil 1)</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/zgMc7Z4US9U/</link>
		<comments>http://www.webkrauts.de/2011/12/17/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-1/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 07:00:15 +0000</pubDate>
		<dc:creator>Michael van Laar</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[Informationsarchitektur]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[suchmaschinenoptimierung]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1134</guid>
		<description><![CDATA[<div class="advent advent-17">17. Türchen des Webkrauts-Adventskalenders</div><p>Suchmaschinenoptimierung (SEO) ist eng mit der inhaltlichen und technischen Struktur einer Webseite verbunden. Daher ist die Entwurf- oder Relaunch-Phase eines Internetauftritts der ideale Zeitpunkt, um die Grundlagen dafür zu legen. In diesem zweiteiligen Artikel zeigt Michael van Laar, wie Webworker SEO-Dienstleistungen in ihre Projekte integrieren können.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-17">17. Türchen des Webkrauts-Adventskalenders</div>
<p>Suchmaschinenoptimierer erhalten immer wieder Anfragen, die in etwa so lauten: »Wir haben vor kurzem unseren Internetauftritt neu machen lassen. Jetzt möchten wir auch bei Google gut gefunden werden.« Wenn ich mich bei einer solchen Anfrage ein wenig genauer über den bisherigen Projektverlauf erkundige, bestätigt sich meistens mein Verdacht, dass etwas grundlegend schief gegangen ist.</p>
<p>Wenn Agenturen Suchmaschinenoptimierung (SEO) als integralen Bestandteil des Projekts einbeziehen, ist nicht nur der Kunde glücklicher. Auch der beteiligte Webworker oder die Agentur können daran mehr verdienen – anstatt einen Teil des Kuchens einem SEO-Dienstleister zu überlassen. Zudem muss der Kunde in der Summe sehr wahrscheinlich weniger bezahlen, weil bestimmte Arbeiten nicht unnötigerweise doppelt anfallen. Deswegen lohnt es sich für Webworker, diejenigen SEO-Basics zu kennen, die Einfluss auf grundlegende Webseiten-Aspekte wie die Informationsarchitektur haben.</p>
<p>Vereinfacht dargestellt besteht SEO aus drei Bereichen, die jeweils aufeinander aufbauen:</p>
<ol>
<li>Auswahl der »richtigen« Suchbegriffe für die Optimierung</li>
<li>Inhaltliche und technische Optimierung des Internetauftritts selbst (On-Page-Optimierung)</li>
<li>Dafür Sorge tragen, dass die Webseite ausreichend oft und gut im Web verlinkt ist (Off-Page-Optimierung bzw. Linkaufbau)</li>
</ol>
<p>Zwar sind Quantität und Qualität der Links das wesentliche Kriterium für die Position in den Suchergebnisseiten. Doch die ersten beiden Punkte sind nicht weniger wichtig. Denn sie sind die notwendige Basis, ohne die es in der Regel nicht sinnvoll ist, Geld und/oder Zeit in den Linkaufbau zu investieren. Mehr über die verschiedenen Einflussfaktoren auf das Suchmaschinen-Ranking findet ihr in Jens Meierts Artikel <a href="http://www.webkrauts.de/2006/12/18/seo-kompakt/">»SEO kompakt«</a> oder in Thomas Promnys E-Book <a href="http://www.seo-news.de/grundlagen-der-suchmaschinenoptimierung/488/">»Grundlagen der Suchmaschinenoptimierung«</a>.</p>
<h4>In vier Schritten zum suchmaschinenoptimierten Internetauftritt</h4>
<p>On-Page-Optimierung ist eng mit der inhaltlichen und technischen Struktur einer Webseite verbunden. Daher ist die Entwurf- oder Relaunch-Phase der ideale Zeitpunkt, um sich Gedanken über On-Page-Optimierung zu machen. Das folgende Vorgehen hat sich bewährt:</p>
<ol>
<li>Recherche, Bewertung und Auswahl der Suchbegriffe (Keywords)</li>
<li>Aufbau einer Inhalts-/Navigationsstruktur, die sowohl die Ziele des Webseitenbetreibers (=&nbsp;Innensicht) als auch SEO und Usability (=&nbsp;Außensicht) berücksichtigt</li>
<li>Technische Suchmaschinenoptimierung</li>
<li>Optimierung der Inhaltsseiten, meist im Zuge der ohnehin notwendigen Inhaltserstellung oder -überarbeitung</li>
</ol>
<p>Den vierten Punkt werde ich in diesem Artikel allerdings nur kurz anschneiden. Denn es soll hier hauptsächlich um die Struktur des Internetauftritts geht und nicht um die redaktionelle Befüllung dieser Struktur.</p>
<h4>Schritt 1: Keyword-Recherche</h4>
<p>Selbst die handwerklich beste Suchmaschinenoptimierung bleibt wirkungslos, wenn auf Suchbegriffe hin optimiert wird, die nur selten gesucht werden oder die nicht die gewünschte Zielgruppe auf die Webseite bringen. Deswegen geht es bei der Keyword-Recherche nicht nur um die Suche, sondern auch um die Bewertung von Suchbegriffen.</p>
<p>Relevante Keywords und Keyword-Kombinationen lassen sich einerseits durch klassische Methoden wie Brainstorming, Wettbewerbsbetrachtung oder Thesauren finden. Andererseits gibt es spezielle Hilfsmittel für keywordbasierte Online-Marketing-Formen. Das wohl bekannteste ist das <a href="https://adwords.google.com/select/KeywordToolExternal">Google Keyword-Tool</a>. Weitere nützliche Hilfsmittel sind <a href="http://www.google.de/trends">Google Trends</a>, <a href="http://www.google.com/insights/search/">Google Insights for Search</a>, das <a href="http://www.seokai.com/tools/long-tail-keyword-tool/">Long-Tail Keyword-Tool</a> und der <a href="http://metager.de/asso.html">MetaGer-Web-Assoziator</a>. Eine relativ schnelle und praktische Vorgehensweise für Webworker, um gemeinsam mit ihren Kunden eine sinnvolle Keyword-Liste zusammenzustellen, beschreibt Rishi Lakhani in <a href="http://www.seomoz.org/blog/building-bricks-keyword-discovery-process-for-small-businesses">»Building Bricks: Keyword Discovery Process for Small Businesses«</a>.</p>
<p>Nach der Sammlung möglicher Suchbegriffe, müssen diese hinsichtlich des Verhältnisses von Optimierungsaufwand zu Erfolgschancen bewertet werden. Geeignete Bewertungskriterien für eine schnelle Analyse sind die Keyword-Relevanz für die Zielgruppe, das Suchvolumen und die Mitbewerberdichte. Vollzeit-Suchmaschinenoptimierer, die in umkämpften Keyword-Umfeldern arbeiten, beziehen zwar noch wesentlich mehr Kriterien in die Analyse ein. Für unsere Zwecke reichen diese drei Kriterien jedoch völlig aus.</p>
<p>Die Keyword-Relevanz für die Zielgruppe wird meistens der Webseitenbetreiber einschätzen können. Wer etwas mehr Aufwand nicht scheut, unterhält sich zudem mit einigen Repräsentanten der anvisierten Zielgruppe. Gerade Marketingmitarbeiter neigen nämlich erfahrungsgemäß dazu, das Vokabular ihrer Zielgruppe falsch einzuschätzen, weil sie durch die firmeneigenen Werbesprech-Kunstbegriffe ein wenig betriebsblind sind.</p>
<p>Eine sehr grobe, aber an dieser Stelle ausreichende Schätzung über die Suchhäufigkeit liefert das Google Keyword-Tool. Hier wählt ihr am besten nur die Keyword-Option »Exakt« aus (siehe Screenshot), damit sich die Angaben der Suchvolumina nur auf die exakten Suchanfragen und nicht auf ähnliche Begriffe beziehen. Für ausschließlich national agierende Unternehmen gibt die Spalte »Monatliche lokale Suchanfragen« Aufschluss über die monatliche Suchhäufigkeit im ausgewählten Land (siehe Screenshot).</p>
<p><img class="alignnone size-full wp-image-1135" src="http://www.webkrauts.de/wp-content/uploads/2011/12/screenshot-google-keyword-tool.png" alt="Screenshot des Google Keyword-Tools" width="680" height="309" /></p>
<p>Über die Mitbewerber-Dichte im SEO-Bereich gibt die normale Google-Suche Auskunft. Das Google Keyword-Tool hilft hier leider nicht weiter, weil sich dessen »Wettbewerb«-Spalte auf die bezahlte Suchmaschinenwerbung bezieht. Wer bei Google nach dem gewünschten Keyword (zu diesem Zweck am besten immer in Anführungszeichen eingeschlossen) sucht, kann direkt auf der Ergebnisseite die Anzahl der gefundenen Ergebnisse ablesen. Das ist die Konkurrenz im weiteren Sinne. Die direkte »SEO-Konkurrenz« lässt sich durch die Google-Suche nach <code>intitle:"keyword"</code> abschätzen. Hierbei werden nur Seiten berücksichtigt, deren Seitentitel das gewünschte Keyword enthält. Das lässt den Schluss zu, dass es auf diesen Seiten tatsächlich hauptsächlich um das gewünschte Thema geht, und das Keyword nicht nur beiläufig irgendwo im Text erwählt wird. Außerdem ist »Keyword im Seitentitel« das wichtigste On-Page-Optimierungskriterium.</p>
<p>Es empfiehlt sich, die gefundenen Bewertungskriterien für alle Keywords in einer Excel-Tabelle zusammenzufassen, um sie für die weitere Auswertung nach Belieben sortieren und für die Endauswahl kennzeichnen zu können. Ich füge häufig noch eine zusätzliche Spalte in diese Excel-Tabelle ein, in der ich einen »Eignungsindex« berechnen lasse. Dieser soll für jedes Keyword das Verhältnis von Chancen und Aufwand widergeben. Je höher der Index-Wert, desto geeigneter ist das Keyword – so lautet zumindest die Theorie. In der Praxis ist dieser Wert allerdings nur in Kombination mit den anderen Kriterien aussagekräftig, weil er die Keyword-Relevanz für die Zielgruppe nicht berücksichtigt. Wen es trotzdem interessiert, ich verwende zurzeit folgende Formel:</p>
<p><img class="alignnone size-full wp-image-1137" src="http://www.webkrauts.de/wp-content/uploads/2011/12/eignungsindex-formel.png" alt="Eignungsindex-Formel: Eignungsindex = ( ( monatliche lokale Suchanfragen / Seiten mit Keyword im Seitentitel + monatliche lokale Suchanfragen / Seiten mit Keyword ) / 2 ) × monatliche lokale Suchanfragen" width="642" height="56" /></p>
<p>Wie umfangreich eine finale Keyword-Liste ausfallen muss, lässt sich pauschal nicht sagen. Im Idealfall gibt es für jedes Keyword eine eigene Inhaltsseite. Sind die personellen Ressourcen für die Inhaltserstellung knapp bemessen, ist es sinnvoll, sich für den Anfang auf eine kleine Auswahl der erfolgversprechendsten Keywords zu beschränken.</p>
<p>Morgen erfahrt ihr im zweiten Teil des Artikels, wie Keywords und Inhalte zusammenkommen und wie daraus eine suchmaschinenoptimierte Webseite wird.</p>
<h5>Zum Autor</h5>
<p><img class="alignleft size-full wp-image-914 bild-links" src="http://www.webkrauts.de/wp-content/uploads/2010/12/michael-van-laar_60x60.jpg" alt="Autorenfoto: Michael van Laar" width="60" height="60" />Michael van Laar arbeitet als Online-Kommunikationsberater und Webentwickler bei <a href="http://www.talkabout.de/">talkabout communications</a> in München. Wenn er sich nicht gerade über WordPress und TYPO3 ärgert oder über MODX freut, ist er <a href="http://www.michael-van-laar.de/blog/">Ab-und-zu-Blogger</a> und Gelegenheitsmusiker.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/17/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/17/zwei-die-zusammengehoeren-seo-und-informationsarchitektur-teil-1/</feedburner:origLink></item>
		<item>
		<title>CodeKit – Der Alleskönner unter den Tools für Frontendentwickler</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/rsaKZNnTAQ4/</link>
		<comments>http://www.webkrauts.de/2011/12/16/codekit-der-alleskoenner-unter-den-tools-fuer-frontendentwickler/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 07:00:31 +0000</pubDate>
		<dc:creator>Michael Kühnel</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1112</guid>
		<description><![CDATA[<div class="advent advent-16">16. Türchen des Webkrauts-Adventskalenders</div>
<p>Michael Kühnel stellt mit CodeKit eine Software vor, die euch bei moderner Frontendentwicklung unterstützt. Sie kompiliert LESS, Sass, Stylus sowie CoffeScript, überprüft Javascript nach Fehlern, komprimiert Bilder, fügt Dateien zusammen, lädt das Browserfenster automatisch neu und vieles mehr.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-16">16. Türchen des Webkrauts-Adventskalenders</div>
<p>Ein Tool für alles. CodeKit erspart euch die Kommandozeile, diverse Webapps und einzelne Tools indem es alles, was ihr euch als Frontendentwickler wünscht, in einer Oberfläche versammelt. Und vielleicht sogar noch ein bisschen mehr.</p>
<p>Die Benutzung könnte einfacher nicht sein: Per Drag and Drop ein vorhandenes Webprojekt hinzufügen und schon kann es losgehen. CodeKit analysiert die Dateien und kann mit den folgenden Dateitypen umgehen und euch die Arbeit erleichtern:</p>
<ul>
<li><a href="http://sass-lang.com/">Sass (CSS Preprocessor)</a></li>
<li><a href="http://lesscss.org/">Less (CSS Preprocessor)</a></li>
<li><a href="http://learnboost.github.com/stylus/">Stylus (CSS Preprocessor)</a></li>
<li><a href="http://jashkenas.github.com/coffee-script">CoffeeScript (Javascript »Metasprache«)</a></li>
<li><a href="https://developer.mozilla.org/de/JavaScript">Javascript</a></li>
<li>JPEG und PNG</li>
</ul>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/screenshot-image-450px.jpg" alt="Screenshot: Ein Projekt in CodeKit"  /></p>
<p>Der einzige Wermutstropfen: CodeKit ist Mac Nutzern vorbehalten und wird es laut dem Entwickler auch bleiben.</p>
<h4>Sass, LESS oder Stylus</h4>
<p>Die drei unterstützten CSS Preprocessor haben eine unterschiedliche Herkunft und unterscheiden sich geringfügig in Syntax und Features (siehe auch unseren <a href="http://www.webkrauts.de/2011/12/04/sass-compas/">Zweiteiler über Sass und Compass</a>). Doch sie haben die folgenden Gemeinsamkeiten, die euch »herkömmlichem« CSS gegenüber vor allem redundante Schreibarbeit abnehmen.</p>
<ul>
<li>Nutzung von Variablen, um CSS Eigenschaften zu speichern.</li>
<li>Mixins – Erweiterte Variablen. Hierin lassen sich mehrere Deklarationen speichern.</li>
<li>Möglichkeit der Verschachtelung von CSS-Regeln.</li>
<li>Unterstützung einfacher Rechenoperationen.</li>
</ul>
<p>Auch ohne sich mit dem Terminal und Ruby oder Node.js anfreunden zu müssen, könnt ihr jede dieser »dynamischen« CSS Erweiterungen einfach ausprobieren, indem ihr sie benutzt. CodeKit überwacht die Dateien und auf Wunsch wird daraus eine herkömmliche CSS-Datei generiert, sobald ihr speichert.</p>
<p>Der Einfluss auf die Kompilierung unterscheidet sich je nach gewähltem CSS Preprocessor. Die Option, CSS direkt bei der Erzeugung zu minifizieren (Whitespaces und Zeilenumbrüche entfernen) ist bei allen dreien gegeben.</p>
<p>Ebenfalls besteht unabhängig vom gewählten CSS-Dialekt die Möglichkeit, das generierte CSS direkt im Anschluss von <a href="http://blesscss.com">Bless</a> »verarbeiten« zu lassen. Damit könnt ihr automatisiert die Falle des »CSS Selector Limit« von 4095 Selektoren pro CSS Datei umgehen. Dieses Limit gilt »natürlich« nur für den Internet Explorer, dafür aber bis mindestens Version 9.</p>
<h4>CoffeeScript</h4>
<p>Auch CoffeeScript kann euch dabei helfen, weniger tippen zu müssen. Es handelt sich hierbei im Prinzip um eine alternative Javascript-Syntax, die zu »gewöhnlichem« Javascript kompiliert wird, welches wie gewohnt in eure Seiten eingebunden und im Browser ausgeführt wird. CoffeeScript verzichtet z.B. auf geschweifte Klammern und Semikolons und nutzt stattdessen Whitespaces und Einrückungen um Codeblöcke auseinanderzuhalten.</p>
<p>Genau wie bei den CSS-Erweiterungen verhält es sich mit CoffeeScript. Sobald ihr speichert, wird aus der CoffeeScript- eine Javascript-Datei erzeugt. Bei der Kompilierung gibt es nur eine Option: Ihr könnt darauf verzichten, um den eigentlichen Code eine sich selbstaufrufende anonyme Funktion zu legen. Hierbei handelt es sich um eine Javascript Best Practice, die dafür sorgt, dass der globale Scope nicht unnötig »missbraucht« wird. Denn Variablen und Funktionsdeklarationen aus dieser Funktion sind außerhalb des Gültigkeitsbereiches nicht erreichbar.</p>
<p>Ansonsten gleichen die Möglichkeiten zur »Weiterverarbeitung« denen von Javascript.</p>
<h4>Javascript</h4>
<p>Für Javascript könnt ihr wählen, was beim Speichern automatisch angestoßen werden soll.</p>
<ol>
<li>Fehlerüberprüfung</li>
<li>Komprimierung</li>
<li>Zusammenführung</li>
</ol>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/screenshot-javascript-450px.jpg" alt="Screenshot: Javascript Optionen"  /></p>
<h5>Fehlerüberprüfung</h5>
<p>Zur Wahl stehen <a href="http://jslint.com">JSLint</a> und <a href="http://www.jshint.com">JSHint</a>. Beide könnt ihr in ihrer Fehlertoleranz konfigurieren. JSHint ist dabei weniger anstrengend. Es bietet zum Beispiel per Default die Option »jQuery« und validiert somit auch Aufrufe von jQuery-Methoden.</p>
<p>Eines dieser Tools zur Überprüfung von Syntaxfehlern zu nutzen, sollte zum Pflichtprogramm bei Benutzung von Javascript gehören. Denn es hilft z.B. auch Fehler zu vermeiden, die Chrome oder Firefox ignorieren, sich aber im Internet Explorer durchaus bemerkbar machen können.</p>
<h5>Komprimierung</h5>
<p>Mit <a href="http://marijnhaverbeke.nl/uglifyjs">UglifyJS</a> bietet CodeKit einen modernen Javascript Kompressor, der Dateien ordentlich, schnell und sicher schrumpfen lässt.  Die Kompressionsraten liegen zwischen »YUI Compressor« und dem »Google Closure Compiler«, dafür ist UglifyJS jedoch wesentlich schneller als letzterer.</p>
<h5>Dateien zusammenführen</h5>
<p>Um die Ladezeiten einer Webseite so gering wie möglich halten, solltet ihr neben den Dateigrößen auch die Anzahl der Anfragen an den Server so gering wie möglich halten. Dabei unterstützt euch CodeKit nicht nur bei CSS-Dateien, sondern auch bei Javascript.</p>
<p>Das funktioniert dadurch, dass es CodeKit ermöglicht, Javascript-Dateien ineinander zu importieren. Dadurch könnt ihr Javascript Dateien zusammenführen und dem Browser letztendlich nur eine einzige ausliefern. Beim Import könnt ihr festlegen, ob die zu importierende Datei am Anfang oder am Ende eingefügt wird. Importiert eine Datei mehrere andere, lässt sich per Drag und Drop die Reihenfolge beeinflussen. Das Importieren selber lässt sich ebenfalls per Drag und Drop, oder durch einen speziellen Kommentar innerhalb einer Javascript bzw. Coffeescript Datei initiieren.</p>
<p>Nun müsst ihr nur noch entscheiden, ob die Dateien beim Speichern nur zusammengeführt, oder zusätzlich noch komprimiert werden sollen.</p>
<h4>Frameworks</h4>
<p>Die Funktionalität der »Frameworks« geht noch einen Schritt weiter. Hierunter verbirgt sich die Möglichkeit, Dateien, die projektunabhängig genutzt werden, CodeKit einmalig als »Framework« bekannt zu machen. Ist dies geschehen, lassen sich die Dateien in jedem Projekt nutzen. Frameworks können LESS-, Sass-, Stylus-, Javascript- und Coffeescript-Dateien beinhalten.</p>
<p>Der Vorteil hiervon ist, dass ihr z.B für sämtliche Projekte nur noch einmal jQuery auf eurer Festplatte benötigt, welches ihr in eure Projekte importieren könnt. Frameworks lassen sich auch wunderbar dafür nutzen, wiederverwertbaren Code zu erzeugen. Beispielsweise durch Erstellung eines eigenen CSS Boilerplates auf Basis von z.B. LESS.</p>
<h4>Bilder komprimieren</h4>
<p>Mit einem Klick lassen sich alle JPEG und PNG Bilder eines Projektes in CodeKit verlustfrei komprimieren. Hiermit könnt ihr bei PNGs je nach Bild  bis zu 30% an Dateigröße einsparen (verglichen mit Photoshops »Für Web und Geräte speichern«).</p>
<p>Weitere Information zum Thema Website Performance findet ihr in den <a href="http://www.webkrauts.de/2008/12/13/sehr-sehr-schnelle-seiten-website-performance-best-practice/">Website Performance Best Practices</a>.</p>
<h4>Auto-Reload</h4>
<p>Auch das automatische Neu-Laden des Browsers, sobald sich eine Datei ändert, übernimmt CodeKit. In der aktuellen Beta-Version zunächst in Google Chrome und Safari.</p>
<h4>CodeKit herunterladen</h4>
<p>CodeKit befindet sich zurzeit in einer offenen Beta-Phase und läuft stabil. Die Beta-Version könnt ihr direkt auf der <a href="http://incident57.com/codekit/">Website des Entwicklers</a> herunterladen und bis zum 20. Dezember 2011 nutzen. Die finale Version wird voraussichtlich für etwa 10 Dollar in Apples App Store zu kaufen sein.</p>
<h5>Zum Autor</h5>
<p><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/me.jpg" alt="Michael Kühnel"  class="bild-links" />Michael Kühnel ist seit Netscape 4.7.8 im Geschäft und freut sich, dass dank Webstandards seitdem alles immer besser wird. Er bezeichnet sich selbst als Nerd und macht inzwischen fast ausschliesslich Frontendprogrammierung. Ab und an verfasst er einen <a href="http://twitter.com/mkuehnel">Tweet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/16/codekit-der-alleskoenner-unter-den-tools-fuer-frontendentwickler/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/16/codekit-der-alleskoenner-unter-den-tools-fuer-frontendentwickler/</feedburner:origLink></item>
		<item>
		<title>Schnelltest zur Barrierefreiheit</title>
		<link>http://feedproxy.google.com/~r/webkrauts/iXSU/~3/BZ_2X8k1IRU/</link>
		<comments>http://www.webkrauts.de/2011/12/15/schnelltest-zur-barrierefreiheit/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 07:00:03 +0000</pubDate>
		<dc:creator>Kerstin Probiesch</dc:creator>
				<category><![CDATA[Adventskalender 2011]]></category>
		<category><![CDATA[Accessibility]]></category>

		<guid isPermaLink="false">http://www.webkrauts.de/?p=1142</guid>
		<description><![CDATA[<div class="advent advent-15">15. Türchen des Webkrauts-Adventskalenders</div>
<p>Tests auf Barrierefreiheit sind umfangreiche Unterfangen. Nicht immer ist so viel Zeit und je nach Situation geht es erstmal nur um eine grobe Einschätzung. Kerstin Probiesch stellt einen Schnelltest vor, der weitgehend mit Bordmitteln durchgeführt werden kann.</p>]]></description>
			<content:encoded><![CDATA[<div class="advent advent-15">15. Türchen des Webkrauts-Adventskalenders</div>
<p>Nicht immer und nicht immer sofort wollen Anbieter oder Projektleiter einen ausführlichen Test der Barrierefreiheit beauftragen, geschweige denn selber durchführen. Manche wollen »erstmal sehen«, wo ihr Webangebot steht, ob sich ein ausführlicher Test auf Konformität mit den Web Content Accessibility Guidelines 2.0 (WCAG 2.0) »überhaupt lohnt« oder der beste nächste Schritt ist. Dabei geht es vor allem um die Frage nach dem ersten Eindruck. Gestellt wird sie in den unterschiedlichsten Situationen: am Telefon, auf Tagungen oder bei einem Erstgespräch. In diesen Situationen steht dem Ideal einer ausführlichen Analyse die mangelnde Zeit gegenüber. Und: Nicht immer ist es der Barrierefreiheitsprofi, der sich oder dem Fragesteller einen ersten Eindruck verschafft. Projektleiter, Anbieter und Entscheider benötigen einfache Werkzeuge und schnelle Tests, z.B. um mit dem Ergebnis der beauftragten Webagentur auf die Finger zu klopfen oder ein Projekt in die richtige barrierefreie Richtung zu lenken.</p>
<p>Nur: was sind sie, die wesentlichen Barrieren? Wie »schnell« ist schnell und welche Barrieren können unter den oben skizzierten Rahmenbedingungen in kurzer Zeit und hauptsächlich mit Bordmitteln festgestellt werden?</p>
<h4>Überlegungen</h4>
<p>Eine Antwort auf die Frage nach »wesentlichen Barrieren« zu finden, hört sich zunächst leicht an. Tatsächlich hängt die Ermittlung »wesentlicher Barrieren« von unterschiedlichen Perspektiven ab. Während blinde Surfer fehlende Alternativtexte als wesentlich bezeichnen würden, sind diese für sehende Tastaturbenutzer weder eine wesentliche, noch überhaupt eine Barriere. Für beide Nutzergruppen gilt jedoch, dass eine fehlende Tastaturbedienbarkeit eine wesentliche Barriere ist; für unseren geplanten Schnelltest gilt: sie kann mit Bordmitteln geprüft werden. Damit hätten wir den ersten Prüfschritt identifiziert, dem wir aus rein pragmatischen und zudem leicht testbaren Erwägungen heraus noch den sichtbaren Fokus beifügen.</p>
<p>Natürlich ließe sich die Frage nach den »wesentlichen Barrieren« auch auf der Basis von Richtlinien und Verordnungen beantworten. So könnten auf Basis der WCAG 2.0 alle Erfolgskriterien der Konformitätsstufe A herangezogen und daraus ein Schnelltest gestrickt werden. Bereits beim ersten Erfolgskriterium ergäben sich jedoch erste Probleme: Alternativtexte können meist weder gerade »mal eben« getestet, noch in einem direkten kurzen Gespräch schnell erklärt werden. Ihre Bewertung ist zudem abhängig von reichlich Know-how und Testpraxis. Eines jedoch geht schnell: Browser und Betriebssystem in den Kontrastmodus schicken und testen, ob Grafiken über CSS eingebunden sind. Solcherart eingebundene Grafiken verschwinden bei benutzerdefinierten Bildschirmeinstellungen. Handelt es sich um reine Layoutgrafiken ist das natürlich unproblematisch; bei informativen Grafiken dagegen entstehen für mehrere Nutzergruppen Probleme: Zwar können blinde Nutzer bei einem vorhandenen Text im <code>title</code>-Attribut den Sinn und Zweck der Grafik erfahren. Ist jemand jedoch mit eigenen Bildschirmeinstellungen im Web unterwegs, wird das Auffinden solcher Grafiken zur Glückssache und sehenden Tastaturbenutzern ist der Inhalt des <code>title</code>-Attributs ohne JavaScript nicht zugänglich. Damit hätten wir einen weiteren Prüfschritt identifiziert, der jedoch eine zumindest kurze Sichtung der Seite voraussetzt. Er eignet sich also nicht als zweiter Prüfschritt.</p>
<p>Soweit einige Überlegungen, die für diesen Schnelltest eine Rolle spielten. Weitere waren: Der Test sollte zumindest nach kurzer Übungsphase nicht länger als eine halbe Stunde dauern und die Bordmittel von Browser und Betriebssystem sollten, abgesehen von maximal einem kostenlosen und leicht installierbaren Prüftool, genügen. Natürlich stellte sich die Frage nach der Anzahl der Testschritte ebenso wie die Frage, ob und welche Kriterien verschiedener Konformitätsstufen zusammengelegt werden können?</p>
<p>Herausgekommen ist ein Test mit fünf plus einem optionalen Prüfschritten, der unter Windows mit Firefox und Internet Explorer, der <a href="https://addons.mozilla.org/en-US/firefox/addon/headingsmap/">Erweiterung HeadingsMap für Firefox</a> und in ca. 30 Minuten durchgeführt werden kann. Natürlich sollen weder Ergebnis noch Test den Eindruck erwecken, dass schon alles getan sei. Der Schwerpunkt liegt zudem nicht auf das Abarbeiten einer Checkliste, wenngleich sich natürlich eine solche erstellen ließe.</p>
<h4>Schnelltest V. 0.1</h4>
<p>Sind die Browser geöffnet und die HeadingsMap installiert, dann öffnet die Startseite des zu testenden Webangebots sowohl im Internet Explorer als auch im Firefox. Zwischen beiden Browsern könnt ihr bequem mit der Tastenkombination <kbd>Alt+Tab</kbd> wechseln. Nach Aktivierung der HeadingsMap wechselt zunächst in den Internet Explorer. Dies mag ungewöhnlich sein, dient – so die Überlegung – jedoch dazu, dass bereits hier ein erster Eindruck gewonnen werden kann, denn die HeadingsMap zeigt sofort die Überschriftenstruktur der Seite an.</p>
<h5>Schritt 1: Tastaturbedienbarkeit</h5>
<p>Navigiert mit der Tabulatortaste durch die Seite. Entspricht die Tabreihenfolge der sichtbaren Anordnung der Inhalte? Wisst ihr beim Durchtabben durch einen Farbwechsel oder andere sichtbare Merkmale immer, wo ihr euch befindet? Falls Videos vorhanden sind: Könnt ihr diese mit der Tastatur ansteuern, bedienen (z.B. Starten und Stoppen) und verlassen? Wechselt in den Firefox und wiederholt diesen Schritt. Achtet dabei sowohl auf Links zur Kontaktseite sowie zur Suche bzw. erweiterten Suche und auf grafische Links. Diese werden in weiteren Schritten geprüft.</p>
<h5>Schritt 2: <code>LABEL</code>-Elemente korrekt verwendet</h5>
<p>Bleibt im Firefox und ruft – sofern vorhanden – die erweiterte Suche und/oder und ein Kontaktformular auf. Klickt auf die Beschriftungen von Eingabefeldern, Radiobuttons und Checkboxen. Springt der Fokus in das zugehörige Eingabefeld, werden Radiobuttons oder Checkboxen aktiviert? In diesem Fall sind die Beschriftungen korrekt mit den Formularelementen verknüpft und können von Screenreadern ausgewertet werden.</p>
<h5>Schritt 3: Aussagekräftige Seitentitel</h5>
<p>Bleibt im Firefox und schaut euch die/den Seitentitel der Formularseite/n an. Sind Angaben zum Webangebot sowie zur aufgerufenen Webseite enthalten? Ruft eine weitere Seite aus der Hauptnavigation heraus auf und vergleicht Seiteninhalt mit Seitentitel. Wisst ihr anhand des Seitentitels, worum es auf der Webseite geht?</p>
<h5>Schritt 4: Überschriften</h5>
<p>Schaut euch nun die Einträge in der HeadingsMap an. Sie enthält alle Überschriften, die mit dem <code>H</code>-Element ausgezeichnet sind. Sie können von Screenreadern ausgewertet und von blinden Nutzern über die H-Taste direkt angesprungen werden. Gleicht die Einträge in der HeadingsMap mit eurem visuellen Eindruck von der Webseite ab. Enthält die HeadingsMap alle Überschriften und Zwischenüberschriften und sind sie für sich gelesen aussagekräftig?</p>
<p>Wenn ihr an das Inhaltsverzeichnis eines Buches denkt: Ist die Gliederung des Dokuments logisch oder werden Ebenen übersprungen? Ist euch bereits bei den ersten drei Prüfschritten aufgefallen, dass Einträge rot hinterlegt sind? Diese Hinterlegungen kennzeichnen ausgelassene Ebenen, die zusätzlich an den Nummern der Einträge erkennbar sind.</p>
<p>Ruft die bisher besuchten Seiten auf, bis ihr euch wieder auf der Startseite befindet und gleicht jeweils die Seiteninhalte mit den Einträgen in der HeadingsMap ab.</p>
<h5>Schritt 5: Informative Grafiken sichtbar</h5>
<p>Durch die ersten vier Prüfschritte haben wir nun einen recht guten Eindruck von den bisher getesteten Seiten. Im ersten Schritt haben wir zudem bereits etwaige grafische Links identifiziert. Diese sind Thema des letzten Schrittes unseres Schnelltests. Dabei gilt: grafische Links sind immer informativ und benötigen ein <code>alt</code>-Attribut. Ist dieses vorhanden, dann ist die Grafik auch im Kontrastmodus immer sichtbar. Bevor ihr den Kontrastmodus mit <kbd>linkeALT+linkeUMSCHALT+DRUCK</kbd> aktiviert, wechselt in den Internet Explorer.</p>
<p>Sind grafische Links und andere informative Grafiken noch sichtbar (z.B. Logos, verlinkte Teaserbilder, als Schriftgrafiken ausgeführte Navigationseinträge)? Ist auch das Eingabefeld einer vorhandenen Suche sichtbar? Wechselt zu einer der im zweiten Schritt ausgewählten Formularseiten. Sind die Eingabefelder, Radiobuttons und Checkboxen sichtbar oder begegnet euch nur eine schwarze Fläche? Deaktiviert den Kontrastmodus mit der oben genannten Tastenkombination wieder.</p>
<p>Je nach Rahmenbedingung kann diesem Prüfschritt ein sechster folgen, der ebenfalls mit Bordmitteln getestet werden kann. Dieser eignet sich auch, wenn weder die Installation der HeadingsMap, noch die Installation eines Bookmarklets möglich ist. Selbstverständlich spricht nichts dagegen, im Anschluss Alternativtexte zu testen; die ersten Informationen wurden bereits im fünften Prüfschritt gewonnen. Seid ihr jedoch kein Barrierefreiheitsprofi und habt wenig Erfahrung mit der Bewertung von Alternativtexten, dann ist der folgende Schritt eine sinnvolle Ergänzung.</p>
<h5>Optionaler Schritt 6: Bei Zoom auf 200% lesbar</h5>
<p>Vergrößert die aufgerufene Seite mit dem Page Zoom auf 200%, indem ihr vier Mal die Tastenkombination <kbd>Strg und +</kbd> drückt oder die Zoomfunktion (unten rechts) verwendet.</p>
<p>Sind noch alle Texte leserlich oder werden einzelne Texte von anderen Inhalten überlagert? Schreibt einen kurzen Text in ein Eingabefeld. Könnt ihr diesen problemlos lesen oder wird er oben oder unten abgeschnitten? Achtet auch auf die Einträge in Haupt- und Unternavigationen. Ruft anschließend die Startseite auf und prüft, ob ihr auch hier alle Texte problemlos lesen könnt.</p>
<h5>Dokumentation und Grenzen</h5>
<p>Auf einer Tagung oder am Telefon wird die Vermittlung der Ergebnisse sicherlich während des Schnelltests, zumindest aber mündlich, erfolgen. Projektleiter sollten Probleme schriftlich dokumentieren, wobei je nach Übung und Qualität der Webseiten eine halbe Stunde möglicherweise nicht ausreicht. Eine Dokumentation sollte dabei so genau wie formuliert werden und in die Projektdokumentation integriert werden.</p>
<p>Nicht geeignet ist der Schnelltest für das Bezeugen einer Konformität nach WCAG 2.0 oder anderen Richtlinien bzw. Verordnungen. Das gilt sowohl für den Fall, dass keine Probleme gefunden werden als auch für den Fall, dass die mit diesem Schnelltest gefundenen Barrieren behoben werden.</p>
<p><strong>Hinweis:</strong>Der vorgestellte Schnelltest kann frei verwendet und nach eigenen Bedürfnissen abgewandelt, jedoch nicht für kommerzielle Zwecke als Produkt oder spezielle Dienstleistung angeboten werden.</p>
<h5>Die Autorin</h5>
<p style="float: left;margin-right: 1em"><img src="http://www.webkrauts.de/wp-content/uploads/2011/12/kerstin-probiesch.jpg" alt="Foto Kerstin Probiesch" width="60" height="59" /></p>
<p><a href="http://www.xing.com/profile/Kerstin_Probiesch">Kerstin Probiesch</a> ist freiberufliche Beraterin für barrierefreies Webdesign.Sie berät Unternehmen und Behörden und schult Programmierer und Webredakteure.  Kerstin prüft als freie Accessibility-Spezialistin Webseiten auf WCAG 2.0-Konformität, schreibt Fachartikel und begleitet beratend die Entwicklung barrierefreier Webangebote von der Konzeptionsphase an.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2011/12/15/schnelltest-zur-barrierefreiheit/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.webkrauts.de/2011/12/15/schnelltest-zur-barrierefreiheit/</feedburner:origLink></item>
	</channel>
</rss>

