<?xml version="1.0" encoding="iso-8859-1"?>
<!-- generator="Professor Web" -->
<rss version="2.0">
	<channel>
		<title>Professor Web - RSS-Feed</title>
		<description>News und Tipps &amp; Trick rund um die Welt des Webdesigners. HTML, CSS, PHP, mySQL, Browser und vieles mehr.</description>
		<link>http://www.professorweb.de</link>
		<lastBuildDate>Tue, 06 May 2014 18:42:37 +0100</lastBuildDate>
		<generator>Professor Web</generator>
		<image>
			<url>http://www.professorweb.de/images/M_images/professorweb.png</url>
			<title>Professor Web - Das Webdesigner Portal</title>
			<link>http://www.professorweb.de</link>
			<description>News und Tipps &amp; Trick rund um die Welt des Webdesigners. HTML, CSS, PHP, mySQL, Browser und vieles mehr.</description>
		</image>
		<item>
			<title>Keine neuen Artikel bei ProfessorWeb</title>
			<link>http://www.professorweb.de/professor-web/keine-neuen-artikel-bei-professorweb.html</link>
			<description><![CDATA[ <br />
<br />
Um die Gr�nde kurz zu erl�utern: Prim�r ist die Zeit ein Faktor der aufgrund von Arbeit und Privatem eher sp�rlich ges�t ist. Dazu kommen manche echt sau dumme Kommentare, die einem die Lust allm�hlich nehmen.<br />
<br />
Der Grundgedanke des Blogs war es, der �ffentlichkeit das zug�nglich zu machen, was ich selbst j�ngst herausgefunden oder gelernt habe. Aber Undank ist der Welten Lohn und so ziehe ich den entsprechenden Entschluss.<br />
<br />
<br />
Die Kommentare bleiben weiterhin offen und bei Fragen darf man mich auch gerne weiterhin kontaktieren - lediglich der RSS-Feed (und damit auch der Blog selbst) wird kein neues Futter erhalten.<br />
<br />
Ich danke f�r Eure Aufmerksamkeit und Euer Verst�ndnis.<br />
<br />
Freundlicher Gru�<br />
Armin R�diger Vieweg<br />
- Gr�nder ProfessorWeb.de -<br />
 ]]></description>
			<pubDate>Fri, 25 Sep 2009 12:19:07 +0100</pubDate>
		</item>
		<item>
			<title>Zeilen in Tabellen mit PHP abwechselnd stylen (even, odd)</title>
			<link>http://www.professorweb.de/php-mysql/zeilen-in-tabellen-mit-php-abwechselnd-stylen-even-odd.html</link>
			<description><![CDATA[ <br />
<br />
Erst k�rzlich habe ich in einem <a href="http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html" target="_self" title="Simple HTML DOM Parser - HTML mit PHP �ndern">ausf�hrlichen Artikel</a>  die PHP Klasse "Simple HTML DOM Parser" vorgestellt, mit der man wie in jQuery sehr komfortabel HTML-Code �ndern kann.<br />
<br />
Dieser Artikel setzt den Vorherigen als Basis voraus, daher empfehle ich erst den <a href="http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html" target="_self" title="Simple HTML DOM Parser - HTML mit PHP �ndern">Simple HTML DOM Parser Artikel</a>  zu verinnerlichen, bevor wir auf das folgende Praxis-Beispiel n�her eingehen.<br />
<br />
<br />
<br />
<b>Grafisch hochwertige Tabellen</b><br />
Eine nett anzusehende Tabelle k�nnte zum Beispiel so aussehen:<br />
<br />
<img src="http://www.professorweb.de/images/stories/screenshots/tablecloth1.gif" alt="H�bsche Tabelle" title="H�bsche Tabelle" align="default" /><br />
<br />
Dieses Bild ist aus einem vorherigen Artikel von Professor Web, in dem ich auf das kleine <a href="http://www.professorweb.de/html/tablecloth-tabellen-funktional-und-optisch-aufwerten.html" target="_self" title="Tablecloth - Tabellen funktional und optisch aufwerten">JavaScript Tablecloth</a>  eingegangen bin, dass das was wir jetzt mit PHP machen schon mit JavaScript umgesetzt hat.<br />
<br />
Der Vorteil es mit PHP zu machen ist, dass kein JavaScript ben�tigt wird und der Aufwand verh�ltnism��ig gering ist.<br />
<br />
<br />
<b>Der Grund-Code</b><br />
Wenn wir den Simple HTML DOM Parser eingebunden und den Quellcode der Seite, der gleich ausgegeben werden soll, in eine entsprechende Variable geladen haben, k�nnen wir mit dem eigentlichen Script anfangen.<br />
<br />
Hier nochmal kurz der Quellcodeauszug um den Parser einzubinden und den Code in die Variable $inhalte zu laden. Wie das genau funktioniert findet Ihr im Artikel, den ich eingangs verlinkt habe.<br />
<br />
<code>require_once($_SERVER[&quot;DOCUMENT_ROOT&quot;] . &quot;/inc/simple_html_dom.php&quot;);<br />
$inhalte = str_get_html($inhalte);<br />
</code><br />
<br />
<b>Der Haupt-Code</b><br />
<code>foreach($inhalte-&gt;find(&#39;table&#39;) as $e) {<br />
&nbsp;&nbsp;&nbsp; foreach($e-&gt;find(&#39;tr&#39;) as $f) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if($i == 0) $f-&gt;class .= &#39; first&#39;;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if($i % 2 == 0) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $f-&gt;class .= &#39; odd&#39;;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $f-&gt;class .= &#39; even&#39;;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $i++;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; unset($i);<br />
}<br />
</code><br />
<br />
<br />
<br />
<b>Erkl�rung</b><br />
Wir durchsuchen hier den Quellcode zuerst nach allen Tabellen die vorhanden sind. Danach alle TR (Table Row) innerhalb der jeweiligen Tabellen. Wir m�ssen es in zwei Schleifen aufteilen, da ansonsten nicht mehr differenziert werden kann ob sich das n�chste gefundene TR noch in der 1. oder vielleicht schon in der 2. Tabelle befindet.<br />
<br />
Die erste If-Abfrage identifiert anhand der Laufvariable $i ob es das erste TR der aktuellen Tabelle ist. Wenn dem so ist, wird dem TR die Klasse "first" zugewiesen.<br />
<br />
In der zweiten If-Abfrage wird gekl�rt ob das aktuelle TR gerade (even) oder ungerade (odd) ist. Daf�r verwenden wir den <a href="http://us2.php.net/manual/de/language.operators.arithmetic.php" target="_blank" title="PHP.net - Arithmetische Operatoren">Operator %</a>. Wir teilen also die Laufvariable durch 2 und erhalten nicht den geteilten Wert, sondern den Restwert.<br />
<br />
3 geteilt durch 2 - der Restwert ist 1 - d.h. ungerade<br />
4 geteilt durch 2 - der Restwert ist 0 - d.h. gerade<br />
usw...<br />
<br />
Egal mit welcher Zahl wir das machen. Der Restwert ist immer 1 oder 0 und das k�nnen wir dann super in einer IF-Abfrage nutzen um die entsprechende CSS-Klasse hinzuzuf�gen.<br />
<br />
Da die Laufvariable bei 0 und nicht bei 1 beginnt sind die Klassen "even" und "odd" scheinbar verkehrt herum aufgef�hrt - so wird jedoch das korrekte Ergebnis angezeigt. Die 1. Zeile (Zahl 1 = ungerade) erh�lt somit die Klasse "odd" und dies wird  abwechselnd mit "even" fortgef�hrt.<br />
<br />
Sind alle TR der ersten Tabelle durchgelaufen endet die innere foreach-Schleife und die Variable $i wird wieder auf 0 gesetzt. Dann beginnt das Spiel mit der n�chsten Tabelle die gefunden wird.<br />
<br />
<br />
<b>Modifikation</b><br />
Man kann nach Belieben die erste Zeile des Scriptes anpassen um nur Tabellen aufzuf�hren die bestimmte Kriterien erf�llen. Beispielsweise sollen nur Tabellen bearbeitet werden die sich im DIV mit der id="content" befinden. Dann w�rde die erste Zeile so aussehen:<br />
<code>foreach($inhalte-&gt;find(&#39;div#content table&#39;) as $e) {<br />
</code><br />
<br />
<br />
<br />
<b>Das passende CSS</b><br />
Ist das Script eingebunden und wird der Quellcode ausgegeben k�nnen wir die Klassen .even, .odd und .first nach Belieben im Stylesheet definieren.<br />
<br />
Um ein vergleichbares Ergebnis wie im Screenshot oben zu erzielen w�rden wir also folgendes schreiben:<br />
<code>tr.odd {<br />
&nbsp; background-color:#f8fbfc;<br />
}<br />
<br />
tr.even {<br />
&nbsp; background-color:#e5f1f4;<br />
}<br />
<br />
tr.first {<br />
&nbsp; background-color:#328aa4;<br />
&nbsp; color:#fff;<br />
&nbsp; font-weight:bold;<br />
}<br />
</code><br />
�brigens: Die erste Zeile in der Tabelle hat die Klassen "first" und "odd". Das kann je nach Aufbau des Stylesheets wichtig sein.<br />
<br />
Dies ist ein Beispiel, wie wir den Simple HTML DOM Parser sinnvoll in der Praxis einsetzen k�nnen. Ein Weiteres, dass sich mit Links befasst, wird demn�chst folgen.<br />
<br />
<b>Basiswissen:</b> <a href="http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html" target="_blank" title="Simple HTML DOM Parser">Simple HTML DOM Parser</a><br />
<i><br />
<br />
Der Artikel hat �brigens die glatte ID=300 in meinem Blog :)</i><br />
 ]]></description>
			<pubDate>Wed, 12 Aug 2009 13:37:00 +0100</pubDate>
		</item>
		<item>
			<title>Neuer RSS-Feed - Jetzt mit den kompletten Artikeln</title>
			<link>http://www.professorweb.de/professor-web/neuer-rss-feed-jetzt-mit-den-kompletten-artikeln.html</link>
			<description><![CDATA[ <br />
<br />
<a href="http://feeds.feedburner.com/professorweb" target="_blank" title="Professor Web RSS-Feed"><img src="http://www.professorweb.de/templates/professor_web_v1/images/pw_rssfeed.png" alt="Neuer RSS-Feed" title="Neuer RSS-Feed" style="float: right" /></a> W�hrend ich vergangene Nacht den RSS-Feed so vor mich hin umgestellt habe, ist mir aufgefallen, dass Feedburner von Google aufgekauft zu sein scheint. Das fand ich sehr interessant und mein alter Feedburner Account wurde in meinen Google Account umgewandelt.<br />
<br />
Soll mir recht sein - ich fand es nur lustig, mal einen Moment nicht aufgepasst zu haben und *schwubs* hat Google Feedburner aufgekauft ;-)<br />
<br />
<br />
<br />
<b>Neuer Professor Web RSS-Feed</b><br />
Alles ist gleich geblieben. Die URL zum Feed und der gewohnte Umfang meiner Beitr�ge. Jetzt k�nnt Ihr aber die Artikel direkt, komplett in Eurem RSS-Reader lesen. Und das sogar ohne Werbung.<br />
<br />
Der Link zum RSS lautet: <b><a href="http://feeds.feedburner.com/professorweb" target="_blank" title="Professor Web RSS Feed">http://feeds.feedburner.com/professorweb</a></b> <br />
<br />
Ihr k�nnt ihn aber auch �ber den Button rechts oben jederzeit aufrufen und hinzuf�gen.<br />
<br />
<br />
<b>Neues Professor Web Logo</b><br />
Da der Relaunch wohl noch etwas dauern wird, habe ich das neue Professor Web Logo in der vergangenen Woche in den Header, anl�sslich des <b>2. Geburtstages von Professor Web</b>, geladen. Das wollte ich nur mal kurz hier anmerken, wenn ich ja eh gerade ein Artikel �ber mich selbst am schreiben bin ;)<br />
<br />
<br />
<b>Fragen, Anregungen und Kritik</b><br />
bitte wie immer �ber die Kommentare der jeweiligen Artikel, oder als E-Mail �ber Kontakt. Das Beste am Bloggen sind die Reaktionen der Besucher, vor allem nat�rlich wenn man ihnen gerade helfen konnte. Dies strebe ich weiter an.<br />
 ]]></description>
			<pubDate>Wed, 12 Aug 2009 10:56:53 +0100</pubDate>
		</item>
		<item>
			<title>Simple HTML DOM Parser - HTML mit PHP �ndern</title>
			<link>http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html</link>
			<description><![CDATA[ <br />
<br />
In jQuery gibt es sehr komfortable Selectors. Man kann zum Beispiel sagen, dass jeder Link der extern ist eine zus�tzliche Klasse zugewiesen bekommt. Der Code in jQuery sieht daf�r so aus:<br />
<br />
<code>$(&quot;a[href^=&#39;http://&#39;]&quot;).addClass(&quot;external&quot;);<br />
</code><br />
<br />
In CSS 3 gibt es auch die M�glichkeit Selektierungen an Hand von z.B. Eigenschaften vorzunehmen, das s�he in einem CSS3-Stylesheet dann so aus:<br />
<code>a[href^=&#39;http://&#39;] {<br />
&nbsp; color:red;<br />
}<br />
</code><br />
<b>Aber Achtung!</b> CSS3 Befehle werden vom Internet Explorer 8 oder fr�her nicht unterst�tzt. Lediglich Vorreiter wie Firefox, etc. unterst�tzen bereits CSS3-Befehle (und sogar schon HTML5).<br />
<br />
<br />
Aber ohne jetzt ausschweifen zu wollen, stellt sich mir hierbei die Frage: Wie kann ich eine Klasse �ber PHP dem entsprechenden Link hinzuf�gen? Denn jQuery und damit JavaScript klappt nicht auf allen Computern (kann man ja ausschalten) und CSS3 wird nicht fl�chendeckend unterst�tzt.<br />
<br />
<br />
<br />
<b>Grundvoraussetzung</b><br />
Also die Grundvoraussetzung ist, dass wir den Quellcode der Seite die wir gleich ausgeben m�chten in einer Variable gespeichert haben um so darauf zugreifen zu k�nnen. Wie das geht mit PHP habe ich in zwei Artikeln etwas n�her erl�utert:<br />
<br />
<a href="http://www.professorweb.de/php-mysql/inhalte-mit-php-abfangen-ob_start-und-ob_get_contents.html" target="_self" title="Inhalte mit PHP abfangen - ob_start() und ob_get_contents()">Inhalte mit PHP abfangen</a> 
und<br />
<a href="http://www.professorweb.de/php-mysql/php-und-.htaccess-aus-statisch-mach-dynamisch.html" target="_self">PHP und .htaccess: Aus statisch mach dynamisch</a> <br />
<br />
Haben wir jetzt den Quellcode z.B. in der Variable $inhalte gespeichert, ist die Frage, wie kann z.B. jedem Link, dass sich im DIV mit der id="content" befindet eine zus�tzliche Klasse geben? Es gibt vermutlich seitenlange Regul�re Ausdr�cke mit denen das ginge, aber es geht sehr viel schneller und einfacher!<br />
<br />
<b><br />
PHP Simple HTML DOM Parser</b><br />
Was hier trotz des W�rtchens "simple" immer noch recht kompliziert klingt ist gar nicht so schlimm wie es aussieht. Wenn wir die aktuell 35,2 KB <strike>gro�e</strike> kleine Datei �ber ein Include oder besser ein Require ins PHP einf�gen, also so:<br />
<br />
<code>require_once($_SERVER[&quot;DOCUMENT_ROOT&quot;] . &quot;/inc/simple_html_dom.php&quot;);<br />
</code><br />
Dann k�nnen wir im Anschluss daran mit neuen Befehlen arbeiten. Wir gehen ja noch davon aus, dass der Quellcode ganz normal als Text in der Variable $inhalte steht.<br />
<br />
Damit kann das Script noch nichts anfangen, der Text muss erst geparsed werden. Ist aber nicht schwer, daf�r gibt es folgenden Befehl:<br />
<br />
<code>$inhalte = str_get_html($inhalte);<br />
</code><br />
Wir �berschreiben hier die Variable $inhalte mit der geparsten Variante des Quellcodes.<br />
<br />
Man kann auch statt einer Variable direkt eine Datei �ffnen oder sich den Quellcode einer externen Seite "leechen" mit folgendem Befehl:<br />
<br />
<code>$html = file_get_html(&#39;test.html&#39;);<br />
$external_html = file_get_html(&#39;http://www.google.de/&#39;);<br />
</code><br />
Das aber nur am Rande - wir arbeiten jetzt mit $inhalte weiter.<br />
<br />
<br />
Ich will alle Links im DIV mit der id="content" aufgelistet haben. Kein Problem daf�r nutzen wir folgenden Code:<br />
<code>$meine_links = $inhalte-&gt;find(&#39;#content a&#39;);<br />
</code><br />
<br />
Die Variable $meine_links ist jetzt ein DOM-Parser-Objekt, vergleichbar mit einem assoziativen Array, d.h. wir k�nnen hier mit einer foreach-Schleife arbeiten. Also eine Schleife die f�r jedes gefundene Element was entsprechendes ausf�hrt.<br />
<br />
Der Befehl von eben, kombiniert mit der entsprechenden Schleife sieht dann so aus:<br />
<code>foreach($inhalte-&gt;find(&#39;#content a&#39;) as $e) {<br />
&nbsp; echo(&quot;Link gefunden mit href: &quot; . $e-&gt;href . &quot;&lt;br&gt;\n&quot;);<br />
}<br />
</code><br />
$e beinhaltet dank der foreach-Schleife immer das aktuelle Element, dass unserem Selektor entspricht. Die Eigenschaften des Objektes sind auch die Eigenschaften des Elementes. Wir k�nnen dar�ber jedes beliebige Attribut abfragen.<br />
<br />
<br />
<b>
Den Quellcode in der Variable ver�ndern</b><br />
Im letzten Beispiel haben wir in der foreach-Schleife ein Echo zum Ausgeben verwendet. Wir wollen aber in der Regel den Quellcode selbst manipulieren und anschlie�end komplett als fertige Website ausgeben. Dies geht ebenfalls denkbar einfach und zwar auch �ber die Attribute des Objektes.<br />
<br />
<code>foreach($inhalte-&gt;find(&#39;#content a&#39;) as $e) {<br />
&nbsp; $e-&gt;target = &quot;_blank&quot;;<br />
}<br />
</code><br />
Dadurch, dass wir der Eigenschaft "target", die ein Link ja besitzt, einen neuen Wert zuweisen wirkt sich diese �nderung auf alle Elemente in dem Quellcode aus. Also alle Links im DIV mit der id="content" haben nun das Attribut "target" mit dem Wert "_blank" zugewiesen bekommen. <br />
<br />
Geben wir den Quellcode nun mit <br />
<br />
<code>$fertige_inhalte = $inhalte;<br />
echo $fertige_inhalte;<br />
</code><br />
aus, sehen wir den urspr�nglichen Quellcode mit den eben definierten �nderungen. Den Schritt vor dem Echo machen wir um aus dem DOM-Objekt wieder reinen Text zu machen und ihn dann auszugeben.<br />
<br />
Wenn wir weiterhin objektorientiert bleiben wollen, k�nnen wir aber auch dieses hier schreiben:<br />
<code>$fertige_inhalte = $inhalte-&gt;save();<br />
echo $fertige_inhalte;<br />
</code><br />
<br />
Alternativ kann man den Quellcode auch direkt in eine Datei zur�ckschreiben:<br />
<code>$html-&gt;save(&#39;ergebnis.html&#39;);<br />
</code><br />
Das ist total praktisch und relativ einfach zu handhaben.<br />
<br />
<br />
<br />
<b>Spezielle Attribute</b><br />
Verschiedene Elemente im HTML haben ja verschiedene Eigenschaften. Ein Link hat z.B. ein "target", ein Bild hat kein "target", daf�r einen "alt"-Tag. Hier unterscheiden sich die Elemente, darauf muss man auch entsprechend achten. Versucht man ein Attribut aufzurufen, den es nicht gibt erh�lt man als R�ckgabe "NULL". Man erh�lt allerdings auch "NULL" zur�ck, wenn man in einem Link ein Target ausgeben m�chte, der gar nicht vorhanden ist (obwohl es valide w�re).<br />
<br />
Abgesehen von den "normalen" Attributen gibt es aber noch speziell definierte Eigenschafen, die es im normalen HTML so gar nicht gibt.<br />
<br />
<b>Und zwar gibt es noch Folgendes:</b><br />
<code>echo $e-&gt;tag; //Ausgabe: a<br />
echo $e-&gt;outertext; //Ausgabe: &lt;a href=&quot;test.html&quot;&gt;Dies ist ein &lt;b&gt;Lin...&lt;/a&gt;<br />
echo $e-&gt;innertext; //Ausgabe: Dies ist ein &lt;b&gt;Link&lt;/b&gt;<br />
echo $e-&gt;plaintext; //Ausgabe: Dies ist ein Link<br />
</code><br />
Diese Eigenschaften sind vergleichbar mit innerHTML oder outerHTML aus JavaScript.<br />
<br />
<br />
<b>Sich im Quellcode bewegen</b><br />
Wir k�nnen uns auch im Quellcode bewegen. Wir wollen also nicht alle Links haben, die mit "http://" im "href" beginnen, sondern alle Elemente, die danach kommen - oder sich vielleicht innerhalb des Links befinden. Oder wir wollen das Element haben, was sich oberhalb des Links befindet.<br />
<br />
Hierf�r haben die Entwickler �hnliche Befehle eingebaut, wie wir sie schon aus JavaScript oder Libraries wie jQuery kennen:<br />
<code>$element_danach = $e-&gt;next_sibling();<br />
$element_davor = $e-&gt;prev_sibling();<br />
</code><br />
Wir k�nnen auch Kombinationen machen, z.B. alle Kinder-Elemente im n�chsten Element:<br />
<code>$elemente_im_element_danach = $e-&gt;next_sibling()-&gt;children();<br />
</code><br />
<br />
<br />
<br />
<b>Lizenz, Download und Dokumentation</b><br />
Dieses Script, was mit seinen 35,2 KB recht schnittig ist, unterliegt der MIT-Lizenz, kann also frei (auch f�r kommerzielle Zwecke) verwendet werden.<br />
<br />
Das Projekt selbst liegt bei Sourceforge. Dort liegt auch die Dokumentation und findet sich der Download der verschiedenen Versionen. Die aktuelle Version ist 1.11, diese war auch Bestandteil meiner Tests.<br />
<br />
<a href="http://simplehtmldom.sourceforge.net/index.htm" target="_blank" title="PHP Simple HTML DOM Parser Website">Website von PHP Simple HTML DOM Parser</a><br />
<a href="http://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/1.11/simplehtmldom_1_11.zip/download" target="_blank" title="Download PHP Simple HTML DOM Parser">Download Version 1.11 (als ZIP mit Beispielen)</a><br />
<br />
Wenn Ihr Alternativen kennt, Fragen habt oder schon Erfahrungen damit machen konntet - immer gerne her damit - die Kommentarfunktion steht Euch zur freien Verf�gung.
 ]]></description>
			<pubDate>Tue, 11 Aug 2009 14:38:54 +0100</pubDate>
		</item>
		<item>
			<title>Wie man in CSS mit Position arbeitet</title>
			<link>http://www.professorweb.de/css/wie-man-in-css-mit-position-arbeitet.html</link>
			<description><![CDATA[ <br />
<br />
Die Position-Eigenschaft in CSS (Cascading Stylesheet) kann folgende Werte haben:<br />
absolute, relative, static und fixed<br />
<br />
"Fixed" wird vom IE6 nicht unterst�tzt ansonsten sind die verschiedenen Werte unterschiedlich einsetzbar.<br />
<br />
<br />
<br />
<b>Wof�r verwendet man Position?</b><br />
Mit Position sagt man einem Element wie es positioniert wird. Also nicht wo es zu finden sein soll, sondern an was es sich ausrichten soll.<br />
<br />
Hat z.B. ein DIV position:relative; orientiert es sich �hnlich wie auch bei static an den Elementen die sich davor oder dar�ber befinden. Bei position:absolute; jedoch wird es praktisch aus der Struktur genommen und erh�lt komplett unabh�ngige Positionsangaben.<br />
<br />
Fast immer verwendet man in Verbindung mit Position auch die Befehle "left" und "top" - gelegentlich auch "right" und "bottom".<br />
<br />
Um mal mit einem einfachen Beispiel arbeiten zu k�nnen ist der folgende HTML-Code f�r alle Beispiele gleich:<br />
<code>&lt;div id=&quot;header&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; Ich bin oben<br />
&lt;/div&gt;<br />
<br />
&lt;div id=&quot;footer&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; Ich bin unten<br />
&lt;/div&gt;<br />
</code><br />
<br />
Dieser Quellcode ohne irgendwelche extra Positionsangaben (das entspricht dann <b>position:static</b>) gibt folgendes im Browser aus:<br />
<img src="http://www.professorweb.de/images/stories/screenshots/position/position01.gif" alt="Skizze 01: DIV-Schema ohne Position" title="Skizze 01: DIV-Schema ohne Position" style="width: 450px; height: 97px" width="450" align="default" height="97" /><br />
<br />
Nat�rlich nicht so, hierbei handelt es sich um schematische Darstellungen. Grauen Hintergrund oder dunkelgrauen Rahmen haben wir im CSS nirgends definiert.<br />
<br />
<br />
<b>Position: relative</b><br />
Das Bild eben bleibt so, auch wenn wir im CSS folgendes sagen:<br />
<code>#header, #footer {<br />
&nbsp; position:relative;<br />
}<br />
</code><br />
<br />
Relative Positionierung bedeutet, abh�ngig (also relativ) von anderen Elemente die noch vorhanden sind. Gibt man einem Element keine Position kommt das dem Wert "static" gleich. "Relativ" verh�lt sich prinzipiell genau so, es gibt jedoch noch einen kleinen Unterschied den ich gleich noch erl�utern werden und zwar in Kombination mit "absolute".<br />
<br />
<br />
<br />
<b>Position: absolute</b><br />
Geben wir beiden Elementen <b>position:absolute;</b> erhalten wir folgendes:<br />
<img src="http://www.professorweb.de/images/stories/screenshots/position/position02.gif" alt="Skizze 2: Zwei DIVs bei position:absolute;" title="Skizze 2: Zwei DIVs bei position:absolute;" style="width: 450px; height: 97px" width="450" align="default" height="97" /><br />
<br />
Huch! Wo ist denn das zweite DIV hin? Wir haben doch nichts am HTML ge�ndert?! <br />
Nun beide DIVs orientieren sich am dar�ber gelegenen Objekt. In diesem Fall den <body>. Da wir keinem irgendwelche Top- oder Left-Angaben mitgegeben haben, befinden sich beide Elemente an der gleichen Position. Left:0 und Top: 0.<br />
<br />
Das bedeutet sie befinden sich �bereinander. Wir sehen das untere DIV ganz oben, da man sich das vorstellen muss wie mit Zetteln auf einem Tisch: Lege ich den ersten Zettel auf den Tisch und dann einen zweiten dar�ber, sehe ich oben den zweiten.<br />
<br />
Manchmal sind solche �berlagerungen durchaus erw�nscht, dann kann man mit der CSS-Eigenschaft <b>z-index </b>bestimmen, welcher h�her liegt. Je h�her der z-index, desto h�her auch die Position des Elements. H�her bezieht sich aber nun auf die Z-Achse, also die Tiefe.<br />
<br />
<code>#header, #footer {<br />
&nbsp; position:absolute;<br />
}<br />
#header {<br />
&nbsp; z-index:10;<br />
}<br />
</code><br />
Jetzt w�re "Ich bin oben" zu lesen.<br />
<br />
Bei Position:absolute wird fast immer auch mit Positionsangaben gearbeitet. <br />
<code>#header, #footer {<br />
&nbsp; position:absolute;<br />
}<br />
<br />
#header {<br />
&nbsp; top:0;  left:0;<br />
}<br />
<br />
#footer {<br />
&nbsp; top:20px; left:10px;<br />
}<br />
</code><br />
<b><br />
Das sieht dann so aus:</b><br />
<img src="http://www.professorweb.de/images/stories/screenshots/position/position03.gif" alt="Skizze 3: Absolute Positionierung mit konkreten Angaben" title="Skizze 3: Absolute Positionierung mit konkreten Angaben" style="width: 450px; height: 97px" width="450" align="default" height="97" /><br />
<br />
�brigens, ich habe jetzt die DIVs l�nger gemacht, als sie eigentlich sind. Denn bei position:absolute verliert das DIV das ohne eine definierten Breite ja immer so breit ist wie das umliegende Elemente, jegliche Zuordnung und ist dann nur noch so breit wie sein Inhalt. Es sieht praktisch dann so aus wie display:inline - bleibt aber dennoch block. <br />
<br />
<br />
<b>Position: fixed</b><br />
"Fixed" ist wie "absolute", mit dem Unterschied, dass es beim Scrollen weiterhin zu sehen bleibt. Ein Logo mit bottom:0; right:0; und position:fixed ausgerichtet ist immer in der unteren rechten Ecke zu sehen, auch wenn man scrollt. Dieser Wert wird vom Internet Explorer 6 nicht unterst�tzt.<br />
<br />
<br />
<b>Die Kombination aus absolute und relative</b><br />
Jetzt wird es interessant! Wenn ich dem DIV position:absolute gebe und top:10px; left:10px setze, dann kann man sich durchaus die Frage stellen: Von wo denn 10 Pixel?<br />
<br />
Die Antwort ist, wenn man nichts anderes definiert hat: Vom Rand der Website. Also von ganz links oben. Ein bottom:10px; w�rde �brigens nicht das untere Ende des Browsers als Basis nehmen, sondern das untere Ende der Website. Ist die Seite also noch nicht vorbei und man muss herunterscrollen werden die 10 Pixel von dem Ende der Website genommen.<br />
<br />
Als Beispiel nehmen wir jetzt mal folgenden HTML-Code:<br />
<code>&lt;div id=&quot;website&quot;&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;div id=&quot;box1&quot;&gt;Box 1&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div id=&quot;box2&quot;&gt;Box 2&lt;/div&gt;<br />
<br />
&lt;/div&gt;<br />
</code><br />
<br />
und folgendes CSS:<br />
<code>#website {<br />
&nbsp; width:960px;<br />
&nbsp; height:500px;<br />
}<br />
<br />
#box1, #box2 { position:absolute; }<br />
<br />
#box1 {<br />
&nbsp; top:10px; left:10px;<br />
}<br />
<br />
#box2 {<br />
&nbsp; bottom:10px; right:10px;<br />
}<br />
</code><br />
<br />
<b>Das Ergebnis sieht so aus:</b><br />
<img src="http://www.professorweb.de/images/stories/screenshots/position/position05.gif" alt="Skizze 4: Position:absolute h�lt sich nicht an Parent" title="Skizze 4: Position:absolute h�lt sich nicht an Parent" style="width: 450px; height: 213px" width="450" align="default" height="213" /><br />
<br />
Obwohl sich die beiden Boxen innerhalb von #website befinden werden sie mit position:absolute aus dem Raster gehoben und richten sich nun an den Website-Ma�en ganz au�en.<br />
<br />
Wenn man das umgehen m�chte und die Boxen sich innerhalb von Website mit 10 Pixel Abstand zum Rand befinden sollen, ist die L�sung einfach eine Kombination aus dem bisher verwendeten absolute und relative!<br />
<br />
Wir erg�nzen unser letztes CSS folgenderma�en:<br />
<code>#website {<br />
&nbsp; width:960px;<br />
&nbsp; height:500px;<br />
&nbsp; position:relative;<br />
}<br />
...<br />
</code><br />
<br />
Der Rest bleibt identisch. Das Ergebnis sieht dann, so wie wir es wollten aus, <b>n�mlich so</b>:<br />
<img src="http://www.professorweb.de/images/stories/screenshots/position/position04.gif" alt="Skizze 5: Position Absolute mit Relative" title="Skizze 5: Position Absolute mit Relative" style="width: 450px; height: 213px" width="450" align="default" height="213" /><br />
<br />
Die Anwendungsgebiete f�r diese Technik sind gro�. M�chte man zum Beispiel einen Artikel schreiben. Und in der letzten Zeile soll neben dem Text noch ein Drucken-Link folgen k�nnen wir das nicht anders l�sen (au�er garstige Tabellen zu nutzen).<br />
<br />
Ein bottom:16px; (wenn die Zeilenh�he z.B. 16 Pixel ist) w�rde ohne das "relative" am Ende der Website erscheinen. Gibt man aber dem DIV das um den Artikel liegt ein "position:realtive" und dem Link innerhalb des DIV ein "position:absolute; bottom:16px;" erh�lt man das gew�nschte Ergebnis.<br />
<br />
Egal wie lang der Artikel wird (das wei� man ja selten im Voraus) der Link befindet sich immer ganz unten. Diese Technik hat sich bew�hrt und ist die einzige, mir bekannte M�glichkeit so etwas mit CSS, ohne Tabellen umzusetzen.<br />
<br />
<br />
<br />
Soviel mal zu den M�glichkeiten von Position in CSS. Wenn Ihr noch Erg�nzungen, Links oder Fragen habt, nur her damit :)<br />
<br />
 ]]></description>
			<pubDate>Thu, 23 Jul 2009 17:17:51 +0100</pubDate>
		</item>
		<item>
			<title>Firefox 3.5 und Firebug 1.4 haben einen Bug</title>
			<link>http://www.professorweb.de/anwendungen/firefox-3.5-und-firebug-1.4.0-haben-einen-bug.html</link>
			<description><![CDATA[ <br />
<br />
<a href="http://www.professorweb.de/#lastupdate" target="_self">Der Bug wurde in Firefox 3.5.2 behoben</a><br />
<br />
"Web Development Evolved" lautet der Untertitel dieser wirklich g�ttlich anmutenden Erweiterung f�r den Firefox Browser. Der Slogan bedeutet soviel wie "Webentwicklung weitergedacht".<br />
<br />
Die Rede ist von der Erweiterung Firebug, welche ausnahmslos jedem Webdesigner eine gro�e Erleichterung sein d�rfte, vor allem beim Debugging von Webseiten und JavaScripts.<br />
<br />
<img src="http://www.professorweb.de/images/stories/screenshots/firebug01.gif" alt="Firebug 1.4.0 Screenshot" title="Firebug 1.4.0 Screenshot" style="width: 541px; height: 357px" width="541" align="default" height="357" /><br />
<br />
In der neuen Version von Firebug 1.4.0 die kurz nach Firefox 3.5 erschienen ist, scheint es jedoch einen kleinen aber relativ gravierenden Fehler zu geben, der das Arbeiten mit Firebug nahezu unm�glich macht.<br />
<br />
<b>Update:</b> Der Fehler ist in Version 1.4.1 leider immer noch enthalten.<br />
<br />
<br />
<br />
<b>Die Ausgangssituation</b><br />
Der Fehler wird verursacht durch f�r verschiedene Medien definierte Stylesheets. Ein Stylesheet kann je nach Medium, dass die Seite gerade aufruft verschiedenen definiert sein. So ist es bei mir z.B. �blich, dass ich spezielle Formatierungen verwende um die Seite beim Ausdrucken anders aussehen zu lassen, als auf dem Monitor.<br />
<br />
Ein entsprechendes Stylesheet s�he z.B. so aus:<br />
<code>#website {<br />
&nbsp; background:red;<br />
}<br />
<br />
@media print<br />
{<br />
&nbsp; #website {<br />
&nbsp;&nbsp;&nbsp; background:white;<br />
&nbsp; }<br />
}<br />
</code><br />
Das Element mit der id="website" w�re im Browser mit einem roten Hintergrund versehen und beim Ausdruck mit einem wei�en. Dies ist nur ein Beispiel, was in dieser Form nun keine Anwendung finden d�rfte - aber ich nutze die Technik ganz gerne um Content-unabh�ngige Elemente wie Header oder Footer beim Druck auszublenden.<br />
<br />
<br />
<br />
<b>Der Fehler</b><br />
Firebug in der neusten Version zeigt, sobald man ihn aktiviert die Print-Variante an. Man sieht also erst die normale Website, aktiviert Firebug und auf einmal ver�ndern oder verschwinden alle entsprechend formatierten Elemente.<br />
<br />
So kann man nat�rlich nicht effektiv arbeiten. Hier mal eine <a href="http://tinyurl.com/lyheq6" target="_blank" title="Beispielseite f�r Firebug Fehler">Beispielseite</a>  bei der die Nutzung von Firebug zu dem Fehler f�hrt.<br />
<br />
<b><br />
Die L�sung</b> (<a href="http://www.professorweb.de/#update1" target="_self" title="Update des Artikels �ber Firefox 3.5 und Firebug 1.4.0">zum Update</a>)<br />
Es gibt zwar ein Workaround, doch das ist recht impraktikabel: Die Print-Definitionen im Stylesheet f�r den Zeitraum der Entwicklung der eigentlichen Seite auskommentieren.<br />
<br />
Also so:<br />
<code>#website {<br />
&nbsp; background:red;<br />
}<br />
<br />
/* @media print<br />
{<br />
&nbsp; #website {<br />
&nbsp;&nbsp;&nbsp; background:white;<br />
&nbsp; }<br />
} */<br />
</code><br />
<br />
So interpretiert Firebug nun nur noch den tats�chlich g�ltigen CSS-Code und l�sst die Kommentare als solche links liegen.<br />
<br />
<br />
<br />
<b>Alternativen?</b><br />
In meinem Beispiel h�nge ich die Print-Definitionen unter das normale Stylesheet. Bisher war dies auch nirgends ein Problem - auch Firefox 3.5 ohne aktiviertem Firebug interpretiert den Code einwandfrei. Gegebenenfalls (das habe ich jetzt aber nicht ausprobiert) reicht die Aufteilung von Screen- und Print-Definition in zwei Dateien mit einem entsprechend definiertem Aufruf im HTML:<br />
<br />
<code>&lt;link rel=&quot;stylesheet&quot; media=&quot;screen&quot; href=&quot;screen.css&quot; type=&quot;text/css&quot; /&gt;<br />
&lt;link rel=&quot;stylesheet&quot; media=&quot;print&quot; href=&quot;print.css&quot; type=&quot;text/css&quot; /&gt;<br />
</code><br />
<br />
Wenn Ihr hier Erfahrungswerte habt, w�rde ich mich �ber einen kurzen Kommentar freuen.<br />
<br />
Ansonsten bleibt nur Abwarten und Tee trinken, bis eine neue Version von Firebug ver�ffentlicht wird, die den Fehler entsprechend behebt.<br />
<br />
<b><br />
Die Entwickler sagen,...</b><br />
dass in Version 3.5.2 von Firefox der Fehler behoben sein wird. Noch ist diese Version nicht drau�en, d.h. bis dahin m�ssen wir noch etwas Tee trinken und warten.<br />
<br />
Link: <a href="http://code.google.com/p/fbug/issues/detail?id=2141" target="_blank" title="Google Code: Firebug Issue #2141">Firebug Issue #2141</a><br />
<br />
<br />
<a title="update1" name="update1"></a><b>Update: Eine weitere Alternative</b><br />
So eben ist mir eine weitere Alternative eingefallen, die auch wunderbar funktioniert. Dieser Bug scheint erst ab der Beta 7 von Firebug 1.4.0 aufzutreten. Da man sich auch vergagene Versionen installieren kann empfiehlt es sich solange es kein neues Update gibt auf eine Beta-Version zur�ckzuspringen.<br />
<br />
Ich bin mal alle durchgegangen. In der Beta 5 war der Fehler noch nicht, in der Beta 7 schon. Das hei�t, einfach die Beta 5 installieren und produktiv arbeiten k�nnen.<br />
<br />
Download: <a href="http://www.professorweb.de/https://addons.mozilla.org/en-US/firefox/addons/versions/1843#version-1.4.0b5" target="_blank" title="Firebug 1.4.0 Beta 5">Firebug 1.4.0 Beta 5</a><br />
<br />
Diese Beta-Version sieht noch etwas anders aus als die endg�ltige Fassung, aber man kann dennoch wunderbar damit arbeiten. Der Fehler tritt zwar immer noch vereinzelnt auf, jedoch ist er mit einem Refresh (F5) der Website wieder behoben.<br />
<br />
<br />
<a title="lastupdate" name="lastupdate"></a><b>Letztes Update: Fehler in Firefox 3.5.2 und Firebug 1.4.1 behoben</b><br />
Wie die Entwickler �ber Google Code schon mitgeteilt haben, ist in dem k�rzlich erschienenen Firefox Update 3.5.2 dieser Fehler behoben. Auch andere kleine Darstellungsfehler wie das Verschwinden von CSS-Attributen wenn man sie ver�ndert, wurden behoben. Damit ist dieser Artikel mehr oder weniger hinf�llig :)<br />
<br />
<br />
<b>�brgens</b>...<br />
Auch neu ist, dass sich Firebug automatisch in Popups und neuen Fenstern �ffnet, die von der gleichen Seite kommen wie der, auf der schon Firebug ge�ffnet ist. Das kann man aber gl�cklicherweise abschalten. In den Optionen bzw. Einstellungen einfach den Haken bei "URLs mit gleicher Herkunft aktivieren" raus nehmen. Dann wird Firebug wieder f�r jedes Fenster separat gehandlet.<br />
<br />
Denn es ist nervig, wenn ich auf einer Website Firebug im Einsatz habe und in einem anderen Fenster im CMS ein Popup �ffne um z.B. ein Bild hochzuladen, welches dann erstmal komplett von Firebug �berlagert wird.
 ]]></description>
			<pubDate>Tue, 21 Jul 2009 14:22:49 +0100</pubDate>
		</item>
		<item>
			<title>YouTube stellt den Internet Explorer 6 Support ein</title>
			<link>http://www.professorweb.de/internet/youtube-stellt-den-internet-explorer-6-support-ein.html</link>
			<description><![CDATA[ <br />
<br />
Momentan kursieren drei Versionen des Internet Explorers im Internet herum. Zwischen IE6 und IE8 ist alles vertreten. W�hrend der IE8 erst einige Monate alt ist hat der Internet Explorer 6 schon knapp 8 Jahre auf dem Buckel. Updates im IE6 gibt es kaum und wenn sind sie sicherheitstechnischer Natur.<br />
<br />
Verst�ndlich das ein so alter Browser mit "neuen" Standards nicht unbedingt zurecht kommt. Diese Tatsache, kostet jedem von uns wertvolle Zeit, da wir teilweise Extraw�rste f�r den IE entwickeln m�ssen um die Darstellung der Website dort erst m�glich zu machen.<br />
<br />
<br />
<br />
<b>Google macht was dagegen!</b><br />
Google ist mit seinen Diensten das gr��te Unternehmen in Internet und ist damit nat�rlich richtungsweisend. Der weltweit bekannteste und beliebteste Video-Streaming-Dienst YouTube dient nun als erste Aktion den alten Internet Explorer 6 aus der Welt zu schaffen.<br />
<br />
Folgender Hinweis erwartet den IE6-Nutzer auf der YouTube-Website:<br />
<br />
<img src="http://www.professorweb.de/images/stories/screenshots/youtube_ie6.gif" alt="YouTube Hinweis f�r Internet Explorer 6 Nutzer" title="YouTube Hinweis f�r Internet Explorer 6 Nutzer" style="width: 549px; height: 129px" width="549" align="default" height="129" /><br />
<i>Hinweis: Ich habe diesen Screenshot grafisch etwas abge�ndert um die Darstellung zu optimieren.</i><br />
<br />
Dieser Hinweis ist das erste, was den Besucher der YouTube-Website unterhalb der Suchleiste �ber die komplette Breite der Website erwartet - jedoch nur dann, wenn man den IE6 als Browser nutzt. Eine emulierte Internet Explorer 6 Version (die parallel mit anderen Versionen installiert wurde) funktioniert hier nicht. Der <a href="http://www.professorweb.de/surftipps/netrenderer-screenshots-vom-internet-explorer.html" target="_blank" title="Netrenderer - Screenshots vom Internet Explorer">Netrenderer</a> bietet da aber eine entsprechende Alternative.<br />
<br />
<br />
<br />
<b>Das Mittel zum Zweck</b><br />
YouTube, dass mit seinen enormen Zugriffszahlen einer der f�hrenden Seiten im Internet sein d�rfte erreicht extrem viele Menschen - vor allem privat. <br />
<br />
Um mal eine Gr��enordnung von YouTube zu nennen:<b> Jede Minute werden bei YouTube 10 Stunden Videomaterial hochgeladen.</b> Dies schreibt Google selbst im <a href="http://www.youtube.com/t/fact_sheet" target="_blank" title="YouTube Fact Sheet (englisch)">YouTube Fact Sheet</a> (englisch).<br />
<br />
<br />
Als Vorreiter im Internet hat Google auf YouTube etwas geschaffen, dass viele andere als Vorlage nehmen d�rften um �hnliche Ma�nahmen durchzuf�hren.<br />
<br />
Auch die neue ProfessorWeb Seite m�chte ich ohne IE6-Support ver�ffentlichen - wo, wenn nicht bei den Webdesignern :-)<br />
<br />
<br />
<br />
<b>Was hei�t das f�r uns?</b><br />
F�r uns Webdesigner und Webentwickler ist dies eine frohe Nachricht, denn endlich hat der IE6 seinen Todessto� erhalten und das nicht nur mit einem kleinen Dolch, sondern direkt mit der dicken Keule.<br />
<br />
W�hrend die Nutzer auf andere Versionen vom IE oder gar andere Browser umsteigen, sinkt der Verbreitungsgrad des IE6 und irgendwann ist er so wie schon der Internet Explorer 5.5 vernachl�ssigbar in der Erstellung von Internetseiten.<br />
<br />
F�r mich hei�t das �brigens auch, dass ich keine Artikel mehr verfasse welche L�sungen bei welchen Interpretationsproblemen des IE6 anwendbar sind. Und <a href="http://www.professorweb.de/sonstige/das-argernis-nummer-1-der-internet-explorer-6.html" target="_blank" title="�rgerniss No. 1: IE6">kleine Hass-Artikel des IE betreffend</a>  werden (so hoffe ich) auch weniger werden ;-)<br />
<br />
<br />
<b>Fazit</b><br />
Insgesamt ist dies eine sehr gute Nachricht. Ich bin gespannt wer noch auf den Zug springt und damit den IE6 in die wohlverdiente Rente schickt.<br />
<br />
<br />
Heise.de: <a href="http://www.heise.de/newsticker/YouTube-stellt-Unterstuetzung-fuer-Internet-Explorer-6-ein--/meldung/141998" target="_blank" title="Quelle: Heise.de">YouTube stellt Unterst�tzung f�r Internet Explorer 6 ein</a><br />
<br />
Tool um YouTube-Website als IE6-Nutzer anzeigen zu lassen:<br />
<a href="http://ipinfo.info/netrenderer/index.php" target="_blank" title="Netrenderer - Screenshots vom Internet Explorer">Netrenderer</a><br />
<br />
<br />
<i>Danke Tim, f�r den Hinweis zur Heise-News.</i><br />
 ]]></description>
			<pubDate>Wed, 15 Jul 2009 12:42:05 +0100</pubDate>
		</item>
		<item>
			<title>Min-Height: Die mindest H�he und ihre Probleme</title>
			<link>http://www.professorweb.de/css/min-height-die-mindest-hohe-und-ihre-probleme.html</link>
			<description><![CDATA[ <br />
<br />
Height gibt eine feste H�he an. Das Element ist also immer so hoch, egal wie viele Inhalte darin sind. Sind es mehr, bleibt die H�he des umschlie�enden Elementes aber konstant, was teilweise nicht so h�bsch aussehen kann.<br />
<br />
<br />
<br />
Daf�r gibt es in CSS die <b>min-height</b> Eigenschaft.<br />
Sie gibt keine fixe H�he vor, sondern beschreibt wie hoch ein Element mindestens sein darf.<br />
<br />
So k�nnte der CSS-Code oder grauen Box aussehen:<br />
<code>.box {<br />
&nbsp; background:#EDEDED;<br />
&nbsp; border:1px solid #DEDEDE;<br />
&nbsp; padding:5px;<br />
&nbsp; width:120px;<br />
&nbsp; min-height:100px;<br />
}<br />
</code><br />
<br />
Die Breite der grauen Box ist immer 130 Pixel (120 Pixel breite + (2x 5 Pixel Innenabstand links und rechts)). Die H�he jedoch ist nun flexibel. Sie ist mindestens 110 Pixel hoch und nach oben hin offen, je nach Inhalt.<br />
<br />
Ist eine solche Box z.B. nur eine Zeile hoch kann das ziemlich unsch�n aussehen, daher ist ein solcher Befehl ziemlich praktisch.<br />
<br />
<br />
<b>Problem im IE6</b><br />
Der Internet Explorer 6 kennt min-height gar nicht. Das CSS-Attribut height wird im IE6 so verwendet wie in allen anderen Browsern die min-height. Das f�hrt somit unweigerlich zu Konflikten, wenn man keine browserspezifische Anweisungen gibt. Nachfolgend drei L�sungsans�tze:<br />
<br />
<br />
<br />
<b>1. Min-Height durch Height mit Unterstrich</b><br />
Diese Verfahrensweise nutzt mein gesch�tzter Kollege <a href="http://www.typo3services.de/" target="_blank" title="Sven J�ger Typo3 Services">Sven</a> gerne (dem ich auf diesem Weg zum bestandenen Fachinformatiker/Anwendungsentwickler gratulieren m�chte :D), von dem ich auch von dieser Variante erfahren habe.<br />
<br />
Man f�gt dem CSS etwas hinzu:<br />
<code>.box {<br />
&nbsp; background:#EDEDED;<br />
&nbsp; border:1px solid #DEDEDE;<br />
&nbsp; padding:5px;<br />
&nbsp; width:120px;<br />
&nbsp; min-height:100px;<br />
&nbsp; <b>_height:100px;</b><br />
}<br />
</code><br />
<br />
Jetzt k�nnte man denken: "Whoo, ein neues Feature in CSS? Der Unterstrich _",<br />
doch tats�chlich ist es einfach ein Fehler.<br />
<br />
Ein Fehler der jeden Browser (au�er den IE6) dazu veranlasst diese Zeile komplett zu ignorieren. Der Internet Explorer 6 hingegen ignoriert in diesem CSS-Beispiel den min-height (weil er den Befehl nicht kennt) und nutzt stattdessen munter den Height-Befehl da ein voranstehender Unterstrich (_) wohl keine Syntax-Verletzung darstellt.<br />
<br />
Height wird im IE6 ja ebenso interpretiert wie in allen anderen Browsern die Min-Height-Eigenschaft, daher kommt man so zu einem einheitlichen Ergebnis in allen Browsern.<br />
<br />
<br />
<b>2. Verschiedene CSS-Dateien f�r den Internet Explorer</b><br />
Dank den <a href="http://www.professorweb.de/html/browserweiche-fur-den-internet-explorer.html" target="_blank" title="Conditional Comments">hier beschriebenen Conditional Comments</a>  oder einer einfachen PHP-Funktion ($_SERVER[&#39;HTTP_USER_AGENT&#39;] und <a href="http://de2.php.net/manual/de/function.get-browser.php" target="_blank" title="php.net: get_browser()">get_browser()</a>) kann man je nach verwendetem Browser individuelle Inhalte darstellen. So kann man auch eine spezielle CSS-Datei f�r den IE6 zus�tzlich laden in der folgendes steht:<br />
<code>.box {<br />
&nbsp; <b>height:100px;</b><br />
}<br />
</code><br />
<br />
So hat man keinen syntaktischen CSS-Fehler provoziert und kommt zum selben Ergebnis.<br />
<br />
<br />
<br />
<b>3. Das Element .minheight</b><br />
Ich pers�nlich verwende in meinen Projekten eine Variante, die vielleicht etwas umst�ndlicher, daf�r syntaktisch sowie logisch einwandfrei ist.<br />
<br />
Ich f�ge in die Box ein Element mit einer CSS-Klasse (.minheight) und gebe diesem Objekt die Breite 1 Pixel und die H�he x Pixel, wobei x f�r die gew�nschte Mindesth�he steht.<br />
<br />
Dieses Element muss immer als erstes in der Box erscheinen. Der HTML-Code sieht dann so aus:<br />
<code>&lt;div class=&quot;box&quot;&gt;<br />
&nbsp; &lt;div class=&quot;minheight&quot;&gt;&lt;/div&gt;<br />
&nbsp; Inhalte der Box<br />
&lt;/div&gt;<br />
</code><br />
<br />
Das passende CSS so:<br />
<code>.box .minheight {<br />
&nbsp; float:right;<br />
&nbsp; height:100px;<br />
&nbsp; width:1px;<br />
}<br />
</code><br />
<br />
Bei der Verwendung des Float-Befehls sollte man aber auch daran denken, es mit clear:right; entsprechend wieder aufzuheben ;-)<br />
<br />
<b>Diese L�sung hat zwei Nachteile:</b><br />
1. Sie ist umst�ndlicher<br />
2. Sie nimmt ein Pixel Platz in unserer Box weg. Wer darauf Wert legt sollte zu einer der anderen beiden L�sungen tendieren.<br />
<br />
<br />
<b>Fazit</b><br />
Drei verschiedene L�sungen, mit jeweils einem ganz eignem Charme. Ich pers�nlich empfehle f�r die Sauberkeit die zweite oder dritte L�sung. Wenn es schnell und schmerzlos gehen muss, auch mal die erste Variante.<br />
<br />
Dies alles ist nur f�r den Internet Explorer 6 n�tig. Wenn sein Marktanteil mal auf ein verschwindend geringes Prozentp�nktchen geschrumpft ist, sind solche Tricksereien nicht mehr notwendig.
 ]]></description>
			<pubDate>Mon, 29 Jun 2009 11:44:24 +0100</pubDate>
		</item>
		<item>
			<title>Master Plan - �ber die Macht von Google</title>
			<link>http://www.professorweb.de/surftipps/master-plan-uber-die-macht-von-google.html</link>
			<description><![CDATA[ <br />
<br />
Die Website um das Video "Master Plan - About the power of Google" beschreibt kurz, pr�gnant und sehr anschaulich was Google macht und warum unsere Privatsph�re dadurch gest�rt wird.<br />
<br />
<br />
<br />
Besonders hervorheben m�chte ich die Aufmachung des Videos, wirklich sehr anschaulich mit netten Effekten und 3D-Animationen. Die unterschwellige Musik erinnert ein wenig an die "Umbrella Corporation" aus der Filmreihe Resident Evil. <br />
<br />
Der Film darf zum Nachdenken anregen.<br />
<br />
<object height="385" width="480">
	<param name="movie" value="http://www.youtube-nocookie.com/v/9zKXCQpUnMg&hl=de&fs=1&">
	</param>
	<param name="allowFullScreen" value="true">
	</param>
	<param name="allowscriptaccess" value="always">
	</param>
	<embed src="http://www.youtube-nocookie.com/v/9zKXCQpUnMg&hl=de&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"></embed>
</object>
<br />
<br />
<br />
<br />
Hier geht es zur Website des Videos, dort kann es auch herunter geladen werden:<br />
<br />
<a href="http://masterplanthemovie.com/" target="_blank" title="Master Plan - Ein englischsprachiges Video �ber Google und seine Macht">Master Plan - About the power of Google</a>
 ]]></description>
			<pubDate>Fri, 26 Jun 2009 22:53:43 +0100</pubDate>
		</item>
		<item>
			<title>Wenn Internetfirmen Blogs akquirieren</title>
			<link>http://www.professorweb.de/sonstiges/wenn-internetfirmen-blogs-akquirieren.html</link>
			<description><![CDATA[ <br />
<br />
Heute erreichte mich mal eine f�r mich ganz neue Anfrage zum Thema "Gastbeitr�ge". �ber mein Kontaktformular schrieb mir eine nette Damen folgendes:<br />
<br />
Hallo Herr ,<br />
<br />
ich bin� Mitarbeiterin der ******** Gmbh und im Moment auf der Suche nach interessanten Themenblogs zum Thema Webdesign etc. Dabei bin ich auf Ihre Website gesto�en und m�chte hiermit anfragen, ob Sie prinzipiell an Fachbeitr�gen von Gastautoren interessiert w�ren. Im Gegenzug w�rden wir in einem solchen Beitrag einen Link auf unsere Seite www.*******.de platzieren. Bei Interesse w�rde ich mich �ber weiteren Kontakt freuen!<br />
<br />
MFG<br />
****<br />
<br />
Die Sternchen sind auskommentiert, das "Hallo Herr ," ist 1:1 �bernommen.<br />
<br />
Man kann sich M�he geben neue Partner f�r sich zu gewinnen... - muss man aber nicht.<br />
<br />
Fairerweise muss ich aber hinzuf�gen, dass der Ruf der Firma ihr vorauseilt, was ein weitere Grund war diese Offerte sofort auszuschlagen.<br />
<br />
<br />
<br />
<b>Mein pers�nlicher Tipp:</b><br />
Wenn die Werbung offensichtlich einem "Serienbrief" �hnelt, die Sache eher skeptisch betrachten. Man kann daraus schlie�en, dass wie so oft die Masse f�r den Anbietenden ausschlaggeben ist - und wer will schon einer von vielen sein? Gerade in einem Gebiet, in dem die Individualit�t eigentlich gro� geschrieben werden sollte.<br />
<br />
Dann verzichte ich doch lieber auf den "wertvollen" Backlink und habe daf�r einen kleinen Artikel mehr im Repertoire =D<br />
<br />

 ]]></description>
			<pubDate>Mon, 22 Jun 2009 20:28:34 +0100</pubDate>
		</item>
	</channel>
</rss>
