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

<channel>
	<title>Webkrauts &#187; Adventskalender 2005</title>
	<atom:link href="http://www.webkrauts.de/category/adventskalender/adventskalender-2005-adventskalender/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webkrauts.de</link>
	<description>Für mehr Qualität im Web</description>
	<lastBuildDate>Wed, 18 Jan 2012 19:04:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>CSS der Zukunft</title>
		<link>http://www.webkrauts.de/2005/12/24/css-der-zukunft/</link>
		<comments>http://www.webkrauts.de/2005/12/24/css-der-zukunft/#comments</comments>
		<pubDate>Sat, 24 Dec 2005 20:00:00 +0000</pubDate>
		<dc:creator>Jens Meiert</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/24/</guid>
		<description><![CDATA[<abbr>CSS</abbr> 3 nimmt immer mehr Konturen an. Und auch wenn <abbr>CSS</abbr> 3, das im Gegensatz zu <abbr>CSS</abbr> 1 und 2 aus einzelnen "Modulen" besteht, in seiner Gesamtheit auch 2008 noch keine offizielle <abbr title="World Wide Web Consortium" lang="en" xml:lang="en">W3C</abbr>-Spezifikation sein wird, sind einige Module wie das Syntax- oder Farben-Modul relativ weit fortgeschritten. Dieser Artikel beschreibt ein paar Neuerungen, die mit unterschiedlicher Wahrscheinlichkeit mit <abbr>CSS 3</abbr> kommen werden.]]></description>
			<content:encoded><![CDATA[<p>Eine Anmerkung vorab: Da&szlig; manches aus <abbr>CSS</abbr> 3 auch bereits implementiert wurde, darf nicht dar&uuml;ber hinwegt&auml;uschen, da&szlig; bisher noch kein einziges <abbr>CSS</abbr>-3-Modul Empfehlungsstatus erreicht hat, also einer Spezifikation entspricht.</p>
<h4>Mehr Freiheit durch mehr Selektoren</h4>
<p>Dies steht fest: <abbr>CSS</abbr> 3 wird einige <a href="http://www.w3.org/TR/css3-selectors/#selectors">neue Selektoren</a> mitbringen. Derzeit sieht der Entwurf vor, drei neue Attributsselektoren (<code>E[foo^='bar']</code>, <code>E[foo$='bar']</code> und <code>E[foo*='bar']</code>), eine Reihe neuer Pseudoklassen (wie <code>E:root</code> und <code>E:not(s)</code>) sowie einen neuen Geschwisterkombinierer <code>~</code> (<code>E ~ F</code>) einzuf&uuml;hren. Zudem wird syntaktisch zwischen Pseudoelementen und -klassen unterschieden werden, indem Pseudoelemente (wie <code>::first-line</code>) mit zwei Doppelpunkten, Pseudoklassen (wie <code>:last-child</code>) aber nur mit einem Doppelpunkt beginnen.</p>
<p>Die neuen Selektoren werden es erm&ouml;glichen, wesentlich einfacheren <abbr title="Hypertext Markup Language" lang="en" xml:lang="en">HTML</abbr>-Code zu schreiben, da in sehr vielen F&auml;llen auf Klassen und <code>ID</code>s verzichtet werden kann &#8211; dies ist derzeit in der Praxis schwer zu realisieren beziehungsweise basiert mehr auf <a href="http://meiert.com/de/publications/articles/20050107/">kontextuellen Selektoren</a>. Einige Beispiele:</p>
<ul>
<li><code>h1 ~ div</code> trifft auf alle <code>div</code>-Elemente zu, denen ein <code>h1</code>-Element vorangeht;</li>
<li><code>a[href^='http://']</code> trifft auf alle <code>a</code>-Elemente zu, deren <code>href</code>-Attribut mit der Zeichenkette &#034;http://&#034; beginnt;</li>
<li><code>img[src$='.gif']</code> trifft auf alle <code>img</code>-Elemente zu, deren <code>src</code>-Attribut mit der Zeichenkette &#034;.gif&#034; endet;</li>
<li><code>div[title*='belanglos']</code> trifft auf alle <code>div</code>-Elemente zu, deren <code>title</code>-Attribut die Zeichenkette &#034;belanglos&#034; beinhaltet;</li>
<li><code>:root</code> trifft auf das Hauptelement des Dokuments zu (in <abbr>HTML</abbr> w&uuml;rde der Selektor <code>body:root</code> nicht zutreffen);</li>
<li><code>tr:nth-child(2n)</code> (dasselbe wie <code>tr:nth-child(even)</code>) trifft auf alle <code>tr</code>-Elemente zu, die das zweite Kind ihres Elternelements sind, in diesem Fall also jede gerade Tabellenzeile (f&uuml;r jede ungerade Zeile gilt <code>tr:nth-child(2n+1)</code> beziehungsweise <code>tr:nth-child(odd)</code>);</li>
<li><code>img:nth-of-type(2n)</code> trifft auf jedes zweite <code>img</code>-Element zu (man beachte den Unterschied zur Pseudoklasse <code>:nth-child(n)</code>!);</li>
<li><code>li:last-child</code> trifft auf das letzte <code>li</code>-Element einer Liste zu;</li>
<li><code>address:only-child</code> trifft auf alle <code>address</code>-Elemente zu, die einziges Kind ihres Elternelements sind;</li>
<li><code>h2:target</code> trifft auf alle <code>h2</code>-Elemente zu, deren <code>id</code>-Attributswerte dem Fragmentidentifikator des Dokumentaufrufs entsprechen (beim Aufruf der <abbr title="Uniform Resource Locator" xml:lang="en">URL</abbr> <code>http://www.example.org/#einleitung</code> trifft <code>h2:target</code> auf das Element <code>&lt;h2 id="einleitung" /&gt;</code> zu);</li>
<li><code>input:disabled</code> trifft auf alle <code>input</code>-Elemente zu, die &#034;deaktiviert&#034; sind;</li>
<li><code>div:not(.error)</code> trifft auf alle <code>div</code>-Elemente zu, deren Klasse nicht <code>error</code> lautet;</li>
<li><code>p::selection</code> trifft auf jede vom Benutzer vorgenommene Auswahl oder Hervorhebung eines <code>p</code>-Elements zu.</li>
</ul>
<p>In der Schwebe sind zudem Vorschl&auml;ge wie die <a href="http://lists.w3.org/Archives/Public/www-style/1999Nov/0241.html"><code>:matches</code>- beziehungsweise <code>:has</code>-Pseudoklasse</a>, die es erm&ouml;glichen w&uuml;rde, Elemente zu formatieren, die bestimmte Kinder haben: <code>p:has(span)</code> trifft auf alle Abs&auml;tze zu, die ein <code>span</code>-Element beinhalten.</p>
<h4>Nicht mehr ein, sondern zwei Boxmodelle mit <code>box-sizing</code></h4>
<p>Mit der <a href="http://www.w3.org/TR/css3-ui/#box-sizing"><code>box-sizing</code>-Eigenschaft</a> wird <abbr>CSS</abbr> 3 eine alternative Form des <a href="http://webkrauts.de/adventskalender/14/"><abbr>CSS</abbr>-Boxmodells</a> bieten. Nach <abbr>CSS</abbr> 1 und 2 definieren die Werte der <code>width</code>- und <code>height</code>-Eigenschaften die Breite und H&ouml;he des Inhalts eines Elements, nicht seiner gesamten Box (mitsamt Inhalt, Innenabstand, Rahmen und Au&szlig;enabstand). Der Standardwert von <code>box-sizing</code>, <code>content-box</code>, entspricht diesem Modell. Der alternative Wert, <code>border-box</code>, bezieht in die Breite und H&ouml;he neben dem Elementinhalt auch Innenabstand und Rahmen ein.</p>
<p>W&auml;hrend der Code</p>
<p class="bsp">
			<code>div#beispiel {</code><br />
			<code>padding: 50px;</code><br />
			<code>width: 300px;</code><br />
			<code>}</code>
		</p>
<p>gem&auml;&szlig; <abbr>CSS</abbr> 1 und 2 eine Gesamtbreite von 400 Pixel ergibt, wird dieselbe Regel mit der Deklaration <code>box-sizing: border-box;</code> in einer Breite von 300 Pixel resultieren, wobei dem Elementinhalt aufgrund des horizontalen Gesamtinnenabstands von 100 Pixel nur noch 200 Pixel zustehen w&uuml;rden.</p>
<h4>Assistive Technologien und der <code>reader</code>-Medientyp</h4>
<p>Sp&auml;testens mit <a href="http://lists.w3.org/Archives/Public/www-style/2003Oct/0328.html">Daf&uuml;rhalten des Barrierefreiheitsexperten Joe Clark</a> wurde der <a href="http://www.w3.org/TR/css3-reader/">Medientyp <code>reader</code></a> in den Entwurf zu <abbr>CSS 3</abbr> aufgenommen. Die bisherigen <abbr>CSS</abbr>-Spezifikationen sehen es vor, da&szlig; ein User-Agent zu einer bestimmten Zeit immer nur einen Medientyp beziehungsweise eine Ausgabeart verwendet, auch wenn er mehrere unterst&uuml;tzen und zwischen diesen wechseln darf. Der <code>reader</code>-Medientyp w&uuml;rde einige dieser Ausgabearten (wie <code>screen</code> und <code>speech</code>) gewisserma&szlig;en vereinen.</p>
<p>Prinzipiell k&ouml;nnte dieser Medientyp angewendet werden, um die bekannten Probleme zum Beispiel mit dem &#034;<a href="http://meiert.com/de/publications/articles/20040415/" lang="en" xml:lang="en">Fahrner Image Replacement</a>&#034; zu umschiffen:</p>
<p class="bsp">
			<code>@media reader {</code><br />
			<code>&nbsp; h1 span {</code><br />
			<code>&nbsp; visibility: visible;</code><br />
			<code>&nbsp; }</code><br />
			<code>}</code>
		</p>
<h4>Werte berechnen mit <code>calc</code></h4>
<p>Eine der ersehntesten Neuerungen in <abbr>CSS</abbr> 3 k&ouml;nnte die <a href="http://www.w3.org/TR/css3-values/#calc"><code>calc</code>-Funktion</a> werden &#8211; leider ist sie bislang noch fast gar nicht spezifiziert. Wenn sie es in angedachter Form in die Spezifikation schafft, wird sie es erm&ouml;glichen, Werte einer Eigenschaft wie folgt zu berechnen (hier bei drei angenommenen <code>spalte</code>-Containern):</p>
<p class="bsp">
			<code>div.spalte {</code><br />
			<code>float: left;</code><br />
			<code>margin: 1em;</code><br />
			<code>width: calc(100%/3 - 2*1em);</code><br />
			<code>}</code>
		</p>
<h4>Mehrere Hintergrundbilder mit <code>background-image</code></h4>
<p>Eine n&uuml;tzliche Ver&auml;nderung erf&auml;hrt wahrscheinlich die bereits bekannte <a href="http://www.w3.org/TR/css3-background/#the-background-image"><code>background-image</code>-Eigenschaft</a>, die mit der neuen Spezifikation mehrere Hintergrundbilder zul&auml;sst. In der einfachsten Form sieht diese vor, da&szlig; bei Angabe von zwei Hintergrundbildern (in kommaseparierter Form) das erste &uuml;ber dem zweiten angezeigt wird:</p>
<p class="bsp">
			<code>html {</code><br />
			<code>background-image: url(bild-1.gif), url(bild-2.gif);</code><br />
			<code>}</code>
		</p>
<p>In Kombination mit anderen <code>background</code>-Eigenschaften (wie <code>background-position</code>, <code>background-repeat</code>, aber auch dem neuen <code>background-size</code>) ergeben sich hieraus einige neue M&ouml;glichkeiten f&uuml;r Designer und Entwickler. Da dieser Artikel nur kurz auf zu erwartenden <abbr>CSS</abbr>-3-Zauber eingeht, wird Interessierten ein Blick in das <a href="http://www.w3.org/TR/css3-background/"><abbr>CSS</abbr>-3-Hintergrund- und Rahmen-Modul</a> nahegelegt.</p>
<h4>&#034;Transparenter&#034; mit <code>opacity</code></h4>
<p>Die <a href="http://www.w3.org/TR/css3-color/#transparency"><code>opacity</code>-Eigenschaft</a> macht offiziell, was abseits der Spezifikation bereits in propriet&auml;rer Form vom Internet Explorer (via <code>filter</code>) und Gecko-User-Agents (via <code>-moz-opacity</code>) angeboten wird: Die &Auml;nderung der Deckkraft eines Elements. Bilder, die nur mit halber Deckkraft dargestellt werden sollen, w&uuml;rden mit der neuen Eigenschaft wie folgt bedacht werden:</p>
<p class="bsp">
			<code>img {</code><br />
			<code>opacity: .5;</code><br />
			<code>}</code>
		</p>
<h4>Abgerundete Ecken mit <code>border-radius</code></h4>
<p>Eine weitere oft gew&uuml;nschte Formatierungsm&ouml;glichkeit stellen abgerundete Ecken dar, was in <abbr>CSS</abbr> 3 mit der <a href="http://www.w3.org/TR/css3-background/#the-border-radius"><code>border-radius</code>-Eigenschaft</a> adressiert werden soll. Ein ein Pixel breiter gepunkteter schwarzer Rahmen, der in allen Ecken mit f&uuml;nf Pixel Radius abgerundet wird, k&ouml;nnte dann einfach erzielt werden:</p>
<p class="bsp">
			<code>div {</code><br />
			<code>border: 1px dotted black;</code><br />
			<code>border-radius: 5px;</code><br />
			<code>}</code>
		</p>
<p>Anmerkung: Die Spezifikation beschreibt bisher noch nicht, wie die <code>border</code>-Kurzschreibweise <code>border-radius</code> integriert, aus diesem Grund wurde <code>border-radius</code> im Beispiel separat gekennzeichnet. Mit der neuen Eigenschaft k&ouml;nnen &uuml;brigens auch Ellipsen beschrieben werden: <code>border-radius</code> akzeptiert zwei L&auml;ngenangaben, wobei deren erste den horizontalen, die zweite den vertikalen Radius definiert (Ausnahmen davon sind noch nicht hinreichend spezifiziert).</p>
<h4>Neue Fenster und Tabs mit <code>target</code></h4>
<p>Die <a href="http://www.w3.org/TR/css3-hyperlinks/#the-target"><code>target</code>-Eigenschaft</a> ist eine neue Eigenschaft, die aller Voraussicht nach als Kurzschreibweise f&uuml;r die Eigenschaften <code>target-name</code>, <code>target-new</code> und <code>target-position</code> dienen wird. An dieser Stelle soll nur der Einsatz der <code>target-new</code>-Eigenschaft beschrieben werden, die mit den drei erlaubten Werten <code>window</code>, <code>tab</code> und <code>none</code> auch sehr einfach gestrickt ist:</p>
<p class="bsp">
			<code>a {</code><br />
			<code>target: tab;</code><br />
			<code>}</code>
		</p>
<p>&#8230;womit sich alle Links in einem neuen Tab &ouml;ffnen w&uuml;rden (dies funktioniert, auch wenn hier die Kurzschreibweise <code>target</code> anstelle von <code>target-new</code> eingesetzt wird). Die Eigenschaft <code>target-name</code> mit ihrem Standardwert <code>current</code> spezifiziert den Namen des Linkziels, <code>target-position</code> mit dem Standardwert <code>above</code> die Plazierung des Ziels.</p>
<p>Anmerkung: Mit <abbr title="Extensible Hypertext Markup Language" lang="en" xml:lang="en">XHTML</abbr> 2.0 werden voraussichtlich mehr potentielle Ziele als nur <code>a</code>-Elemente zur Anwendung der <code>target</code>-Eigenschaft zur Verf&uuml;gung stehen, denn bisher sieht der <abbr>W3C</abbr>-Entwurf vor, da&szlig; das <a href="http://www.w3.org/TR/xhtml2/mod-hyperAttributes.html#adef_hyperAttributes_href"><code>href</code>-Attribut</a> auf allen Elementen angegeben werden darf, also alle Elemente einen Hypertext-Link repr&auml;sentieren k&ouml;nnen.</p>
<h4>Zur&uuml;ck in die Zukunft mit <code>marquee</code></h4>
<p>Zum Ende dieses kleinen Ausblicks auf <abbr>CSS</abbr> 3 begr&uuml;&szlig;en wir die <abbr>CSS</abbr>-Antwort auf das propriet&auml;re und &#034;ausgestorbene&#034; <code>marquee</code>-Element: Die <a href="http://www.w3.org/TR/css3-box/#marquee"><code>marquee</code>-Eigenschaft</a>, Kurzform f&uuml;r die Eigenschaften <code>marquee-style</code>, <code>marquee-direction</code>, <code>marquee-speed</code> und <code>marquee-repetition</code>. Zwar k&ouml;nnen nur vage und deshalb noch nicht stichhaltige Argumente gegen diese Eigenschaft(en) vorgebracht werden, doch wir bringen unsere besondere Wiedersehensfreude zum Ausdruck, indem wir diese Neuigkeit nur erw&auml;hnen.</p>
<h4>Zum Autor</h4>
<p><a href="http://meiert.com/">Jens Meiert</a> zaubert hauptberuflich f&uuml;r <a href="http://www.gmx.net/"><abbr>GMX</abbr></a>, treibt sich st&auml;ndig beim <abbr title="World Wide Web Consortium" lang="en" xml:lang="en">W3C</abbr> und in anderen Organisationen herum, hat just sein Buch <cite><a href="http://meiert.com/de/publications/books/3897214229/">Webdesign mit <abbr>CSS</abbr></a></cite> ver&ouml;ffentlicht und tr&auml;umt in spitzen und geschweiften Klammern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/24/css-der-zukunft/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Organisation großer CSS-Dateien</title>
		<link>http://www.webkrauts.de/2005/12/23/organisation-von-grossen-css-files/</link>
		<comments>http://www.webkrauts.de/2005/12/23/organisation-von-grossen-css-files/#comments</comments>
		<pubDate>Fri, 23 Dec 2005 20:00:00 +0000</pubDate>
		<dc:creator>kkarnapp</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/23/</guid>
		<description><![CDATA[Wer die ersten selbsterstellten Seiten hinter sich hat und sich nach und nach immer weiter wachsenden Webseiten gegenüber sieht wird schnell feststellen, dass  Stylesheets sehr schnell eine durchaus schwer überschaubare Größe annehmen. Daher ist es wichtig, sich im Vorfeld ein paar Gedanken zur inhaltlichen Struktur und Organisation der Styles zu machen.]]></description>
			<content:encoded><![CDATA[<h4>Gruppierung</h4>
<p>
    Durch gezieltes gruppieren gleichartiger Layoutelemente als da wären Listen, Links, Absätze und so weiter und so weiter entsteht die Möglichkeit, wie wir später sehen werden, schnell vom einen zum anderen zu springen, um somit das lästige hin- und herscrollen überflüssig werden zu lassen. Die einzelnen Gruppen könnte man z.B. so unterteilen:</p>
<ul>
<li>Allgemein</li>
<li>Links</li>
<li>Struktur</li>
<li>Navigation</li>
<li>Listen</li>
</ul>
<p>
    Das soll uns als Auswahl genügen. Diese hier gewählten Unterpunkte des Stylesheets erheben keinesfalls Anspruch auf Vollständigkeit und sollten möglichst so gewählt werden, dass man erstens selbst später noch weiß was sie bedeuten sollen und sie, zweitens, dahingehend allgemein verständlich sind, dass wenn z.B. in Gruppen an einer Webseite gearbeitet wird, jedes Teammitglied unabhängig von den anderen aus dem Quellcode des Stylesheets erkennt welche Anweisungen welchen Teil der Seite beeinflussen.
  </p>
<h4>Kennzeichnung der Gruppen</h4>
<p>Wenn man einmal eine zufriedenstellende Auswahl getroffen hat ist es ratsam das Stylesheet zu allererst optisch zu trennen bzw. die einzelnen Gruppen von einander unterscheidbar zu machen. Eine Möglichkeit wäre z.B. folgende:</p>
<p class="bsp"><code>/* Navigation<br />
  ===============================================*/<br />
  #menu {</p>
<p>	float: left;<br />
	border-bottom: 1px solid #000;<br />
	border-top: 1px solid #000;<br />
	width: 750px;<br />
}<br />
  /*=============================================*/</code></p>
<p>Auf diese Weise fallen einem von einander getrennte Teile schneller ins Auge und durch den einführenden Kommentar (in unserem Beispielfall <code>/* Navigation</code>)  bekommt das ganze gleiche eine Art Zwischenüberschrift, die erklärt welche Anweisungen sich in diesem Abschnitt des Stylesheets befinden. Das hat sich mit der Zeit als sehr praktisch erwiesen, ist aber dennoch noch nicht ganz perfekt.</p>
<h4>Gezieltes Arbeiten</h4>
</p>
<p>Um sich letztlich möglichst präzise durch die Stylesheets, die bei größeren Projekten durchaus eine Länge von 1000 Zeilen erreichen, bewegen zu können fehlt noch eine Kleinigkeit. Man sollte sich angewöhnen gut Freund mit der Suchfunktion (STRG + F) des Editors seines Vertrauens zu werden. Diese dient quasi als Fortbewegungsmittel innerhalb des Stylesheets. Wenn man, orientiert an obigem Beispiel, also gerade relativ weit unten im Stylesheet die Listen verfeinert und sich nun der Navigation widmen möchte gibt man seinem Taxifahrer also per Eingabe von <code>Navigation</code> zu verstehen wo man hinmöchte. Eigentlich reichen dabei die ersten drei Buchstaben zumeist aus. Allerdings ist die jetzige Unterscheidung innerhalb unseres Stylesheets noch etwas irreführend, da man durchaus mit IDs oder Klassen arbeiten kann, die auch mit <code>Nav</code><br />
  beginnen und schon wird die eigentlich sinnvolle Unterscheidung irreführend. Ein kleiner Trick schafft da Abhilfe:</p>
<p class="bsp"><code>/* =Navigation<br />
  ===============================================*/<br />
  #menu {</p>
<p>	float: left;<br />
	border-bottom: 1px solid #000;<br />
	border-top: 1px solid #000;<br />
	width: 750px;<br />
}<br />
  /*=============================================*/</code></p>
<p>Die einzige Veränderung, die wir noch vorgenommen haben ist das &#034;Gleichheitszeichen&#034; vor der &#034;Zwischenüberschrift&#034; im Stylesheet. Dieser kleine Effekt hat aber in der Praxis durchaus große Wirkung. Wenn man jetzt nämlich der Suchfunktion per <code>=Nav</code> zu verstehen gibt, dass man im Abschnitt der Navigation weiterarbeiten möchte, kommt man mit Sicherheit besser ans Ziel. Mit etwas  Übung kann man sich auf diese Weise sehr schnell durch die Stylesheets bewegen und ganz nebenbei hat man sich noch eine Struktur geschaffen, die ggf. auch für andere leichter zugänglich ist.</p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://www.kk-works.de/2005/10/09/css-hack-management/" title="CSS-Hackmanagment">CSS-Hack Management</a> <span class="aussen">.</span></li>
<li><a href="http://www.stopdesign.com/log/2005/05/03/css-tip-flags.html" title="CSS Tip Flags">CSS Tip Flags</a> <span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p> Knut Karnapp studiert Wirtschaft in Chemnitz und beschäftigt sich seit 1998 mit Webentwicklung. Nebenbei betreibt er, wie sehr viele der Webkrauts, einen <a href="http://www.kk-works.de" title="Knuts Blog">Blog</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/23/organisation-von-grossen-css-files/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Styling der Navigation als ungeordnete Liste</title>
		<link>http://www.webkrauts.de/2005/12/22/styling-der-navigation-als-ungeordnete-liste/</link>
		<comments>http://www.webkrauts.de/2005/12/22/styling-der-navigation-als-ungeordnete-liste/#comments</comments>
		<pubDate>Thu, 22 Dec 2005 20:00:00 +0000</pubDate>
		<dc:creator>Oliver Roick</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/22/</guid>
		<description><![CDATA[Betrachtet man die Navigation einer Website &#8212; egal ob vertikal oder horizontal &#8212; strukturell, dann ist das Ganze nichts anderes, als ein Liste von Links. Deshalb sollte diese im <acronym title="Hypertext Markup Language">HTML</acronym>-Markup auch als solche ausgezeichnet werden. Oft werden diese jedoch durch endlose Strings aufeinanderfolger Links oder eingerahmt in DIVs dargestellt. Begründet wird das meist lapidar damit, dass man keine Aufzählungszeichen vor den Links haben möchte. Dieser Beitrag soll zeigen, wie man mit einigen einfachen <acronym title="Cascading Style Sheets">CSS</acronym>-Anweisungen eine als Liste ausgezeichnete Navigation umsetzen kann.]]></description>
			<content:encoded><![CDATA[<h4>Ausgangssituation</h4>
<p>
    Gehen wir von dem einfachen folgenden Beispiel aus:
  </p>
<p class="bsp"">
    <code>
<ul id="navigation">
		  
<li><a href="/">Home</a></li>
<p>
		  
<li><a href="/about/" class="aktiv">About</a></li>
<p>
		  
<li><a href="/portfolio/">Portfolio</a></li>
<p>
		  
<li><a href="/kontakt/">Kontakt</a></li>
<p>
		</ul>
<p></code>
  </p>
<p>
  	Es handelt sich hierbei also um eine Navigation mit vier Punkten. Der aktive Menüpunkt wird im Markup auf der jeweiligen Seite durch die <acronym title="Cascading Style Sheets">CSS</acronym>-Klasse &#034;aktiv&#034; gekennzeichnet.
  </p>
<h4>Styling mit <acronym title="Cascading Style Sheets">CSS</acronym></h4>
<p>
    Zuächst wird für alle Browser eine einheitliche Ausgangssituation hergestellt, indem Innen- und Außenabstand auf 0 gesetzt werden. Mit <code>list-style: none;</code> werden zudem alle Aufzählungspunkte der Liste entfernt.
  </p>
<p class="bsp">
    <code>ul#navigation {<br />
          list-style: none;<br />
          margin: 0;<br />
          padding: 0;<br />
    }</code>
  </p>
<p>
    Alle anderen Stile und Funktionalit�ten werden nun den Links hinzugefügt. Zu Beginn bringen wir ein wenig Farbe ins Spiel, indem Hintergrundfarbe und die Farbe der Links angepasst werden.
  </p>
<p class="bsp">
    <code>ul#navigation a {<br />
          background-color: #005;<br />
          color: #fff;<br />
    }</code>
  </p>
<p>
    Wie bereits gesagt, kann über die <acronym title="Cascading Style Sheets">CSS</acronym>-Klasse &#034;aktiv&#034; ein separates Styling für den Link zu aktuellen Seite eingeführt werden. Der Einfachheit halber beschränken wir uns hier lediglich auf eine andere Hintergrundfarbe.
  </p>
<p class="bsp">
    <code>ul#navigation a.aktiv {<br />
          background-color: #eef;<br />
          color: #005;<br />
   }</code>
  </p>
<p>
    Zu einer ordentlichen Navigation gehören zudem Hover-Effekte. Die setzen wir schnell und einfach mit der Pseudo-Klasse <code>:hover</code> um.
  </p>
<p class="bsp">
    <code>ul#navigation a:hover {<br />
          background-color: #009;<br />
    }</code>
  </p>
<h4>Vertikale Navigation</h4>
<p>
    Jetzt ist entscheidend, wie die Navigation in die Seite eingebunden wird. Zum Einen besteht die Möglichkeit diese vertikal als Sidebar neben dem Inhalt zu platzieren. Zum Anderen kann die Navigation als horizontale Version am Seitenkopf platziert werden.
  </p>
<p>
    Beginnen wir mit der vertikalen Version. Hierfür muss zunächst die Breite der Liste eingeschränkt werden (<code>width: 20%;</code>).
  </p>
<p class="bsp">
    <code>ul#navigation {<br />
          list-style: none;<br />
          margin: 0;<br />
          padding: 0;<br />
          width: 20%;<br />
     }</code>
  </p>
<p>Natürlich möchten wir, dass der Link die gesamte Breite der Liste ein nimmt. Die <code>display</code>-Eigenschaft wird dafür auf <code>block</code> gesetzt.</p>
<p class="bsp">
    <code>ul#navigation a {<br />
          background-color: #005;<br />
          color: #fff;<br />
          display: block;<br />
          padding: 5px;<br />
          text-decoration: none;<br />
          width: 100%;<br />
     }</code></p>
<p>
    Hier stößt man allerdings auf die ersten Probleme bezüglich der Browserkompatibilität. Denn der Internet Explorer unter Windows interpretiert diese Eigenschaft falsch, sodass es notwendig wird, die Breite des Blocks explizit mit <code>width: 100%</code>; anzugeben. Das wiederrum führt zu Problemen mit Netscape, Mozilla und IE/Mac. Um diese zu umgehen, verwenden wir den Child-Selektor und setzen die Breite des Links auf auto. Diese Anweisung wird von IE/Win ignoriert, da dieser Child-Selektoren nicht interpretieren kann.
  </p>
<p class="bsp">
	<code><br />
        html>body ul#navigation li a {<br />
          width: auto;<br />
    }</code>
  </p>
<h4>Horiziontale Navigation</h4>
<p>
    Auch eine horizontale Anordnung der Navigation ist relativ einfach umzusetzen. Das Floating der Listenelemente wird dafür auf left gesetzt.
  </p>
<p class="bsp">
    <code>ul#navigation li {<br />
          float: left;<br />
    }</code>
  </p>
<p>
    Dabei ist allerdings darauf zu achten, dass die Breite eines Links nicht mit 100% anzugeben ist. Der Internet Explorer interpretiert das wieder falsch. Die Links werden dann über die gesamte Breite der Seite dargestellt. Es genügt die Angabe <code>width: auto;</code> für alle Browser.
  </p>
<p class="bsp">
    <code>ul#navigation a {<br />
          background-color: #005;<br />
          color: #fff;<br />
          display: block;<br />
          padding: 5px;<br />
          text-decoration: none;<br />
          width: auto;<br />
     }</code>
  </p>
<h4>Zusammenfassung</h4>
<p>
    Zusammenfassend kann gesagt werden, dass durch das Zusammenspiel von <acronym title="Hypertext Markup Language">HTML</acronym> und <acronym title="Cascading Style Sheets">CSS</acronym> genügend Möglichkeiten bestehen, die Navigation als semantisch korrekte Liste auszuzeichnen, ohne das dabei Einschränkungen bezüglich des Designs entstehen. Es bestehen weitaus mehr Möglichkeiten, als das hier angeführte Beispiel zeigt.
  </p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://www.alistapart.com/articles/taminglists/" title="Externer Link zu A List Apart">Mark Newhouse: Taming Lists </a> <span class="aussen">.</span></li>
<li><a href="http://www.bartelme.at/articles/34/" title="Externer Link zur Wolfgang Barthelme">Wolfgang Barthelme: Listen stylen mit <acronym title="Cascading Style Sheets">CSS</acronym></a> <span class="aussen">.</span></li>
<li><a href="http://de.selfhtml.org/css/layouts/navigationsleisten.htm" title="Externer Link zur SELFHTML">SELFHTML: <acronym title="Cascading Style Sheets">CSS</acronym>-basierte Navigationsleisten</a> <span class="aussen">.</span></li>
<li><a href="http://www.barrierefreies-webdesign.de/knowhow/navigationsleiste/struktureller-aufbau.html" title="Externer Link zur Barrierefreies Webdesign">Barrierefreies Webdesign: Das Rückgrat eines Webauftrittes: Die Navigation</a> <span class="aussen">.</span></li>
<li><a href="http://www.einfach-fuer-alle.de/artikel/menues/" title="Externer Link zu Einfach für alle">Tutorium: Barrierefreie Navigationsmen�s</a> <span class="aussen">.</span></li>
<li><a href="http://css.maxdesign.com.au/listutorial/" title="Externer Link zum englischsprachigen Listutorial">Listutorial</a> <span class="aussen">.</span></li>
<li><a href="http://css.maxdesign.com.au/listamatic/" title="Externer Link zum englischsprachigen Listamatic">Listamatic</a> <span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p><a title="Externer Link zu rollsroick" href="http://rollsroick.de/">Oliver Roick</a> lebt in Jena und studiert dort Geographie mit Schwerpunkt Geoinformatik. Seine Freizeit gestaltet er mit Konsum von tschechischem Bier und Regionalliga-Fußball.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/22/styling-der-navigation-als-ungeordnete-liste/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Splintered striper &#8211; Streifen machen schlank</title>
		<link>http://www.webkrauts.de/2005/12/21/splintered-striper/</link>
		<comments>http://www.webkrauts.de/2005/12/21/splintered-striper/#comments</comments>
		<pubDate>Wed, 21 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Patrick Lauke</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/21/</guid>
		<description><![CDATA[Im März 2004 demonstrierte <a href="http://www.fivevoltlogic.com/">David F. Miller</a> ein wenig <acronym title="Document Object Model" lang="en">DOM</acronym> Skripting Magie in seinem <a href="http://www.alistapart.com" lang="en">A List Apart</a> Artikel <a href="http://www.alistapart.com/articles/zebratables/" lang="en"><cite>Zebra Tables</cite></a>.]]></description>
			<content:encoded><![CDATA[<p>Sein Skript fügt zwei abwechselnde <acronym title="Cascading Style Sheets" lang="en">CSS</acronym> Hintergrundfarben in Tabellenzeilen ein, um diese damit lesbarer und ästhetischer zu machen, und erspart dem Author des Dokumentes die mühevolle Aufgabe, große statische Tabellen dementsprechend per Hand zu stylen.</p>
<p>Obwohl <a href="http://www.alistapart.com/d/stripedtables/script.txt" lang="en">Davids Originalskript</a> seine Arbeit gut ausführt, ist es dennoch in der Anwendung äußerst spezifisch und beschränkt:</p>
<ul>
<li>Es funktioniert nur für eine einzige Tabelle, die mittels <code>id</code> Attribut identifiziert wird und mindestens eine <code>tbody</code> Sektion beinhalten muß.</li>
<li>Es kann nur Hintergrundfarben setzen.</li>
<li>Es sind nur zwei Farben für gerade und ungerade Zeilen erlaubt.</li>
<li>Es wirkt auf Datenzellen, anstatt Zeilen, und auch nur dann, wenn noch keine <code>class</code> oder Hintergrundfarbe definiert ist.</li>
</ul>
<h4>Einen Schritt weiter</h4>
<p>In einem meiner Projekte mußte ich vor kurzem einer ungeordneten Liste einen gestreiften Effekt verleihen. Anstatt einfach den <cite lang="en">Zebra Tables</cite> Code für diesen speziellen Fall zu modifizieren, entschloß ich mich, das Skript komplett neu zu schreiben, um es genereller zu machen.</p>
<p>Da das <a href="http://www.splintered.co.uk/experiments/archives/splintered_striper/deutsch/striper.js"><cite lang="en">splintered striper</cite> Skript</a> nun etwas mehrzweckiger ist, wurde meine Funktion zwangsweise etwas komplexer. Im Gegensatz zum Originalskript, welches nur einen einzigen Parameter brauchte (die <code>ID</code> der Zieltabelle), wird die neue Funktion wie folgt aufgerufen:</p>
<p class="bsp"><code>striper('[<var>Elternelement Tag</var>]','[<var>Elternelement Klasse</var> oder <var>null</var>]','[<var>Kindelement Tag</var>]','[<var>komma-getrennte Klassenliste</var>]')</code></p>
<p>Diese neue, relativ selbsterklärende Funktion:</p>
<ul>
<li>wirkt auf jede Art von Elternelement (und, falls man es spezifiziert hat, nur auf jene mit einer bestimmten Klasse),</li>
<li>setzt den Kindelementen innerhalb der Elternelemente zwei oder mehr Klassen (anstatt nur zwei Hintergrundfarben),</li>
<li>lässt jegliche Klassen, die schon an die Kindelemente vergeben wurden, intakt.</li>
</ul>
<h4>Das Skript in Aktion</h4>
<p>Die <a href="http://www.splintered.co.uk/experiments/archives/splintered_striper/deutsch/">Demoseite</a> zeigt drei Anwendungsbeispiele. Der Einfachheit halber rufen wir die <code>striper</code> Funktion direkt vom <code>onload</code> Attribut im <code>body</code> auf. In einer echten Produktionssituation würden wir das Skript an den <code>onload</code> Handler anhängen; da wir verschiedene Variablen an die <code>striper</code> Funktion weitergeben müssen, würde das ungefähr so aussehen:</p>
<p class="bsp"><code>window.onload = function() { striper('tbody','gestreift','tr','ungerade,gerade'); }</code></p>
<p>Danke an einen anderen <a href="http://www.unset.net/">Patrick</a> für diese Verfeinerung meines Originalskripts, in dem ich ursprünglich eine Wrapper-Funktion vorgeschlagen hatte.</p>
<h4>Abschließende Gedanken</h4>
<p>Das Skript ist für Situationen gedacht, in denen wir ein großes statisches Dokument nachträglich im Browser stylen möchten; falls das Dokument aber dynamisch mittels serverseitiger Skripte generiert wird, macht es natürlich mehr Sinn, die verschiedenen Klassen dort zu setzen.</p>
<p>Nur weil ich die Funktion <code>striper</code> nenne, heißt das nicht, daß sie nur auf Streifenmuster begrenzt ist; da es sich hier eher um ein generelles Skript zur &#034;abwechselnden Klassen-Verleihung&#034; handelt, kann man damit eine ganze Reihe verschiedener Effekte erzeugen.</p>
<p>Wie sieht es mit der Barrierefreiheit aus? Obwohl wir Javascript einsetzen, betrifft das Ergebnis nur die Präsentation und nicht die Funktionalität. Solange die Eltern- und Kindelemente schon ausreichend gestylt sind, macht es für die Barrierefreiheit keinen großen Unterschied, ob das Skript ausgeführt wird oder nicht.</p>
<p>In der (nicht zu fernen) Zukunft können wir uns hoffentlich das ganze Palaver mit dieser Art von Skripten sparen: wenn Browser die <acronym title="Cascading Style Sheets" lang="en">CSS</acronym> 3-Spezifikation implementieren, werden wir diese Probleme viel eleganter mit dem <a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215/#nth-child-pseudo">nth-child Pseudo-Selektor</a> lösen können. Aber bis es endlich soweit ist, können wir ruhig ein wenig <acronym title="Document Object Model" lang="en">DOM</acronym>-Skripting verwenden, um Browser auf die Sprünge zu helfen.</p>
<h4>Zum Autor</h4>
<p><span class="fn">Patrick H. Lauke</span> ist Webmaster an einer kleinen englischen Universität, arbeitet nebenbei als freier <a href="http://www.splintered.co.uk">Webdesigner und Entwickler</a> und ist ein Mitglied der <a href="http://webstandards.org" lang="en"><acronym title="Web Standards Project">WaSP</acronym> Accessibility Task Force</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/21/splintered-striper/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ein Standard-Design</title>
		<link>http://www.webkrauts.de/2005/12/20/ein-standard-design/</link>
		<comments>http://www.webkrauts.de/2005/12/20/ein-standard-design/#comments</comments>
		<pubDate>Tue, 20 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Eric Eggert</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/20/</guid>
		<description><![CDATA[Heute geht es um die Erstellung eines einfachen 3-Spalten-Layouts mittels <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> und <acronym title="Cascading Style Sheets">CSS</acronym>.]]></description>
			<content:encoded><![CDATA[<h4>Vorbetrachtungen</h4>
<p>Zuerst müssen wir uns im Klaren sein, welche Bereiche unser 3-Spalten-Layout enthalten soll:</p>
<ul>
<li>Eine Kopf- und eine Fußzeile,</li>
<li>eine Navigationsspalte,</li>
<li>eine Hauptspalte für den eigentlichen Seiteninhalt,</li>
<li>eine Spalte für Zusatzinformationen.</li>
</ul>
<p>Screenreader sollen außerdem zuerst den Inhalt vorlesen, dann die Navigationspunkte und zuletzt die Zusatzinformationen.</p>
<div class="bsp">
<h5>Abbildung 1: Visueller Aufbau</h5>
<p><img alt="Systematische Darstellung des Seitenlayouts: Oben Kopfzeile, unten Fußzeile. Links die Navigation, rechts Zusatzinformationen. Dazwischen die Inhalte." src="http://www.webkrauts.de/bsp1.png" width="200" height="140" /></p>
</p></div>
<div class="bsp">
<h5>Abbildung 2: Struktureller Aufbau</h5>
<p><img alt="Systematische Darstellung der Struktur des Seitenlayouts: Zuerst Kopfzeile, dann Inhalte. Danach die Navigation, zuletzt die Zusatzinformationen." src="http://www.webkrauts.de/bsp2.png" width="200" height="140" /></p>
</p></div>
<p>Für das Design streben wir Spalten an, die bis zur Fußzeile reichen. Dass dies keine Selbstverständlichkeit ist wird sich später noch zeigen.</p>
<h4>Die Dokumentstruktur</h4>
<p>Der Einfachheit halber werden die hier folgenden Beispiele nur Auszüge aus dem <code>&lt;body></code>-Element sein. Für die gesamte (X)HTML-Datei kann der <a href="http://yatil.de/krauts/">Quelltext der Beispielseite</a> herangezogen werden.</p>
<p>Wie man am strukturellen Aufbau erkennen kann haben wir fünf Bereiche: Die Kopfzeile mit der Seitenidentität (also Logo und <span lang="en">Tagline</span>), die drei Spalten und den Fußbereich mit rechtlichen Hinweisen.</p>
<p>Die Umsetzung könnte folgendermaßen im Quelltext aussehen:</p>
<p class="bsp">
	<code><br />
	&lt;div id="identitaet">...&lt;/div><br />
	&lt;div id="inhalt">...&lt;/div><br />
	&lt;div id="navigation">...&lt;/div><br />
	&lt;div id="extra">...&lt;/div><br />
	&lt;div id="rechtliches">...&lt;/div><br />
	</code>
	</p>
<p>Dieser Quelltext wäre eine optimale Lösung:</p>
<ul>
<li>Die Elemente sind ihrem Zweck nach benannt.</li>
<li>Es gibt keine Elemente, die ausschließlich für das Design eingefügt wurden.</li>
</ul>
<p>Allerdings ist die Erstellung eines Dreispalters mit diesem Quelltext äußerst schwierig umzusetzen. Eine möglichst einfache und browserübergreifende Lösung benötigt noch ein weiteres Element. Zudem werden die Bereiche von einem weiteren <code>&lt;div></code>-Element eingefasst (<code>&lt;div id="wrap"></code>), mit dem sich das Layout ebenfalls verändern lässt.</p>
<p class="bsp">
	<code><br />
	<span style="color: #a00">&lt;div id="wrap"></span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="identitaet">...&lt;/div><br />
	<span style="color: #a00">&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="hauptbereich"></span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="inhalt">...&lt;/div><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="navigation">...&lt;/div><br />
	<span style="color: #a00">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div></span><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="extra">...&lt;/div><br />
	&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="rechtliches">...&lt;/div><br />
	<span style="color: #a00">&lt;/div></span><br />
	</code>
	</p>
<h4>Float as float can.</h4>
<p>Diese Struktur erlaubt es uns, die gesamte Seite mittels &#8222;Floats&#034; (Schwebende Elemente) zu positionieren, was die nachvollziehbarste Lösung scheint. Nun müssen wir uns noch über die Breite der Spalten klar werden. Die Inhaltsspalte soll die Hälfte des <code>wrap</code>-Elements einnehmen, die beiden anderen Spalten jeweils 25%.</p>
<p>Das Prinzip der Floats ist schnell erklärt: Die Elemente werden aus dem Dokumentenfluss herausgenommen und an eine Seite verschoben. Andere Texte/Elemente laufen dann daran vorbei. Die Bilder in Zeitungen werden auf eine ähnliche Weise gesetzt.</p>
<p>Zuerst legen wir eine allgemeine Regel im CSS fest. Wieder ist es der Vereinfachung geschuldet, dass die Stilangaben im Beispieldokument nicht ausgelagert sondern im Dokument vorhanden sind.</p>
<p class="bsp">
	<code><br />
	* {<br />
	&nbsp;&nbsp;&nbsp;margin: 0;<br />
	&nbsp;&nbsp;&nbsp;padding: 0;<br />
	}</p>
<p>	body {<br />
	&nbsp;&nbsp;&nbsp;font-family: Verdana, Arial, sans-serif;<br />
	}<br />
	</code>
	</p>
<p>Nun müssen wir das CSS für die verschiedenen Bereiche schreiben.</p>
<h5>Kopf- (<code>#identitaet</code>) und Fußzeile (<code>#rechtliches</code>)</h5>
<p class="bsp">
	<code><br />
	#identitaet {<br />
	&nbsp;&nbsp;&nbsp;background-color: #369A3D;<br />
	&nbsp;&nbsp;&nbsp;color: #fff;<br />
	&nbsp;&nbsp;&nbsp;padding: 1.2em;<br />
	}</p>
<p>#rechtliches {<br />
	&nbsp;&nbsp;&nbsp;background-color: #707883;<br />
	}<br />
	</code>
	</p>
<p>Das reicht uns hier bereits. In einem &#8222;echten&#034; Layout würde man wahrscheinlich noch Hintergrundbilder oder andere Gestaltungselemente einfügen. Dies benötigen wir aber in diesem Beispiel nicht.</p>
<h5>Die Spalten</h5>
<p>Zuerst kümmern wir uns um die Spalte für Zusatzinformationen (<code>#extra</code>) und den Hauptbereich (<code>#hauptbereich</code>). Den Hauptbereich wollen wir mit 75% Breite an den linken Seitenrand schieben, die Extraspalte an den rechten:</p>
<p class="bsp">
	<code><br />
	#hauptbereich {<br />
	&nbsp;&nbsp;&nbsp;float: left;<br />
	&nbsp;&nbsp;&nbsp;width: 75%;<br />
	}</p>
<p>	#extras {<br />
	&nbsp;&nbsp;&nbsp;float: right;<br />
	&nbsp;&nbsp;&nbsp;width: 25%;<br />
	&nbsp;&nbsp;&nbsp;background-color: #D39815;<br />
	}<br />
	</code>
	</p>
<p>Mit der Inhalts- und der Navigationsspalte verfahren wir ähnlich. Lediglich die Breite der beiden Spalten müssen wir anpassen, da sich diese auf das übergeordnete Element (in diesem Fall also auf den Hauptbereich mit 75%iger Breite) beziehen:</p>
<p class="bsp">
	<code><br />
	#inhalt {<br />
	&nbsp;&nbsp;&nbsp;float: right;<br />
	&nbsp;&nbsp;&nbsp;width: 66.67%;<br />
	&nbsp;&nbsp;&nbsp;background-color: #002455;<br />
	&nbsp;&nbsp;&nbsp;color: #fff;<br />
	}</p>
<p>	#navigation {<br />
	&nbsp;&nbsp;&nbsp;float: left;<br />
	&nbsp;&nbsp;&nbsp;width: 33.33%;<br />
	&nbsp;&nbsp;&nbsp;background-color: #B0001E;<br />
	}<br />
	</code>
	</p>
<p>Wenn man sich das Layout nun anschaut fallen zwei Probleme auf:</p>
<ol>
<li>Die Fußleiste ist seltsam verschoben.</li>
<li>Die Spalten sind teilweise viel zu kurz und gehen nicht bis zur Fußleiste.</li>
</ol>
<p>Die Fußzeile ganz nach unten zu versetzen ist kein Problem: <code>#rechtliches</code> wird folgende Anweisung hinzugefügt: <code>clear: both;</code>. Dadurch wird die Fußzeile nach unten, unter alle Spalten geschoben.</p>
<p>Das zweite Problem kann auf zwei Arten gelöst werden: Entweder man benutzt Hintergrundbilder um Spalten zu simulieren (sog. Faux Columns) oder man wendet einen Trick an, den Alex Robinson bei seiner Suche nach dem einzig wahren Layout gefunden hat. Dieser benutzt einen sehr großen Innenabstand (<code>padding</code>) und einen ebenso großen <em>negativen</em> Außenabstand (<code>margin</code>), die Spalten entsprechend zu erweitern:</p>
<p class="bsp">
	<code><br />
	#inhalt, #navigation, #extra, #hauptbereich {<br />
	&nbsp;&nbsp;&nbsp;padding-bottom: 32767px; <span style="color: #666;">/* Beschraenkung durch Safari, der keinen groeszeren Wert zulaesst. */</span><br />
	&nbsp;&nbsp;&nbsp;margin-bottom: -32767px;<br />
	}<br />
	</code>
	</p>
<p>Nun sind die Spalten aber einfach nur sehr lang. Wir müssen sie also unten kappen, und hier kommt das <code>wrap</code>-Element ins Spiel. Durch folgende Anweisung erreichen wir das gewünschte Ergebnis fast:</p>
<p class="bsp">
	<code><br />
	#wrap {<br />
	&nbsp;&nbsp;&nbsp;overflow: hidden;<br />
	}<br />
	</code>
	</p>
<p>Was nun noch fehlt ist die Fußzeile: Sie scheint hinter die Spalten gerutscht zu sein. Folgende Anweisungen rßcken das wieder gerade:</p>
<p class="bsp">
	<code><br />
	#wrap {<br />
	&nbsp;&nbsp;&nbsp;overflow: hidden;<br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">position: relative;</span><br />
	}<br />
	#rechtliches {<br />
	&nbsp;&nbsp;&nbsp;background-color: #707883;<br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">position: relative;</span><br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">z-index: 1;</span><br />
	}<br />
	</code>
	</p>
<p>Jetzt haben wir ein fast perfektes Layout, das in den meisten Browsern funktionieren sollte. Lediglich Opera in der Version 8 macht Probleme. Falls man diesen Browser unterstützen will (oder muss) hilft folgender CSS-Hack. Opera 9 enthält diesen Fehler im übrigen nicht mehr, es liegt also im Ermessen des Autors ob er diesen Hack überhaupt benötigt:</p>
<p class="bsp">
	<code><br />
	@media all and (min-width: 0px) {<br />
	&nbsp;&nbsp;&nbsp;#inhalt, #navigation, #extra, #hauptbereich {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding-bottom:0;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom: 0;<br />
	&nbsp;&nbsp;&nbsp;}</p>
<p>	&nbsp;&nbsp;&nbsp;#inhalt:after, #navigation:after, #extra:after, #hauptbereich:after {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding-top:32767px;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom: -32767px;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content: 'Opera 8 Fix';<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:block;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background: inherit;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height: 0;<br />
	&nbsp;&nbsp;&nbsp;}<br />
	}<br />
	</code>
	</p>
<h4>Fluid, fix oder elastisch?</h4>
<p>Es mag nun die Frage aufkommen, ob das Layout fluide, fix oder elastisch ist. Fluid bedeutet, dass sich die einzelnen Spalten an die Fensterbreite anpassen. Fix ist ein Layout, wenn die Breite in Pixeln angegeben wurde. Ein elastisches Layout passt sich an der Schriftgröße an. Und das schöne ist: Dieses Layout kann alle drei Layoutarten erfüllen, die Frage ist nur in welcher Einheit die Breite des <code>wrap</code>-Elements angegeben wird:</p>
<p class="bsp">
	Fixes Layout:<br />
	<code><br />
	#wrap {<br />
	&nbsp;&nbsp;&nbsp;overflow: hidden;<br />
	&nbsp;&nbsp;&nbsp;position: relative;<br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">width: 760<strong>px</strong>;</span><br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">margin: auto;</span> <span style="color: #666;">/* Zentrierung des Layouts */</span><br />
	}<br />
	</code>
	</p>
<p class="bsp">
	Fluides Layout:<br />
	<code><br />
	#wrap {<br />
	&nbsp;&nbsp;&nbsp;overflow: hidden;<br />
	&nbsp;&nbsp;&nbsp;position: relative;<br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">width: 80<strong>%</strong>;</span><br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">margin: auto;</span> <span style="color: #666;">/* Zentrierung des Layouts */</span><br />
	}<br />
	</code>
	</p>
<p class="bsp">
	Elastisches Layout:<br />
	<code><br />
	#wrap {<br />
	&nbsp;&nbsp;&nbsp;overflow: hidden;<br />
	&nbsp;&nbsp;&nbsp;position: relative;<br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">width: 45<strong>em</strong>;</span><br />
	&nbsp;&nbsp;&nbsp;<span style="color: #a00">margin: auto;</span> <span style="color: #666;">/* Zentrierung des Layouts */</span><br />
	}<br />
	</code>
	</p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://yatil.de/krauts/" title="Externer Link zum Quelltext der Beispielseite">Quelltext der Beispielseite</a> <span class="aussen">.</span></li>
<li><a href="http://www.highresolution.info/webdesign/yaml/" title="Externer Link zu YAML">YAML: Yet Another Multicolumn Layout</a> <span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p>Eric Eggert ist momentan Zivi in Kaiserslautern. Mit Webstandards beschäftigt er sich schon seit einigen Jahren. Nach seinem Informatikstudium soll diese Beschäftigung zu seinem Beruf werden. Er betreibt <a href="http://yatil.de/">ein Weblog</a>, in dem er unter anderem über <a href="http://yatil.de/Webentwicklung/">Webentwicklung</a> schreibt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/20/ein-standard-design/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>HTML und XHTML: Lassen Sie sich nicht irritieren</title>
		<link>http://www.webkrauts.de/2005/12/19/html-xhtml-doctypeswitching/</link>
		<comments>http://www.webkrauts.de/2005/12/19/html-xhtml-doctypeswitching/#comments</comments>
		<pubDate>Mon, 19 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Harald Kampen</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/19/</guid>
		<description><![CDATA[Es gibt verschiedene Versionen von <acronym title="hypertext markup language" lang="en" xml:lang="en">HTML</acronym> und <acronym title="extensible hypertext markup language" lang="en" xml:lang="en">XHTML</acronym>, auf die ich im folgenden Text kurz eingehe. Eine ganze Reihe davon sind entweder veraltet oder noch nicht in Gebrauch. Wenn Sie die <acronym lang="en" xml:lang="en">XHTML</acronym>-1.0-Varianten <span lang="en" xml:lang="en">strict, transitional</span> und <span lang="en" xml:lang="en">frameset</span> wählen, haben Sie Ihr vollständiges Sortiment für den Profi- und Hausgebrauch.]]></description>
			<content:encoded><![CDATA[<h4>Kurze Geschichte:</h4>
<p>Die Markupsprache <acronym lang="en" xml:lang="en" title="hypertext markup language">HTML</acronym> wurde vor allem entwickelt, um wissenschaftliche Texte zu schreiben. Dabei waren die logische Struktur und natürlich die Hyperlinks wichtig. Mit der Entstehung des Internets in seiner heutigen Form stiegen die Ansprüche an die grafischen Möglichkeiten von <acronym lang="en" xml:lang="en">HTML</acronym>. Nach und nach erweiterten die Browserhersteller <acronym lang="en" xml:lang="en">HTML</acronym> mit eigenem Code, der jedoch nur zum Teil in die Standards des <acronym lang="en" xml:lang="en" title="world wide web consortium">W3C</acronym> (gegründet 1994) überging.</p>
<p><acronym lang="en" xml:lang="en">HTML</acronym> gibt es derzeit in der Version 4.01 (1997), die noch häufig eingesetzt wird. <acronym lang="en" xml:lang="en">HTML</acronym> besteht aus 3 Versionen, der strengen Vatiante, <span lang="en" xml:lang="en">strict</span>, der freizügigen Variante, <span lang="en" xml:lang="en">loose</span>, und der Variante für <span lang="en" xml:lang="en">Frames, frameset</span>.</p>
<p>Mit dem Siegeszug von <acronym title="extensible markup language" lang="en" xml:lang="en">XML</acronym>, einer Markupsprache für diverse Anwendungen, kamen neue Ideen und Umsetzungen. Einige <acronym lang="en" xml:lang="en">XML</acronym>-Lösungen sind für Internetseiten interessant, darunter <acronym title="scalable vector graphic" lang="en" xml:lang="en">SVG</acronym> für Grafiken oder für die Umwandlung von <acronym lang="en" xml:lang="en">HTML</acronym> in andere Formate. Mit <acronym lang="en" xml:lang="en" title="extensible hypertext markup language">XHTML</acronym> wurde ein Weg gefunden, wie diese Ideen umgesetzt werden können.</p>
<p><acronym lang="en" xml:lang="en">XHTML</acronym> 1.0 (2000) ist eine direkte Fortsetzung von <acronym lang="en" xml:lang="en">HTML</acronym>, jedoch mit etwas strengeren Regeln. Tags und Attribute werden immer klein geschrieben, Attributwerte werden immer gesetzt und stehen immer in Anführungszeichen, Tags werden immer geschlossen.</p>
<p>Als zusätzlicher Effekt wird in <acronym lang="en" xml:lang="en">XHTML</acronym> der Quelltext besser lesbar, es ergibt sich ein einheitliches Bild.</p>
<p><acronym lang="en" xml:lang="en">XHTML</acronym> 1.0 gibt es inzwischen in mehreren Versionen: die strenge Variante <span lang="en" xml:lang="en">strict</span>, die freiere Variante <span lang="en" xml:lang="en">transitional</span> (ähnlich wie <acronym lang="en" xml:lang="en">HTML</acronym> 4 <span lang="en" xml:lang="en">loose</span>) und die Version für <span lang="en" xml:lang="en">Frames, frameset</span> entsprechen denen von <acronym lang="en" xml:lang="en">HTML</acronym> 4. Dazu kommt die Version <span lang="en" xml:lang="en">basic</span>, die für mobile Endgeräte eingedampft wurde.</p>
<p><acronym lang="en" xml:lang="en">XHTML</acronym> 1.1 entspricht in etwa <acronym lang="en" xml:lang="en">XHTML</acronym> 1.0 <span lang="en" xml:lang="en">strict</span>. Jedoch ermöglicht diese Version das Zusammenführen mehrerer <acronym lang="en" xml:lang="en">XML</acronym>-Sprachen in einem Dokument. Vorrausetzung dafür sind jedoch auch die <a href="http://www.w3schools.com/xml/xml_browsers.asp" hreflang="en" lang="en" xml:lang="en" title="Externer Link in Englisch">Browser</a>, von denen bisher nur wenige einen kleinen Teil der Möglichkeiten unterstützen.</p>
<p>Die neue Version <a href="http://www.bs-markup.de/blog/archiv/2005/06/01/xhtml-2-ruckt-naher-unterschiede-zu-version-1/" title="Externer Link: Unterschiede zu XHTML 1"><acronym lang="en" xml:lang="en">XHTML</acronym> 2</a> setzt verstärkt logische Tags, darunter auch neue. Formulare werden mit <acronym lang="en" xml:lang="en" title="extensible forms">XForms</acronym>  eingebunden. Für aktuelle Internetseiten ist <acronym lang="en" xml:lang="en">XHTML</acronym> 2 noch nicht spruchreif.</p>
<h4>Vergleich:</h4>
<p><acronym lang="en" xml:lang="en">HTML</acronym></p>
<p><code>&lt;TAG ATTRIBUTNAME=attributwert&gt;</code> (alleinstehende <span lang="en" xml:lang="en">Tags</span> wie <code>&lt;br&gt;</code> oder <code>&lt;hr&gt;</code>) oder<br />
<code>&lt;tag ATTRIBUTNAME>&lt;/tag&gt;</code> oder<br />
<code>&lt;tag ATTRIBUTNAME=&quot;attributwert&quot;&gt;</code></p>
<p><code>&lt;TAG ATTRIBUTNAME=attributwert&gt;</code> (<span lang="en" xml:lang="en">Tags</span> mit weiterem Inhalt, wie <code>&lt;p&gt;</code> oder <code>&lt;td&gt;</code>)<br />
<code>&lt;tag ATTRIBUTNAME>&lt;/tag&gt;</code> oder<br />
<code>&lt;tag ATTRIBUTNAME=&quot;attributwert&quot;&gt;</code> usw.</p>
<p><acronym lang="en" xml:lang="en">XHTML</acronym></p>
<p><code>&lt;tag attributname=&quot;attributwert&quot; /&gt;</code>  (alleinstehende <span lang="en" xml:lang="en">Tags</span> wie <code>&lt;br /&gt;</code> oder <code>&lt;hr /&gt;</code>)<br />
<code>&lt;tag attributname=&quot;attributwert&quot;&gt;&lt;/tag&gt;</code> (<span lang="en" xml:lang="en">Tags</span> mit weiterem Inhalt, wie <code>&lt;p&gt;</code> oder <code>&lt;td&gt;</code>)</p>
<h4>Auf Standard umschalten: <span lang="en" xml:lang="en">Doctype-Switching</span></h4>
<p>Für jede <acronym lang="en" xml:lang="en">HTML</acronym>- und <acronym lang="en" xml:lang="en">XHTML</acronym>-Version gibt es eine <span lang="en" xml:lang="en">Doctype Definition</span> (<acronym lang="en" xml:lang="en">DTD</acronym>), mit der festgelegt wird,  was in der genannten Sprache erlaubt ist. Da ältere Browser ihre eigenen Wege gingen, weichen die Standards zum Teil von der <span lang="en" xml:lang="en">HTML</span>-Ausgabe ab. Um das Problem zu bewältigen, wurde das sogenannte <span lang="en" xml:lang="en">Doctype-Switching</span> eingeführt.</p>
<p>Dabei wird der ein Verweis auf die <acronym lang="en" xml:lang="en">DTD</acronym> am Beginn des Dokuments eingefügt, ein bis dahin kaum verwendetes Verfahren. Erkennt der <span lang="en" xml:lang="en">Browser</span> dieses Element, schaltet er in den Standard-Modus um. Ist das Element nicht vorhanden, wird der alte Darstellungsmodus (<span lang="en" xml:lang="en">quirks</span>) beibehalten.</p>
<p>Zu jeder <acronym lang="en" xml:lang="en">HTML</acronym>- und <acronym lang="en" xml:lang="en">XHTML</acronym>-Version gibt es so eine <span lang="en" xml:lang="en">Doctype-Definition</span>. Für Anfänger eignen sich die freizügigeren Auslegungen am besten. Für <acronym lang="en" xml:lang="en">XHTML</acronym> ist das:</p>
<p class="bsp"><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;<br />
  &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</code></p>
<p>Weiter Codeschnipsel zu diesem Thema lassen sich schnell im Internet unter dem Suchbegriff <q lang="en" xml:lang="en">Doctype</q> nachschlagen.</p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://www.barrierefreies-webdesign.de/referenz/xhtml-und-html.php" title="Externer Link">Barrierefreies Webdesign: Die Unterschiede zwischen XHTML und HTML</a><span class="aussen">.</span></li>
<li><a href="http://www.einfach-fuer-alle.de/artikel/efa-relaunch/2006/teil2/" title="Externer Link"><acronym title="Einfach für alle">EfA</acronym>: zurück von XHTML auf HTML, eine etwas andere Sicht</a></li>
<li><a href="http://de.selfhtml.org/html/allgemein/grundgeruest.htm" title="Externer Link">SelfHTML: Grundgerüst einer HTML-Datei</a> <span class="aussen">.</span></li>
<li><a href="http://www.edition-w3c.de/TR/2002/REC-xhtml1-20020801/" title="Externer Link">W3C: XHTML 1.0: Die Extensible HyperText Markup Language (Zweite Auflage)</a><span class="aussen">.</span></li>
<li><a href="http://www.carsten-protsch.de/zwischennetz/doctype/" title="Externer Link">Carsten Protsch: Der DOCTYPE-Switch und seine Auswirkungen</a><span class="aussen">.</span></li>
<li><a href="http://www.netplanet.org/www/browser.shtml" title="Externer Link">Netplanet: Die Geschichte des Webbrowsers</a><span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p><a href="http://harald-kampen.de">Harald Kampen</a>, <abbr>geb.</abbr> 1965, lebt und arbeitet als selbständiger Programmierer und Webdesigner in Emden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/19/html-xhtml-doctypeswitching/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conditional Comments für den Internet Explorer</title>
		<link>http://www.webkrauts.de/2005/12/18/conditional-comments-fuer-den-internet-explorer/</link>
		<comments>http://www.webkrauts.de/2005/12/18/conditional-comments-fuer-den-internet-explorer/#comments</comments>
		<pubDate>Sun, 18 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Nicolai Schwarz</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/18/</guid>
		<description><![CDATA[In einer idealen Webstandards Welt w&#252;rde sich alle Webdesigner, Browser und Tools an die Vorgaben des <abbr title="World Wide Web Consortium, ein Gremium zur Standardisierung von Techniken, die das World Wide Web betreffenden">W3C</abbr> halten. In der Praxis ist das leider nicht der Fall. Insbesondere der Internet Explorer macht in allen Versionen st&#228;ndig Probleme. Eine M&#246;glichkeit, auch diese Browser dazu zu bekommen, ein Design richtig anzuzeigen sind sogenannte Conditional Comments. <em>Diese Technik geh&#246;rt nicht zu den Webstandards, kann in der Praxis aber hilfreich sein.</em>]]></description>
			<content:encoded><![CDATA[<h4>Speziell f&uuml;r den Internet Explorer</h4>
<p>Conditional Comments (CCs) sind eine M&ouml;glichkeit, dem Internet Explorer ab der Version 5 unter Windows bestimmten Code zus&auml;tzlich zu vermitteln. Ein einfaches Beispiel w&auml;re:</p>
<p><code>&lt;!--[if IE]&gt;<br />
&lt;p&gt; Huch, Sie surfen ja noch mit dem Internet Explorer. Schonen Sie Ihre Nerven und steigen Sie auf den Firefox um! Oder auf Opera! Oder Safari!&lt;/p&gt;<br />
&lt;![endif]--&gt;</code></p>
<p>Die Befehle <code>&lt;!--</code> und <code>--&gt;</code> weisen den dazwischenliegenden Text als Kommentar aus, der von Browsern &uuml;blicherweise nicht verarbeitet wird. Allein der Internet Explorer erkennt in der Anweisung <code>[if IE]</code> ein Conditional Comment und stellt den Text dar.</p>
<h4>Verschiedene Steuerungsm&ouml;glichkeiten</h4>
<p>Microsoft hat die Conditional Comments so angelegt, dass sie mit verschiedenen Operatoren verfeinert genutzt werden k&ouml;nnen. Zur Verf&uuml;gung stehen:</p>
<table border="1">
<tr>
<th>Operator</th>
<th>Effekt</th>
</tr>
<tr>
<td>Version</td>
<td>Version des Internet Explorers, etwa 5 oder 6</td>
</tr>
<tr>
<td>!</td>
<td>nicht</td>
</tr>
<tr>
<td>lt</td>
<td>kleiner als (less than)</td>
</tr>
<tr>
<td>lte</td>
<td>kleiner als oder gleich (less than or equal)</td>
</tr>
<tr>
<td>gt</td>
<td>gr&ouml;&szlig;er als (greater than)</td>
</tr>
<tr>
<td>gte</td>
<td>gr&ouml;&szlig;er als oder gleich (greater than or equal)</td>
</tr>
</table>
<p>So meint etwa der Ausdruck <code>[if gte IE 6]</code> alle Internet Explorer der Version 6 oder dar&uuml;ber. Der Ausdruck <code>[if IE 5]</code> betrifft alle Internet Explorer der Version 5.x (unter Windows). M&ouml;chten Sie zwischen 5.0 und 5.5 unterscheiden, k&ouml;nnen Sie bei den Versionen mit Dezimalstellen arbeiten. So meint <code>[if IE 5.0]</code> zwar die Version 5.0, nicht aber die Version 5.5.</p>
<h4>Wozu eignen sich Conditional Comments?</h4>
<p>Sie k&ouml;nnen CCs an jede beliebige Stelle in der XHTML-Datei einbauen. Im Beispiel oben liegt der Code zwischen den <code>&lt;body&gt;</code>-Tags. Im <code>&lt;head&gt;</code>-Bereich eignet sich diese Technik, um dem Internet Explorer ein eigenes Style Sheet zuzuweisen.</p>
<p><code><br />
&lt;link rel="stylesheet" type="text/css" href="allgemein.css" /&gt;<br />
&lt;!--[if IE]&gt;</p>
<p>&lt;link rel="stylesheet" type="text/css" href="iebugs.css" /&gt;<br />
&lt;![endif]--&gt;</code></p>
<p>Die Datei allgemein.css enth&auml;lt hier die korrekten Design-Anweisungen, wie sie die meisten Browser verstehen. Die Datei iebugs.css wird nur vom Internet Explorer zus&auml;tzlich geladen. Damit k&ouml;nnen Anweisungen &uuml;berschrieben werden, die der IE falsch versteht (z.B. das Boxmodell) oder gar nicht interpretiert (etwa <code>position: fixed;</code>).<br />
Der Vorteil an dieser Methode ist, dass Sie Ihre korrekte CSS-Datei nicht mit Hacks f&uuml;r den IE versehen m&uuml;ssen, sondern diese falschen Anweisungen auslagern k&ouml;nnen.</p>
<p>Als Nachteil erhalten Sie eine zus&auml;tzliche Datei. Allerdings ist es bei gr&ouml;&szlig;eren Projekten ohnehin oft &uuml;bersichtlicher, mehrere CSS-Dateien einzubinden, beispielweise unterteilt in Positions-, Schrift- und Farbanweisungen.</p>
<h4>Berechtigte Kritik</h4>
<p>Wie Jens Meiert beim Thema <a href="http://webkrauts.de/adventskalender/14/">Boxmodell</a> bereits erkl&auml;rt hat, ist von den Conditional Comments aus Webstandards Sicht abzuraten. Kommentarklammern dienen dazu, einen Kommentar einzuf&uuml;gen. Stattdessen verstecken CCs nun Anweisungen f&uuml;r einen einzelnen Browser darin. Ein Extraw&uuml;rstchen speziell f&uuml;r den Internet Explorer, der keinem allgemeinen Standard unterliegt.</p>
<h4>N&uuml;tzlich in der Praxis</h4>
<p>Andererseits: Sobald Ihre Designs umfangreicher werden, wird es zumindest mit dem Boxmodell Probleme geben. Entweder Sie ignorieren die fehlerhafte Ansicht im Internet Explorer, verschachteln mehrere <code>&lt;div&gt;</code>-Boxen ineinander, um das Problem zu umgehen, suchen sich passende Hacks oder nutzen Conditional Comments. Alle Methoden sind unzureichend. Jeder Webworker entwickelt hier eigene Vorlieben.</p>
<p>Besondere Aufmerksamkeit k&ouml;nnte den Conditional Comments bei der Ver&ouml;ffentlichung des Internet Explorers 7 zuteil werden. Microsoft hat bereits angek&uuml;ndigt, dass in der neuen Version zahlreiche Bugs beseitigt worden seien, so dass Hacks f&uuml;r aktuelle Versionen des IE nun Fehler im IE 7 erzeugen. Eine M&ouml;glichkeit, den IE 7 schnell dazu zu bringen, alte Seiten mit Hacks wieder richtig anzuzeigen, w&auml;re eine spezielle CSS-Datei &#8211; eingebaut &uuml;ber Conditional Comments.</p>
<h4>Weiterf&uuml;hrende Links</h4>
<ul>
<li><a href="http://www.drweb.de/html/conditional_comments.shtml">Dr. Web: Blitzschnelle Browserweiche</a><span class="aussen">.</span></li>
<li><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/ccomment_ovw.asp">About Conditional Comments</a> &#8211; Die offizielle Erl&auml;uterung von Microsoft (engl.)<span class="aussen">.</span></li>
<li><a href="http://www.bs-markup.de/blog/archiv/2005/10/13/css-auf-internet-explorer-7-vorbereiten/">bs-markup.de: CSS auf Internet Explorer 7 vorbereiten</a><span class="aussen">.</span></li>
<li><a href="http://www.brucelawson.co.uk/index.php/2005/future-proof-your-css-with-conditional-comments/">Future-proof your CSS with Conditional Comments</a> &#8211; Bruce Lawson erkl&auml;rt, wie man am besten verschiedenen Browsern verschiedene CSS-Dateien serviert (engl.)<span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p>Nicolai Schwarz arbeitet als selbstst&auml;ndiger <a href="http://www.textformer.de/">Mediendesigner und Publizist</a> in Dortmund. Wie viele andere Webkrauts schreibt auch er in einem eigenen <a href="http://www.textformer.de/weblog.php">Blog</a> &uuml;ber Webstandards und andere Mediendesign-Themen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/18/conditional-comments-fuer-den-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hilfe bei Browserbugs</title>
		<link>http://www.webkrauts.de/2005/12/17/hilfe-bei-browserbugs-2/</link>
		<comments>http://www.webkrauts.de/2005/12/17/hilfe-bei-browserbugs-2/#comments</comments>
		<pubDate>Sat, 17 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Nina Gerling</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/17/</guid>
		<description><![CDATA[Früher oder später trifft jeder <span lang="en" xml:lang="en">Webdesigner</span> auf einen sogenannten <span lang="en" xml:lang="en">Browserbug</span>. Eigentlich ist man sich sicher, dass man alles richtig gemacht hat, aber Tests zeigen, dass die Webseite in einem oder mehreren <span lang="en" xml:lang="en">Browsern</span> nicht so  dargestellt wird wie gewünscht.]]></description>
			<content:encoded><![CDATA[<p>Bevor nun die große Panik und Frustration ausbricht, gibt es einige Mittel wie man den <span lang="en" xml:lang="en">Bug</span>  orten und entfernen oder zumindest unschädlich machen kann.</p>
<h4>Die 3 Schritte zur (hoffentlichen) <span lang="en" xml:lang="en">Bug</span>-Identifizierung</h4>
<p>Da es nicht immer eindeutig ist wodurch eine Fehldarstellung ausgelöst wird, sollte man bei der Suche folgendermaßen vorgehen:</p>
<h5>1. Käfer mögen es schmutzig &#8230; oder: Validiere deinen <span lang="en" xml:lang="en">Quellcode</span></h5>
<p>Der erste Schritt sollte immer die Validierung des <span lang="en" xml:lang="en">Quellcodes</span> sein. Erst wenn  man weiß, dass der Aufbau des <acronym title="Hypertext Markup Language">HTML</acronym>-Dokuments und der <acronym title="Cascading Style Sheets">CSS</acronym>-Datei korrekt ist, kann man sicher gehen dass nicht bereits darin der Fehler vergraben liegt. Auch in Foren oder <span lang="en" xml:lang="en">Newsgroups</span> wird meist erst dann geholfen wenn diese Grundvoraussetzung erfüllt ist.</p>
<h5>2. Käfer verkriechen sich in Ecken &hellip; oder: Zerteile deinen <span lang="en" xml:lang="en">Quellcode</span></h5>
<p>Ist die getestete Seite valide und das Problem noch nicht behoben, sollte man damit beginnen, in einer Testdatei Abschnitte des <span lang="en" xml:lang="en">Quellcodes</span> zu überprüfen. Taucht die Fehldarstellung <abbr title="zum Beispiel">z.B.</abbr> nur im Navigationsbereich auf, sollte man in der Testdatei ausschließlich den <acronym title="Hypertext Markup Language">HTML</acronym>-Abschnitt abspeichern der die Navigation enthält. Wenn der Fehler immer noch auftaucht, löst ihn irgendeine Angabe aus die im Zusammenhang mit der Navigation steht. Alternativ scheint ein anderer Abschnitt die Wirkung auszulösen. Im zweiteren Fall kann man nun damit beginnen Stück für Stück die Abschnitte des Dokuments wieder hinzuzufügen und zu testen, ab wann der Fehler wieder aktiv wird. Im Idealfall hat man den <span lang="en" xml:lang="en">Bug</span> nun eingegrenzt.</p>
<h5>3. Befrage Käfer-Experten &hellip; oder: Nutze Suchmaschinen und durchforste Webseiten, Foren und <span lang="en" xml:lang="en">Newsgroups</span></h5>
<p>Mit der erfolgreichen Eingrenzung hat man ein großes Stück Arbeit bereits erledigt. Jetzt muss man mit der gefundenen Information im Internet nach Situationen suchen, wo andere <span lang="en" xml:lang="en">Webdesigner</span> auf diesen Fehler gestoßen sind und hoffentlich ihre Lösung dafür veröffentlicht haben. Ein guter Anfangspunkt sind Foren die sich speziell mit dem Thema beschäftigen. Eine kluge Wahl von Begriffen führt mit Hilfe der Forensuche schon zu passenden oder thematisch verwandten Beiträgen. Alternativ kann man auch einen Beitrag mit der Bitte um Hilfe öffnen. Idealerweise enthält dieser Beitrag eine möglichst konkrete Fehlerbeschreibung, einen Link zur Testseite auf der man den Fehler nachvollziehen kann und eine Erklärung inwiefern man den <span lang="en" xml:lang="en">Bug</span> vielleicht schon auf einen Abschnitt des Dokuments eingegrenzt hat. Mit etwas Glück erhält man schon bald eine helfende Antwort. Bei <span lang="en" xml:lang="en">Newsgroups</span> wendet man die gleiche Methode an. Allerdings ist es hier manchmal schwieriger die Archive zu durchforsten.</p>
<p>Wenn beide Wege zu keinem Ergebnis geführt haben, kann man sein Glück noch mit einer Suchmaschine auf die Probe stellen. Allerdings ist hier meist bereits etwas Erfahrung in der Bugsuche von Nöten um geeignete Suchbegriffe zu finden. Es empfiehlt sich, <span lang="en" xml:lang="en">Google</span> in Verbindung mit englischen Suchbegriffen zu nutzen um so auf möglichst viele Ergebnisse zu kommen.</p>
<h4>Die Nutzung von sogenannten <span lang="en" xml:lang="en">Hacks</span></h4>
<p>Es würde zu weit führen, wenn ich hier noch erkläre, welche <span lang="en" xml:lang="en">Hacks</span> es gibt und welche Vor- und Nachteile sie mit sich bringen. Ich möchte aber davor warnen, zu viele <span lang="en" xml:lang="en">Hacks</span> einzusetzen. Es ist zwar so, dass man manche <span lang="en" xml:lang="en">Bugs</span> wirklich nur dadurch lösen kann, aber es sollte möglichst nach anderen Lösungen gesucht werden. Wenn es keine Alternative gibt, ist es empfehlenswert, die <span lang="en" xml:lang="en">Hacks</span> innerhalb der <acronym title="Cascading Style Sheets">CSS</acronym>-Angaben durch Kommentare kurz zu erklären, so dass man auch später noch weiß weshalb bestimmte Formulierungen eingesetzt wurden.</p>
<h5>Kleine Anmerkung am Rande: Das &bdquo;Problem&ldquo; mit dem <span lang="en" xml:lang="en">Internet Explorer</span> 7</h5>
<p>Aus gegebenem Anlass möchte ich noch kurz darauf hinweisen, dass es durch die baldige Veröffentlichung des <span lang="en" xml:lang="en">Internet Explorer</span> 7 zu massiven Problemen mit einigen herkömmlichen <span lang="en" xml:lang="en">Hacks</span> für<br />
    <span lang="en" xml:lang="en"><abbr title="Inernet Explorer">IE</abbr>-Bugs</span> kommen kann. Ich habe deshalb einen Link mit angegeben, der diese Thematik bespricht und eine Lösung dafür präsentiert.</p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://www.fabrice-pascal.de/bugbase/" title="Externer Link zur Bugbase"><span lang="en" xml:lang="en">Bugbase</span> &ndash; deutsche <span lang="en" xml:lang="en">Bug</span>-Datenbank</a> <span class="aussen">.</span></li>
<li><a href="http://www.positioniseverything.net/articles.html" title="Externer Link zu Position is everything"><span lang="en" xml:lang="en">Position is everything</span> &ndash; umfangreiche <span lang="en" xml:lang="en">Bug</span>-Artikel</a> <span class="aussen">.</span></li>
<li><a href="http://www.quirksmode.org/css/csshacks.html" title="Externer Link zu Quirksmode"><span lang="en" xml:lang="en">Quirksmode</span> &ndash; </a>  <span class="aussen">.</span></li>
<li><a href="http://www.carsten-protsch.de/zwischennetz/doctype/box_model_bug.html" title="Externer Link zur Box-Model Bug Erklärung">Erklärung des berühmten Box-Model Bugs</a> <span class="aussen">.</span></li>
<li><a href="http://www.perun.net/2005/10/14/css-hacks-und-die-entwickler-von-ie-7/" title="Externer Link zu Peruns Blog">Peruns Blog: <acronym title="Internet Explorer">IE</acronym> 7 &ndash; <span lang="en" xml:lang="en">Conditional Comments</span></a> <span class="aussen">.</span></li>
</ul>
<h4>Zur Autorin</h4>
<p>Nina Gerling ist die Gründerin des <a href="http://www.ena-webstudio.com/" title="Externer Link zur Webseite des ena Webstudios">ena Webstudios</a> und legt ihre Interessens-Schwerpunkte auf barrierefreies Webdesign in Kombination mit moderner Gestaltung. Sie ist zudem Redakteurin des Blogs &bdquo;<a href="http://www.pro-barrierefreiheit.de/" title="Externer Link zum Blog von pro Barrierefreiheit">pro Barrierefreiheit</a>&ldquo;, in dem regelmäßig Informationen zur Barrierefreiheit veröffentlicht werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/17/hilfe-bei-browserbugs-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Festes vs. flexibles Layout</title>
		<link>http://www.webkrauts.de/2005/12/16/festes-vs-flexibles-layout/</link>
		<comments>http://www.webkrauts.de/2005/12/16/festes-vs-flexibles-layout/#comments</comments>
		<pubDate>Fri, 16 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Nicolai Schwarz</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/16/</guid>
		<description><![CDATA[Mittlerweile haben wir gen&#252;gend CSS-Wissen gesammelt, um uns Gedanken &#252;ber das Grunddesign zu machen. Eine entscheidende Frage ist, wie sich unsere Seite in der Breite verhalten soll. In Frage kommen ein festes Layout, das immer dieselbe Breite einnimmt, oder ein flexibles Layout, das sich dynamisch dem Browserfenster anpasst.]]></description>
			<content:encoded><![CDATA[<h4>Ein einfaches Beispiel</h4>
<p>Ein Layout besteht selten aus einer einzelnen Spalte und so legen wir f&uuml;r unser Beispiel eine Inhalts- und eine Nebenspalte zugrunde. Das Markup, also der XHTML-Code, soll f&uuml;r diese Elemente wie folgt aussehen:</p>
<p class="bsp"><code>&lt;div id="inhalt"&gt;<br />
&lt;!-- Inhalt der Hauptspalte--&gt;</p>
<p>&lt;/div&gt;</code></p>
<p class="bsp"><code>&lt;div id="nebenspalte"&gt;<br />
&lt;!-- Inhalt der Nebenspalte-- &gt;<br />
&lt;/div&gt;</code></p>
<p>Wir formatieren dieses Markup per CSS.</p>
<h4>Feste Breiten</h4>
<p>Die erste M&ouml;glichkeit w&auml;re, beiden Elementen eine feste Breite zu geben. Pixel sind hier die &uuml;bliche Einheit. Unsere CSS-Vorgaben hei&szlig;en also:</p>
<p class="bsp"><code>#inhalt {<br />
float: left;<br />
width: 520px;<br />
}</code></p>
<p class="bsp"><code>#nebenspalte {<br />
float: right;<br />
width: 240px;<br />
}</code></p>
<p>Wir gehen von einer Bildschirmbreite des Besuchern von 800&#215;600 Pixel aus. Da wir Raum f&uuml;r eine Scrollbar lassen m&uuml;ssen, beschr&auml;nken wir hier die Breite des gesamten Layouts auf 760 Pixel.</p>
<p>Per float wird die Inhaltsspalte links ausgerichtet, die Nebenspalte dagegen rechts. Im Realfall sind diese beiden divs meist von einem Mantel-div der richtigen Breite umschlossen, &uuml;ber das sich alle Elemente gemeinsam in der Mitte der Seite positionieren lassen.</p>
<p><img src="http://webkrauts.de/051216_feste_breiten.gif" alt="Beispiel: festes Layout in verschieden breiten Browserfenstern" title="Beispiel: festes Layout in verschieden breiten Browserfenstern" /></p>
<p>Der Vorteil fester Breiten ist, dass wir pixelgenau arbeiten k&ouml;nnen. Etwa wenn es um passgenaue Bilder in den beiden Spalten geht. Au&szlig;erdem k&ouml;nnen wir bei der Schrift im Zusammenspiel mit der festen Zeilenbreite auf eine gute Lesbarkeit achten.</p>
<p>Der Nachteil ist, dass ein solches, meist schmales Design auf einem gro&szlig;en Bildschirm recht verloren aussehen kann. Au&szlig;erdem hat der Nutzer keine M&ouml;glichkeit, die Breite der Seite selbst zu beeinflussen.</p>
<h4>Flexible Breiten</h4>
<p>Wenn wir die Breiten nicht in Pixel, sondern in Prozenten angeben, wird das Design flexibel:</p>
<p class="bsp"><code>#inhalt {<br />
float: left;<br />
width: 70%;</p>
<p>}</code></p>
<p class="bsp"><code>#nebenspalte {<br />
float: right;<br />
width: 30%;<br />
}</code></p>
<p>Diese beiden Spalten werden sich nun jeweils an der Gesamtbreite des Browserfensters orientieren. Der Bildschirm ist so immer ausgef&uuml;llt. Wenn der User wollte, k&ouml;nnte er sich die Breite des Browserfensters nach Belieben zurechtschieben, um so die Zeilenl&auml;nge der Spalten zu beeinflussen.</p>
<p><img src="http://webkrauts.de/051216_flexible_breiten.gif" alt="Beispiel: flexibles Layout in verschieden breiten Browserfenstern" title="Beispiel: flexibles Layout in verschieden breiten Browserfenstern" /></p>
<p>Der gr&ouml;&szlig;te Nachteil ist, dass wir eben diesen Einfluss auf die Zeilenl&auml;nge verlieren. Auf sehr breiten Bildschirmen kann die Lesbarkeit sehr erschwert werden, falls der Nutzer seinen Browser in der vollen Bildschirmgr&ouml;&szlig;e ge&ouml;ffnet hat.<br />
Au&szlig;erdem m&uuml;ssen wir uns hier mehr Gedanken &uuml;ber die Bilder auf der Seite machen. Alle Bilder m&uuml;ssen auf ihren jeweiligen Positionen bei kleinen und bei gro&szlig;en Breiten ansprechend gesetzt werden und d&uuml;rfen keine L&uuml;cken erzeugen.</p>
<p>Auch in diesem Beispiel sind die Spalten direkt Seite an Seite gesetzt. Um R&auml;nder zu erzeugen, k&ouml;nnten wir f&uuml;r <code>#inhalt</code> und <code>#nebenspalte</code> die CSS-Eigenschaften <code>margin-left</code> und <code>margin-right</code> nutzen. Einfacher ist es jedoch sp&auml;ter den Elementen innerhalb der divs, also etwa <code>&lt;h1&gt;</code> oder <code>&lt;p&gt;</code>, einen Rand zu geben.</p>
<h4>Was ist besser?</h4>
<p>Manche Webworker argumentieren leidenschaftlich, warum die eine Herangehensweise der anderen &uuml;berlegen ist. Fakt ist, dass beide ihre Vor- und Nachteile haben. In der Praxis w&auml;gt man beide M&ouml;glichkeiten anhand des aktuellen Projektes gegeneinander ab.</p>
<p>Dan Cederholms Website <a href="http://www.simplebits.com/">SimpleBits</a> eignet sich hervoragend, um beide M&ouml;glichkeiten in Aktion zu sehen. In der blauen Leiste rechts oben befinden sich zwei kleine Icons, mit denen das Layout zwischen fest und flexibel umgestellt werden kann. Diese Variante l&auml;sst dem User alle Freiheiten &#8211; und verlangt vom Webdesigner einiges Wissen &uuml;ber CSS.</p>
<h4>Weitere M&ouml;glichkeiten</h4>
<p>Anstatt rein feste oder rein flexible Breiten zu w&auml;hlen, sind auch Mischformen m&ouml;glich. Dann wird meist der Nebenspalte eine feste Pixel-Breite gegeben, w&auml;hrend die Spalte f&uuml;r den Inhalt mit Prozentwerten arbeitet.</p>
<p>Mit Hilfe der CSS-Eigenschaften <code>min-width</code> und <code>max-width</code> k&ouml;nnen wir die Breiten bei flexiblen Designs besser kontrollieren. So k&ouml;nnen wir z.B. die Mindestbreite auf 760 Pixel und die Maximalbreite auf 1200 Pixel setzen, um eine gute Kontrolle &uuml;ber das Layout zu haben und die Lesbarkeit zu gew&auml;hrleisten.  Allerdings interpretiert der Internet Explorer diese Eigenschaften noch nicht.</p>
<p>Alternativ kann es in manchen F&auml;llen sinnvoll sein, Breiten in der Einheit em festzulegen. Diese Einheit orientiert sich an der Schriftgr&ouml;&szlig;e. Die Breite der Box w&auml;chst dadurch zusammen mit der Schriftgr&ouml;&szlig;e. Mehr dazu finden Sie in den folgenden Links.</p>
<h4>Weiterf&uuml;hrende Links</h4>
<ul>
<li><a href="http://praegnanz.de/essays/typo-im-web-bitte-abstand-halten">praegnanz.de: Bitte Abstand halten</a> &#8211; u.a. &uuml;ber sinnvoll gew&auml;hlte Spaltenbreiten<span class="aussen">.</span></li>
<li><a href="http://www.1ngo.de/web/em.html">1ngo.de: &raquo;em&laquo; nicht nur f&uuml;r Schriftgr&ouml;&szlig;en!</a> &#8211; em als Einheit f&uuml;r die Breite<span class="aussen">.</span></li>
<li><a href="http://www.roell.net/weblog/archiv/2004/03/02/warum_feste_spaltenbreiten_mist_sind.shtml">roell.net: Warum feste Spaltenbreiten Mist sind</a> &#8211; <em>eine</em> Meinung samt Diskussion in den Kommentaren<span class="aussen">.</span></li>
</ul>
<h4>Zum Autor</h4>
<p>Nicolai Schwarz betreibt die kleine Agentur <a href="http://www.textformer.de/">textformer Mediendesign</a> in Dortmund. Seit etwa drei Jahren sch&auml;tzt er den Sinn, die Eleganz und &Uuml;berlegenheit von Web Standards und predigt diese in Webdesign-Schulungen. Wie viele andere Webkrauts schreibt er in einem eigenen <a href="http://www.textformer.de/weblog.php">Blog</a> &uuml;ber Web Standards und Mediendesign.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/16/festes-vs-flexibles-layout/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Positionierung mit CSS</title>
		<link>http://www.webkrauts.de/2005/12/15/positionierung-2/</link>
		<comments>http://www.webkrauts.de/2005/12/15/positionierung-2/#comments</comments>
		<pubDate>Thu, 15 Dec 2005 21:00:00 +0000</pubDate>
		<dc:creator>Teresia Kuhr</dc:creator>
				<category><![CDATA[Adventskalender 2005]]></category>

		<guid isPermaLink="false">http://webkrauts.de/adventskalender/15/</guid>
		<description><![CDATA[<acronym>CSS</acronym> ist nicht nur zur Auszeichnung von Schrift oder zur farbigen Gestaltung da - mit <acronym>CSS</acronym> können alle Elemente auch im Raum positioniert werden. So kann ein ansprechendes <span lang="en" xml:lang="en">Layout</span> gestaltet werden - ganz ohne Stützkorsett aus Tabellen, wie es lange üblich war. Das hat den Vorteil, dass ein solches <span lang="en" xml:lang="en">Layout</span> später jederzeit leicht ohne Eingriff ins Markup verändert werden kann - nur durch Veränderungen in der <acronym title="Cascading Style Sheets">CSS</acronym>-Datei. So kann <abbr>z.&#8201;B.</abbr> leicht ein Menü von links nach rechts versetzt werden - nur durch eine Änderung in der <acronym title="Cascading Style Sheets">CSS</acronym>-Datei und das auf allen Seiten gleichzeitig!]]></description>
			<content:encoded><![CDATA[<h4>Positionierungsarten</h4>
<p>Es gibt verschiedene Arten der Positionierung. Wird keine Positionierungsangabe mitgegeben, so werden die Elemente einfach in ihrem natürlichen Fluß positioniert (was der Angabe <code>position:static</code> entspräche). <span lang="en" xml:lang="en">Inline</span>-Elemente (<abbr>z.&thinsp;B.</abbr> <code>a, img, span</code>) legen sich dabei nebeneinander, Blockelemente (<abbr>z.&thinsp;B.</abbr> <code>h<sub>x</sub>, p, div</code>) dagegen untereinander. Möchte man ein anderes Verhalten, so kann <code>display</code> helfen. </p>
<h5>Relative Positionierung</h5>
<p>Mit <code>position:relative</code>kann das Element aus seinem natürlichen Fluß heraus verschoben werden. Dabei verschieben sich die umgebenden Elemente nicht mit &#8211; Überlappungen sind also möglich.<br />
Außerdem kann ein relativ positioniertes Element auch als Elternelement für absolut positionierte dienen. Gelegentlich braucht man diese Positionierungsart auch, um Browserbugs zu reparieren &#8211; speziell dem Internet Explorer hilft es oft, Elemente wie gewünscht am Platz zu halten.</p>
<h5>Absolute Positionierung</h5>
<p>Durch <code>position:absolute</code> kann man Elemente genau an bestimmte Stellen positionieren &#8211; was auf der einen Seite verlockend erscheint, vor allem für diejenigen, die gerne ein pixelgenaues <span lang="en" xml:lang="en">Layout</span> wollen. Auf der anderen Seite sind absolut positionierte <span lang="en" xml:lang="en">Layouts</span> aber extrem unflexibel, da die Elemente keinerlei Rücksicht aufeinander nehmen &#8211; sie legen sich im Zweifelsfalle einfach übereinander und verdecken den Inhalt. Insbesondere bei Schriftvergrößerungen oder anderen <span lang="en">Viewport</span>größen gibt es oft Probleme.</p>
<h5>Fixe Position</h5>
<p>Mit <code>position:fixed</code> können Elemente auf der Seite fixiert werden &#8211; auch beim Scrollen bleibt ein so positioniertes Element zum Beispiel immer in einer bestimmten Ecke. Leider können noch nicht alle Browser diese Positionierung (genauer: der Internet Explorer kann es nicht) &#8211; außerdem muß man natürlich auch hier wieder die mögliche Überlappung und Verdeckung anderer Inhalte beachten.</p>
<h4>Das Floaten</h4>
<p>Doch damit nicht genug &#8211; <acronym>CSS</acronym> kann noch mehr!<br /> <br />
Man braucht nicht immer positionieren, Elemente können auch einfach per <code>float</code> nach rechts oder links verschoben werden. Der Inhalt bleibt dabei immer sichtbar und wird nur verschoben.<br />
Mit Floats bleibt man also sehr flexibel in der Gestaltung.<br />
Allerdings soll auch nicht verschwiegen werden, dass es leider einige <span lang="en">Browser</span>probleme gerade bei der Verwendung von <code>float</code> gibt, die einem das Leben manchmal schwer machen können.</p>
<p>Zusammenfassend läßt sich sagen, dass <acronym>CSS</acronym> viele Möglichkeiten an die Hand gibt, eine <span lang="en">Web</span>seite ansprechend zu gestalten. Tabellen als Fachwerkkrücke sind daher heute nicht mehr notwendig. Trotzdem braucht es etwas Erfahrung, weil die doch recht unterschiedlichen Browserinterpretationen nicht immer einfach zu beherrschen sind.</p>
<h4>Weiterführende Links:</h4>
<ul>
<li><a href="http://terrikay.de/artikel/positionierung.html">Positionierung der Elemente &#8211; ein Artikel von Teresia Kuhr</a></li>
<li><a href="http://www.webwriting-magazin.de/sogehts/cssebenen.shtml">Seiten gestalten ohne Tabellen &#8211; eine Einführung von Michael Charlier</a></li>
<li><a href="http://css-technik.de/css-examples/219_9/"><span lang="en">Float</span>: Die Theorie &#8211; Artikel von <span lang="en">John P. Gallant</span> und <span lang="en">Holly Bergevin</span> &#8211; übersetzt von Andreas Kalt und Jens Grochtdreis</a></li>
<li><a href="http://www.w3.org/TR/REC-CSS2/visuren.html">Das Original &#8211; die <abbr>W3C</abbr>-Spezifikation zum Thema (englisch)</a></li>
<li><a href="http://www.positioniseverything.net/">Position is everything &#8211; der Klassiker mit vielen Hilfen zu Browserbugs von <span lang="en">Big John</span> und <span lang="en">Holly Bergevin</span> (englisch)</a></li>
</ul>
<h4>Zur Autorin:</h4>
<p>Teresia Kuhr ist Ärztin an einer Neurologischen Rehabilitationsklinik und beschäftigt sich in ihrer Freizeit mit standardkonformen und barrierefreiem <span lang="en">Webdesign</span>. Ein Projekt ist <a href="http://css4you.de">CSS4you</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkrauts.de/2005/12/15/positionierung-2/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

