<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="Professor Web" --><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" 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>Wed, 19 Jun 2013 03:52:53 +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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ProfessorWeb" /><feedburner:info uri="professorweb" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title>Professor Web nimmt seinen Betrieb nach einem Relaunch wieder auf</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/bO-4UiNfEKc/professor-web-nimmt-seinen-betrieb-nach-einem-relaunch-wieder-auf.html</link>
			<description>&lt;br /&gt;
In den letzten 1,5 Jahren habe ich mir oft gedacht: "Das hier wäre perfekt um darüber einen Artikel zu schreiben!". Ich habe mich sehr viel mit objektorientierter Programmierung beschäftigt, mit dem CMS TYPO3 und auch mit Unittests.&lt;br /&gt;
&lt;br /&gt;
Und nun wende ich mein neues Wissen an um Professor Web zu relaunchen und es in neuen Beiträgen zu teilen! Unter der eigenen Abkürzung "pw2011" entwickle ich derzeit an der neuen Seite, die der alten in Nichts nachstehen wird.
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Bedingt durch meine berufliche Verwendung von TYPO3 wird pw2011 eben darauf basieren! Das alleine ist schon eine Herausforderung, da TYPO3 nicht als Blog-CMS bekannt ist. Allerdings sind eigene Programmierungen von TYPO3-Extensions wie "pw_comments" und "pw_teaser" bereits am laufen und werden nach dem Launch von mir als Open Source veröffentlicht.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Die Umsetzung ist schon ziemlich weit vorangeschritten, was mich auch dazu veranlasst hat diesen Beitrag zu veröffentlichen. Es ist allerdings auch noch einiges zu tun, nicht zuletzt der Import und die Aufbereitung der bisherigen Professor Web Artikel, daher bitte ich noch um ein bisschen Geduld.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Geplant ist der Relaunch im Sommer 2011.
&lt;/div&gt;
&lt;div&gt;
Ich freue mich darauf!
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
~Armin
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Update September 2011:&lt;/b&gt;
&lt;/div&gt;
&lt;div&gt;
Nachdem ich mehrfach gefragt werde, wie weit der Relaunch vorangeschritten ist, will ich hier mal ein kurzes Update geben:
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Der angestrebte Relaunch bis Sommer 2011 ist aufgrund des meterologischen Herbstanfangs neulich nun nicht mehr drin. Die Gründe hierfür sind sowohl Zeit- als auch teilweise Motivationsmangel. Hinzu kommt, dass Projekte die mir die Wurst auf dem Brötchen ermöglichen natürlich vor gehen.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Nichtsdestotrotz habe ich schon recht viel umgesetzt, auch wenn ich beschlossen habe manche Dinge davon nochmal zu ändern. Ich hab mal ein Screenshot des aktuellen Standes beigefügt - der ist zwar nicht repräsentativ, zeigt aber ganz gut die Marschrichtung:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://screens.v.ieweg.de/2011-09-09_1846.png" target="_blank"&gt;&lt;img src="http://www.professorweb.de/http://screens.v.ieweg.de/2011-09-09_1846.png" alt="Professor Web v2" title="Professor Web v2" style="width: 450px" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Um TYPO3 benutzen zu können habe ich bereits diverse Extensions entwickelt die ich auch, wenn sie entspreched ausgereift sind, ins TER (TYPO3 Extension Repository) laden werde, bzw. dies teilweise schon gemacht habe.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Ein paar meiner eigenen Extensions im TER:
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href="http://goo.gl/kr4FJ" target="_self"&gt;&lt;b&gt;pw_teaser&lt;/b&gt;&lt;/a&gt;  - Zum Generieren der Artikel-Listen&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://typo3.org/extensions/repository/view/pw_comments/current/" target="_self"&gt;&lt;b&gt;pw_comments&lt;/b&gt;&lt;/a&gt;  - Eine einfache aber mächtige Kommentar Extension&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;&lt;a href="http://goo.gl/6DJSF" target="_self"&gt;pagehits&lt;/a&gt;  &lt;/b&gt;- Einfacher Counter um einzelne Seitenaufrufe zu loggen (verwendet User-Session)&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;&lt;a href="http://goo.gl/ljiIp" target="_self"&gt;tinysource&lt;/a&gt;  &lt;/b&gt;- Entfernt Kommentare und überflüssige Whitespaces im finalen Code&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;&lt;a href="http://goo.gl/y3fnj" target="_self"&gt;extbase_cache_configurator&lt;/a&gt;  -&lt;/b&gt; Verhindert das stündliche Leeren des Extbase-Object-Caches.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;&lt;a href="http://goo.gl/jyR0r" target="_self"&gt;session&lt;/a&gt;  &lt;/b&gt;- Ermöglicht es Session-Variablen im TypoScript Kontext zu schreiben&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
Extensions die (noch) nicht im TER liegen:
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;strike&gt;&lt;b&gt;pw_comments &lt;/b&gt;- Eine Kommentar-Extension&lt;/strike&gt; (ist jetzt online)&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;pw_codesnippets &lt;/b&gt;- Im RTE werden Styles hinzugefügt, die wenn man sie auf Text anwendet, den Text im Frontend Syntax-Highlighted (sowas gibt es zwar schon, aber ich will keine extra Content-Elemente anlegen müssen)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Ich möchte das Projekt jetzt auch gerne fertig bekommen und würde mal schätzen, dass das dieses Jahr noch was wird, wenn nichts dazwischen kommt.
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
Vielen Dank für Euer Verständnis und Interesse!
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/bO-4UiNfEKc" height="1" width="1"/&gt;</description>
			<pubDate>Thu, 17 Mar 2011 02:20:12 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/professor-web/professor-web-nimmt-seinen-betrieb-nach-einem-relaunch-wieder-auf.html</feedburner:origLink></item>
		<item>
			<title>Keine neuen Artikel bei ProfessorWeb</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/lEsTfPx9PkQ/keine-neuen-artikel-bei-professorweb.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ich danke für Eure Aufmerksamkeit und Euer Verständnis.&lt;br /&gt;
&lt;br /&gt;
Freundlicher Gruß&lt;br /&gt;
Armin Rüdiger Vieweg&lt;br /&gt;
- Gründer ProfessorWeb.de -&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/lEsTfPx9PkQ" height="1" width="1"/&gt;</description>
			<pubDate>Fri, 25 Sep 2009 12:19:07 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/professor-web/keine-neuen-artikel-bei-professorweb.html</feedburner:origLink></item>
		<item>
			<title>Zeilen in Tabellen mit PHP abwechselnd stylen (even, odd)</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/pY0CtuahoPI/zeilen-in-tabellen-mit-php-abwechselnd-stylen-even-odd.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
Erst kürzlich habe ich in einem &lt;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"&gt;ausführlichen Artikel&lt;/a&gt;  die PHP Klasse "Simple HTML DOM Parser" vorgestellt, mit der man wie in jQuery sehr komfortabel HTML-Code ändern kann.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel setzt den Vorherigen als Basis voraus, daher empfehle ich erst den &lt;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"&gt;Simple HTML DOM Parser Artikel&lt;/a&gt;  zu verinnerlichen, bevor wir auf das folgende Praxis-Beispiel näher eingehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Grafisch hochwertige Tabellen&lt;/b&gt;&lt;br /&gt;
Eine nett anzusehende Tabelle könnte zum Beispiel so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://www.professorweb.de/images/stories/screenshots/tablecloth1.gif" alt="Hübsche Tabelle" title="Hübsche Tabelle" align="default" /&gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Bild ist aus einem vorherigen Artikel von Professor Web, in dem ich auf das kleine &lt;a href="http://www.professorweb.de/html/tablecloth-tabellen-funktional-und-optisch-aufwerten.html" target="_self" title="Tablecloth - Tabellen funktional und optisch aufwerten"&gt;JavaScript Tablecloth&lt;/a&gt;  eingegangen bin, dass das was wir jetzt mit PHP machen schon mit JavaScript umgesetzt hat.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil es mit PHP zu machen ist, dass kein JavaScript benötigt wird und der Aufwand verhältnismäßig gering ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Der Grund-Code&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;require_once($_SERVER[&amp;quot;DOCUMENT_ROOT&amp;quot;] . &amp;quot;/inc/simple_html_dom.php&amp;quot;);&lt;br /&gt;
$inhalte = str_get_html($inhalte);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Der Haupt-Code&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;foreach($inhalte-&amp;gt;find(&amp;#39;table&amp;#39;) as $e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($e-&amp;gt;find(&amp;#39;tr&amp;#39;) as $f) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if($i == 0) $f-&amp;gt;class .= &amp;#39; first&amp;#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if($i % 2 == 0) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $f-&amp;gt;class .= &amp;#39; odd&amp;#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $f-&amp;gt;class .= &amp;#39; even&amp;#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $i++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; unset($i);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Erklärung&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
In der zweiten If-Abfrage wird geklärt ob das aktuelle TR gerade (even) oder ungerade (odd) ist. Dafür verwenden wir den &lt;a href="http://us2.php.net/manual/de/language.operators.arithmetic.php" target="_blank" title="PHP.net - Arithmetische Operatoren"&gt;Operator %&lt;/a&gt;. Wir teilen also die Laufvariable durch 2 und erhalten nicht den geteilten Wert, sondern den Restwert.&lt;br /&gt;
&lt;br /&gt;
3 geteilt durch 2 - der Restwert ist 1 - d.h. ungerade&lt;br /&gt;
4 geteilt durch 2 - der Restwert ist 0 - d.h. gerade&lt;br /&gt;
usw...&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Modifikation&lt;/b&gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;code&gt;foreach($inhalte-&amp;gt;find(&amp;#39;div#content table&amp;#39;) as $e) {&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Das passende CSS&lt;/b&gt;&lt;br /&gt;
Ist das Script eingebunden und wird der Quellcode ausgegeben können wir die Klassen .even, .odd und .first nach Belieben im Stylesheet definieren.&lt;br /&gt;
&lt;br /&gt;
Um ein vergleichbares Ergebnis wie im Screenshot oben zu erzielen würden wir also folgendes schreiben:&lt;br /&gt;
&lt;code&gt;tr.odd {&lt;br /&gt;
&amp;nbsp; background-color:#f8fbfc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tr.even {&lt;br /&gt;
&amp;nbsp; background-color:#e5f1f4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tr.first {&lt;br /&gt;
&amp;nbsp; background-color:#328aa4;&lt;br /&gt;
&amp;nbsp; color:#fff;&lt;br /&gt;
&amp;nbsp; font-weight:bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Übrigens: Die erste Zeile in der Tabelle hat die Klassen "first" und "odd". Das kann je nach Aufbau des Stylesheets wichtig sein.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Basiswissen:&lt;/b&gt; &lt;a href="http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html" target="_blank" title="Simple HTML DOM Parser"&gt;Simple HTML DOM Parser&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;br /&gt;
Der Artikel hat übrigens die glatte ID=300 in meinem Blog :)&lt;/i&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/pY0CtuahoPI" height="1" width="1"/&gt;</description>
			<pubDate>Wed, 12 Aug 2009 13:37:00 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/php-mysql/zeilen-in-tabellen-mit-php-abwechselnd-stylen-even-odd.html</feedburner:origLink></item>
		<item>
			<title>Neuer RSS-Feed - Jetzt mit den kompletten Artikeln</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/_SydmbXhBno/neuer-rss-feed-jetzt-mit-den-kompletten-artikeln.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/professorweb" target="_blank" title="Professor Web RSS-Feed"&gt;&lt;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" /&gt;&lt;/a&gt; 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.&lt;br /&gt;
&lt;br /&gt;
Soll mir recht sein - ich fand es nur lustig, mal einen Moment nicht aufgepasst zu haben und *schwubs* hat Google Feedburner aufgekauft ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Neuer Professor Web RSS-Feed&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Der Link zum RSS lautet: &lt;b&gt;&lt;a href="http://feeds.feedburner.com/professorweb" target="_blank" title="Professor Web RSS Feed"&gt;http://feeds.feedburner.com/professorweb&lt;/a&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
Ihr könnt ihn aber auch über den Button rechts oben jederzeit aufrufen und hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Neues Professor Web Logo&lt;/b&gt;&lt;br /&gt;
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 &lt;b&gt;2. Geburtstages von Professor Web&lt;/b&gt;, geladen. Das wollte ich nur mal kurz hier anmerken, wenn ich ja eh gerade ein Artikel über mich selbst am schreiben bin ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Fragen, Anregungen und Kritik&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/_SydmbXhBno" height="1" width="1"/&gt;</description>
			<pubDate>Wed, 12 Aug 2009 10:56:53 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/professor-web/neuer-rss-feed-jetzt-mit-den-kompletten-artikeln.html</feedburner:origLink></item>
		<item>
			<title>Simple HTML DOM Parser - HTML mit PHP ändern</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/mhn3TUdvB8s/simple-html-dom-parser-html-mit-php-andern.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$(&amp;quot;a[href^=&amp;#39;http://&amp;#39;]&amp;quot;).addClass(&amp;quot;external&amp;quot;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;code&gt;a[href^=&amp;#39;http://&amp;#39;] {&lt;br /&gt;
&amp;nbsp; color:red;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;b&gt;Aber Achtung!&lt;/b&gt; 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).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Grundvoraussetzung&lt;/b&gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;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()"&gt;Inhalte mit PHP abfangen&lt;/a&gt; 
und&lt;br /&gt;
&lt;a href="http://www.professorweb.de/php-mysql/php-und-.htaccess-aus-statisch-mach-dynamisch.html" target="_self"&gt;PHP und .htaccess: Aus statisch mach dynamisch&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
PHP Simple HTML DOM Parser&lt;/b&gt;&lt;br /&gt;
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 &lt;strike&gt;große&lt;/strike&gt; kleine Datei über ein Include oder besser ein Require ins PHP einfügen, also so:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;require_once($_SERVER[&amp;quot;DOCUMENT_ROOT&amp;quot;] . &amp;quot;/inc/simple_html_dom.php&amp;quot;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Damit kann das Script noch nichts anfangen, der Text muss erst geparsed werden. Ist aber nicht schwer, dafür gibt es folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$inhalte = str_get_html($inhalte);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Wir überschreiben hier die Variable $inhalte mit der geparsten Variante des Quellcodes.&lt;br /&gt;
&lt;br /&gt;
Man kann auch statt einer Variable direkt eine Datei öffnen oder sich den Quellcode einer externen Seite "leechen" mit folgendem Befehl:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$html = file_get_html(&amp;#39;test.html&amp;#39;);&lt;br /&gt;
$external_html = file_get_html(&amp;#39;http://www.google.de/&amp;#39;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Das aber nur am Rande - wir arbeiten jetzt mit $inhalte weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich will alle Links im DIV mit der id="content" aufgelistet haben. Kein Problem dafür nutzen wir folgenden Code:&lt;br /&gt;
&lt;code&gt;$meine_links = $inhalte-&amp;gt;find(&amp;#39;#content a&amp;#39;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Der Befehl von eben, kombiniert mit der entsprechenden Schleife sieht dann so aus:&lt;br /&gt;
&lt;code&gt;foreach($inhalte-&amp;gt;find(&amp;#39;#content a&amp;#39;) as $e) {&lt;br /&gt;
&amp;nbsp; echo(&amp;quot;Link gefunden mit href: &amp;quot; . $e-&amp;gt;href . &amp;quot;&amp;lt;br&amp;gt;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
$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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;
Den Quellcode in der Variable verändern&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;foreach($inhalte-&amp;gt;find(&amp;#39;#content a&amp;#39;) as $e) {&lt;br /&gt;
&amp;nbsp; $e-&amp;gt;target = &amp;quot;_blank&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Geben wir den Quellcode nun mit &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$fertige_inhalte = $inhalte;&lt;br /&gt;
echo $fertige_inhalte;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn wir weiterhin objektorientiert bleiben wollen, können wir aber auch dieses hier schreiben:&lt;br /&gt;
&lt;code&gt;$fertige_inhalte = $inhalte-&amp;gt;save();&lt;br /&gt;
echo $fertige_inhalte;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man den Quellcode auch direkt in eine Datei zurückschreiben:&lt;br /&gt;
&lt;code&gt;$html-&amp;gt;save(&amp;#39;ergebnis.html&amp;#39;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Das ist total praktisch und relativ einfach zu handhaben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Spezielle Attribute&lt;/b&gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
Abgesehen von den "normalen" Attributen gibt es aber noch speziell definierte Eigenschafen, die es im normalen HTML so gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Und zwar gibt es noch Folgendes:&lt;/b&gt;&lt;br /&gt;
&lt;code&gt;echo $e-&amp;gt;tag; //Ausgabe: a&lt;br /&gt;
echo $e-&amp;gt;outertext; //Ausgabe: &amp;lt;a href=&amp;quot;test.html&amp;quot;&amp;gt;Dies ist ein &amp;lt;b&amp;gt;Lin...&amp;lt;/a&amp;gt;&lt;br /&gt;
echo $e-&amp;gt;innertext; //Ausgabe: Dies ist ein &amp;lt;b&amp;gt;Link&amp;lt;/b&amp;gt;&lt;br /&gt;
echo $e-&amp;gt;plaintext; //Ausgabe: Dies ist ein Link&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Diese Eigenschaften sind vergleichbar mit innerHTML oder outerHTML aus JavaScript.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sich im Quellcode bewegen&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Hierfür haben die Entwickler ähnliche Befehle eingebaut, wie wir sie schon aus JavaScript oder Libraries wie jQuery kennen:&lt;br /&gt;
&lt;code&gt;$element_danach = $e-&amp;gt;next_sibling();&lt;br /&gt;
$element_davor = $e-&amp;gt;prev_sibling();&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Wir können auch Kombinationen machen, z.B. alle Kinder-Elemente im nächsten Element:&lt;br /&gt;
&lt;code&gt;$elemente_im_element_danach = $e-&amp;gt;next_sibling()-&amp;gt;children();&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Lizenz, Download und Dokumentation&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://simplehtmldom.sourceforge.net/index.htm" target="_blank" title="PHP Simple HTML DOM Parser Website"&gt;Website von PHP Simple HTML DOM Parser&lt;/a&gt;&lt;br /&gt;
&lt;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"&gt;Download Version 1.11 (als ZIP mit Beispielen)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Alternativen kennt, Fragen habt oder schon Erfahrungen damit machen konntet - immer gerne her damit - die Kommentarfunktion steht Euch zur freien Verfügung.&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/mhn3TUdvB8s" height="1" width="1"/&gt;</description>
			<pubDate>Tue, 11 Aug 2009 14:38:54 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/php-mysql/simple-html-dom-parser-html-mit-php-andern.html</feedburner:origLink></item>
		<item>
			<title>Wie man in CSS mit Position arbeitet</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/G9ButGlszA0/wie-man-in-css-mit-position-arbeitet.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
Die Position-Eigenschaft in CSS (Cascading Stylesheet) kann folgende Werte haben:&lt;br /&gt;
absolute, relative, static und fixed&lt;br /&gt;
&lt;br /&gt;
"Fixed" wird vom IE6 nicht unterstützt ansonsten sind die verschiedenen Werte unterschiedlich einsetzbar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wofür verwendet man Position?&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Fast immer verwendet man in Verbindung mit Position auch die Befehle "left" und "top" - gelegentlich auch "right" und "bottom".&lt;br /&gt;
&lt;br /&gt;
Um mal mit einem einfachen Beispiel arbeiten zu können ist der folgende HTML-Code für alle Beispiele gleich:&lt;br /&gt;
&lt;code&gt;&amp;lt;div id=&amp;quot;header&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ich bin oben&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Ich bin unten&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Quellcode ohne irgendwelche extra Positionsangaben (das entspricht dann &lt;b&gt;position:static&lt;/b&gt;) gibt folgendes im Browser aus:&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
Natürlich nicht so, hierbei handelt es sich um schematische Darstellungen. Grauen Hintergrund oder dunkelgrauen Rahmen haben wir im CSS nirgends definiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Position: relative&lt;/b&gt;&lt;br /&gt;
Das Bild eben bleibt so, auch wenn wir im CSS folgendes sagen:&lt;br /&gt;
&lt;code&gt;#header, #footer {&lt;br /&gt;
&amp;nbsp; position:relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Position: absolute&lt;/b&gt;&lt;br /&gt;
Geben wir beiden Elementen &lt;b&gt;position:absolute;&lt;/b&gt; erhalten wir folgendes:&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
Huch! Wo ist denn das zweite DIV hin? Wir haben doch nichts am HTML geändert?! &lt;br /&gt;
Nun beide DIVs orientieren sich am darüber gelegenen Objekt. In diesem Fall den &lt;body&gt;. Da wir keinem irgendwelche Top- oder Left-Angaben mitgegeben haben, befinden sich beide Elemente an der gleichen Position. Left:0 und Top: 0.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Manchmal sind solche Überlagerungen durchaus erwünscht, dann kann man mit der CSS-Eigenschaft &lt;b&gt;z-index &lt;/b&gt;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.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;#header, #footer {&lt;br /&gt;
&amp;nbsp; position:absolute;&lt;br /&gt;
}&lt;br /&gt;
#header {&lt;br /&gt;
&amp;nbsp; z-index:10;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Jetzt wäre "Ich bin oben" zu lesen.&lt;br /&gt;
&lt;br /&gt;
Bei Position:absolute wird fast immer auch mit Positionsangaben gearbeitet. &lt;br /&gt;
&lt;code&gt;#header, #footer {&lt;br /&gt;
&amp;nbsp; position:absolute;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#header {&lt;br /&gt;
&amp;nbsp; top:0;  left:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer {&lt;br /&gt;
&amp;nbsp; top:20px; left:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Das sieht dann so aus:&lt;/b&gt;&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
Ü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. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Position: fixed&lt;/b&gt;&lt;br /&gt;
"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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Die Kombination aus absolute und relative&lt;/b&gt;&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel nehmen wir jetzt mal folgenden HTML-Code:&lt;br /&gt;
&lt;code&gt;&amp;lt;div id=&amp;quot;website&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&amp;quot;box1&amp;quot;&amp;gt;Box 1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id=&amp;quot;box2&amp;quot;&amp;gt;Box 2&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
und folgendes CSS:&lt;br /&gt;
&lt;code&gt;#website {&lt;br /&gt;
&amp;nbsp; width:960px;&lt;br /&gt;
&amp;nbsp; height:500px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#box1, #box2 { position:absolute; }&lt;br /&gt;
&lt;br /&gt;
#box1 {&lt;br /&gt;
&amp;nbsp; top:10px; left:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#box2 {&lt;br /&gt;
&amp;nbsp; bottom:10px; right:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Das Ergebnis sieht so aus:&lt;/b&gt;&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
Wir ergänzen unser letztes CSS folgendermaßen:&lt;br /&gt;
&lt;code&gt;#website {&lt;br /&gt;
&amp;nbsp; width:960px;&lt;br /&gt;
&amp;nbsp; height:500px;&lt;br /&gt;
&amp;nbsp; position:relative;&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Der Rest bleibt identisch. Das Ergebnis sieht dann, so wie wir es wollten aus, &lt;b&gt;nämlich so&lt;/b&gt;:&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soviel mal zu den Möglichkeiten von Position in CSS. Wenn Ihr noch Ergänzungen, Links oder Fragen habt, nur her damit :)&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/G9ButGlszA0" height="1" width="1"/&gt;</description>
			<pubDate>Thu, 23 Jul 2009 17:17:51 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/css/wie-man-in-css-mit-position-arbeitet.html</feedburner:origLink></item>
		<item>
			<title>Firefox 3.5 und Firebug 1.4 haben einen Bug</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/V-mO22evRKI/firefox-3.5-und-firebug-1.4.0-haben-einen-bug.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.professorweb.de/#lastupdate" target="_self"&gt;Der Bug wurde in Firefox 3.5.2 behoben&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
"Web Development Evolved" lautet der Untertitel dieser wirklich göttlich anmutenden Erweiterung für den Firefox Browser. Der Slogan bedeutet soviel wie "Webentwicklung weitergedacht".&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; Der Fehler ist in Version 1.4.1 leider immer noch enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Die Ausgangssituation&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ein entsprechendes Stylesheet sähe z.B. so aus:&lt;br /&gt;
&lt;code&gt;#website {&lt;br /&gt;
&amp;nbsp; background:red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; #website {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; background:white;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Der Fehler&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
So kann man natürlich nicht effektiv arbeiten. Hier mal eine &lt;a href="http://tinyurl.com/lyheq6" target="_blank" title="Beispielseite für Firebug Fehler"&gt;Beispielseite&lt;/a&gt;  bei der die Nutzung von Firebug zu dem Fehler führt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Die Lösung&lt;/b&gt; (&lt;a href="http://www.professorweb.de/#update1" target="_self" title="Update des Artikels über Firefox 3.5 und Firebug 1.4.0"&gt;zum Update&lt;/a&gt;)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Also so:&lt;br /&gt;
&lt;code&gt;#website {&lt;br /&gt;
&amp;nbsp; background:red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* @media print&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; #website {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; background:white;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
} */&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
So interpretiert Firebug nun nur noch den tatsächlich gültigen CSS-Code und lässt die Kommentare als solche links liegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Alternativen?&lt;/b&gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; media=&amp;quot;screen&amp;quot; href=&amp;quot;screen.css&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; media=&amp;quot;print&amp;quot; href=&amp;quot;print.css&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr hier Erfahrungswerte habt, würde ich mich über einen kurzen Kommentar freuen.&lt;br /&gt;
&lt;br /&gt;
Ansonsten bleibt nur Abwarten und Tee trinken, bis eine neue Version von Firebug veröffentlicht wird, die den Fehler entsprechend behebt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Die Entwickler sagen,...&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Link: &lt;a href="http://code.google.com/p/fbug/issues/detail?id=2141" target="_blank" title="Google Code: Firebug Issue #2141"&gt;Firebug Issue #2141&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a title="update1" name="update1"&gt;&lt;/a&gt;&lt;b&gt;Update: Eine weitere Alternative&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Download: &lt;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"&gt;Firebug 1.4.0 Beta 5&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a title="lastupdate" name="lastupdate"&gt;&lt;/a&gt;&lt;b&gt;Letztes Update: Fehler in Firefox 3.5.2 und Firebug 1.4.1 behoben&lt;/b&gt;&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Übrgens&lt;/b&gt;...&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/V-mO22evRKI" height="1" width="1"/&gt;</description>
			<pubDate>Tue, 21 Jul 2009 14:22:49 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/anwendungen/firefox-3.5-und-firebug-1.4.0-haben-einen-bug.html</feedburner:origLink></item>
		<item>
			<title>YouTube stellt den Internet Explorer 6 Support ein</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/aTAJyyLfFTU/youtube-stellt-den-internet-explorer-6-support-ein.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Google macht was dagegen!&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Folgender Hinweis erwartet den IE6-Nutzer auf der YouTube-Website:&lt;br /&gt;
&lt;br /&gt;
&lt;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" /&gt;&lt;br /&gt;
&lt;i&gt;Hinweis: Ich habe diesen Screenshot grafisch etwas abgeändert um die Darstellung zu optimieren.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="http://www.professorweb.de/surftipps/netrenderer-screenshots-vom-internet-explorer.html" target="_blank" title="Netrenderer - Screenshots vom Internet Explorer"&gt;Netrenderer&lt;/a&gt; bietet da aber eine entsprechende Alternative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Das Mittel zum Zweck&lt;/b&gt;&lt;br /&gt;
YouTube, dass mit seinen enormen Zugriffszahlen einer der führenden Seiten im Internet sein dürfte erreicht extrem viele Menschen - vor allem privat. &lt;br /&gt;
&lt;br /&gt;
Um mal eine Größenordnung von YouTube zu nennen:&lt;b&gt; Jede Minute werden bei YouTube 10 Stunden Videomaterial hochgeladen.&lt;/b&gt; Dies schreibt Google selbst im &lt;a href="http://www.youtube.com/t/fact_sheet" target="_blank" title="YouTube Fact Sheet (englisch)"&gt;YouTube Fact Sheet&lt;/a&gt; (englisch).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als Vorreiter im Internet hat Google auf YouTube etwas geschaffen, dass viele andere als Vorlage nehmen dürften um ähnliche Maßnahmen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
Auch die neue ProfessorWeb Seite möchte ich ohne IE6-Support veröffentlichen - wo, wenn nicht bei den Webdesignern :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Was heißt das für uns?&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 &lt;a href="http://www.professorweb.de/sonstige/das-argernis-nummer-1-der-internet-explorer-6.html" target="_blank" title="Ärgerniss No. 1: IE6"&gt;kleine Hass-Artikel des IE betreffend&lt;/a&gt;  werden (so hoffe ich) auch weniger werden ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Fazit&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Heise.de: &lt;a href="http://www.heise.de/newsticker/YouTube-stellt-Unterstuetzung-fuer-Internet-Explorer-6-ein--/meldung/141998" target="_blank" title="Quelle: Heise.de"&gt;YouTube stellt Unterstützung für Internet Explorer 6 ein&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Tool um YouTube-Website als IE6-Nutzer anzeigen zu lassen:&lt;br /&gt;
&lt;a href="http://ipinfo.info/netrenderer/index.php" target="_blank" title="Netrenderer - Screenshots vom Internet Explorer"&gt;Netrenderer&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Danke Tim, für den Hinweis zur Heise-News.&lt;/i&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/aTAJyyLfFTU" height="1" width="1"/&gt;</description>
			<pubDate>Wed, 15 Jul 2009 12:42:05 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/internet/youtube-stellt-den-internet-explorer-6-support-ein.html</feedburner:origLink></item>
		<item>
			<title>Min-Height: Die mindest Höhe und ihre Probleme</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/jg645hSFMEU/min-height-die-mindest-hohe-und-ihre-probleme.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dafür gibt es in CSS die &lt;b&gt;min-height&lt;/b&gt; Eigenschaft.&lt;br /&gt;
Sie gibt keine fixe Höhe vor, sondern beschreibt wie hoch ein Element mindestens sein darf.&lt;br /&gt;
&lt;br /&gt;
So könnte der CSS-Code oder grauen Box aussehen:&lt;br /&gt;
&lt;code&gt;.box {&lt;br /&gt;
&amp;nbsp; background:#EDEDED;&lt;br /&gt;
&amp;nbsp; border:1px solid #DEDEDE;&lt;br /&gt;
&amp;nbsp; padding:5px;&lt;br /&gt;
&amp;nbsp; width:120px;&lt;br /&gt;
&amp;nbsp; min-height:100px;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ist eine solche Box z.B. nur eine Zeile hoch kann das ziemlich unschön aussehen, daher ist ein solcher Befehl ziemlich praktisch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problem im IE6&lt;/b&gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Min-Height durch Height mit Unterstrich&lt;/b&gt;&lt;br /&gt;
Diese Verfahrensweise nutzt mein geschätzter Kollege &lt;a href="http://www.typo3services.de/" target="_blank" title="Sven Jäger Typo3 Services"&gt;Sven&lt;/a&gt; gerne (dem ich auf diesem Weg zum bestandenen Fachinformatiker/Anwendungsentwickler gratulieren möchte :D), von dem ich auch von dieser Variante erfahren habe.&lt;br /&gt;
&lt;br /&gt;
Man fügt dem CSS etwas hinzu:&lt;br /&gt;
&lt;code&gt;.box {&lt;br /&gt;
&amp;nbsp; background:#EDEDED;&lt;br /&gt;
&amp;nbsp; border:1px solid #DEDEDE;&lt;br /&gt;
&amp;nbsp; padding:5px;&lt;br /&gt;
&amp;nbsp; width:120px;&lt;br /&gt;
&amp;nbsp; min-height:100px;&lt;br /&gt;
&amp;nbsp; &lt;b&gt;_height:100px;&lt;/b&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt könnte man denken: "Whoo, ein neues Feature in CSS? Der Unterstrich _",&lt;br /&gt;
doch tatsächlich ist es einfach ein Fehler.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Verschiedene CSS-Dateien für den Internet Explorer&lt;/b&gt;&lt;br /&gt;
Dank den &lt;a href="http://www.professorweb.de/html/browserweiche-fur-den-internet-explorer.html" target="_blank" title="Conditional Comments"&gt;hier beschriebenen Conditional Comments&lt;/a&gt;  oder einer einfachen PHP-Funktion ($_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;] und &lt;a href="http://de2.php.net/manual/de/function.get-browser.php" target="_blank" title="php.net: get_browser()"&gt;get_browser()&lt;/a&gt;) 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:&lt;br /&gt;
&lt;code&gt;.box {&lt;br /&gt;
&amp;nbsp; &lt;b&gt;height:100px;&lt;/b&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
So hat man keinen syntaktischen CSS-Fehler provoziert und kommt zum selben Ergebnis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Das Element .minheight&lt;/b&gt;&lt;br /&gt;
Ich persönlich verwende in meinen Projekten eine Variante, die vielleicht etwas umständlicher, dafür syntaktisch sowie logisch einwandfrei ist.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Dieses Element muss immer als erstes in der Box erscheinen. Der HTML-Code sieht dann so aus:&lt;br /&gt;
&lt;code&gt;&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;div class=&amp;quot;minheight&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;nbsp; Inhalte der Box&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Das passende CSS so:&lt;br /&gt;
&lt;code&gt;.box .minheight {&lt;br /&gt;
&amp;nbsp; float:right;&lt;br /&gt;
&amp;nbsp; height:100px;&lt;br /&gt;
&amp;nbsp; width:1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung des Float-Befehls sollte man aber auch daran denken, es mit clear:right; entsprechend wieder aufzuheben ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Diese Lösung hat zwei Nachteile:&lt;/b&gt;&lt;br /&gt;
1. Sie ist umständlicher&lt;br /&gt;
2. Sie nimmt ein Pixel Platz in unserer Box weg. Wer darauf Wert legt sollte zu einer der anderen beiden Lösungen tendieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Fazit&lt;/b&gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/jg645hSFMEU" height="1" width="1"/&gt;</description>
			<pubDate>Mon, 29 Jun 2009 11:44:24 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/css/min-height-die-mindest-hohe-und-ihre-probleme.html</feedburner:origLink></item>
		<item>
			<title>Master Plan - Über die Macht von Google</title>
			<link>http://feedproxy.google.com/~r/ProfessorWeb/~3/oQ8fPN62_Iw/master-plan-uber-die-macht-von-google.html</link>
			<description>&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Der Film darf zum Nachdenken anregen.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="480"&gt;
	&lt;param name="movie" value="http://www.youtube-nocookie.com/v/9zKXCQpUnMg&amp;hl=de&amp;fs=1&amp;"&gt;
	&lt;/param&gt;
	&lt;param name="allowFullScreen" value="true"&gt;
	&lt;/param&gt;
	&lt;param name="allowscriptaccess" value="always"&gt;
	&lt;/param&gt;
	&lt;embed src="http://www.youtube-nocookie.com/v/9zKXCQpUnMg&amp;hl=de&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier geht es zur Website des Videos, dort kann es auch herunter geladen werden:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://masterplanthemovie.com/" target="_blank" title="Master Plan - Ein englischsprachiges Video über Google und seine Macht"&gt;Master Plan - About the power of Google&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ProfessorWeb/~4/oQ8fPN62_Iw" height="1" width="1"/&gt;</description>
			<pubDate>Fri, 26 Jun 2009 22:53:43 +0100</pubDate>
		<feedburner:origLink>http://www.professorweb.de/surftipps/master-plan-uber-die-macht-von-google.html</feedburner:origLink></item>
	</channel>
</rss>
