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

<channel>
	<title>Guardian Online</title>
	<atom:link href="http://www.guardian-online.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guardian-online.de</link>
	<description>Web, Design and Development</description>
	<lastBuildDate>Sat, 10 Dec 2011 09:31:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Eigenes WordPress Plugin erstellen — objektorientiert mit Klassen</title>
		<link>http://www.guardian-online.de/2011/11/19/eigenes-wordpress-plugin-erstellen-objektorientiert-mit-klassen/</link>
		<comments>http://www.guardian-online.de/2011/11/19/eigenes-wordpress-plugin-erstellen-objektorientiert-mit-klassen/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 19:09:44 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=361</guid>
		<description><![CDATA[Jeder der schon mal tiefer in die “tiefsten Tiefen” von WordPress geschaut hat, kam eventuell mal auf die Idee, das System zu erweitern. Nun gibt es ja endlich plus ein WordPress Plugin. Aber was, wenn die gewünschte Funktionalität eventuell mal &#8230; <a href="http://www.guardian-online.de/2011/11/19/eigenes-wordpress-plugin-erstellen-objektorientiert-mit-klassen/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Jeder der schon mal tiefer in die <em>“tiefsten Tiefen”</em> von WordPress geschaut hat, kam eventuell mal auf die Idee, das System zu erweitern. Nun gibt es ja endlich plus ein WordPress Plugin. Aber was, wenn die gewünschte Funktionalität eventuell mal nicht so abgedeckt wird, wie man es vielleicht gern möchte? Naja … dann gibt’s im Regelfall nur folgende Optionen:</p>
<ul>
<li>man fragt einen Bekannten, der sich mit PHP und WordPress auskennt, ob er einem hilft</li>
<li>in einschlägigen Foren einen Anfrage stellen</li>
<li>auf freelancer Foren das Gesuch gegen Bezahlung aufgeben (bäääähh <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
<li>man setzt sich auf seinen Hintern und versucht es selbst</li>
</ul>
<p>Jetzt kann natürlich jeder selbst entscheiden, was er / sie gern selbst machen würde. Wer Option 1 — 3 wählt, kann hier eigentlich schon aufhören mit lesen.</p>
<p>Alle anderen angehenden WordPress Profis sind herzlich dazu eingeladen hier zu erfahren, wie man sich selbst ein Plugin schreibt. Und zwar auf die harte Tour: objektorientiert — yeah!</p>
<h3>An wen richtet sich dieses Tutorial? Wie  geht’s los?</h3>
<p>Dieser Artikel richtet sich grundsätzlich an Personen, die bereits Kenntnisse im Umgang mit PHP haben und denen das grundlegende Konzept der objektorientierten Programmierung nicht unbekannt ist.</p>
<p>So, was brauchen wir hier so? Erstmal ein <a title="PHP Handbuch in deutsch" href="http://php.net/manual/de/index.php">Grundlagenwissen in PHP</a> — logisch. Dann sollte man sich etwas mit dem System WordPress an sich auskennen. Hier empfiehlt es sich mal in den <a title="WordPress Codex" href="http://codex.wordpress.org/">WordPress Codex</a> reinzuschauen. In diesem Codex findet man eine verhältnismäßig gute Dokumentation darüber, wie man seinen Blog erweitert oder eben ein WordPress Plugin aufbauen kann. Dann brauchen wir noch die Seite von Adam Brown — <a title="Besuche Adam Browns WordPress hooks database" href="http://adambrown.info/p/wp_hooks">WordPress hooks database</a>. Auf der Seite findet man sämtliche Hooks von WordPress inkl. Revisionen.</p>
<h2>Hook? Captain Hook oder was??</h2>
<p>WordPress hat die tollen Eigenschaft, dass man sich nahezu an jeder Stelle ins System “einhängen” kann um den Ablauf seinen Bedürfnissen anzupassen. Es gibt zwei Arten von Hooks: Actions und Filter.</p>
<h3>Actions</h3>
<p>Ein Action Hook ist ein Hook, der sich zu einem bestimmten Zeitpunkt ins System einklinkt. Dabei kann man dann z.B. eine eigene PHP-Funktion aufrufen. Die reagieren also auf bestimmte Aktionen des Systems.</p>
<h3>Filter</h3>
<p>Filter dienen der hauptsächlich der Änderung von Texten. Erst nach diesen Änderungen werden sie dann z.B. in der Datenbank gespeichert, oder angezeigt.</p>
<p>So, das war ein absolut minimaler und oberflächlicher Exkurs in die Hooks von WordPress. Detailwissen gibt es dann im WordPress Codex. Aber jetzt legen wir mal los. Unser WordPress Plugin soll mal etwas Quelltext bekommen.</p>
<h2>Das Grundgerüst — die Klasse</h2>
<pre class="brush: php; title: ; notranslate">/*
   Plugin Name: Mein erstes WordPress Plugin
   Plugin URI: http://www.guardian-online.de
   Description: Das ist mein allererstes WordPress Plugin
   Author: Benno Mielke
   Author URI: http://www.guardian-online.de
   Version: 0.0.1
*/

if( !class_exists( 'myPlugin' ) ) {
   class myPlugin {

      function __construct() {
         register_activation_hook( __FILE__, array( &amp;$this, 'activate' ) );
         register_deactivation_hook( __FILE__, array( &amp;$this, 'deactivate' ) );
      }

      function activate() {
         // hier setzen wir unsere Hooks, z.B.:
         add_action( 'edit_category_form', array( &amp;$this, 'myHookCategory' ) );
      }

      function deactivate() {
         // hier räumen wir wieder auf, wenn das Plugin deaktiviert wird, z.B.:
         remove_action( 'edit_category_form', array( &amp;$this, 'myHookCategory' ) );
      }

      function myHookCategory() {
         // hier kommt der Quelltext, den wir ins System bringen wollen
         echo '&lt;h3&gt;Mein erster Hook, yay!&lt;/h3&gt;';
      }
   }
}</pre>
<p>Also eigentlich sollte der Aufbau bisher nicht sonderlich verwunderlich sein. Jeder der schon mal etwas mit objektorientierter Programmierung zu tun hatte, müsste mit dem Klassenprinzip vertraut sein. Aber fangen wir trotzdem mal oben an …</p>
<h3>Der Kommentarblock</h3>
<p>Der Kommentarblock ist relativ wichtig — auch im Aufbau. Hier liest das System die Grundinformationen aus, welche später in der Übersichtsseite der Plugins erscheinen. Also übernehmt diesen Block so und ändert einfach die Informationen.</p>
<p><a href="http://www.guardian-online.de/wp-content/uploads/2011/11/wordpress_plugin-informationen.jpg"><img class="size-medium wp-image-385 alignnone" title="WordPress Plugin Informationen" src="http://www.guardian-online.de/wp-content/uploads/2011/11/wordpress_plugin-informationen-300x32.jpg" alt="WordPress Plugin Informationen" width="300" height="32" /></a></p>
<h3>Die Klasse an sich</h3>
<p>… und es beginnt hier mit einer kleinen “Sicherheitseinrichtung”. Die Zeile</p>
<pre class="brush: php; title: ; notranslate">if( !class_exists( 'myPlugin' ) ) { </pre>
<p>prüft, ob unsere Klasse schon mal existiert. Wobei … eigentlich falsch ausgedrückt. Es wird hier geprüft, ob unsere Klasse noch <strong>nicht</strong> (man achte auf das !) existiert — in dem Fall wird sie “angelegt”. Es reicht ja, wenn sie einmal existiert und nicht 100.000 Mal. Macht ja keinen Sinn.</p>
<p>Danach kommen die OOP-typischen Methoden und Attribute, Funktionen und Variablen, oder wie auch immer <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  Wir haben einen Konstruktur in Zeile 14, eine Art zweiten Konstruktur in Zeile 19, mit dem wir unsere Hooks am System anmelden, einen nicht auf den ersten Blick erkennbaren Destruktor in Zeile 24, mit dem man wieder aufräumen sollte (Hooks deaktivieren, Datenbankeinträge entfernen etc.), und in Zeile 29 haben wir endlich die erste eigene Plugin-Funktion, die auch tatsächlich mal etwas “sinnvolles” für uns macht — nämlich eine Ausgabe in der Kategorie-Ansicht im Backend.</p>
<h3>Der Konstruktor</h3>
<p>Der Konstruktor dürfte auf den ersten Blick etwas seltsam aussehen. Es sind nur zwei Funktionen vorhanden:</p>
<pre class="brush: php; title: ; notranslate">register_activation_hook( ... );
register_deactivation_hook( ... );</pre>
<h4>Die Funktion register_activation_hook()</h4>
<p>Diese Funktion dient dazu, dem WordPress System mitzuteilen, welche Methode ausgeführt werden soll, wenn das WordPress Plugin aktiviert wird. Erst danach können die eigentlichen Hooks greifen. In unserem Fall rufen wir <em>activate()</em> auf, um unsere Hooks am System anzumelden.</p>
<h4>Die Funktion register_deactivation_hook()</h4>
<p>Hier haben wir quasi das Gegenteil der Funktion <em>register_activation_hook()</em>. Wird das WordPress Plugin daktiviert, wird die Funktion aufgerufen, die als Parameter übergeben wurde. In dem Fall ist das <em>deactivate()</em> — unser Pseudo-Destruktor.</p>
<h2>So weit so gut. Aber was jetzt?</h2>
<p>Jetzt kommt noch ein kleiner, aber sehr entscheidender Teil: wir müssen unseren Konstruktor irgendwie aufrufen. Denn schließlich wollen wir ja unsere tollen Funktionen am System anmelden. Dazu fügen wir am Ende der Datei, direkt hinter der schließenden Klammer der ersten <em>if</em>–Abfrage, folgenden Quelltext ein:</p>
<pre class="brush: php; title: ; notranslate">if( class_exists( 'myPlugin' ) ) {
   $myPluginObject = new myPlugin();
}

if( isset( $myPluginObject ) ) {
   add_action( 'init', array( &amp;$myPluginObject, 'activate' ) );
}</pre>
<p>Was passiert hier noch? Eigentlich auch wieder nicht viel Aufregendes: wir instanziieren (super tolles Wort <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), erstellen ein neues Objekt aus unserer Klasse. Damit ist ja bekanntlich der implizite Konstruktor-Aufruf verbunden. Somit sind wir am System mit unserem WordPress Plugin registriert.</p>
<p>Mit der nächsten Zeile setzen wir einen Hook auf ‘<em>init</em>’. Dieser Hook greift dann, wenn das WordPress System geladen wird. Tjoa … und dann können wir unser Plugin schön verwenden und erweitern. Das Einzigste was noch zu erledigen ist: die PHP-Datei muss in den Ordner <em>wp-content/plugins</em></p>
<p>Wer hierzu noch spezielle Fragen hat, kann sich selbstverständlich bei mir melden. In diesem Sinne wünsche ich euch happy coding Doods <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Update!</h2>
<p>Ein Dank gilt Frank, der mich auf eine Kleinigkeit aufmerksam gemacht hat: oberhalb des Konstruktors war eine <em>protected</em> Variable namens <em>myOptions</em> definiert. Diese hat hier nichts verloren und wurde entfernt <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/11/19/eigenes-wordpress-plugin-erstellen-objektorientiert-mit-klassen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Neues WordPress Theme für Guardian Online</title>
		<link>http://www.guardian-online.de/2011/11/13/neues-wordpress-theme-splendio/</link>
		<comments>http://www.guardian-online.de/2011/11/13/neues-wordpress-theme-splendio/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 13:19:59 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=332</guid>
		<description><![CDATA[Das Kleid macht nicht den Mann, der Sattel macht kein Pferd. (Angelus Silesius, * 1642   † 1677) So sprach er — A. Silesius, bürgerlicher Name Johannes Scheffler, war ein deutscher Lyriker und Theologe. Gemäß seiner Aussage könnte man in &#8230; <a href="http://www.guardian-online.de/2011/11/13/neues-wordpress-theme-splendio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>Das Kleid macht nicht den Mann, der Sattel macht kein Pferd.</p>
<p style="text-align: center;">(Angelus Silesius, * 1642   † 1677)</p>
</blockquote>
<div id="attachment_345" class="wp-caption alignleft" style="width: 290px"><a href="http://www.guardian-online.de/wp-content/uploads/2011/11/blog-splendio.png"><img class="size-full wp-image-345" title="Splendio Theme" src="http://www.guardian-online.de/wp-content/uploads/2011/11/blog-splendio.png" alt="Splendio Theme" width="280" height="120" /></a><p class="wp-caption-text">WordPress Theme Splendio</p></div>
<p>So sprach er — A. Silesius, bürgerlicher Name <em>Johannes Scheffler</em>, war ein deutscher Lyriker und Theologe. Gemäß seiner Aussage könnte man in Bezug auf das Webdesign zwar denken, dass ein super toll aussehendes WordPress Theme noch lange kein super tollen WordPress Blog macht, aber ich gebe mein Bestes <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nachdem das alte Theme meines Blogs nun schon in die Jahre gekommen war, hier auch nochmal ein ganz großes Danke an Alex Oeser, der sein Hirnschmalz für mich gab, wurde es nun doch mal langsam Zeit ein neues “Kleid” anzuziehen.</p>
<p>Da ich momentan leider keine Zeit habe mich selbst um ein schönes Theme zu kümmern, war ich heute auf der Suche im www. Die Masse an Themes sind gewaltig. Da fällt die Auswahl schwer. Wer allerdings meine Arbeiten gesehen hat, weiß, dass ich total steil auf minimalistische WordPress Themes gehe. Von daher konnte ich schon einen Großteil des Angebots als Ausschuss betrachten.</p>
<p>Nachdem ich auf der Seite vom <a title="Smashing Magazine" href="http://www.smashingmagazine.com">Smashing Magazine</a> einen Eintrag “<a title="Free WordPress 3.1 Theme: Splendio (With PSD Sources)" href="http://www.smashingmagazine.com/2011/05/30/free-wordpress-3-1-theme-splendio-with-psd-sources/">Free WordPress 3.1 Theme: Splendio (With PSD Sources)</a>” gesehen habe, war ich begeistert. Ein Theme mit Pastellfarben und netten Plugins basierend auf HTML 5. Es kommt mit PSD Files und den empfohlenen Plugins (WP Featured Content Slider, Flickr RSS (hier deaktiviert) und WP PageNavi). Nach ein paar Anpassungen der Theme Files war es dann auch schon erledigt — es sieht aus, wie ich es gerne hätte. Super!</p>
<h2>Aufruf</h2>
<p>Wen du Interesse daran hast mir eventuell ein niedliches (minimalistisches!) WordPress Theme zu erstellen, lass dich nicht aufhalten. Die Credits sind dir natürlich sicher <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><small>Bildquelle: Design Disease, <a href="http://designdisease.com/">designdisease.com</a>, Stand: 13.11.2011</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/11/13/neues-wordpress-theme-splendio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery ToolTip Plugin mit Fokussteuerung</title>
		<link>http://www.guardian-online.de/2011/09/13/jquery-tooltip-plugin/</link>
		<comments>http://www.guardian-online.de/2011/09/13/jquery-tooltip-plugin/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 14:47:24 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tooltip]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=297</guid>
		<description><![CDATA[In letzter Zeit setze ich bei meinen Projekten wieder verstärkt auf die Verwendung von jQuery. Dabei habe ich relativ hübsche Sachen gestalten können, welche ich euch nicht vorenthalten möchte. Heute geht es um ein kleines süßes jQuery ToolTip Plugin. Demonstration &#8230; <a href="http://www.guardian-online.de/2011/09/13/jquery-tooltip-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In letzter Zeit setze ich bei meinen Projekten wieder verstärkt auf die Verwendung von jQuery. Dabei habe ich relativ hübsche Sachen gestalten können, welche ich euch nicht vorenthalten möchte. Heute geht es um ein kleines süßes jQuery ToolTip Plugin.</p>
<h3>Demonstration</h3>
<p><a title="jQuery ToolTip Plugin by Benno Mielke" href="http://guardian-online.de/wp-content/uploads/demos/jquery_ttip/">Link zur Demo des jQuery ToolTip</a></p>
<h3>Vorschau des jQuery ToolTip</h3>
<p>Es ist hier im Artikel extrem basic gehalten und kann aber nach Wünschen relativ einfach umgestaltet werden. Das Resultat soll folgendermaßen aussehen:</p>
<p><a href="http://www.guardian-online.de/wp-content/uploads/2011/09/jquery_ttip.jpg"><img class="alignnone size-full wp-image-300" title="jQuery ToolTip Plugin" src="http://www.guardian-online.de/wp-content/uploads/2011/09/jquery_ttip.jpg" alt="jQuery ToolTip Plugin" width="223" height="84" /></a></p>
<h3>Die HTML-Umsetzung</h3>
<p>Um das ganze Problem relativ einfach zu halten, bedarf es nicht viel Quältext. Wir brauchen ein wenig Markup (HTML), etwas Schönheitskosmetik (CSS) und ein paar Werkzeuge (jQuery). Wir jetzt eine CSS-Datei oder das jQuery Framework eingebunden wird, lass ich an der Stelle mal weg. Wer es nicht weiß, kann gern nachfragen <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fangen wir mit dem HTML an. Dabei bedarf es im Grunde “nur” einer (horizontalen) Liste:</p>
<pre class="brush: xml; title: ; notranslate">&lt;ul class=&quot;tTipList hList&quot;&gt;
&lt;li class=&quot;relPos&quot;&gt;
&lt;a href=&quot;#&quot; title=&quot;Tool Tip Nummer 1 Link&quot;&gt;
&lt;img src=&quot;http://dummyimage.com/70x35/000/fff.jpg&quot; alt=&quot;Tool Tip Nummer 1&quot; width=&quot;50&quot; height=&quot;33&quot; /&gt;
&lt;/a&gt;
&lt;span&gt;Tool Tip #1 Inhalt&lt;/span&gt;
&lt;/li&gt;
&lt;li class=&quot;relPos&quot;&gt;
&lt;a href=&quot;#&quot; title=&quot;Tool Tip Nummer 2 Lnk&quot;&gt;
&lt;img src=&quot;http://dummyimage.com/70x35/000/fff.jpg&quot; alt=&quot;Tool Tip Nummer 2&quot; width=&quot;50&quot; height=&quot;33&quot; /&gt;
&lt;/a&gt;
&lt;span&gt;Tool Tip #2 Inhalt&lt;/span&gt;
&lt;/li&gt;
&lt;li class=&quot;relPos&quot;&gt;
&lt;a href=&quot;#&quot; title=&quot;Tool Tip Nummer 3 Lnk&quot;&gt;
&lt;img src=&quot;http://dummyimage.com/70x35/000/fff.jpg&quot; alt=&quot;Tool Tip Nummer 3&quot; width=&quot;50&quot; height=&quot;33&quot; /&gt;
&lt;/a&gt;
&lt;span&gt;Tool Tip #3 Inhalt&lt;/span&gt;
&lt;/li&gt;
&lt;li class=&quot;relPos&quot;&gt;
&lt;a href=&quot;#&quot; title=&quot;Tool Tip Nummer 4 Lnk&quot;&gt;
&lt;img src=&quot;http://dummyimage.com/70x35/000/fff.jpg&quot; alt=&quot;Tool Tip Nummer 4&quot; width=&quot;50&quot; height=&quot;33&quot; /&gt;
&lt;/a&gt;
&lt;span&gt;Tool Tip #4 Inhalt&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Hier gibt es eigentlich viel zu zu sagen. Es ist eine Liste mit der Klasse <em>tTipList</em> und die soll horizontal (<em>hList</em>) angeordnet werden.</p>
<p>Jedes Listenelement hat einen Link (welcher in dem Fall mal ein Bild ist). Nach diesem Link ist ein <em>span</em>–Bereich. Das ist der eigentliche ToolTip, welcher beim Drüberfahren angezeigt werden soll. <strong>Achtung:</strong> ich gehe hier von Bildern als Link aus — darauf beziehe ich mich auch gleich in dem jQuery ToolTip Quelltext.</p>
<h3>Das CSS</h3>
<p>Auch das ist bis auf ein paar allgemeine Klassen zur Formatierung sehr einfach gehalten:</p>
<pre class="brush: css; title: ; notranslate">body {font:13px/1.231 Helmet, Freesans, sans-serif}
img {border: 0}

.hList {margin: 0}
.hList li {display: inline-block; float: left}
.hList a {text-decoration: none}

.relPos {position: relative} /* !! Wichtig, sonst kann li.tTip nicht
daran ausgerichtet werden !! */

.tTipList {margin: 50px 0 0 100px}
.tTipList li {margin-left: 5px}
.tTip {
position: absolute; /* an li ausrichten */
left: 0; /* wird mittels jQuery ermittelt */
top: -35px;
display: none;
white-space: nowrap;
background: #fff; border: 1px solid #aaa;
padding: 5px;
-webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.4);
box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.4)
}</pre>
<p>Auch hier ist keine Zauberei am Werk. Das einzigste was wichtig ist: die Listenelemente selbst müssen ein <em>position: relative;</em> erhalten, dass wir den ToolTip mit <em>position: absolute;</em> daran ausrichten können. Wir erinnern uns: <em>position: absolute;</em> richtet sich an dem ersten Element aus, welches nicht <em>position: static;</em> (Default-Wert) enthält!</p>
<p>So … fehlt ja nur noch der Feenstaub: das jQuery himself</p>
<h3>jQuery ToolTip Plugin</h3>
<pre class="brush: jscript; title: ; notranslate">( function( $ ) {
var tTipWrapper = $( 'ul.tTipList' );

tTipWrapper.children().each( function() {
var that = $( this ),
spanTag = that.find( 'span.tTip' ),
tTipW = spanTag.outerWidth( true ),
imgW = that.outerWidth( true ),
mLeft = that.css( 'marginLeft' ).replace( /px/, '' ),
left = Math.round( ( spanTag.outerWidth( true ) - imgW ) / 2 ),
setLeft = Math.round( left - (mLeft / 2) );

that.hover( function() {
spanTag.css( 'marginLeft', -setLeft );
spanTag.stop( true, false ).show( 400 );
that.siblings().stop().fadeTo( 400, 0.4 );
}, function() {
spanTag.stop( true, true ).hide( 0 );
that.siblings().stop().fadeTo( 400, 1, function() { that.siblings().css( 'filter', '' ); } );
} );
] );
} )( jQuery );</pre>
<p>So, dröseln wir das mal etwas auf …</p>
<ul>
<li>(Zeile 2) wir suchen in unserer DOM-Struktur nach den Listen, bei denen dieser Effekt gewünscht ist</li>
<li>(Zeile 4) bei jedem Listenelement (Kindelement von <em>ul.tTipList</em>) arbeiten wir folgendes ab:</li>
<li>(Zeile 5) Caching des aktuellen Listenelements</li>
<li>(Zeile 6) Suche nach dem span-Tag, welcher den Inhalt für den ToolTip enthält</li>
<li>(Zeile 7) Breite des Textes samt <em>margin</em>–Angaben herausfiltern</li>
<li>(Zeile <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Breite des Bildes cachen</li>
<li>(Zeile 9) Hat das Listenelement ein <em>margin-left</em>, soll das gespeichert werden, da wir den ToolTip nach links ausrichten werden. Zu beachten ist hier, dass <em>that.css( ‘marginLeft’ )</em> eine Angabe mit <em>px</em> zurückliefert. Wir brauchen allerdings nur den Wert selbst und schneiden <em>px</em> einfach ab.</li>
<li>(Zeile 10) Differenz zwischen Tooltip– und Bildbreite berechnen, Ergebnis halbieren</li>
<li>(Zeile 11) <em>margin-left</em> halbieren und von der Differenz abziehen (hier sollte mit <em>Math.round()</em> gerundet werden)</li>
<li>(Zeile 13) bei mouseenter:</li>
<li>(Zeile 14) setze ermittelte Position nach links (bedenke: <em>position: absolute;</em>)</li>
<li>(Zeile 15) Animations Queue sofort beenden / leeren, weil sonst unschöne Effekte entstehen</li>
<li>(Zeile 16) die anderen Elemente leicht ausblenden — nette Fokussteuerung</li>
<li>(Zeile 17) bei mouseleave:</li>
<li>(Zeile 18) ToolTip wieder verstecken</li>
<li>(Zeile 19) und die anderen Elemente wieder einblenden</li>
</ul>
<p>Und dann hätten wir es auch schon. Das hier ist selbstverständlich nur eine ziemliche Basic Version und man kann es schön weiter ausbauen. Ich wollte damit aber auch nur die Grundlagen legen. Viel Spaß beim testen und rumprobieren <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/09/13/jquery-tooltip-plugin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress Template in Zusammenarbeit mit CreateCom</title>
		<link>http://www.guardian-online.de/2011/07/03/wordpress-template-in-zusammenarbeit-mit-createcom/</link>
		<comments>http://www.guardian-online.de/2011/07/03/wordpress-template-in-zusammenarbeit-mit-createcom/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 14:18:42 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=284</guid>
		<description><![CDATA[Ein WordPress Template Hinter CreateCom verbirgt sich das multimediale Unternehmen von Frank Lehmann aus Leipzig. CreateCom bietet Lösungen aus dem Bereich klassische sowie neue Medien. Ich habe den Inhaber, Frank, vor ein paar Wochen kennengelernt. Nach einigen E-Mails und Telefonaten &#8230; <a href="http://www.guardian-online.de/2011/07/03/wordpress-template-in-zusammenarbeit-mit-createcom/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Ein WordPress Template</h3>
<p>Hinter <a title="Besuche CreateCom" href="http://www.createcom.de">CreateCom</a> verbirgt sich das multimediale Unternehmen von Frank Lehmann aus Leipzig. CreateCom bietet Lösungen aus dem Bereich klassische sowie neue Medien.</p>
<p>Ich habe den Inhaber, Frank, vor ein paar Wochen kennengelernt. Nach einigen E-Mails und Telefonaten haben wir uns dazu beschlossen mal ein kleines Projekt zu starten — frei nach dem Slogan von CreateCom “<em>Kontakte nutzen — Synergien bilden</em>”. Hier haben wir uns relativ schnell und unkompliziert dazu entschieden, dass wir uns mal ein WordPress Template-Projekt zur Brust nehmen.</p>
<p>Dabei liefert CreateCom das Layout und ich gestalte das Layout als XHTML-Version sowie als WordPress Template. Eine Vorschau des Templates kannst du am Ende des Artikels einsehen.</p>
<h3>Was kann das Template?</h3>
<p>Das WordPress Template wird für den Anfang folgende Eigenschaften Besitzen:</p>
<ul>
<li>valider Quelltext nach XHTML 1.1</li>
<li>CSS3 basierende Stylesheets mit Fallbacks für ältere Browser</li>
<li>zwei frei definierbare Menüs unterhalb des Headers</li>
<li>ein weiteres Menü im linken Footer-Bereich</li>
<li>Abwärtskompatibilität bis zum Internet Explorer 6</li>
<li>Aufbereitung der Seite mit Media Queries für Mobile Endgeräte</li>
<li>Thumbnails für die Artikelausschnitte (Excerpts)</li>
<li>Hierarchische Kommentarfunktion</li>
</ul>
<h3>Interesse bekommen?</h3>
<p>Falls jemand Interesse an diesem Template bekommen hat, kann sich gern hier in den Kommentaren verewigen, oder sich per E-Mail direkt bei mir melden (<a title="E-Mail an Benno bei Interesse an dem Template" href="mailto:look@webinfluenza.de">look@webinfluenza.de</a>). Die Entwicklung wird sicherlich noch ein paar Tage dauern, ist jetzt aber schon in einem verwendbaren Status.</p>
<p><img class="size-medium wp-image-285 alignleft" title="CreateCom / WebInfluenza WordPress Theme #1" src="http://www.guardian-online.de/wp-content/uploads/2011/07/blog-1-copy-300x200.jpg" alt="CreateCom / WebInfluenza WordPress Theme #1" width="300" height="200" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/07/03/wordpress-template-in-zusammenarbeit-mit-createcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Media Queries — Website für das Handy aufbereiten</title>
		<link>http://www.guardian-online.de/2011/06/09/website-fur-handy-mit-media-queries/</link>
		<comments>http://www.guardian-online.de/2011/06/09/website-fur-handy-mit-media-queries/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 10:22:04 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Media Queries]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=262</guid>
		<description><![CDATA[Lange habe ich mir die Entwicklung und den Einsatz von sogenannten (CSS3) Media Queries im Wörld Weid Wäb angeschaut, denn ich war dieser Technik gegenüber sehr skeptisch. Doch in den letzten Monaten scheinen diese Media Queries doch immer populärer zu &#8230; <a href="http://www.guardian-online.de/2011/06/09/website-fur-handy-mit-media-queries/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Lange habe ich mir die Entwicklung und den Einsatz von sogenannten (CSS3) Media Queries im Wörld Weid Wäb angeschaut, denn ich war dieser Technik gegenüber sehr skeptisch. Doch in den letzten Monaten scheinen diese Media Queries doch immer populärer zu werden. Ein Grund mehr für mich, hier eine kleine Einführung zu schreiben.</p>
<p>Die Nachteile vorweg</p>
<p>Wie oben schon nebenbei erwähnt, sind Media Queries Bestandteil des CSS3. Aber halt … was sind Media Queries??</p>
<h3>Media Queries — was ist das? Wozu dienen sie? Wann macht der Einsatz Sinn?</h3>
<p>Media Queries sind logische Ausdrücke, die einem Webdesigner die Möglichkeit bieten, mehr Kontrolle über das Rendering-Verhalten eines bestimmten (mobilen) Gerätes zu “erlangen” (ähnlich den Conditional Comments / Browserweichen für bestimmte IE-Versionen). Logischer Ausdruck bedeutet, dass es nur wahr oder falsch als Ergebnis haben kann: trifft zu, oder nicht.</p>
<p>Damit ist möglich abzufragen, welche Eigenschaften bzw. Fähigkeiten ein (mobiles) Gerät besitzt. Beispielsweise ist hier die Bildschirmauflösung oder die Ausrichtung (Hoch– bzw. Querformat) gemeint.</p>
<p>Also haben wir hier die Möglichkeit konventionelle Internetseiten auf mobile Geräte wie Handy, Smartphone oder Tablet-Computer anzupassen. Auch hierbei ist wohl zu überlegen, ob sich dieser Aufwand generell lohnt. Die Zielgruppe ist entscheidend.</p>
<h3>Wie geht’s denn überhaupt los?</h3>
<p>Jeder der schon mal mit CSS gearbeitet hat, weiß wie man eine solche normale CSS-Datei einbinden kann:</p>
<pre class="brush: css; title: ; notranslate">&lt;link rel=&quot;stylesheet&quot; media=&quot;all&quot; href=&quot;style.css&quot; /&gt;</pre>
<p>Somit wäre eine CSS-Datei namens <em>style.css</em> eingebunden, welche auf sämtliche Ausgabegeräte angewandt wird — <em>media=“<strong>all</strong>”</em>. Nun wollen wir zum Beispiel ein Stylesheet definieren, welches unsere Website für Smartphones aufbereitet bzw. abändert. Dazu definieren im:</p>
<pre class="brush: css; title: ; notranslate">&lt;link rel=&quot;stylesheet&quot; media=&quot;only screen and (min-device-width: 320px)
   and (max-device-width: 480px )&quot; href=&quot;smartphone.css&quot; /&gt;</pre>
<p>Damit hätten wir ein Konstrukt, welches nur für Bildschirmanzeigen (screen) <span style="text-decoration: underline;">UND</span> eine (Gerät-)Mindestbreite von 320 px <span style="text-decoration: underline;">UND</span> eine (Gerät-)Maximalbreite von 480 px bestimmt ist. Wir rufen uns hier in Erinnerung: <span style="text-decoration: underline;">jeder</span> dieser Ausdrücke <span style="text-decoration: underline;">muss wahr sein</span>, dass diese CSS-Datei auch wirklich eingebunden wird. Sonst wird sie übergangen. Damit hätten wir unsere Grundlage für Smartphones.</p>
<p>Hier sei noch angemerkt, dass beides Ausrichtungen des Displays auf dem Smartphone dabei inbegriffen sind (horizontal / vertikal bzw. Landscape / Portrait).</p>
<h3>Und dann? What’s next?</h3>
<p>Jetzt kann die Schinderei beginnen. Wir haben unsere Grundlage, die CSS-Datei für die Smartphones gelegt.</p>
<p>Meiner Meinung nach sollte als erstes überdacht werden, wie man die Seite jetzt grundsätzlich strukturiert. Ist bisher ein drei-Spalten-Layout eingesetzt, sollte man sich überlegen, ob man das nicht abändert. Immer im Hinterkopf: wir prüfen auf eine Auflösung zwischen 320 px und 480 px. Ein relativ wichtiger Punkt sind hier auch Menüs. Hier auf Guardian Online befindet sich folgendes horizontales Menü:</p>
<p><a href="http://www.guardian-online.de/wp-content/uploads/2011/06/menu_guardian-online.jpg"><img class="alignnone size-medium wp-image-273" title="Menü von Guardian Online" src="http://www.guardian-online.de/wp-content/uploads/2011/06/menu_guardian-online-300x14.jpg" alt="Media Queries - so sieht das Menü auf Guardian Online in einem normalen Webbrowser aus" width="300" height="14" /></a></p>
<p>Da könnte man beispielsweise ein schönes vertikal gerichtetes Menü draus basteln, und die einzelnen Menüpunkt untereinander setzen.</p>
<p>Der nächste Step sollten Bilder sein. Ist im Header ein schönes großes Bild von 980 px x 200 px (wie bei mir), dann geht es darum, dieses Bild zu verkleiner. Auch das Hintergrundbild muss eventuell angepasst werden. Das hängt aber von der jeweiligen Seite ab.</p>
<h3>Das leidige Testen</h3>
<p>… bleibt natürlich auch hier nicht erspart. Den größten Vorteil hat hier wohl der Multimedia-Junky, bzw. der, der sich glücklich schätzen darf und ein oder zwei Smartphones und ein iPad besitzt. Aber gibt auch Alternativen: online Tools, welche versuchen solchen mobilen Endgeräte zu simulieren. Leider kann man sich auf diese Ausgaben nicht 100% verlassen.</p>
<p>Hier eine kleine Auswahl an Seiten, die einem das Leben erleichtern können:</p>
<ul>
<li><a title="Das W3C erklärt Media Queries" href="http://www.w3.org/TR/css3-mediaqueries/">Der W3C Eintrag zu Media Queries</a></li>
<li><a title="Safarie Webbrowser für Entwickler" href="http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002079-SW1">der iPhone Safari Browser — Entwicklerecke mit Hinweisen zur Optimierung</a></li>
<li><a title="ProtoFluid Online Tool für Media Queries" href="http://app.protofluid.com/">ProtoFluid — online Tool zum Testen der Media Queries für verschiedene Geräte</a></li>
<li><a title="Hardboiled Webdesign CSS3" href="http://forabeautifulweb.com/blog/about/hardboiled_css3_media_queries/">Hardboiled CSS3 — Media Queries für die gängisten mobilen Geräte</a></li>
</ul>
<p>Damit sollte die Grundlage für die Erstellung einer optimierten Internetseite für mobile Endgeräte gelegt sein. Auf Guardian Online befindet sich bisher noch keine mobile Version — aus Zeitgründen. Ich bitte das zu entschuldigen <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In diesem Sinne … happy coding</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/06/09/website-fur-handy-mit-media-queries/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Schriftgröße mit rem statt em oder px? So geht’s…</title>
		<link>http://www.guardian-online.de/2011/05/27/schriftgrose-mit-rem-statt-em-oder-px-so-gehts/</link>
		<comments>http://www.guardian-online.de/2011/05/27/schriftgrose-mit-rem-statt-em-oder-px-so-gehts/#comments</comments>
		<pubDate>Fri, 27 May 2011 12:00:21 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=238</guid>
		<description><![CDATA[Heute möchte ich euch zeigen, wie man Schriftgrößen mittels CSS modern einsetzen kann. Dabei kommt auch eine neue Größeneinheit zum Zuge: die rem-Angabe. Dabei handelt es sich um eine relative Größenangabe. Der Vorteil gegenüber dem konventionellen em? Das kannst du hier nachlesen... <a href="http://www.guardian-online.de/2011/05/27/schriftgrose-mit-rem-statt-em-oder-px-so-gehts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oftmals streiten sich Gelehrten, ob die Größenangaben in absoluter oder relativer Form getroffen werden sollen — in <em>px</em> oder <em>em</em>. In den vergangen Jahren war diese Entscheidung oftmals auf die em-Variante gefallen. <del>Seit kurzer Zeit habe ich persönlich den Eindruck, dass dieser wieder Trend rückgäng wird. Das find ich eigentlich gut, da ich schon immer ein Verfechter der absoluten Größenangabe war.</del></p>
<p>Nachteil bei der Verwendung von <em>em</em>: das Elternelement vererbt die Größenangabe nach unten (also an die Kindelemente) weiter. Beispiel:</p>
<pre class="brush: xml; title: ; notranslate">&lt;body style=&quot;font-size: 62.5%;&quot;&gt;
   &lt;div style=&quot;font-size: 1.4em;&quot;&gt;
      &lt;p&gt;Paragraph 1&lt;/p&gt;
      &lt;p style=&quot;font-size: 1.2em;&quot;&gt;Paragraph 2&lt;/p&gt;
   &lt;/div&gt;
&lt;/body&gt;</pre>
<h3>Erläuterung / Problemstellung</h3>
<p>Wir wissen, dass die Standardschriftgröße der meisten Browser auf 16px voreingestellt. Damit ist im <em>body</em> eine Schriftgröße 62.5% = 10px, im <em>div</em>–Element 10px x 1.4 = 14px und im zweiten <em>p</em>–Element 10px x 1.2 = 12px. <strong>Falsch!</strong></p>
<p>Die Schriftgröße vom div-Element wird an das zweite p-Element mit durchgereicht. Das bedeutet dort ist keine Schriftgröße von 12px, sondern von 10 x 1.4 x 1.2 = 16,8px. Das kann ein Problem großes Problem bei komplexen Layouts werden. Bei absoluten Größenangabe passiert sowas nicht.</p>
<h3>Die Alternative: Angabe mit rem</h3>
<p><em>rem</em> soll hierzu Abhilfe schaffen. Demnach soll <em>rem</em> (“root em”) sich grundsätzlich auf das oberste Root Element beziehen. Bezogen auf unsere Beispiel von oben würde dann die Rechnung aufgehen, dass das zweite <em>p</em>–Element tatsächlich eine Schriftgröße von 12px hätte, da das Root Element (hier: <em>body</em>) eine Größe von 62.5% (entspr. 10px) hätte -&gt; 10 x 1.2 = 12px.</p>
<h3>What’s the catch dude?</h3>
<p>Bis hierhin eigentlich genial. Warum zum Murphy benutze ich das noch nicht?! Hmm … ich habe bis hier her einen wichtigen Punkt vergessen zu erwähnen: das gibt’s nur bei der Verwendung von <strong>CSS3</strong>.</p>
<p>Daraus ergibt sich wieder welche Problematik? Genau, damit ist die Cross Browser-Fähigkeit unserer tollen seite im … naja da, wo sie nicht hingehört <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Der IE bis einschließlich Version 8 kann damit nicht viel anfangen. Der Opera angeblich auch nicht — bin leider noch nicht selbst zum Testen gekommen. Aber man kann ja eine Art Fallback bauen…</p>
<pre class="brush: css; title: ; notranslate">body {
   font-size: 62.5%;  /* entspr. 10px (meistens) */
}
div {
   font-size: 14px;   /* erstmal auf Nummer sicher gehen */
   font-size: 1.4rem; /* auf 14px */
}
div p:last-child {    /* Achtung: auch CSS3, fuer CSS 2 p.last verwenden */
   font-size: 12px;
   font-size: 1.2rem;
}</pre>
<p>Damit kann sich der Browser aussuchen mit welcher Angabe er umgehen kann. Er greift sich erst die <em>px</em>–Angabe. Kennt er die <em>rem</em>–Einheit, nimmt er den diesen Wert und überschreibt die <em>px</em>–Angabe. Wie beim Militär: der letzte Befehl zählt <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In diesem Sinne … happy coding</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/05/27/schriftgrose-mit-rem-statt-em-oder-px-so-gehts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>div float bottom — es geht doch!</title>
		<link>http://www.guardian-online.de/2011/04/01/div-float-bottom/</link>
		<comments>http://www.guardian-online.de/2011/04/01/div-float-bottom/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 13:26:48 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IE Bugs]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[bottom]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=206</guid>
		<description><![CDATA["Wie zum Murphy bekomm' ich das nach unten gefloatet??" Die Frage kommt sich das ein oder andere Mal vor. Dass float leider keine Angabe "bottom" benutzt, daran kann man nichts ändern. Wie man es allerdings trotzdem schafft, zeige ich hier. <a href="http://www.guardian-online.de/2011/04/01/div-float-bottom/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ok … etwas gelogen ist die Überschrift dann schon. Direkt ein <em>float: bottom;</em> ist einfach durch die Spezifikationen nicht gegeben <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Auch eine Google-Anfrag nach <em>div float bottom</em> bringt nicht immer das gewünschte Ergebnis. Aber einen kleinen Workaround gibt’s jetzt…</p>
<p>Manchmal ist es doch einfach zum verrückt werden. Da bietet CSS 2 schon viele schöne Features, aber die scheinbar trivialen Dinge sind nicht mit dabei. Beispiel: <em>float bottom;</em>.</p>
<p>Szenario: wir wollen auf einer Seite zwei div-Container so verschachteln, dass der äußere am unteren Rand “klebt”. Viele verzweifeln und versuchen das Problem vielleicht sogar mit JavaScript zu lösen. Dabei gibts einen einfacheren Weg, den ich euch jetzt aufzeigen will.</p>
<h3>Ausgangslage</h3>
<p>Wir haben eine Seite mit einem Wrapper, der die Seite komplett umschließt: <em>#page_wrapper</em>. Darin sind dann diverse Bereich wie Header, Menü, Sidebar, Hauptbereich und Footer enthalten. Am Ende des Hauptbereichs (<em>#content</em>) soll ein kleiner Bereich für Zusatzinformationen (<em>#info</em>; das gewünschte <em>div float bottom</em>) platziert werden.</p>
<h3>Lösungsansatz für das <em>div float bottom</em></h3>
<p>Dazu schreiben wir jetzt folgenden code:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div id=&quot;page_wrapper&quot;&gt;
   &lt;div id=&quot;content&quot;&gt;
      &lt;p&gt;Ich habe viiiiiiiel Inhalt und bin sehr lang&lt;/p&gt;

      &lt;div id=&quot;info&quot;&gt;
         &lt;p&gt;Zusatzinformationen&lt;/p&gt;
      &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Das entsprechende CSS um das Problem in den Griff zu bekommen:</p>
<pre class="brush: css; title: ; notranslate">* {
   padding: 0;
   margin: 0;
}

#page_wrapper {
   width: 980px;
   margin: 0 auto;
}

#content {
   width: 560px;
   height: 300px;
   background-color: #abcdef; /* zur visuellen Darstellung */
   position: relative;        /* (1.) */
}

#info {
   width: 300px;
   height: 50px;
   background-color: #fedcba;
   position: absolute; /* (2.) */
   bottom: 0px;        /* (3.) */
   right: 0px;         /* (4.) */
}</pre>
<p>Damit “klebt” der <em>info</em>–div am unteren (rechten) Rand des <em>content</em>–Container. Wichtig hierbei ist die Positionierung der Elemente. Das Element, welches das klebende enthalten soll, muss <span style="text-decoration: underline;">relativ positioniert</span> werden. Das Element, welches nach unten “floaten” (<em>div float bottom</em>) soll, muss absolut am relativ positionierten Element ausgerichtet werden. Dann kann man natürlich noch entscheiden, in welche Richtung es ausgerichtet werden soll.</p>
<h3>Probleme (Peekaboo Bug) / Ausblick</h3>
<p>Wird keine Höhenangabe der Elemente gemacht, und die äußeren Elemente haben keinen Inhalt, kann es zu Problemen kommen. Ein Ansatz wäre die <em>min-height</em>–Anweisung.</p>
<p>Eine Alternative ist, dass man einen Container mit der Eigenschaft <em>clear: all;</em> einbaut. Das Problem nennt sich auch <em>“Peekaboo Bug”</em> und ist gerade im IE6 anzutreffen.</p>
<h3>Peekaboo Bug — Lösung</h3>
<p>Man gibt dem Elternelement folgendes CSS mit:</p>
<pre class="brush: css; title: ; notranslate">* html #page_wrapper { height: 1%; }</pre>
<p>Das sollte es gewesen sein <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/04/01/div-float-bottom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Browserweiche mit PHP (mit WordPress-Beispiel)</title>
		<link>http://www.guardian-online.de/2011/03/15/browserweiche-mit-php/</link>
		<comments>http://www.guardian-online.de/2011/03/15/browserweiche-mit-php/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 11:22:33 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Browserweiche]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=185</guid>
		<description><![CDATA[Warum sollte ich eine Browserweiche einsetzen? Bei fast jedem Webdesign-Projekt kann man sich nicht nur auf aktuelle Browser und deren Features verlassen. Bereits in den ersten Kundengesprächen sollte man sich bewusst machen, welche Zielgruppe(n) es so gibt. Soll die neue &#8230; <a href="http://www.guardian-online.de/2011/03/15/browserweiche-mit-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Warum sollte ich eine Browserweiche einsetzen? Bei fast jedem Webdesign-Projekt kann man sich nicht nur auf aktuelle Browser und deren Features verlassen. Bereits in den ersten Kundengesprächen sollte man sich bewusst machen, welche Zielgruppe(n) es so gibt. Soll die neue Website für Skateboard Equipment erstellt werden, kann davon ausgegangen werden, dass die möglichen User wohl zum Großteil “<em>Multimedia Junkies</em>” sein werden <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hat man es jedoch beispielsweise mit landwirtschaftlichen Unternehmen auf ländlichen Gegenden zu tun, muss man durchaus mal damit rechnen, dass immer noch 10% — 15% der Besucher mit den Internet (H)Explorer 6 durch das WWW stolpern.</p>
<p>In diesem Fall sollte man sich mal mit der Browserweiche auseinandersetzen. Den Löwenanteil kann man über typische <a title="Conditional Comments auf quirksmode.org" href="http://www.quirksmode.org/css/condcom.html">CSS Conditional Comments</a> abfangen. Was aber, wenn das nicht mehr damit zu realisieren ist? Wie kann man noch ansetzen?</p>
<h3>Problemstellung</h3>
<p>In einem aktuellen Projekt erstelle ich einen News Blog. In dem Header sind (transparente) Social Icons im PNG-Format hinterlegt. Nun wissen wir ja, dass der IE 6 da echt zicken kann, weil der Alpha-Kanal fehlt. In der <em>header.php</em> sieht der Bereich folgendermaßen aus:</p>
<pre class="brush: xml; title: ; notranslate">&lt;div id=&quot;header_social&quot;&gt;
   &lt;p id=&quot;social_icons&quot;&gt;
      &lt;a href=&quot;&lt;?php bloginfo( 'rss2_url' ); ?&gt;&quot; title=&quot;RSS Feed&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/social_rss.png&quot; alt=&quot;RSS Feed&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;http://www.twitter.com/benno_m_&quot; title=&quot;... on Twitter&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/social_twitter.png&quot; alt=&quot;... on Twitter&quot; /&gt;&lt;/a&gt;
      &lt;!-- ein paar Icons mehr //--&gt;
   &lt;/p&gt;
&lt;/div&gt;</pre>
<p>Die Grafiken haben wie gesagt einen transparent Hintergrund — der IE 6 stinkt hier etwas ab und stellt der Hintergrund einfach weiß dar.</p>
<h3>Lösungsansatz</h3>
<p>Da ich hier nur schwer mit CSS anetzen konnte, bin ich auf PHP umgeschwungen. Es wird der verwendete Browser vom User abgefragt und auf die Version getestet. Weiterhin habe ich im Bilderordner des Templates einen Unterordner angelegt, der die Grafiken enthält, welche statt transparentem Hintergrund eine farblich angepasste Hintergrundfarbe enthalten. Wir also der IE 6 verwendet, soll die Bilder aus diesem Ordner verwendet werden, sonst nicht.</p>
<p>Folgender Ansatz zur Implementierung einer Browserweiche:</p>
<pre class="brush: php; title: ; notranslate">&lt;div id=&quot;header_social&quot;&gt;
   &lt;p id=&quot;social_icons&quot;&gt;
&lt;?php
      $browser = $_SERVER['HTTP_USER_AGENT'];

      if( preg_match( '=MSIE 6.0=i', $browser ) ) { /* Binde IE 6 Grafiken ein */
?&gt;
         &lt;a href=&quot;&lt;?php bloginfo( 'rss2_url' ); ?&gt;&quot; title=&quot;RSS Feed&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/ie6/social_rss.gif&quot; alt=&quot;RSS Feed&quot; /&gt;&lt;/a&gt;
         &lt;a href=&quot;http://www.twitter.com/benno_m_&quot; title=&quot;... on Twitter&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/ie6/social_twitter.gif&quot; alt=&quot;... on Twitter&quot; /&gt;&lt;/a&gt;
&lt;?php
      }

      else { /* Binde normale transparent Grafiken ein */
?&gt;
         &lt;a href=&quot;&lt;?php bloginfo( 'rss2_url' ); ?&gt;&quot; title=&quot;RSS Feed&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/social_rss.png&quot; alt=&quot;RSS Feed&quot; /&gt;&lt;/a&gt;
         &lt;a href=&quot;http://www.twitter.com/benno_m&quot; title=&quot;... on Twitter&quot;&gt;&lt;img src=&quot;&lt;?php bloginfo( 'template_url' ); ?&gt;/images/social_twitter.png&quot; alt=&quot;... on Twitter&quot; /&gt;&lt;/a&gt;
&lt;?php
      }
?&gt;</pre>
<p>Die <em>if</em>–Abfrage prüft hier die Rückgabe der Browserinformationen und schaut ob irgendwo der Teilstring <em>MSIE 6.0 </em>vorhanden ist. Somit lässt sich relativ einfach eine Browserweiche über PHP basteln.</p>
<h3>Alternativen / Probleme bei dieser Art von Browserweiche</h3>
<p>Sicherlich ist die hier vorgestellte Lösung nicht die eleganteste. Das sollte sie auch nicht, sie sollte funktionieren <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Es gibt sicherlich 3.982, 53 andere Möglichkeiten das Problem zu lösen. Jedoch kam mir diese zuerst in den Sinn.</p>
<p>Weniger Schreibarbeit hätte man auch, wenn man die Abfrage jeweils in die a-Tags mit einbaut — z.B. über den <a title="Ternärer Operator auf php.net" href="http://www.php.net/manual/en/language.operators.php">ternären Operator von PHP</a>. Ich habe darauf allerdings zum Verständnis hier darauf verzichtet. Meine entgültige Implementierung sieht dann noch etwas anders aus <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>*** Update ***</h3>
<p>Mir ist durchaus klar, dass es diverse Hacks gibt, die dem IE Transparenzen beibringen können. Davon möchte ich hier allerdings Abstand nehmen, da mir die Einbindung einer weiteren JS Library für ein paar kleine Icons nicht sinnvoll erscheint. Darüber hinaus soll dieser Beitrag zum Nachdenken anregen — dazu, dass nicht bei jedem kleinen Problem eine extra JavaScript Bibo zum Einsatz kommt. Diese Bibos haben oftmals Nachteile, die den Designer einschränken — und Einschränkungen haben wir ja schon genug <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/03/15/browserweiche-mit-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE 6 und doppeltes margin</title>
		<link>http://www.guardian-online.de/2011/02/21/ie-6-und-doppeltes-margin/</link>
		<comments>http://www.guardian-online.de/2011/02/21/ie-6-und-doppeltes-margin/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 11:31:15 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[IE Bugs]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[display inline]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[inline]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[margin]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=163</guid>
		<description><![CDATA[Der liebe IE ... wie sehr erschwert er einem doch Leben. In diesem Artikel geht es um die doppelten Margin-Werte, die der IE bei floatenden Elementen vergibt. Was ist die Ursache dafür? Wie kann ich das umgehen? Einen (einfachen und bewährten) Ansatz gibt's hier. <a href="http://www.guardian-online.de/2011/02/21/ie-6-und-doppeltes-margin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>… und wieder einen tollen Entwurf fertig gestellt. Schaut super aus. Die gängigen Browser (Opera, Firefox, Safari, Chrome und selbst der IE 7+) interpretieren das Layout wie gewünscht, auch wenn der immer noch fehlende CSS3 Support etwas nervig ist.</p>
<p>Nur leider gibt’s noch ein Problem: die definierte Zielgruppe hat nach Analyse zu 18% den Internet Explorer 6 im Einsatz. Immer noch so viel. Okay, starten wir den mal … und machen ihn nach Begutachtung ganz schnell wieder zu — grauenvoll. Das Layout ist ziemlich zerschossen.</p>
<p>Dieses Szenario ist wohl vielen bekannt <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Oftmals sind die Eigenheiten der IE-Familie etwas nervig und man muss sich damit rumschlagen.</p>
<p>Nach und nach werde ich versuchen die bekanntesten Bugs im IE hier zu sammeln und zu erläutern sowie die gängisten Workarounds aufzuzeigen. Heute fangen wir mal mit dem Double Margin-Problem an.</p>
<p>Nehmen wir mal an, wir haben zwei nette kleine Container, die nebeneinander angeordnet werden sollen.</p>
<pre class="brush: css; title: ; notranslate">#left_wrapper, #right_wrapper {
   width: 300px;
   float: left;
   height: 120px;
   margin-left: 10px;
}</pre>
<p>Ganz simples Beispiel sollte man denken. Aber der IE 6 zeigt selbst bei diesem Beispiel schon ein erschreckendes Ergebnis: der Abstand nach Links ist doppelt so groß wie er sein sollte — nämlich 20 Pixel. Warum?</p>
<h3>Grund</h3>
<p>Wird ein Element mit der CSS-Eigenschaft <em>float</em> ausgezeichnet, sollte durch den Browser automatisch die <em>display</em>–Eigenschaft auf <em>inline</em> gesetzt werden. Das geschieht allerdings beim IE 6 nicht. Allerdings tritt dieses Verhalten nur auf, wenn die<em> float</em>–Richtung und <em>margin</em>–Angabe in die gleiche Richtung gesetzt werden (wie hier: links).</p>
<h3>Workaround / Lösung</h3>
<p>Die Lösung ist relativ einfach: das entsprechende Element mit der <em>float</em>–Angabe bekommt zusätzlich die Eigenschaft:</p>
<pre class="brush: css; title: ; notranslate">display: inline;</pre>
<p>Anbei noch eine Datei, die diesen Bug demonstriert…</p>
<p><a href="http://www.guardian-online.de/wp-content/uploads/2011/02/double_margin1.html">IE 6 Doube Margin</a></p>
<h3>Weiterführende Hilfe</h3>
<p>Du hast trotzallem Probleme bei der Darstellung? Poste einfach einen Kommentar und hinterlass’ deine E-Mail, dann versuchen wir das zu beheben <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/02/21/ie-6-und-doppeltes-margin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress 3.1 RC3 released **UPDATE**</title>
		<link>http://www.guardian-online.de/2011/01/28/wordpress-3-1-rc3-released/</link>
		<comments>http://www.guardian-online.de/2011/01/28/wordpress-3-1-rc3-released/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 09:21:29 +0000</pubDate>
		<dc:creator>Benno</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.guardian-online.de/?p=157</guid>
		<description><![CDATA[Wordpress.org hat am vergangenen Samstag die Version 3.1 released. Wichtige Änderungen und was genau dort los ist gibt's hier zu lesen. <a href="http://www.guardian-online.de/2011/01/28/wordpress-3-1-rc3-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Am 22. Januar gab’s von Seiten wordpress.org eine Ankündigung, dass WordPress 3.1 (Release Candidate 3) auf die Welt gebracht wurde. Gut daran: AJAX wurde komplett für List Tables entfernt.</p>
<p>Mehr dazu:</p>
<blockquote><p>WordPress 3.1 Release Candidate 3 is now available. After careful  evaluation of the 3.1 features in RC2, we recognized the need to make  some adjustments. There are some significant differences from previous  versions of 3.1, so <strong>please</strong> review the changes if you have been developing against a beta or RC version.</p>
<p>The biggest change is the removal of AJAX list tables, which had been  an effort to move all of our list-style screens to full AJAX for  pagination, searches, and column sorts, and to consolidate the  list-style screens into a single API that plugins could  leverage. Unfortunately, with more testing came realizations that there  were too many major bugs and usability issues with how the functionality  was implemented, so we’ve spent the last week rolling back the most  important portions of the feature.</p></blockquote>
<p>Quelle: <a title="Wordpress 3.1 RC3 released" href="http://wordpress.org/news/2011/01/wordpress-3-1-release-candidate-3/">http://wordpress.org</a></p>
<p>Ich bin gespannt wie es wird und hoffe, dass ich mal die Zeit finde um das anzutesten <img src='http://www.guardian-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>**UPDATE**</h3>
<p>Genau einen Monat später ist die offizielle Version WordPress 3.1 mit dem Codename “<em>Reinhardt</em>” erschienen. Originalartikel “<em><a title="Offizelle WordPress Seite" href="http://wordpress.org/news/2011/02/threeone/">WordPress 3.1, lots of fun</a></em>”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guardian-online.de/2011/01/28/wordpress-3-1-rc3-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

