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

<channel>
	<title>Codecandies &#187; css</title>
	<atom:link href="http://codecandies.de/tag/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://codecandies.de</link>
	<description>Das Weblog von Nico Brünjes.</description>
	<lastBuildDate>Wed, 08 Feb 2012 11:20:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Leselinks, Fronteers CSS Edition</title>
		<link>http://codecandies.de/2011/10/10/leselinks-fronteers-css-edition/</link>
		<comments>http://codecandies.de/2011/10/10/leselinks-fronteers-css-edition/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 13:34:29 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[links]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=4049</guid>
		<description><![CDATA[Das habe ich an anderer Stelle schon erw&#228;hnt, aber die Slides der Amsterdamer Konferenz, hat Darius Kruythoff zusammengetragen. Alle sehr…]]></description>
			<content:encoded><![CDATA[<p>Das habe ich an anderer Stelle schon erw&#228;hnt, aber die Slides der Amsterdamer Konferenz, <a href="https://plus.google.com/105677183826826570300/posts/Ncc2XTzLiry">hat Darius Kruythoff zusammengetragen</a>. Alle sehr lesenswert. Dabei funktionieren ohne Talk wahrscheinlich Lea Verous <a href="http://www.slideshare.net/LeaVerou/css3-secrets-10-things-you-might-not-know-about-css3">CSS3 Secrets</a>, Divia Manians (Opera) <a href="http://nimbu.in/fronteers/#intro">The new developer Workflow</a> (bitte mit Pfeiltasten bedienen) und Jake Archibalds <a href="http://speakerdeck.com/u/jaffathecake/p/in-your-font-face">In your font-face</a> am besten.</p>
<p>Lea Verou bedient sich ihres eigenen Online-Pr&#228;sentationssystems, das er <a href="http://leaverou.me/csss/#intro">hier als Demo zu sehen gibt</a> und <a href="https://github.com/LeaVerou/CSSS">hier da zugeh&#246;rige Github-Projekt</a>. Unter <a href="http://cubic-bezier.com/">cubic-bezier.com</a> hat Lea &#252;brigens ein Tool zur Verf&#252;gung gestellt, um die CSS3-Funktion <code>cubic-berzier()</code> mit Leben zu f&#252;llen. Sehr cool. Was die Funktion macht steht widerum in ihrer Pr&#228;se. Lea kennt man &#252;brigens von ihrer <a href="http://leaverou.me/css3patterns/">CSS Patters Demo</a>, zum Beispiel.</p>
<p>Aus den Slides von Divia Manians ist mir ganz dringend <a href="http://compass-style.org/">compass</a> im Ohr geblieben, ein Framework, das auf <a href="http://sass-lang.com/">SASS</a> aufsetzt.</p>
<p>Ebenfalls auf der fronteers wurde mir dieser hervorragende Link mit <a href="http://webexpedition18.com/articles/useful-css-snippets/">incredibly useful CSS snippets</a> zugespielt. Was mehr als zutreffend ist: bitte sofort ausdrucken!</p>
<p>Wer viel mit Browsern und Tests zu tun hat, der kann sich ja mal <a href="http://www.browserstack.com/">Browserstack</a> anschauen, f&#252;r das John Resig die Werbetrommel r&#252;hrt. Dort bekommt man Testbrowser in virtuellen Maschinen in der Cloud…</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2011/10/10/leselinks-fronteers-css-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The state of CSS</title>
		<link>http://codecandies.de/2011/08/12/the-state-of-css/</link>
		<comments>http://codecandies.de/2011/08/12/the-state-of-css/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 07:26:53 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[projekte]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3885</guid>
		<description><![CDATA[Im Moment gibt es wieder viel zu lernen, in Sachen CSS. Da sind zun&#228;chst die vielen neuen Dinge, die CSS3 bringt. Durch die derzeit rasante Browserentwicklung, Polyfills oder einfache Fallbackl&#246;sungen kann man vieles davon schon heute oder wenigstens morgen gebrauchen. Dazu kommen die Learnings aus einigen Jahren intensiven Einsatzes von CSS, seit der internationalen &#196;chtung des Tabellenlayout ist viel passiert.]]></description>
			<content:encoded><![CDATA[<div class="foto"><img src="http://codecandies.de/wp-content/uploads/2011/08/bestpracticeicebear.jpg" alt="" title="bestpracticeicebear" width="686" height="400" class="alignnone size-full wp-image-3888" />
<p>Da ist ein Eisb&#228;r im Raum?</p>
</div>
<p>Im Moment gibt es wieder viel zu lernen, in Sachen CSS. Da sind zun&#228;chst die vielen neuen Dinge, die CSS3 bringt. Durch die derzeit rasante Browserentwicklung, Polyfills oder einfache Fallbackl&#246;sungen kann man vieles davon schon heute oder wenigstens morgen gebrauchen. Dazu kommen die <em>Learnings</em> aus einigen Jahren intensiven Einsatzes von CSS, seit der internationalen &#196;chtung des Tabellenlayout ist viel passiert.</p>
<p>Seit CSS dem style-Attribut entwachsen ist, unterlag es lange Zeit einer eher langsamen Entwicklung. Gehemmt durch den Internet Explorer hat es ewig gedauert, bis sich CSS 2(.1) &#252;berhaupt durchgesetzt hat. Man hat lange Zeit eher mit den gegebenen Umst&#228;nden hantiert, anstatt CSS weiter zu entwickeln. Die <em>floats</em> l&#246;sten die Tabellen ab, die CSS Hacks beherrschten die Szene lange, machten zweigleisige Entwicklung f&#252;r potente und f&#252;r beschr&#228;nkte Browser m&#246;glich. Das Set an Techniken hat sich aber in der Menge kaum ver&#228;ndert, vielmehr lernten wir immer besser damit umzugehen. Dabei sind aber auch viele Standardl&#246;sungen entstanden, die heute einer genaueren Pr&#252;fung unterzogen werden m&#252;ssen.</p>
<h2>Our best practices are killing us!</h2>
<p>Nicole Sullivan (<a href="http://www.stubbornella.org/content/">die</a>, nicht <a href="http://de.wikipedia.org/wiki/Nicole_Sullivan">die</a>) tritt derzeit mit einem <a href="http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us">Vortrag</a> unter <a href="http://aneventapart.com/2011/minneapolis/">diesem Titel</a> auf, den ich sehr beeindruckend finde, weil er so sehr das trifft, was ich derzeit selbst in der Praxis feststelle. Viele der <em>best practices</em>, die in den letzten Jahren ersonnen, gepaukt und umgesetzt wurden, klingen gut, haben sich aber in den Jahren ihres Einsatzes vielleicht gar nicht bew&#228;hrt. Andere wurden von der Entwicklung &#252;berholt, wurden zur Angewohnheit. Um mal ein klassisches Beispiel aus einem anderen Bereich zu bringen: wenn Sie <em>&lt;script&gt;</em>-Bl&#246;cke in einem HTML-Document nutzen, umgeben sie den Code dann auch noch mit HTML-Kommentarzeichen? Eine Technik, die <a href="http://www.javascripttoolbox.com/bestpractices/#comments">heute lange nicht mehr n&#246;tig ist</a>. Trotzdem sieht man sie immer wieder. So geht es auch mit vielen Angewohnheiten in CSS.</p>
<p>Nicole Sullivan <a href="http://www.stubbornella.org/content/2011/04/28/our-best-practices-are-killing-us/">nennt viele Beispiele</a>. Unter anderem findet sie:</p>
<ul>
<li>
<p>die Angabe von Schriftgr&#246;&#223;en <strong>nicht</strong> in Pixel sei kontraproduktiv,</p>
</li>
<li>
<p>etwas mehr <em>Klassizitis</em> w&#228;re gar nicht so schlecht, da so lange Selektorketten vermieden w&#252;rden,</p>
</li>
<li>
<p>durch semantische Klassennamen w&#252;rde der Codewiederholung der Weg bereitet,</p>
</li>
<li>
<p>der Mythos, kein zus&#228;tzliches Markup f&#252;r das Layout einf&#252;hren zu d&#252;rfen, sei mehr als sch&#228;dlich, da durch Container Layoutprobleme auf festgelegte Bereiche beschr&#228;nkt werden k&#246;nnten.</p>
</li>
</ul>
<h2>In der Praxis nicht bew&#228;hrt</h2>
<p>Da geht es ihr genau wie mir. Wenn man betrachtet, wie wirklich gro&#223;e Website-Projekte entstehen, stellt man fest, dass durch die genannten <em>best practices</em> N&#246;tiges nur von einer Ecke des Projekts in die andere  verschoben wurde. So kann man wunderbares, absolut semantisch reines HTML schreiben, ohne jegliche Layout-Divs, so klein wie nur irgend m&#246;glich, ob die Seite dadurch wirklich schneller wird? Oder &#252;bersichtlicher? Nun, das HTML nat&#252;rlich schon, aber wenn wir uns anschauen, wieviel sich gegenseitig &#252;berschreibendes CSS ben&#246;tigt wird, merkt schnell, das man die Komplexit&#228;t nur verlagert hat. Miss Sullivans Beispiel: bei Facebook hatte man vor einem umfassenden CSS-Relaunch 706 CSS Dateien, in denen 261 Mal die gleiche Farbe blau definiert war. Do not repeat yourself?</p>
<p>Und dabei geht&#8217;s nicht mal darum, sich gegenseitig den schwarzen Peter zuzuschieben: Komplexit&#228;t im CSS schadet allen Beteiligten, denn sie dr&#252;ckt auf die Performance. Mein Beispiel ist die t&#228;gliche Praxis. Bei einem gro&#223;en Projekt wurden nahezu nach Lehrbuch beim Schreiben von HTML-Code (und Javascript<a href="#anmerkung1"><sup>[1]</sup></a>) auf auf eine ganze Reihe <em>best practices</em> geachtet. Das hat zun&#228;chst mal dazu gef&#252;hrt, dass wir zwar schlankes HTML, aber ziemlich viel CSS (und Javascript) &#252;ber die Leitungen schicken. Dabei ist die Menge an CSS und seine Komplexit&#228;t eine direkte Folge der semantischen Strukturen im HTML. Aber wo im HTML bspw. nur wenige Klassen stehen, muss im CSS mit unendlich langen Selektorketten auf Elemente zugegriffen werden, was die Menge an CSS erh&#246;ht, die Geschwindigkeit des Renderings aber herabsetzt. Nach einigen Jahren ist diese Situation immer schlimmer geworden. Sie ist dabei kaum noch &#252;berschaubar, weil man praktisch nur noch mit dem Firebug entscheiden kann, welche CSS-Regel auf ein Element greift. Und die schiere Menge an Code macht es nicht besser. Abhilfe schafft da oft, einfach mal eine Klasse ins HTML zu schreiben, die direkt angesteuert wird. Und die darf dann vielleicht auch mal &#8220;blue&#8221; heissen, naja, vielleicht besser &#8220;main-color&#8221;.</p>
<h2>CSS <em>Refactoring</em>?</h2>
<p>Will man sich aber, mindestens in Teilen nun aber von dieser Praxis abwenden, dann hat man jetzt den GAU, den man eigentlich vermeiden wollte: &#196;nderungen an der Codebasis <strong>und</strong> am CSS. Zumindest kann man das Nutzen, um die IE6-Unterst&#252;tzung endg&#252;ltig zu <em>droppen</em> und so das ganze CSS etwas zu modernisieren. So stehen nun vieler Orten viele &#196;nderungen in Sachen CSS an. Neues hinzuf&#252;gen, alte Z&#246;pfe abschneiden. Alte Projekte auf den aktuellen Stand heben.</p>
<p class="anmerkung updateblock" id="anmerkung1"><sup>[1]</sup> Noch ein Nebensatz zur Rolle von Javascript: dies wurde erstaunlicherweise viel zu oft genutzt, um die selbst gesetzten Grenzen bei HTML und CSS zu &#252;berwinden oder umgehen. H&#252;stel…</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2011/08/12/the-state-of-css/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Word-Wrap</title>
		<link>http://codecandies.de/2010/07/23/word-wrap/</link>
		<comments>http://codecandies.de/2010/07/23/word-wrap/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 12:35:40 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=3223</guid>
		<description><![CDATA[A CSS3 Property That Works in Every Browser. Muss man sich einfach mal merken.]]></description>
			<content:encoded><![CDATA[<p><q>A CSS3 Property That Works in Every Browser.</q> Muss man sich einfach mal merken.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/07/23/word-wrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallax Backgrounds</title>
		<link>http://codecandies.de/2010/02/25/parallax-backgrounds/</link>
		<comments>http://codecandies.de/2010/02/25/parallax-backgrounds/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 12:23:18 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2876</guid>
		<description><![CDATA[…a multi–layered javascript experiment.]]></description>
			<content:encoded><![CDATA[<p><q>…a multi–layered javascript experiment.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/02/25/parallax-backgrounds/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Starry Night: Incredible 3D Background Effect with Parallax</title>
		<link>http://codecandies.de/2010/02/25/starry-night-incredible-3d-background-effect-with-parallax/</link>
		<comments>http://codecandies.de/2010/02/25/starry-night-incredible-3d-background-effect-with-parallax/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 12:20:25 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2874</guid>
		<description><![CDATA[In honor of this amazing effect and it’s relevance to science, I created Starry Night. Starry night is a full-page…]]></description>
			<content:encoded><![CDATA[<p><q>In honor of this amazing effect and it’s relevance to science, I created Starry Night. Starry night is a full-page background effect with three layers. Distant stars will only move a little bit as you resize the browser window, while closer stars will move faster.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/02/25/starry-night-incredible-3d-background-effect-with-parallax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Specify a text colour for img elements</title>
		<link>http://codecandies.de/2010/02/11/specify-a-text-colour-for-img-elements/</link>
		<comments>http://codecandies.de/2010/02/11/specify-a-text-colour-for-img-elements/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 20:00:03 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2760</guid>
		<description><![CDATA[I think most people will agree that it is a good thing for web browsers to display the contents of…]]></description>
			<content:encoded><![CDATA[<p><q>I think most people will agree that it is a good thing for web browsers to display the contents of an image’s alt attribute when the image is missing or broken, or image rendering has been disabled. However, many web professionals forget to check what the alternative text will actually look like in those cases.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2010/02/11/specify-a-text-colour-for-img-elements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saying Goodbye to the overflow: hidden Clearing Hack</title>
		<link>http://codecandies.de/2009/12/11/saying-goodbye-to-the-overflow-hidden-clearing-hack/</link>
		<comments>http://codecandies.de/2009/12/11/saying-goodbye-to-the-overflow-hidden-clearing-hack/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 09:49:42 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2606</guid>
		<description><![CDATA[Andy Ford nutzt overflow:hidden (wie ich), selten auch die :after clearfix-Methode (wie ich!). Letztere scheint aber mit neuen CSS3-Errungeschaften wie…]]></description>
			<content:encoded><![CDATA[<p>Andy Ford nutzt <code>overflow:hidden</code> (wie ich), selten auch die <code>:after</code> clearfix-Methode (wie ich!). Letztere scheint aber mit neuen CSS3-Errungeschaften wie box-shadow besser zu funktionieren. Damn!</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/12/11/saying-goodbye-to-the-overflow-hidden-clearing-hack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla 3.6beta</title>
		<link>http://codecandies.de/2009/11/01/mozilla-3-6beta/</link>
		<comments>http://codecandies.de/2009/11/01/mozilla-3-6beta/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 09:54:31 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2406</guid>
		<description><![CDATA[<p>Die ersten Beta-Versionen des neuen Firefox stehen bereit und es zeigt sich: mit dem 3.7er Rekease wird Mozilla in Sachen CSS3 gewaltig auf seine Konkurrenten Safari und Chrome aufholen, teilweise geht Firefox sogar schon weiter. Damit r&#252;ckt CSS3 immer mehr in den Focus der Webentwicklung.</p>]]></description>
			<content:encoded><![CDATA[<p>Seit vorgestern gibt es die erste <a href="https://developer.mozilla.org/devnews/index.php/2009/10/30/firefox-3-6-beta-1-is-now-available-for-download/">Betaversion des Firefox 3.6 zum Download</a> und es gibt damit einige recht interessante Neuerungen im Bereich CSS.</p>
<p><span id="more-2406"></span></p>
<h3>-moz-background-size</h3>
<p>Da ist Mozilla ja etwas hinterher gewesen, denn die Gr&#246;&#223;e des Hintergrundbildes anzupassen gestatten <a href="http://www.css3.info/preview/background-size/">andere Browser schon l&#228;nger</a> (Opera ab 9.5, Safari3 und Konqueror). Dabei l&#228;sst sich das Hintergrundbild von der <code>-moz-background-origin</code> auf verschiedene Arten vergr&#246;&#223;ern und/oder verkleinern. Neben Angaben in L&#228;nge oder Prozent, sind auch Schl&#252;sselw&#246;rter wie <code>auto</code>, <code>contain</code> (so gro&#223; wie m&#246;glich, wenn das Bild kleiner als die Gr&#246;&#223;e des Container ist) und <code>cover</code> (so klein wie m&#246;glich, wenn das Bild gr&#246;&#223;er ist) erlaubt. Die letzten beiden Schl&#252;sselw&#246;rter sind bisher firefoxpropriet&#228;r.</p>
<h3>image-rendering</h3>
<p>Passend dazu wird die Eigenschaft <code>image-rendering</code> eingef&#252;hrt, eine Analogie zu Microsofts <code>-ms-interpolation-mode</code>. W&#228;hrend man bei M$ aber zwischen <code>bicubic</code> und <code>nearest-neighbour</code> w&#228;hlen kann, bietet Mozilla vier Werte an: <code>auto</code>, <code>optimizeQuality</code>, <code>optimizeSpeed</code> und <code>-moz-crisp-edges</code>. Wobei im Moment zumindest gilt: auto = optimizeQuality und optimizeSpeed = -moz-crisp-edges. Jedenfalls soll damit dem Browser eine Renderingmethode f&#252;r vergr&#246;&#223;erte oder verkleinerte Bilder an die Hand gegeben werden.</p>
<h3>-moz-linear/radial-gradient</h3>
<p>Ebenfalls neu und im Hintergrund t&#228;tig sind <code>-moz-linear-gradient</code> und <code>-moz-radial-gradient</code>. Firefox stellt damit die M&#246;glichkeit zur Verf&#252;gung, Farbverl&#228;ufe zu generieren, die sich in der Verlaufsrichtung genauso beeinflussen lassen, wie in den Verlaufsl&#228;nge. Au&#223;erdem k&#246;nnen beliebig viele Vias bzw <code>color-stop</code>s agebeben werden, d.h. man kann auch (wenn man das will) Regebogenverl&#228;ufe erzielen. Democode dazu:</p>
<pre><code>background: -moz-linear-gradient(left, right,
    from(red),
    color-stop(16%, orange),
    color-stop(32%, yellow),
    color-stop(48%, green),
    color-stop(64%, blue),
    color-stop(80%, indigo),
    to(violet));</code></pre>
<p>Neben den Farbschl&#252;sselw&#246;rtern funktionieren nat&#252;rlich auch Hexoces, <code>rgb()</code> und (Achtung!) auch <code>rgba()</code>, also auch Transparenzen.</p>
<p>Dieses Feature gibt es &#252;brigens auch schon bei anderen Browsern, n&#228;mlich seit IE 5.5 als <code>filter: progid:DXImageTransform.Microsoft.Gradient()</code> und auch in Safari 4, als <code>-webkit-gradient(linear,…)</code> (man ist sich mal wieder nicht &#252;ber die Syntax einig).</p>
<h3>Weitere Mediaqueries</h3>
<p>Bereits ab Version 3.5 unterst&#252;tzt Firefox die <a href="http://www.w3.org/TR/css3-mediaqueries/">CSS3 media queries</a>, womit man Stylesheets anhand bestimmter Eigenschaften des Mediums ausw&#228;hlen kann, auf dem eine Website angezeigt wird. Einige Ber&#252;hmtheit hat dieses Feature bereits durch das iPhone erlangt, denn mit <code>&lt;link media=&quot;only screen and (max-device-width: 480px)&quot; href=&quot;../iphone.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot;/&gt;</code> kann man eben ein Medium ansteuern, dessen maximale Darstellungsbreite 480px ist, also bspw. das iPhone. Solche queries kann man &#252;ber viele Eigenschaften machen, bspw. Farbtiefe, Seitenverh&#228;ltnis des Bildschirms, dessen H&#246;he und Breite, die H&#246;he und Breite des Viewports und einige mehr.</p>
<p>Firefox ab 3.6 kann noch ein paar mehr, mozilla spezifische Queries verstehen und auswerten. Damit lassen sich tats&#228;chlich sehr spezielle Dinge &#252;ber das genutzte Medium erfahren, zum Beispiel, ob die Website unter einem ungethemeten Windows angezeigt wird (<code>moz-windows-classic</code>) oder unter OS X mit „Graphite” Erscheinungsbild (<code>-moz-mac-graphite-theme</code>) oder eben – und das wirds m.M. nach interessant – ob ein Touchscreen vorliegt: <code>-moz-touch-enabled</code>. Mit letzterm k&#246;nnte man bspw. auch f&#252;r Touchscreens das normale CSS verwenden, aber Buttons einfach ein wenig vergr&#246;&#223;ert darstellen. Da ist noch einiges drin… zur Zeit aber nur propriet&#228;r f&#252;r Firefox.</p>
<h3>:indeterminate</h3>
<p>Ich geb hier mal zu, dass ich nicht wusste, dass man mit Javascript seit Firefox 3.2 eine Checkbox den Zustand „indeterminate” zuweisen kann <code>document.getElementById(”check1″).indeterminate = true;</code>, oder <a href="https://developer.mozilla.org/web-tech/2009/02/05/a-new-checkbox-type/">was es damit auf sich hat</a> (wenn man das Beispiel sieht, ist alles klar). Ab FF3.6 kann man diesen Zustand &#252;ber eine CSS-Pseudoklasse nutzen, also bspw. die Hintergrundfarbe des Checkbox &#228;ndern.</p>
<h3>WOFF</h3>
<p>Und <em>last but not least</em> unterst&#252;tzt Firefox 3.6 das Fontformat <a href="http://people.mozilla.com/~jkew/woff/woff-2009-09-16.html">WOFF</a> (Web Open Font Format). WOFF erkl&#228;rt sich so:</p>
<blockquote cite="https://developer.mozilla.org/en/CSS/@font-face"><p>WOFF (Web Open Font Format) is a new web font format developed by Mozilla in concert with Type Supply, LettError, and other organizations. It uses a compressed version of the same table-based sfnt structure used by TrueType, OpenType, and Open Font Format, but adds metadata and private-use data structures, including predefined fields allowing foundries and vendors to provide license information if desired.</p>
 <p class="citesource"><cite><a href="https://developer.mozilla.org/en/CSS/@font-face">developer.mozilla.org</a></cite></p></blockquote>
<p>Ich sag mal <a href="http://www.edenspiekermann.com/woff/">Erik Spiekermann bef&#252;rwortet das neue Format</a> und es sieht so aus, als das dies der Weg aus der Linzenzfalle beim einbetten von Schriften via <a href="http://codecandies.de/2009/06/30/embedden-sie-jetzt/"><code>@font-face</code></a> ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/11/01/mozilla-3-6beta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>@font-face considered harmful?</title>
		<link>http://codecandies.de/2009/10/14/font-face-considered-harmful/</link>
		<comments>http://codecandies.de/2009/10/14/font-face-considered-harmful/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 08:11:05 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2380</guid>
		<description><![CDATA[<p>Eingehende Tests der @font-face-Implementierung in diversen Browsern hat ergeben: wenn man nicht aufpasst, kann das Einbetten von Schriftarten zu einer echten Performancefalle werden. F&#252;r strakfrequentierte Webseiten derzeit noch keine Perspektive.</p>]]></description>
			<content:encoded><![CDATA[<p>Nachdem sich die Kunde von den <a href="http://codecandies.de/2009/06/30/embedden-sie-jetzt/">M&#246;glichkeiten des Fontembedding</a> nun reichlich verbreitet hat, tauchen leider die ersten Problme auf. <a href="http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/" title="@font-face and performance">Steve Sounders hat einige Quellen zu Problemen beim Fontembedding zusammengefasst und eigene Untersuchungen angestellt</a>, unbedingt lesen bitte, auch wenn ich hier kurz die unliebsamen Fakten zusammenfasse: im Bereich <em>high performance websites</em> muss man wohl von <code>@font-face</code> zun&#228;chst mal Abstand nehmen.</p>
<p>Nat&#252;rlich ist es mal wieder die Internet-Explorer-Familie, die extreme Perdormanceprobleme aufweisen, aber auch s&#228;mtliche andere Browser bekleckern sich im Umgang mit der noch recht jungen Technologie kaum mit Ruhm. <abbr title="FlashOfUnstyledText">FOUT</abbr> – <q>flash of unstyled text</q> ist dabei noch das kleinste Problem, wenn die Fontdateien nicht schnell genug vom Server geliefert werden. In IEs wirkt sich das noch schlimmer aus: bis zum Download des Fonts zeigt <em>Bill Gates Rache</em> <strong>gar nichts an</strong>. In anderen Browsern bleiebn nur die Textteile, die mit <code>@font-face</code> gerendert werden sollen unsichtbar, Firefox zeigt die Ausweichschrift(en) an.</p>
<p>Solchen (und den anderen im Text genannten) Performancefallen kann man nat&#252;rlich mit Caching, Zipping und &#228;hnlichzen Techniken begegnen. Ob man sich aber den Aufwand leisten will, bereits zum jetzigen Zeitpunkt, ich stelle das mal in Frage…</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/10/14/font-face-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulletproof @font-face</title>
		<link>http://codecandies.de/2009/09/15/bulletproof-font-face/</link>
		<comments>http://codecandies.de/2009/09/15/bulletproof-font-face/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 11:08:34 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2330</guid>
		<description><![CDATA[Paul Irish hat soeben die die totsichere Methode zur Einbindung externer Schriften gefunden. Kurz zusammengefasst: @font-face { font-family: 'Graublau Web';…]]></description>
			<content:encoded><![CDATA[<p>Paul Irish hat soeben die <a href="http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/">die totsichere Methode zur Einbindung externer Schriften</a> gefunden. Kurz zusammengefasst:</p>
<pre><code>@font-face {
  font-family: 'Graublau Web';
  src: url(GraublauWeb.eot);
  src: local('Graublau Web Regular'), local('Graublau Web'),
         url(GraublauWeb.otf) format('opentype');
}</code></pre>
<p>Puh. Ist das gek&#228;rt.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/09/15/bulletproof-font-face/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Super Awesome Buttons with CSS3 and RGBA</title>
		<link>http://codecandies.de/2009/08/05/super-awesome-buttons-with-css3-and-rgba/</link>
		<comments>http://codecandies.de/2009/08/05/super-awesome-buttons-with-css3-and-rgba/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 08:15:39 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2255</guid>
		<description><![CDATA[We&#8217;ve kicked the tires on [CSS3 and] we&#8217;ve cooked up an example with some super awesome, scalable buttons.]]></description>
			<content:encoded><![CDATA[<p><q>We&#8217;ve kicked the tires on [CSS3 and] we&#8217;ve cooked up an example with some super awesome, scalable buttons.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/08/05/super-awesome-buttons-with-css3-and-rgba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>@font-face Kits</title>
		<link>http://codecandies.de/2009/08/02/font-face-kits/</link>
		<comments>http://codecandies.de/2009/08/02/font-face-kits/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 07:53:13 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2247</guid>
		<description><![CDATA[Es gibt ja sicherlicher Trilliarden Anbieter von Fontdownloads, aber hier habe ich mal etwas interessantes entdeckt: FontSquirrel bietet sogenannte @font-face…]]></description>
			<content:encoded><![CDATA[<p>Es gibt ja sicherlicher Trilliarden Anbieter von Fontdownloads, aber hier habe ich mal etwas interessantes entdeckt: <a href="http://www.fontsquirrel.com/">FontSquirrel</a> bietet sogenannte <a href="http://www.fontsquirrel.com/fontface">@font-face Kits</a> an. Dort gibt&#8217;s dann alles was man braucht im Paket: den entsprechenden Font (meist Freeware) in TTF und EOT (fur IE), ein CSS mit Einbettungsregeln und Lizenzhinweisen und ein Lizenzfile. Au&#223;erdem kann man sich eine Rederingdemo des jeweiligen Fonts ansehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/08/02/font-face-kits/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Text Rotation with CSS</title>
		<link>http://codecandies.de/2009/07/28/text-rotation-with-css/</link>
		<comments>http://codecandies.de/2009/07/28/text-rotation-with-css/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 19:34:38 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2225</guid>
		<description><![CDATA[[M]any of the popular browsers of today support the ability to rotate HTML elements. Even better? We can make it…]]></description>
			<content:encoded><![CDATA[<p><q>[M]any of the popular browsers of today support the ability to rotate HTML elements. Even better? We can make it work in Internet Explorer (back to version 5.5 even).</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/07/28/text-rotation-with-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embedden Sie jetzt!</title>
		<link>http://codecandies.de/2009/06/30/embedden-sie-jetzt/</link>
		<comments>http://codecandies.de/2009/06/30/embedden-sie-jetzt/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 07:46:01 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2145</guid>
		<description><![CDATA[Mit @font-face lassen sich Schriften in Webseiten einbetten. Machen Sie das! Ok, es ist soweit, mit dem neuen Firefox 3.5…]]></description>
			<content:encoded><![CDATA[<div class="medium"><a class="thickbox" title="Embedded Font im Firefox 3.5rc3" href="http://codecandies.de/wp-content/uploads/2009/06/fontatfirefox.jpg"><img src="http://codecandies.de/wp-content/uploads/2009/06/fontatfirefox-340x123.jpg" alt="fontatfirefox" title="fontatfirefox" width="340" height="123" class="alignnone size-medium wp-image-2148" /></a>
<p>Mit <code>@font-face</code> lassen sich Schriften in Webseiten einbetten. Machen Sie das!</p>
</div>
<p>Ok, es ist soweit, mit dem neuen <a href="http://www.mozilla.com/en-US/firefox/all-rc.html">Firefox 3.5</a> (und Safari 4 und <a href="http://www.opera.com/browser/next/">Opera 10beta</a>), steht immer mehr Nutzern unserer Websites <em>Font<del>embedding</del><ins>downloading<sup><a href="#star1">1</a></sup></ins></em> zur Verf&#252;gung. Damit widerum steht der fl&#228;chendeckenden Umsetzung  typographisch ordentlich gestylter Websites nicht mehr viel im Weg, ausser nat&#252;rlich die IE-Familie, aber die ignorieren wir hier einfach einmal.<sup><a href="#star2">2</a></sup></p>
<p><span id="more-2145"></span></p>
<h4>Und so geht&#8217;s</h4>
<p>Das obige Beispiel nutzt das Embedding, der Code daf&#252;r sieht ungef&#228;hr so aus:</p>
<pre><code>@font-face {
    font-family: Kaffeesatz;
    font-weight: normal;
    src: url(fonts/YanoneKaffeesatz-Regular.otf) format('opentype');
}
h1 {
	font: normal 3em/120% Kaffeesatz, sans-serif;
	text-shadow: 1px 1px 1px #eee;
}</code></pre>
<p>Der genutzte Font ist die unter CC Lizenz stehende <a href="http://yanone.de/typedesign/kaffeesatz/">Kaffeesatz</a>. Der Code ist vielleicht nicht ganz selbst erkl&#228;rend: mit <code>@font-face</code> legen wir selbst eine Font fest, den Namen der <code>font-family</code> kann man dabei frei w&#228;hlen, ein dem Font nahe stehender Name empfiehlt sich nat&#252;rlich. Als <code>src</code> wird der Pfad zum <abbr title="Open Type Font">OTF</abbr>- oder <abbr title="TrueTypeFont">TTF</abbr>-File angegeben, danach noch das <code>format</code>. Fertig. Damit steht uns die <code>font-family</code> „Kaffeesatz” zur weiteren Nutzung zu Verf&#252;gung. Das <code>H1</code> macht auch gleich Gebrauch davon, noch ein wenig vers&#252;sst mit etwas CSS3-<code>text-shadow</code> (wenn wir auf den IE sch…sen, dann aber richtg).</p>
<h4>Mehr Gewicht, bitte</h4>
<p>Folgendes ist zu beachten: wir haben bis hier nur den Font f&#252;r die <code>font-weight</code> <em>normal</em> definiert. Wollen wir eine <em>bold</em>e Schrift, muss ein Font daf&#252;r <em>embedded</em> werden, und zwar bspw. so:</p>
<pre><code>@font-face {
    font-family: Kaffeesatz;
    font-weight: normal;
    src: url(fonts/YanoneKaffeesatz-Regular.otf) format('opentype');
}
@font-face {
    font-family: Kaffeesatz;
    font-weight: bold;
    src: url(fonts/YanoneKaffeesatz-Bold.otf) format('opentype');
}
h1 {
	font: normal 3em/120% Kaffeesatz,sans-serif;
	text-shadow: 1px 1px 1px #eee;
}
h2 {
    font: bold 2em/120% Kaffeesatz, sans-serif;
    text-transform: uppercase;
}</code></pre>
<p>In diesem Falle w&#252;rden die H2s bold gesetzt, da wir hierf&#252;r <em>YanoneKaffeesatz-Bold.otf</em> embedded haben. &#196;hnliches k&#246;nnen wir nun auch mit <code>font-style: italic</code> anstellen.</p>
<p>Nochmal zur&#252;ck zur Fettung: <del>Safari kann einige Fettungsstufen mehr anzeigen als Firefox</del>. Unterst&#252;tzt wird eine genauere Abstufung des Fettungsgrades, wenn man bspw. einen Font hat die Kaffeesatz. Das kann dann so aussehen:</p>
<pre><code>@font-face {
    font-family: Kaffeesatz;
    font-weight: 100;
    src: url(fonts/YanoneKaffeesatz-Thin.otf) format('opentype');
}
@font-face {
    font-family: Kaffeesatz;
    font-weight: 300;
    src: url(fonts/YanoneKaffeesatz-Light.otf) format('opentype');
}
@font-face {
    font-family: Kaffeesatz;
    font-weight: 400;
    src: url(fonts/YanoneKaffeesatz-Regular.otf) format('opentype');
}
@font-face {
    font-family: Kaffeesatz;
    font-weight: 700;
    src: url(fonts/YanoneKaffeesatz-Bold.otf) format('opentype');
}</code></pre>
<p>Das geht sicherlich auch mit <em>keywords</em> wie „light” oder „bolder” etc.</p>
<div class="medium"><a class="thickbox" href="http://codecandies.de/wp-content/uploads/2009/06/schriftenvergleich.gif"><img src="http://codecandies.de/wp-content/uploads/2009/06/schriftenvergleich-340x215.gif" alt="schriftenvergleich" title="schriftenvergleich" width="340" height="215" class="alignnone size-medium wp-image-2155" /></a>
<p>Das Fontrendering unterscheidet sich mitunter, links Firefox, rechts Safari 4 (Mac).</p></div>
<h4>Fonts von der Platte zuerst</h4>
<p>Was ja auch angehen kann, ist dass man eher einen Font nutzen m&#246;chte, der sowieso schon lokal vorhanden ist und nur wenn dieser nicht vorhanden ist, will man einen Download anbieten. Geht auch, wie man bei <a href="http://hacks.mozilla.org/2009/06/beautiful-fonts-with-font-face/">John Dagget</a> nachlesen kann, mit der Eigenschaft „local”:</p>
<pre><code>@font-face {
  font-family: NeueHelvetica;
  src: local("Helvetica Neue"),
       local("HelveticaNeue"),
       url(fonts/MgOpenModernaRegular.ttf);
}</code></pre>
<p>Hier sind zwei <code>local</code> angegeben, &#252;ber diese Liste wird iteriert, genauso wie in der normalem <code>font-family</code> Zuweisung, wo die Schriften durch Kommata getrennt werden (das diese Zusammenstellung von Namen nicht immer ganz einfach ist, <a href="http://www.qxm.de/webdesign/20080317-155549/helvetica-neue-light-in-firefox-3">lesen wir bei Herrn Preidel</a>).</p>
<h4>Und nun?</h4>
<p>Nat&#252;rlich sollte man nur Schriften nehmen, die man auch f&#252;rs embedding benutzen darf, sonst gibt&#8217;s schnell Lizenz&#228;rger. <a href="http://opentype.info/blog/2008/08/05/10-great-free-fonts-for-font-face-embedding/">Hier gibt&#8217;s ein paar freie Schriften</a>, die das ausdr&#252;cklich zulassen. Ach ja und zum guten Schluss, sollte man <code>font-size-adjust</code> <a title="Peter Kr&#246;ner: Sch&#246;nes neues CSS: font-size-adjust" href="http://www.peterkroener.de/schoenes-neues-css-font-size-adjust/">auf keinen Fall vergssen</a>.</p>
<h4>Updates</h4>
<p id="star1"><sup>1)</sup> Von „Embedding“ zu sprechen ist eigentlich nicht richtig, weil der Font tats&#228;chlich auf den Rechner des Nutzers heruntergeladen wird. Das schl&#228;gst sich nat&#252;rlich auch in der Gr&#246;&#223;e der Website nieder und ist auch f&#252;r die Lizenzfrage nicht unerheblich.</p>
<p id="star2"><sup>2)</sup> Na gut, ich hab noch einen Link <a href="http://codecandies.de/2008/11/05/font-face-in-ie-making-web-fonts-work/">aus meinen Bookmarks geangelt</a>, der mehr in Sachen IE verr&#228;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/06/30/embedden-sie-jetzt/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Umfrage</title>
		<link>http://codecandies.de/2009/06/26/umfrage/</link>
		<comments>http://codecandies.de/2009/06/26/umfrage/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 14:53:14 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2123</guid>
		<description><![CDATA[CSS-Hacks vs. Conditional Comments. Derzeit liegen die CC vorn.]]></description>
			<content:encoded><![CDATA[<p><q>CSS-Hacks vs. Conditional Comments.</q> Derzeit liegen die CC vorn.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/06/26/umfrage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 great free fonts for @font-face embedding</title>
		<link>http://codecandies.de/2009/05/20/10-great-free-fonts-for-font-face-embedding/</link>
		<comments>http://codecandies.de/2009/05/20/10-great-free-fonts-for-font-face-embedding/#comments</comments>
		<pubDate>Wed, 20 May 2009 09:41:29 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[typographie]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2059</guid>
		<description><![CDATA[Safari and Internet Explorer already support it. Firefox and Opera will get it soon: Downloadable webfonts. Here is a collection…]]></description>
			<content:encoded><![CDATA[<p><q>Safari and Internet Explorer already support it. Firefox and Opera will get it soon: Downloadable webfonts. Here is a collection of 10 great headline fonts you can embed in you website free of charge …</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/05/20/10-great-free-fonts-for-font-face-embedding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Line wrapping text in legend elements</title>
		<link>http://codecandies.de/2009/05/19/line-wrapping-text-in-legend-elements/</link>
		<comments>http://codecandies.de/2009/05/19/line-wrapping-text-in-legend-elements/#comments</comments>
		<pubDate>Tue, 19 May 2009 07:58:29 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2051</guid>
		<description><![CDATA[Roger Johansson: In some cases you should Use the fieldset and legend elements to group HTML form controls. One problem…]]></description>
			<content:encoded><![CDATA[<p><cite>Roger Johansson</cite>: <q>In some cases you should Use the fieldset and legend elements to group HTML form controls. One problem that may lead to though is when the legend text is too long to fit the width of its containing fieldset element.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/05/19/line-wrapping-text-in-legend-elements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rezepte gegen die DIVterie</title>
		<link>http://codecandies.de/2009/05/08/rezepte-gegen-die-divterie/</link>
		<comments>http://codecandies.de/2009/05/08/rezepte-gegen-die-divterie/#comments</comments>
		<pubDate>Fri, 08 May 2009 10:35:50 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Postings]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2027</guid>
		<description><![CDATA[Corynnbacterium Diphtheria (Foto: CDC). Wir wissen ja schon lange, dass valides HTML noch kein gutes HTML ist. Kalter Kaffee. Sehen…]]></description>
			<content:encoded><![CDATA[<div class="medium"><a class="thickbox" href="http://codecandies.de/wp-content/uploads/2009/05/2653983350_a8762e7391_o.jpg"><img src="http://codecandies.de/wp-content/uploads/2009/05/2653983350_a8762e7391_o-340x225.jpg" alt="Diphterie" title="Diphterie" width="340" height="225" class="alignnone size-medium wp-image-2033" /></a>
<p>Corynnbacterium Diphtheria (Foto: CDC).</p>
</div>
<p>Wir wissen ja schon lange, dass <em>valides</em> HTML noch kein <em>gutes</em> HTML ist. <a href="http://webstandard.kulando.de/post/2009/05/05/valider-code-ist-nicht-gleich-guter-code">Kalter Kaffee</a>. Sehen wir dabei einmal vom durchaus validem Tabellenlayout ab, sind die <em>gr&#246;&#223;ten Feinde</em> mangelnde semantische Auszeichnung und in deren Schlepptau immer wieder <em><code>DIV</code>terie</em>, soll heissen: &#252;berm&#228;&#223;ige Benutzung von <code>DIV</code>-Containern, wo andere Elemente angebrachter w&#228;ren. Bekannte Nebenwirkung dieser Krankheit sind &#252;brigens <em>Klassizismus</em>, <em><code>ID</code>ologie</em> und nat&#252;rlich <em>Ver<code>SPAN</code>nung</em>.</p>
<p><span id="more-2027"></span></p>
<p>Zugegeben: <em><code>DIV</code>terie</em> ist durchaus verbreitet (ich selbst zeichne f&#252;r eine Seite verantwortlich, die deutlich darunter leidet) und auch irgendwie ansteckend. Infiziert von einem CSS-Framework kann man sich schon mal anstecken. Dem begegnet HTML5 &#252;brigens (demn&#228;chst), in dem ein ganzes Rudel semantisch bedeutungsvoller Block-Level-Elemente <a href="http://codecandies.de/2009/01/14/neue-html5-elemente/" title="Archiv: Neue HTML5-Elemente">eingef&#252;hrt werden</a>, die demn&#228;chst so manches <code>DIV</code> ersetzen k&#246;nnten. Das w&#252;rde auch ein wenig gegen die Nebenwirkungen helfen, aber soweit sind wir wohl noch nicht.</p>
<h3>Wo ist eigentlich das Problem</h3>
<p><em><code>DIV</code>terie</em> kann man von zwei Seiten betrachten: zun&#228;chst einmal ist ein <code>DIV</code> im Zusammenhang ziemlich bedeutungslos, ein Container, in den man Sachen packt, von denen dann niemand weiss, zu was sie geh&#246;ren und warum sie dort herumlungern. Das kann man manchmal sogar brauchen, meist w&#228;re es aber sinnvoll, wenn man ein Element einsetzt, ihm auch eine Bedeutung zu verleihen. Ja, <strong>wenn man ein Element einsetzt.</strong> Denn man kann und muss <em><code>DIV</code>terie</em> nat&#252;rlich auch noch von einer anderen Warte aus beleuchten: zuviele <code>DIV</code>s, Klassen, IDs machen den Code fett, das HTML w&#228;chst krankhaft an, das zugeh&#246;rige CSS gleich mit. <strong>Schwerer Code ist langsamer Code.</strong> Man mag das in Zeiten von Highspeed-DSL-Anschl&#252;ssen vernachl&#228;ssigen wollen, aber im professionellen Umfeld kann man das nicht: die Menge an Code ist letztendlich so hoch, dass es auf jedes gesparte Zeichen ankommt.</p>
<h3>Was tun?</h3>
<p>Beiden Betrachtungsweisen begegnen wir mit einer einfachen Regel:</p>
<blockquote><p>Pr&#252;fe zun&#228;chst, <strong>ob</strong> Du wirklich ein Element brauchst. Wenn Du Dir sicher bist, dass Du eines brauchst, pr&#252;fe alle M&#246;glichkeiten kein <code>DIV</code> zu verwenden. Wenn all das nichts geholfen hat…</p>
</blockquote>
<p>Das ist jetzt schwieriger, als es klingt. Hilfreich ist es &#252;brigens, wenn man ein Bild von der Seite oder besser noch <em>den Seiten</em>, die man bauen will, hat. Nein, keinen Photoshop-Ausdruck, sondern eine Skizze, auf der man die ben&#246;tigten Elemente (bspw. als K&#228;sten) anordnet. Schon in dieser Phase lassen sich <code>DIV</code>s vermeiden. Wenn man einfach drauf loscodet ist man immer in Gefahr noch hier und da schnell noch einen Container drum zu ziehen, eine Klassen oder gar ID dranzuschreiben.</p>
<h3>Ein Beispiel</h3>
<p>Hier mal ein Codeschnipsel als <strong>schlechtes Beispiel</strong>, bitte nicht nachmachen:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;div class=&quot;container clearfix&quot;&gt;
    &lt;div class=&quot;teaser&quot;&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; class=&quot;img_left&quot; /&gt;
        &lt;h3 class=&quot;text&quot;&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;span class=&quot;bold&quot;&gt;Lorem ipsum:&lt;/span&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;div class=&quot;teasertext&quot;&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;teaser&quot;&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; class=&quot;img_left&quot; /&gt;
        &lt;h3 class=&quot;text&quot;&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;span class=&quot;bold&quot;&gt;Lorem ipsum:&lt;/span&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;div class=&quot;teasertext&quot;&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Dazu w&#252;rde folgendes CSS passen (es passt auch in der Fehlerhaftigkeit, also bitte nicht als Vorlage verwenden):</p>
<pre class="brush: css; light: true; title: ; notranslate">
div.container {
    border: 1px solid #000;
    color: #000;
    font-size: 12px;
    margin: 0;
    padding: 0;
}

.container .teaser {
    margin: 10px;
}

img.img_left {
    float: left;
    margin: 0 10px 7px 0;
}

h3.text {
    font-size: 14px;
    font-weight: 400;
}

span.bold {
    font-weight: 700 !important;
}

.container .teaser .teasertext {
    font-size: 10px;
    line-height: 14px;
}
</pre>
<p>Geht so gar nicht! Geradezu klassisch &#252;brigens, die Klasse &#8220;container&#8221;. Aber mal im Ernst: hier haben wir einen Container, der mehrere Text-Bild-Bl&#246;cke enth&#228;lt, die den gleichen Aufbau haben. Und einen typischen Fall von <em><code>DIV</code>terie</em>. Zun&#228;chst w&#228;re zu &#252;berlegen, ob man nicht ein paar <code>DIV</code>s und ein paar Klassen loswerden kann. M&#246;glicherweise so:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;div class=&quot;container clearfix&quot;&gt;
    &lt;div&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; /&gt;
        &lt;h3&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;strong&gt;Lorem ipsum:&lt;/strong&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/p&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; /&gt;
        &lt;h3&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;strong&gt;Lorem ipsum:&lt;/strong&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Von oben nach unten: wenn wir davon ausgehen, dass der &#8220;Container&#8221; gebraucht wird, bspw. weil die Teaser eine inhaltliche Einheit dartellen und ggf. mit einer <code>border</code> umschlossen werden sollen, dann f&#228;llt zun&#228;chst das <code>&lt;div class=&quot;teaser&quot;&gt;</code> auf. G&#228;be es keine anderen <code>DIV</code>s in dem Block, w&#228;re die Klasse &#252;berfl&#252;ssig. Ebenso scheinen alle Bilder die gleiche Klasse zu haben. Dann weg damit. Das <code>&lt;h3 class=&quot;text&quot;&gt;</code> war ja schon ein netter Versuch, die Klasse allerdings ist &#252;berfl&#252;ssig und ausserdem ist &#8220;text&#8221; ein denkbar schlechter Klassenname. Weg bitte auch mit dem (zugegeben etwas konstruierten) <code>&lt;span class=&quot;bold&quot;&gt;</code>, daf&#252;r bitte <code>&lt;strong&gt;</code> verwenden. Ebenso <em>falsch</em> ist <code>&lt;div class=&quot;teasertext&quot;&gt;</code>, denn dort passt viel besser ein <code>&lt;p&gt;</code>. Das ist ja nun schon ein wenig kompakter, aber auch sinniger, wie ich finden muss. Alle Elemente sind immer noch voll per CSS ansprechbar und k&#246;nnen genauso gestyled werden wie oben.</p>
<p>Passendes CSS s&#228;he dann so aus:</p>
<pre class="brush: css; light: true; title: ; notranslate">
.container {
    border: 1px solid #000;
    color: #000;
    font-size: 10px;
    line-height: 14px;
}

.container div {
    margin: 10px;
}

.container img {
    float: left;
    margin: 0 10px 7px 0;
}

.container h3 {
    font-size: 14px;
    font-weight: 400;
}
</pre>
<p>Zur Erl&#228;uterung: Durch die bessere semantische Auszeichnung haben wir auch im CSS schon viel gewonnen. Ich m&#252;he mich immer redlich eine Balance zwischen generellem und spezialisierten CSS-Anweisungen zu finden, es stellen sich also h&#228;ufig Fragen wie: »sind vielleicht alle H3 auf der Seite gleich, oder nur das in dem Container?«. Das ist im zweiten CSS-Schnipsel besser umgesetzt. Eine Formatierung des <code>&lt;p&gt;</code> ist z.B. – vorrausgesetzt es wird an anderer Stelle nicht umformatiert – gar nicht n&#246;tig, da es schon die <em>geschickt</em> gew&#228;hlten Eigenschaften des Containers erbt (zugegeben: man m&#252;sste sich ggf. noch um <code>margin</code> und <code>padding</code> k&#252;mmern). Ebenso sind die &#252;bertriebenen Klassenverkettungen (wie <code>.container .teaser .teasertext</code>) entfernt.</p>
<p>Das ist nun schon ganz guter Code, geht aber vielleicht auch noch besser. Eben schrieb ich, wir h&#228;tten es mit <q>Container, der mehrere Text-Bild-Bl&#246;cke enth&#228;lt, die den gleichen Aufbau haben</q> zu tun. Klingt fast nach einer Liste von Text-Bild-Bl&#246;cken. Wenn man will, kann man sich also komplett aller <code>DIV</code>s entledigen:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;ul class=&quot;teaserlist&quot;&gt;
    &lt;li&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; /&gt;
        &lt;h3&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;strong&gt;Lorem ipsum:&lt;/strong&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;img alt=&quot;Lorem ipsum dolor sit amet&quot; title=&quot;Lorem ipsum dolor sit amet: velit esse cillum dolore&quot; src=&quot;loremipsum.jpg&quot; /&gt;
        &lt;h3&gt;&lt;a href=&quot;loremipsum.html&quot; title=&quot;Lorem ipsum dolor sit amet&quot;&gt;&lt;strong&gt;Lorem ipsum:&lt;/strong&gt; Dolor sit amet&lt;/a&gt;&lt;/h3&gt;
        &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Das CSS dazu:</p>
<pre class="brush: css; light: true; title: ; notranslate">
.teaserlist {
    border: 1px solid #000;
    color: #000;
    font-size: 10px;
    line-height: 14px;
    list-style: none;
    margin: 0;
    padding: 0;
}

.teaserlist li {
    margin: 10px;
}

.teaserlist img {
    float: left;
    margin: 0 10px 7px 0;
}

.teaserlist h3 {
    font-size: 14px;
    font-weight: 400;
}
</pre>
<p>Beim CSS ist der Gewinn nicht mehr so gro&#223;, aber daf&#252;r ist der HTML-Code semantisch ausgezeichnet <strong>und</strong> schlanker als der Ausgangscode. In meinen Augen <em>besserer</em> Code.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/05/08/rezepte-gegen-die-divterie/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Jonathan Snook is shifting his opinion…</title>
		<link>http://codecandies.de/2009/05/06/jonathan-snook-is-shifting-his-opinion/</link>
		<comments>http://codecandies.de/2009/05/06/jonathan-snook-is-shifting-his-opinion/#comments</comments>
		<pubDate>Wed, 06 May 2009 07:28:44 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=2023</guid>
		<description><![CDATA[…on CSS Animations. Having actually taken some time to implement CSS animations in an example, a light bulb clicked. The…]]></description>
			<content:encoded><![CDATA[<p>…on CSS Animations. <q>Having actually taken some time to implement CSS animations in an example, a light bulb clicked. The way I looked at how animations were declared and in what situations you would declare them suddenly changed. I believe I have done a 180 on this.</q></p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/05/06/jonathan-snook-is-shifting-his-opinion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vertical centering with css</title>
		<link>http://codecandies.de/2009/03/03/vertical-centering-with-css/</link>
		<comments>http://codecandies.de/2009/03/03/vertical-centering-with-css/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 18:32:05 +0000</pubDate>
		<dc:creator>Nico Brünjes</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://codecandies.de/?p=1929</guid>
		<description><![CDATA[Sch&#246;n Sammlung der bekannten Methoden Elemente vertikal mit CSS zu zentrieren.]]></description>
			<content:encoded><![CDATA[<p>Sch&#246;n Sammlung der bekannten Methoden Elemente vertikal mit CSS zu zentrieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://codecandies.de/2009/03/03/vertical-centering-with-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

