<?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>FlorianFranke.net &#187; HTML</title>
	<atom:link href="http://florianfranke.net/category/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://florianfranke.net</link>
	<description>Mein Senf</description>
	<lastBuildDate>Tue, 04 May 2010 14:56:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Radio-Button und Text auf gleicher Höhe im IE6</title>
		<link>http://florianfranke.net/2009/06/27/radio-button-und-text-auf-gleicher-hohe-im-ie6/</link>
		<comments>http://florianfranke.net/2009/06/27/radio-button-und-text-auf-gleicher-hohe-im-ie6/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 10:32:06 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[conditional comments]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=712</guid>
		<description><![CDATA[In einem früheren Artikel habe ich über eine Möglichkeit geschrieben, ein Radio-Button, bzw. eine Checkbox, und den dazugehörigen Text auf eine Höhe zu bringen: input { vertical-align: bottom; } Diese Variante funktioniert leider nicht im Internet Explorer. Der geliebte IE benötigt wiedermal eine Sonderbehandlung: input { vertical-align: baseline; } Damit z.B. Firefox die vertikale Ausrichtung [...]]]></description>
			<content:encoded><![CDATA[<p>In einem früheren <a href="http://florianfranke.net/2009/05/08/tipp-radio-button-und-text-auf-gleicher-hohe/" target="_self">Artikel</a> habe ich über eine Möglichkeit geschrieben, ein Radio-Button, bzw. eine Checkbox, und den dazugehörigen Text auf eine Höhe zu bringen:</p>
<pre>input {
    vertical-align: bottom;
}</pre>
<p>Diese Variante funktioniert leider nicht im <strong>Internet Explorer</strong>.<br />
Der geliebte IE benötigt wiedermal eine Sonderbehandlung:</p>
<pre>input {
    vertical-align: baseline;
}</pre>
<p>Damit z.B. <strong>Firefox</strong> die vertikale Ausrichtung <strong>bottom</strong> und der <strong>IE</strong> die Ausrichtung <strong>baseline</strong> interpretiert, hier zwei Vorschläge zur Umsetzung.</p>
<h3>IE-Hack</h3>
<pre>input {
    vertical-align: bottom;
    #vertical-align: baseline /* IE */
}</pre>
<h3>Conditional Comments</h3>
<pre>&lt;!--[if IE]&gt;
input {
    vertical-align: baseline;
}
&lt;![endif]--&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2009/06/27/radio-button-und-text-auf-gleicher-hohe-im-ie6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tipp: Radio-Button und Text auf gleicher Höhe UPDATE</title>
		<link>http://florianfranke.net/2009/05/08/tipp-radio-button-und-text-auf-gleicher-hohe/</link>
		<comments>http://florianfranke.net/2009/05/08/tipp-radio-button-und-text-auf-gleicher-hohe/#comments</comments>
		<pubDate>Fri, 08 May 2009 15:33:04 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[radio-button]]></category>
		<category><![CDATA[tipp]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=611</guid>
		<description><![CDATA[Ziel ist es einen Radio-Button bzw. Checkbox zu erstellen. Daneben wird ein Beschreibungstext angezeigt, der auf gleicher Höhe angezeigt wird. Es wird folgender HTML-Code verwendet: &#60;input type="checkbox" id="test" /&#62; &#60;label for="test"&#62;Gleiche Höhe&#60;/label&#62; Wenn dieser Code verwendet wird, sieht das Ergebnis jedoch nicht so aus, wie es angedacht ist. Um das Problem zu lösen, reicht folgende [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_615" class="wp-caption alignright" style="width: 111px"><a href="http://florianfranke.net/wp-content/uploads/2009/05/gleiche_hoehe.gif"><img class="size-full wp-image-615" title="gleiche_hoehe" src="http://florianfranke.net/wp-content/uploads/2009/05/gleiche_hoehe.gif" alt="Ziel: Gleiche Höhe" width="101" height="25" /></a><p class="wp-caption-text">Ziel: Gleiche Höhe</p></div>
<p>Ziel ist es einen Radio-Button bzw. Checkbox zu erstellen. Daneben wird ein Beschreibungstext angezeigt, der auf gleicher Höhe angezeigt wird.</p>
<p>Es wird folgender HTML-Code verwendet:</p>
<pre>&lt;input type="checkbox" id="test" /&gt;
&lt;label for="test"&gt;Gleiche Höhe&lt;/label&gt;</pre>
<div id="attachment_619" class="wp-caption alignright" style="width: 168px"><a href="http://florianfranke.net/wp-content/uploads/2009/05/nicht_auf_gleicher_hoehe.gif"><img class="size-full wp-image-619" title="nicht_auf_gleicher_hoehe" src="http://florianfranke.net/wp-content/uploads/2009/05/nicht_auf_gleicher_hoehe.gif" alt="Nicht auf gleicher Höhe" width="158" height="28" /></a><p class="wp-caption-text">Nicht auf gleicher Höhe</p></div>
<p>Wenn dieser Code verwendet wird, sieht das Ergebnis jedoch nicht so aus, wie es angedacht ist.</p>
<p>Um das Problem zu lösen, reicht folgende<strong> CSS-Eigenschaft</strong>:</p>
<pre>input {
    vertical-align: bottom;
}</pre>
<p>Mit dieser kleinen Änderung wird nun der Text direkt neben dem Radio-Button bzw. neben der Checkbox angezeigt.</p>
<h3>Update</h3>
<p><a href="http://florianfranke.net/2009/06/27/radio-button-und-text-auf-gleicher-hohe-im-ie6/" target="_self">IE-Kompatibel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2009/05/08/tipp-radio-button-und-text-auf-gleicher-hohe/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Save IE6 !</title>
		<link>http://florianfranke.net/2009/04/03/save-ie6/</link>
		<comments>http://florianfranke.net/2009/04/03/save-ie6/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 13:04:54 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Lustiges]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Save IE6]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=473</guid>
		<description><![CDATA[www.saveie6.com]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.saveie6.com/index.php" target="_blank">www.saveie6.com</a></p>
<p>Und warum?</p>
<blockquote>
<ul>
<li>Proven  technology. It’s been around since 2001.</li>
<li>NO  bugs.</li>
<li>No  unnecessary features that use up valuable screen space, such as tabs.</li>
<li>Handles  GIF transparency.</li>
<li>First  with AJAX technology (XMLHttpRequest, available since IE5).</li>
<li>Renders  all pages as they are supposed to look by the only standard that really  matters.</li>
<li>Consistent  rendering of pages makes it the web designer’s best friend.</li>
<li>The  most aesthetically pleasing web browser logo.</li>
<li>Highly  secure (has received lots of security updates).</li>
<li>Clear  interface.</li>
<li>Used  by 97.34% of all internet users according to a onestat survey released July 28,  2003.</li>
</ul>
</blockquote>
<p>PS: The SaveIE6 campaign was launched on April 1 <img src='http://florianfranke.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2009/04/03/save-ie6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Abgerundete Ecken</title>
		<link>http://florianfranke.net/2009/03/04/abgerundete-ecken/</link>
		<comments>http://florianfranke.net/2009/03/04/abgerundete-ecken/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 13:29:51 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[abgerundete Ecken]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[rounded border]]></category>
		<category><![CDATA[rounded corner]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=305</guid>
		<description><![CDATA[Seit einiger Zeit benötige ich zum Umsetzen eines Designs in HTML eine Variante um möglichst flexible abgerundete Div-Container zu erstellen.]]></description>
			<content:encoded><![CDATA[<h3>Einleitung</h3>
<p><img class="alignright size-full wp-image-384" title="blau" src="http://florianfranke.net/wp-content/uploads/2009/03/blau.gif" alt="blau" width="211" height="60" />Seit einiger Zeit benötige ich zum Umsetzen eines Designs in HTML eine Variante um möglichst flexible abgerundete Div-Container (nachfolgend: Container) zu erstellen.<br />
Dabei bin ich auf viele verschiedene Möglichkeiten gestoßen und möchte die meiner Meinung nach (momentan) Beste vorstellen und beschreiben wie ich sie anwende.</p>
<p>Gleich zu Beginn schonmal die Vor- und Nachteile:</p>
<h4>Vorteile</h4>
<ul>
<li>Nur eine Grafik</li>
<li>Sehr flexibel in Breite und Höhe (die Breite ist von der Größe der Grafik abhängig, dazu aber später mehr)</li>
<li>Verhältnismäßig wenig HTML- und CSS-Code</li>
<li>Kein Javascript</li>
</ul>
<h4>Nachteile</h4>
<ul>
<li>Vorder- und Hintergrund muss einfarbig sein</li>
</ul>
<h3>Beschreibung</h3>
<h4>Grafik</h4>
<p>Ich verwende eine Grafik mit den Maßen 2000px*16px. Dadurch habe ich die Möglichkeit, abgerundete Container mit einer Breite von 1000px zu erstellen. Warum &#8220;nur&#8221; 1000px, dazu jetzt mehr.</p>
<p><a href="http://florianfranke.net/rounded-box/rounded-box.gif" target="_blank">Hier die Grafik (Achtung: Nach rechts scrollen).</a></p>
<p>Die Grafik teilen wir uns gedanklich in zwei Bereich der Größe 1000px*16px.<br />
Der linke Bereich stellt den größten Teil des Wunsch-Containers dar. Es fehlen nur die abgerundeten Ecken auf der rechten Seite.</p>
<p>Der rechte Bereich beinhaltet lediglich die abgerundeten Ecken am rechten Rand. Die restliche Fläche ist transparent.</p>
<p>Soviel vorerst zur Grafik.</p>
<h3>Theorie</h3>
<p>Bevor ich den HTML- und CSS-Code erkläre, vorerst die Theorie, was letztendlich passieren soll:</p>
<p>Wir erstellen einen Container mit einer Breite von 500px und variabler Höhe der als Grundlage für unseren späteren abgerundeten Container dient.<br />
In diesem Container wird der benötigte HTML-Code für die abgerundeten Ecken eingebaut, der aus fünf Containern besteht.</p>
<p>Insgesamt haben wir also sechs Container, von denen der Erste den Zweiten, der Zweite den Dritten usw. einschließt.</p>
<p>Dadurch werden sechs Container der gleichen Größe aus HTML-Sicht &#8220;übereinander&#8221; gelegt.<br />
Der unterste Container definiert die Größe des Wunsch-Containers.<br />
Der zweite Container beinhaltet die obere linke, der Dritte die obere rechte, der Vierte die untere linke und der Fünfte die untere rechte abgerundete Ecke.<br />
Im sechsen Container wird der Inhalt eingetragen.</p>
<h3>HTML</h3>
<p>Auf HTML-Seite ist es relativ einfach, jedoch ist die Reihenfolge wichtig:</p>
<pre>&lt;div class="container"&gt;
	&lt;div class="rounded-box tl"&gt;
		&lt;div class="rounded-box tr"&gt;
			&lt;div class="rounded-box bl"&gt;
				&lt;div class="rounded-box br"&gt;
				  &lt;div class="rounded-box content"&gt;
				     Inhalt
				  &lt;/div&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;</pre>
<h3>CSS</h3>
<p>Nun zum interessanten Teil:</p>
<pre>div.container {
    margin: 0;
    padding: 0;
}
div.container div.rounded-box {
    background-image:url(rounded-box.gif) top left no-repeat;
}</pre>
<p>Um später nicht für alle vier Container (<strong>t</strong>op <strong>l</strong>eft, <strong>t</strong>op <strong>r</strong>ight, <strong>b</strong>ottom <strong>l</strong>eft, <strong>b</strong>ottom <strong>r</strong>ight) jeweils das Bild per background-image definieren zu müssen, definiere ich es einmalig in der CSS-Klasse &#8220;rounded-box&#8221;.</p>
<h4>Ecke oben links (tl)</h4>
<pre>div.container div.rounded-box.tl {
    background-position: left top;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_1.html" target="_blank">Schritt #1 anzeigen</a></p>
<p>Das Hintergrundbild wird im Container am oberen linken Rand positioniert um die abgerundete Ecke anzeigen zu lassen.<a href="http://florianfranke.net/rounded-box/Schritt_1.html" target="_blank"><br />
</a></p>
<h4>Ecken oben rechts (tr)</h4>
<p>Im nächsten Schritt wird die obere rechte Ecke hinzugefügt:</p>
<pre>div.container div.rounded-box.tr {
    background-position: right top;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_2.html" target="_blank">Schritt #2 anzeigen</a></p>
<p>Dieser Container liegt direkt über dem tl-container. Die Positionierung des Hintergrundbilds ist diesmal so angelegt, dass die rechte obere Ecke angezeigt wird.<br />
Hier kommt der transparente Bereich der Grafik zum Tragen. Wäre der Teil nicht transparent, würde die obere linke Ecke verdeckt werden.<a href="http://florianfranke.net/rounded-box/Schritt_2.html" target="_blank"><br />
</a></p>
<p>Wie zu sehen ist, haben wird prinzipiell nur die Grafik an die Breite des ersten Containers angepasst. Es werden schon alle vier abgerundeten Ecken angezeigt.<br />
Das Problem ist, dass sich die Grafik nicht an die Höhe des Inhalts anpasst.</p>
<h4>Ecke unten links (bl)</h4>
<p>Um nun die untere linke Ecke auch unterhalb des Textes zu positionieren, wird folgende CSS-Klasse genutzt:</p>
<pre>div.container div.rounded-box.bl {
    background-position: left bottom;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_3.html" target="_blank">Schritt #3 anzeigen</a></p>
<p>Nun wird die Grafik ein zweites Mal angezeigt, dieses Mal jedoch an der unteren Kante und es fehlt die untere rechte abgerundete Ecke.<a href="http://florianfranke.net/rounded-box/Schritt_3.html" target="_blank"><br />
</a></p>
<h4>Ecke unten rechts (br)</h4>
<pre>div.container div.rounded-box.br {
    background-position: right bottom;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_4.html" target="_blank">Schritt #4 anzeigen</a></p>
<p>Wenn wir diese CSS-Klasse eingebaut haben, wird uns also die Grafik zwei Mal angezeigt:<br />
Zum einen am oberen Rand und zum andere am unteren Rand des ersten Containers.<a href="http://florianfranke.net/rounded-box/Schritt_4.html" target="_blank"><br />
</a></p>
<p>Das wichtige hierbei ist, dass wir an allen vier Ecken die abgerundete Grafik abgezeigt bekommen. Zwar entspricht das aktuelle Ergebnis noch nicht unserem Wunschergebnis, jedoch ist man dem Ziel schon deutlich näher.</p>
<h4>Inhaltshintergrund</h4>
<p>Im nächsten Schritt wird der fehlende Teil zwischen der oberen und unteren Kante mit der gewünschten Hintergrundfarbe befüllt:</p>
<pre>div.container div.rounded-box.content {
    background: #17a5c9;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_5.html" target="_blank">Schritt #5 anzeigen</a></p>
<p>Wenn wir uns das Ergebnis nun aber anschauen, fehlen jegliche abgerundeten Ecken.<br />
Der Grund dafür liegt in den Größen der Boxen. Es liegen sechs <strong>gleichgroße </strong>Div-Boxen übereinander. Wenn man sich das anhand gleich großer Folien auf einem Overheadprojektor vorstellt, versteht man auch das Ergebnis:</p>
<ul>
<li><a href="http://florianfranke.net/rounded-box/Folie_1.gif" target="_blank">Folie 1</a>: Leer</li>
<li><a href="http://florianfranke.net/rounded-box/Folie_2.gif" target="_blank">Folie 2</a>: Oberer Bereich blau gefärbt inklusive einer abgerundeten Ecke mit weißem Hintergrund</li>
<li><a href="http://florianfranke.net/rounded-box/Folie_3.gif" target="_blank">Folie 3</a>: Der obere rechte Teil mit der abgerundeten Ecke</li>
<li><a href="http://florianfranke.net/rounded-box/Folie_4.gif" target="_blank">Folie 4</a>: Untere linke Ecke und bis zum rechten Rand blau</li>
<li><a href="http://florianfranke.net/rounded-box/Folie_5.gif" target="_blank">Folie 5</a>: Unterer rechter Bereich gefärbt (siehe Folie 3)</li>
<li><a href="http://florianfranke.net/rounded-box/Folie_6.gif" target="_blank">Folie 6</a>: Komplett blau gefärbt.</li>
</ul>
<p>Um nun die abgerundeten Ecken wieder sichtbar zu machen, &#8220;schneiden&#8221; wir von Folie 6 oben und unten einen Teil ab. Die Höhe der abgeschnittenen Teile entspricht der Höhe einer abgerundeten Ecke. In diesem Fall also 5px.</p>
<p>Bezogen auf HTML bzw. CSS können wir nicht einfach einen Teil eines Containers abschneiden. Stattdessen bringen wir andere Boxen dazu, dass darauffolgende Container erst 5px unter ihnen anfangen dürfen.<br />
Dazu nutzen wir die Eigenschaft <strong>padding</strong>.</p>
<p>Daraus ergibt sich letztendlich folgender CSS-Code:</p>
<pre>div.container {
    margin: 0;
    padding: 0;
}
div.container div.rounded-box {
    background:url(rounded-box.gif) top left no-repeat;
}
div.container div.rounded-box.tl {
    background-position: left top;
}
div.container div.rounded-box.tr {
    background-position: right top;
    padding-top: 5px;
}
div.container div.rounded-box.bl {
    background-position: left bottom;
}
div.container div.rounded-box.br {
    padding-bottom: 5px;
    background-position: right bottom;
}
div.container div.rounded-box.content {
    background: #17a5c9;
    padding: 0 5px;
}</pre>
<p><a href="http://florianfranke.net/rounded-box/Schritt_6.html" target="_blank">Schritt #6 anzeigen</a></p>
<p>Nun werden auch wieder die abgerundeten Ecken angezeigt.<br />
Damit der Text in der Box nicht am Rand &#8220;klebt&#8221;, habe ich noch einen rechten und linken Abstand definiert und das Ergebnis entspricht nun der Wunschvorstellung.</p>
<p>Diese Variante habe ich im IE6, IE7, Firefox, Opera und Safari getestet und sie funktioniert einwandfrei.</p>
<p>Demnächst werde ich einen auf diesem Artikel basierenden Beitrag schreiben, wie man mit dieser Methode Boxen mit einem Rahmen erstellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2009/03/04/abgerundete-ecken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PNG und IE6 &#8211; meine Lösung</title>
		<link>http://florianfranke.net/2008/09/10/png-und-ie6-meine-losung/</link>
		<comments>http://florianfranke.net/2008/09/10/png-und-ie6-meine-losung/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 09:42:31 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Internet Explorer 6]]></category>
		<category><![CDATA[PNG]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=79</guid>
		<description><![CDATA[Wer kennt es nicht. Das Homepage-Design verlangt zur Umsetzung in HTML/CSS halbtransparente Grafiken. Da Pixel im GIF-Format aber entweder komplett sichtbar oder komplett durchsichtig sein können, müssen PNG-Grafiken benutzt werden. Gesagt getan. Firefox, Opera, Safari usw. zeigen die PNG-Grafik auch wie gewünscht an, wo liegt also das Problem? Wie zu erwarten, liegt es natürlich auf [...]]]></description>
			<content:encoded><![CDATA[<p>Wer kennt es nicht. Das Homepage-Design verlangt zur Umsetzung in HTML/CSS halbtransparente Grafiken. Da Pixel im GIF-Format aber entweder komplett sichtbar oder komplett durchsichtig sein können, müssen PNG-Grafiken benutzt werden.<br />
Gesagt getan.</p>
<p>Firefox, Opera, Safari usw. zeigen die PNG-Grafik auch wie gewünscht an, wo liegt also das Problem?<br />
Wie zu erwarten, liegt es natürlich auf Seiten des geliebten Internet Explorer 6. Wenn man sich das Ergebnis anschaut, werden die halbtransparenten Pixel grau dargestellt.</p>
<p>Zur Lösung des Problems gibt es diverse Scripts und Befehle, jedoch habe ich noch keine Variante entdeckt, die eine perfekte Kompatibilität des IE6 mit halbtransparenten Grafiken bietet.<br />
Zwei Varianten möchte ich kurz vorstellen und zeigen wie sie angewendet werden.<span id="more-79"></span></p>
<h4>AlphaImageLoader Filter</h4>
<p>Microsoft bietet zur Darstellung den <strong>AlphaImageLoader</strong> Filter.<br />
Somit lässt sich mit dem folgenden Code eine PNG-Grafik im IE6 richtig darstellen:</p>
<pre style="padding-left: 30px;">&lt;<code>div style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(</code>
src='grafik.png', sizingMethod='scale'<code>)"</code> &gt;&lt;/div&gt;</pre>
<p>Das ganze lässt sich auf eine Reihe von HTML-Tags anwenden (siehe <a href="http://msdn.microsoft.com/en-us/library/ms532969.aspx" target="_blank">Microsoft Developer Network</a>).<br />
Leider bietet es keine Unterstützung der CSS-Eigenschaft Background-Repeat, jedoch kann mit dem Attribut &#8220;<a href="http://msdn.microsoft.com/en-us/library/ms532920(VS.85).aspx" target="_blank">sizingMethod</a>&#8221; das Bild beschnitten (crop) und gestreckt bzw. skaliert (scale) werden.</p>
<h5>Vorteile</h5>
<ul>
<li>Keine Einbindung externer Scripte.</li>
</ul>
<h5>Nachteile</h5>
<ul>
<li>Keine Unterstützung von Background-Position, dementsprechend keine halbtransparenten CSS-Sprites.</li>
<li>Keine Unterstützung von Background-Repeat.</li>
</ul>
<h4>Scripts</h4>
<p>Im Internet geistern diverse Scripts umher, die in ihrer Funktionsweise ähnlich sind, sich aber im Umfang unterscheiden.<br />
Ich benutze den &#8220;<strong>IE PNG Fix</strong>&#8221; von <a href="http://www.twinhelix.com/css/iepngfix/" target="_blank">TwinHelix</a>.<br />
Mittels CSS wird die Datei iepngfix.htc eingebunden:</p>
<pre style="padding-left: 30px;">&lt;style type="text/css"&gt;
img, div, .pngfix, input { behavior: url("iepngfix.htc") }
&lt;/style&gt;</pre>
<p><em>Diese Einbindungs-Variante wird auf der Demoseite angeboten.</em></p>
<p>Jedoch komm es bei größeren HTML-Dokumenten zu dem Problem, dass jedes &lt;img&gt;-, &lt;div&gt;- und &lt;input&gt;-Tag vom Script auf PNG-Grafiken überprüft wird.<br />
Dadurch ergibt sich eine teilweise lange Ladezeit im IE6.  Ich habe die Erfahrung gemacht, dass über 800 Elemente durchsucht wurden und die Seiten während des Ladevorgangs nur stockend zu benutzen war.</p>
<p>Meine Lösung ist recht einfach. Anstatt für alle oben genannten Elemente das Script einzubinden, wird nur auf alle Elemente, denen eine bestimmten Klasse zugewiesen ist, das Script angewendet:</p>
<pre style="padding-left: 30px;">.pngFix { behavior: url("iepngfix.htc") }</pre>
<p>Nun brauch man z.B. einem DIV-Container nurnoch die Klasse .pngFix zuweisen (&lt;div class=&#8221;pngFix&#8221;&gt;&lt;/div&gt;) und der Rest geschieht automatisch.<br />
Durch die Microsoft-spezifische CSS-Eigenschaft <strong>behavior</strong>, wird das Script auch nur vom Internet Explorer ab Version 5.5 eingebunden. Für den IE4.0 und IE5.0 bietet das Script keine Unterstützung, genauso wie für den IE5/Mac.</p>
<h5>Vorteile</h5>
<ul>
<li>Das Script wird nur vom IE6 eingebunden und interpretiert (.htc)</li>
</ul>
<h5>Nachteile</h5>
<ul>
<li>Auch hier kann kein Background-Position/-Repeat eingesetzt werden, jedoch wird es von der v2.0 Alpha 3 ermöglicht.</li>
<li>Die PNG-Grafiken werden am Ende des Ladevorgangs ersetzt, es besteht also bei langsamer Verbindung die Möglichkeit, dass erst die eingegrauten PNG´s angezeigt werden, die nach und nach ersetzt werden.</li>
</ul>
<p>Leider sind das alles nur bedingt nutzbare Hilfsmittel. Ein Zwangsupdate auf den IE7 seitens Microsoft würde solche Probleme ersparen.</p>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2008/09/10/png-und-ie6-meine-losung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS-Sprites</title>
		<link>http://florianfranke.net/2008/06/19/css-sprites/</link>
		<comments>http://florianfranke.net/2008/06/19/css-sprites/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 12:38:07 +0000</pubDate>
		<dc:creator>Florian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[CSS-Sprites]]></category>
		<category><![CDATA[Image-Sprites]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Webmaster]]></category>

		<guid isPermaLink="false">http://florianfranke.net/?p=5</guid>
		<description><![CDATA[Einleitung Dieser Artikel richtet sich an Webmaster, deren Website-Layout(s) mehrere Grafiken beinhalten, die optimiert eingebunden werden sollen, wodurch sich die Ladezeit reduziert. Seit einiger Zeit wird die CSS-Sprites-Technik immer bekannter und auch durch größere Unternehmen, wie yahoo, angewendet und vorangetrieben. Doch welche Vorteile bringt die Verwendung, wie benutze ich CSS-Sprites auf meiner Seite und welche [...]]]></description>
			<content:encoded><![CDATA[<h4>Einleitung</h4>
<p>Dieser Artikel richtet sich an Webmaster, deren Website-Layout(s) mehrere Grafiken beinhalten, die optimiert eingebunden werden sollen, wodurch sich die Ladezeit reduziert.</p>
<p>Seit einiger Zeit wird die <a href="http://www.websiteoptimization.com/speed/tweak/css-sprites/" target="_blank"><span style="text-decoration: underline;">CSS-Sprites</span></a>-Technik immer bekannter und auch durch größere Unternehmen, wie yahoo, angewendet und vorangetrieben.<br />
Doch welche Vorteile bringt die Verwendung, wie benutze ich CSS-Sprites auf meiner Seite und welche Probleme können auftreten?<br />
All das versuche ich euch in diesem Artikel näher zu bringen.<span id="more-5"></span></p>
<h4>Was sind CSS-Sprites / Image-Sprites?</h4>
<p>Mehrere kleine Grafiken zu einem großem Image-Sprite kombiniert.<br />
Um nun die gewünschte Grafik anzuzeigen, wird, mittels CSS-Befehlen, nur dieser Bereich im Image-Sprite angezeigt.</p>
<h4>Wozu?</h4>
<p>Kurz und knapp: Ladezeitoptimierung.<br />
Trotz der immer weiter sinkenden Anzahl an ISDN/Modem-Benutzern, sollte der moderne Webmaster einen Blick auf diese Technik werfen.</p>
<h4>Hintergrund</h4>
<p>Umsetzung eines Homepageentwurfs des <span style="color: #000000;">Grafikers</span><span style="color: #000000;">:</span><br />
Man beginnt (zumindest geh ich nach diesem Prinzip vor) sich im Kopf oder auf Papier eine Grundstrukur aufzubauen, deren HTML-Code möglichst schlank und die endgültige Darstellung skalierbar ist.<br />
Nach dieser Strukur wird das Design in Einzelteile zerlegt und der HTML- und CSS-Code geschrieben.</p>
<p>Warum nun also CSS-Sprites?</p>
<ul>
<li>Ladezeit bei Modem/ISDN-Nutzern verkürzen.</li>
<li>Anzahl der HTTP-Requests verringern.</li>
</ul>
<h4>Was bitte? HTTP-Requests?</h4>
<p>HTTP (<strong>H</strong>yper<strong>t</strong>ext <strong>T</strong>ransfer <strong>P</strong>rotocol) ist ein zustandsloses Protokoll, das die Verbindung zwischen dem Server und dem Client regelt und über das z.B. Bilder, HTML-, CSS-und Javascript-Dateien geladen werden.</p>
<p>Es muss also für jedes noch so kleine Bild und jede Datei eine neue HTTP-Verbindung aufgebaut werden.</p>
<h4>Anwendung</h4>
<p>Der CSS-Code könnte also zum jetzigen Zeitpunkt folgendermaßen aussehen:</p>
<blockquote>
<pre>div#meinBildDiv1 {
    width:10px;height:10px;
    background:url(bild1.gif) no-repeat;
}

div#meinBildDiv2 {
    width:20px;height:20px;
    background:url(bild2.gif) no-repeat;
}

div#meinBildDiv3 {
    width:30px;height:30px;
    background:url(bild10.gif) no-repeat;
}</pre>
</blockquote>
<p>Bild1.gif: <img src="http://florianfranke.net/wp-content/uploads/Div1.gif" alt="Div 1" width="10" height="10" /></p>
<p>Bild2.gif:<img src="http://florianfranke.net/wp-content/uploads/Div2.gif" alt="Div 2" width="20" height="20" /><br />
Bild3.gif<img src="http://florianfranke.net/wp-content/uploads/Div3.gif" alt="Div 3" width="50" height="50" /></p>
<p>Das Problem dabei ist, dass nur eine bestimmte Anzahl an parallelen Requests vom Browser zugelassen werden (Firefox 2: Standardmäßig <strong>2</strong>; siehe <em>about:config &#8211; network.http.max-persistent-connections-per-server</em>).<br />
Demzufolge werden die vom HTML-Dokument eingebundenen Dateien nacheinander vom Server geladen.<br />
Die logische Konsequenz ist die verlängerte Ladezeit.</p>
<p>Und an diesem Punkt kommen die CSS-Sprites zum tragen.</p>
<p>Anstatt nun, wie im Beispiel-Code, drei Bilder zu laden, von denen jedes einen HTTP-Request verursacht, werden sie zusammen in einem großen Image-Sprite gespeichert (<a href="http://l.yimg.com/i/i/eu/hp/blue6.gif" target="_blank">Beispiel-Sprite von yahoo.com</a>).</p>
<p>Nun ändert sich unser CSS-Code folgendermaßen:</p>
<blockquote>
<pre>div#meinBildDiv1,
div#meinBildDiv2,
div#meinBildDiv3 {
    background:url(sprite.gif) no-repeat;
}</pre>
<pre>div#meinBildDiv1 {
    width:10px;height:10px;
    background-position:0px 0px;
}
div#meinBildDiv2 {
    width:20px;height:20px;
    background-position:0px -20px;
}
div#meinBildDiv3 {
    width:30px;height:30px;
    background-position:0px -50px;
}</pre>
</blockquote>
<p>Sprite.gif: <img src="http://florianfranke.net/wp-content/uploads/sprite.gif" alt="Sprite" width="50" height="100" /></p>
<h4>Was passiert hier?</h4>
<p>Im ersten Schritt weisen wir allen drei DIV-Boxen unser erstelltes sprite.gif als Hintergrundbild zu.<br />
Aufgrund der unterschiedlichen Bildgrößen der einzelnen Boxen, müssen diese individuell angegeben werden.<br />
Soweit nichts neues&#8230;</p>
<p>Nun zum Befehl background-position.</p>
<p>Ich werde die Funktionsweise von <em>background-position: 0px -20px;</em> beim zweiten DIV anhand eines Overhead-Projektors und 2 transparenten Folien erklären.<br />
Auf der unteren Folie könnt ihr euch das sprite.gif vorstellen, das die drei vorher benutzten Bilder beinhaltet.<br />
Die zweite, obere, Folie hat ein dünnen Rahmen um ein Quadrat der Größe 20px*20px und liegt standardmäßig in der oberen linken Ecke.<br />
Anstatt des 20px*20px großen Bereichs oben links der unteren Folie, möchten wir einen Bereich weiter unten einblenden.<br />
Wir müssen also die obere Folie verschieben.<br />
Wird sie nach <strong>oben</strong> bzw. nach <strong>rechts</strong> verschoben, sind die background-position-Werte <strong>positiv</strong>.</p>
<p>Jedoch möchten wir unsere Folie <strong>nach unten</strong> verschieben, da das DIV2-Bild von der oberen Kante aus um 20px nach unten verschoben ist. Eine horizontale Verschiebung ist in unserem Fall nicht gegeben.<br />
Demzufolge ergibt sich eine Verschiebung von 0px in der Horizontalen und <strong>-20px</strong> in der Vertikalen.<br />
Diese Werte werden in der Reihenfolge background-position: <em>Horizontal</em><em> Vertikal</em>;</p>
<blockquote>
<pre>background-position:0px -20px;</pre>
</blockquote>
<p>Nun haben wir also unser Quadrat auf der oberen Folie um 20px nach unten verschoben.</p>
<p>Bei den zwei weiteren DIV-Boxen verwenden wir auf der oberen Folie ein kleineres bzw. größeres Quadrat, ansonsten verändert sich nichts.</p>
<h4>Was es zu beachten gibt</h4>
<p>Der Browser Opera (bis 9.0) unterstützt beim Befehl <em>background-position</em> nur Werte bis zu (-)2042px.<br />
Alle Werte kleiner -2042px, bzw. größer 2042px werden nicht angenommen und stattdessen wird auf diesen Wert auf- bzw. abgerundet.</p>
<h4>Abschließende Worte</h4>
<p>Ich hoffe euch hat mein Artikel geholfen und bitte um Nachsicht, da es ist mein erster Blogartikel ist.<br />
Bei entsprechender Resonanz, oder Langeweile meinerseits, werde ich auf die Anwendung von transparenten PNG-Grafiken und den entstehenden Problemen eingehen.</p>
<h4>Weiterführende Links</h4>
<ul>
<li><a href="http://spritegen.website-performance.org/">http://spritegen.website-performance.org/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://florianfranke.net/2008/06/19/css-sprites/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
