<?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>GOLSER.info BLOG &#187; codesnippet</title>
	<atom:link href="http://www.golser.info/tag/codesnippet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.golser.info</link>
	<description>News und Stories von August Florian Golser, BSc</description>
	<lastBuildDate>Sun, 05 Sep 2010 20:11:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Objektorientiertes CSS (OOCSS)</title>
		<link>http://www.golser.info/objektorientiertes-css-oocss-26012010</link>
		<comments>http://www.golser.info/objektorientiertes-css-oocss-26012010#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:34:23 +0000</pubDate>
		<dc:creator>Gusti</dc:creator>
				<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[codesnippet]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.golser.info/?p=581</guid>
		<description><![CDATA[Die strikte Trennung von Design und Inhalt bei Webprojekten führte dazu, dass die HTML-Konstrukte immer einfacher und die CSS-Dokumente immer komplexer wurden. So bringen es sogar die Stylesheets kleiner Websites recht schnell auf über 500 Zeilen Code und werden über den Projektlebenszyklus hinweg immer undurchsichtiger. Bei umfangreicheren Webprojekten stellen die Stylesheets nicht selten ein kleines [...]]]></description>
			<content:encoded><![CDATA[<p>Die strikte Trennung von Design und Inhalt bei Webprojekten führte dazu, dass die HTML-Konstrukte immer einfacher und die CSS-Dokumente immer komplexer wurden. So bringen es sogar die Stylesheets kleiner Websites recht schnell auf über 500 Zeilen Code und werden über den Projektlebenszyklus hinweg immer undurchsichtiger. Bei umfangreicheren Webprojekten stellen die Stylesheets nicht selten ein kleines &#8220;Kunstwerk&#8221; dar, das mit vertretbarem Zeitaufwand nur vom ursprünglichen Entwickler komplett durchschaut wird.<br />
Diese Tatsache macht es auch sehr schwierig im Team an den Styles einer Website zu arbeiten. Auch eine Wiederverwendung von CSS-Dokumenten für andere Projekte ist nur eingeschränkt möglich.</p>
<h3>Die Lösung: OOCSS</h3>
<p>Die Webentwicklerin <a href="http://www.stubbornella.org" class="liexternal">Nicole Sullivan</a> versucht mit ihrer <strong>Objektorientiertes CSS</strong> (OOCSS) genannten Methode einen Lösungsansatz zu finden. OOCSS versucht die Idee der Objektorientierung auf CSS zu übertragen. Objektorientiertes CSS ist dabei keine neue Technik, sondern vereint eine Reihe von Regeln für die Gestaltung von CSS-Dateien. Grundgerüst von OOCSS ist eine von Nicole Sullivan auf ihrer <a href="http://wiki.github.com/stubbornella/oocss" class="liexternal">GitHub Projektseite</a> bereitgestellte Code-Bibliothek im Alpha-Stadium. Um das CSS-Framework einsetzen zu können, müssen wie schon erwähnt einige Regeln beachtet werden. Die zwei wichtigsten:</p>
<ul>
<li>
<p><strong>Trenne Container und Inhalt</strong><br />
Gemäß Sullivans Terminologie bildet ein simpler HTML-Tag (z.B. <code>&lt;h1&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;li&gt;</code>, &#8230;) mit zugehörigem CSS einen <strong>Inhalt</strong>. Komplexere Strukturen bestehend aus mehreren <code>&lt;div&gt;</code>-Elementen werden als <strong>Container</strong> bezeichnet. Ordnet man diesen Containern jetzt noch über mehrere CSS-Klassen Layout und Design (<em>Skins</em>) zu, dann entstehen Sullivans Objekte.</p>
</li>
<li>
<p class="nospace"><strong>Trenne Struktur und Design</strong><br />
Nicole Sullivan bezieht sich hier auf das CSS von Containern und Inhalten. Durch die Verwendung unterschiedlicher Klassen für Layout- und Design-Elemente wird die <strong>Wiederverwendbarkeit von Objekten</strong> in anderen Projekten ermöglicht.<br />
<span id="more-581"></span>
</p>
</li>
</ul>
<p>Generell sollten CSS-Deklarationen vermieden werden, die HTML-Elemente in Abhängigkeit eines Containers bringen.<br />
Also keine derartigen Konstrukte:</p>
<div class="dean_ch"><span class="re0">#sidebar</span> h1 <span class="br0">&#123;</span><span class="br0">&#125;</span> <span class="re0">#content</span> ul <span class="br0">&#123;</span><span class="br0">&#125;</span> div<span class="re1">.news</span> p <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
<p>Alle CSS-Anpassungen werden ausschließlich über Klassen vorgenommen, die einander erweitern. Beispiel:</p>
<div class="dean_ch">
<span class="re1">.box</span> <span class="br0">&#123;</span> <span class="kw1">background</span>: <span class="re0">#fff</span>; <span class="kw1">border</span>: <span class="re3">3px</span> <span class="kw2">solid</span> <span class="re0">#<span class="nu0">036</span></span>; <span class="kw1">padding</span>: <span class="re3">5px</span>; <span class="br0">&#125;</span><br />
<span class="re1">.graybox</span> <span class="br0">&#123;</span> <span class="coMULTI">/* extends: .box; */</span><br />
&nbsp; <span class="kw1">background</span>: <span class="re0">#ccc</span>;<br />
<span class="br0">&#125;</span></div>
<p>HTML:</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;box graybox&quot;</span><span class="kw2">&gt;</span></span> &#8230; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
<p>Weiters empfiehlt Sullivan bevorzugt Klassen statt IDs zu verwenden und Selektoren ohne Tags zu schreiben (<code>.box</code> statt <code>div.box</code>). Grund: Einsatzmöglichkeiten erweitern, Redundanzen im Code minimieren.</p>
<h3>OOCSS in der Praxis</h3>
<p>Sullivans <a href="http://wiki.github.com/stubbornella/oocss" class="liexternal">CSS-Framework</a> besteht derzeit aus 12 CSS-Dateien, von denen drei nur zum Debugging verwendet werden. Einen guten Ausgangspunkt für eigene Entwicklungen bildet die Datei <strong>template.html</strong>, die das Grundlayout umsetzt und als Basis für alle weiteren Seiten dient.<br />
Die Breite der linken und rechten Spalte wird beispielsweise durch Erweiterung des Spalten-Objektes gesetzt:</p>
<div class="dean_ch"><span class="re1">.myColumn</span> <span class="br0">&#123;</span> <span class="kw1">width</span>: <span class="re3">400px</span>; <span class="br0">&#125;</span></div>
<p>HTML:</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;leftCol myColumn&quot;</span><span class="kw2">&gt;</span></span> &#8230; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
<blockquote><p class="nospace">Don’t think of this as overwriting my classes, but rather <strong>extending</strong> the objects provided by the framework. I give you columns, headings, and other objects. You can extend those objects by adding another class that only specifies the differences between my base object and your implementation of the same. Mixins may be a good analogy here.</p>
</blockquote>
<p>Wichtig dabei ist, dass Sullivans CSS-Deklarationen unberührt bleiben!<br />
Die Klasse <code>.leftCol</code> im Beispiel sollte also keinen eigenen CSS-Code erhalten. Schon allein deshalb nicht um schnell und unkompliziert ein Update des Frameworks durchführen zu können.</p>
<p>Mit <strong>Grids</strong> können die Seiten weiter in kleinere Bereiche unterteilt werden. Beispiel:</p>
<div class="dean_ch">
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;line&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;unit size2of3&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;h3&gt;</span></span>2/3<span class="sc2"><span class="kw2">&lt;/h3&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;unit size1of3 lastUnit&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;h3&gt;</span></span>1/3<span class="sc2"><span class="kw2">&lt;/h3&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
<p>Sobald das Raster einer Seite aufgebaut ist, können Inhaltsobjekte wie Überschriften, Absätze, Listen, usw. der Datei <strong>content.css</strong> hinzugefügt werden. Die Datei konzentriert sich hauptsächlich auf die Definition von Ausrichtungen, Abständen, Listendarstellungen, Schriftgrößen, Schriftfarben und dem Verhalten von Links.</p>
<h3>Module und Skins</h3>
<p>Besonders interessant ist die Datei <strong>module.html</strong>, die einen Überblick über die mit dem Framework realisierbaren Blockstrukturen gibt. Sullivans HTML-Grundgerüst für alle Arten von Boxen schaut wie folgt aus:</p>
<div class="dean_ch">
<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;mod&quot;</span><span class="kw2">&gt;</span></span> <br />
&nbsp; <span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;top&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;tl&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span><span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;tr&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span> <br />
&nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;inner&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;hd&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;h3&gt;</span></span>mod<span class="sc2"><span class="kw2">&lt;/h3&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;bd&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Mod ist der Basis-Container.<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; <span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;bottom&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;bl&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span><span class="sc2"><span class="kw2">&lt;b</span> <span class="kw3">class</span>=<span class="st0">&quot;br&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span><span class="sc2"><span class="kw2">&lt;/b&gt;</span></span> <br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
<p>Durch Kombination dieses Containers mit drei verschiedenen CSS-Klassen entstehen drei <strong>OOCSS-Module</strong>. Für jeden der drei Container gibt es wiederum eigene Skins, die den Rand und die Hintergrundbilder der Boxen definieren. Eine vollständige Komponente besteht aus bis zu vier Klassen, von denen die letzten beiden für Skin und Hintergrund sorgen.</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;mod complex flow foo&quot;</span><span class="kw2">&gt;</span></span> &#8230; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
<p>würde unsere Box folgendermaßen darstellen:</p>
<p><img src="/wp-content/uploads/2010/01/oocss-box.gif" alt="OOCSS Box" width="468" height="74" /></p>
<p>Mit Sullivans Grundformen lassen sich bereits über 200 verschiedene Boxen generieren. Das CSS-Framework bietet auch schon einige Styles für Tabs und &#8220;Sprechblasen&#8221;.</p>
<h3>Mein Fazit</h3>
<p>OOCSS ist prädestiniert für die gemeinsame Erstellung von CSS-Dateien im Team und fördert die Wiederverwendbarkeit und Strukturierung von CSS-Dokumenten. OOCSS hat auch viele Kritiker, da die Regel &#8220;Trenne Container und Inhalt&#8221; in direktem Widerspruch zum CSS-Grundkonzept der Kaskade steht &#8211; jedoch wird dieses 1994 entwickelte Konzept heutigen Entwicklungsprozessen überhaupt noch gerecht?<br />
Ich finde Sullivans Ansätze jedenfalls sehr interessant und kann mir gut vorstellen ihr Framework bei einem umfangreicheren Teamprojekt einzusetzen.</p>
<h3>Weiterführende Links</h3>
<ul>
<li><a href="http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn" class="liexternal">Object Oriented CSS video on YDN</a><br />
Eine der ausführlichsten Quellen zu OOCSS.</li>
<li><a href="http://wiki.github.com/stubbornella/oocss" class="liexternal">OOCSS GitHub Projektseite</a></li>
<li><a href="http://groups.google.com/group/object-oriented-css" class="liexternal">OOCSS Google Group</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.golser.info/objektorientiertes-css-oocss-26012010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy CSS Naked Day!</title>
		<link>http://www.golser.info/css-naked-day-09042008</link>
		<comments>http://www.golser.info/css-naked-day-09042008#comments</comments>
		<pubDate>Wed, 09 Apr 2008 21:23:30 +0000</pubDate>
		<dc:creator>Gusti</dc:creator>
				<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[barrierefreiheit]]></category>
		<category><![CDATA[codesnippet]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[webdevelopment]]></category>
		<category><![CDATA[webstandards]]></category>

		<guid isPermaLink="false">http://www.golser.info/css-naked-day-2008-09042008</guid>
		<description><![CDATA[CSS Naked Day ist ein Projekt zur Förderung der Webstandards. Unter der Oberfläche einer Website zeigt sich die wahre Qualität: korrekte Verwendung von (X)HTML, semantisches Markup, gut gegliederter, hierarchischer Aufbau und natürlich hochwertige Inhalte. Am jährlich stattfindenden CSS Naked Day zeigen sich alle teilnehmenden Websites &#8220;nackt&#8221;, entblößen ihren &#60;body&#62; und zeigen was dahinter steckt. Gut [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://naked.dustindiaz.com" class="liexternal">CSS Naked Day</a> ist ein Projekt zur Förderung der Webstandards.<br />
Unter der Oberfläche einer Website zeigt sich die wahre Qualität: korrekte Verwendung von <a href="http://de.wikipedia.org/wiki/Extensible_Hypertext_Markup_Language" rel="nofollow" class="liwikipedia">(X)HTML</a>, semantisches Markup, gut gegliederter, hierarchischer Aufbau und natürlich hochwertige Inhalte.<br />
Am jährlich stattfindenden <strong>CSS Naked Day</strong> zeigen sich alle teilnehmenden Websites &#8220;nackt&#8221;, entblößen ihren <code>&lt;body&gt;</code> und zeigen was dahinter steckt. <img src='http://www.golser.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Gut strukturierte Websites machen auch bei deaktiviertem &#8220;Design&#8221; (siehe <a href="http://de.wikipedia.org/wiki/Cascading_Style_Sheets" rel="nofollow" class="liwikipedia">Cascading Style Sheets</a>) ein gutes Bild und sind ohne Einschränkung les- und navigierbar.<br />
<span id="more-380"></span></p>
<h3>Warum am 9. April?</h3>
<p>Tja, dafür gibt es scheinbar ein paar ganz plausible Gründe:</p>
<ul>
<li>Der Tag sollte immer auf einen Dienstag, Mittwoch oder Donnerstag fallen (am meisten Traffic)</li>
<li>Möglichst Anfang April, jedoch nie am 1. April (internationaler Scherz- und Streichetag)</li>
<li>Es sollte ausreichend Zeit für die Ankündigung sein</li>
</ul>
<h3>Nackte Tatsachen &#8211; automatisiert</h3>
<p>Damit man den <em>CSS Naked Day</em> nicht versäumt, gibt es eine sehr praktische PHP-Funktion um das Deaktivieren bzw. nicht laden der Styles zu automatisieren:</p>
<div class="dean_ch"><span class="kw2">&lt;?php</span><br />
<span class="kw2">function</span> is_naked_day<span class="br0">&#40;</span><span class="re0">$d</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$start</span> = <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;U&quot;</span>, <span class="kw3">mktime</span><span class="br0">&#40;</span><span class="nu0">-12</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">04</span>, <span class="re0">$d</span>, <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;Y&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="re0">$end</span> = <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;U&quot;</span>, <span class="kw3">mktime</span><span class="br0">&#40;</span><span class="nu0">36</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">04</span>, <span class="re0">$d</span>, <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;Y&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="re0">$z</span> = <span class="kw3">date</span><span class="br0">&#40;</span><span class="st0">&quot;Z&quot;</span><span class="br0">&#41;</span> * <span class="nu0">-1</span>;<br />
&nbsp; <span class="re0">$now</span> = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="re0">$z</span>; <br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$now</span> &gt;= <span class="re0">$start</span> &amp;&amp; <span class="re0">$now</span> &lt;= <span class="re0">$end</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw2">?&gt;</span></div>
<p>Man übergibt der Funktion den entsprechenden Monatstag (z.B. &#8220;9&#8243; für 2009) und bekommt am <em>CSS Naked Day</em> <code>true</code> als Rückgabewert. Ist dies der Fall, muss das Einbinden der CSS-Files verhindert werden.<br />
Hier eine mögliche Anwendung:</p>
<div class="dean_ch">&lt;head&gt;<br />
&#8230;<br />
<span class="kw2">&lt;?php</span> <span class="kw1">if</span> <span class="br0">&#40;</span>!is_naked_day<span class="br0">&#40;</span><span class="nu0">9</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw2">?&gt;</span><br />
&nbsp; &lt;link rel=<span class="st0">&quot;stylesheet&quot;</span> type=<span class="st0">&quot;text/css&quot;</span> href=<span class="st0">&quot;layout.css&quot;</span> /&gt;<br />
&nbsp; &lt;link rel=<span class="st0">&quot;stylesheet&quot;</span> type=<span class="st0">&quot;text/css&quot;</span> href=<span class="st0">&quot;default.css&quot;</span> /&gt;<br />
<span class="kw2">&lt;?php</span> <span class="br0">&#125;</span> <span class="kw2">?&gt;</span><br />
&#8230;<br />
&lt;/head&gt;</div>
<h3>Hilfe, ich bin immer noch nackt!</h3>
<p>Das oben gelistete Script setzt die &#8220;starke&#8221; Variante um. Dabei werden alle Zeitzonen berücksichtigt und man ist dann insgesamt 48 Stunden ohne Styles. Die &#8220;schwache&#8221; Version inkludiert nur die eigene Zeitzone, daher 24 Stunden ohne CSS.</p>
<h3>Weiterführende Links</h3>
<ul>
<li><a href="http://naked.dustindiaz.com" class="liexternal">CSS Naked Day Website</a></li>
<li><a href="http://www.ajalapus.com/downloads/css-naked-day" class="liexternal">WordPress Naked Day Plugin</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.golser.info/css-naked-day-09042008/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Karten mit Google Maps erstellen</title>
		<link>http://www.golser.info/karten-mit-google-maps-api-10042007</link>
		<comments>http://www.golser.info/karten-mit-google-maps-api-10042007#comments</comments>
		<pubDate>Tue, 10 Apr 2007 16:49:19 +0000</pubDate>
		<dc:creator>Gusti</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[codesnippet]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googlemaps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[webdevelopment]]></category>

		<guid isPermaLink="false">http://www.golser.info/google-maps-18042007</guid>
		<description><![CDATA[Google Maps ist ein Dienst von Google, der leistungsstarke und nutzerfreundliche Kartentechnologie und Informationen zu Unternehmen wie Standorte, Kontaktinformationen und Routenplaner bietet. Für Webdeveloper wird eine gut dokumentierte API (Application Programming Interface) zur Verfügung gestellt und daher kann man das umfangreiche Kartenmaterial auch in eigene Webprojekte integrieren. Voraussetzung dafür ist ein Google API Key, der [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Google Maps</strong> ist ein Dienst von Google, der leistungsstarke und nutzerfreundliche Kartentechnologie und Informationen zu Unternehmen wie Standorte, Kontaktinformationen und Routenplaner bietet.<br />
Für Webdeveloper wird eine gut dokumentierte <a href="http://de.wikipedia.org/wiki/Programmierschnittstelle" rel="nofollow" class="liwikipedia">API</a> (<em>Application Programming Interface</em>) zur Verfügung gestellt und daher kann man das umfangreiche Kartenmaterial auch in eigene Webprojekte integrieren.<br />
Voraussetzung dafür ist ein <a href="http://www.google.com/apis/maps/signup.html" class="liexternal">Google API Key</a>, der als Zugangsschlüssel zu den Daten fungiert. Nach &#8220;Registrierung&#8221; der entsprechenden Domain bei Google erhält man auch schon einen Beispielcode als Basis für eigene Implementierungen.<br />
<span id="more-39"></span><br />
Um eigene Punkte in die Karte eintragen zu können, müssen die Geodaten in einem bestimmten Format (<em>Latitude</em>, <em>Longitude</em>) vorliegen &#8211; diese Daten erhält man beispielsweise bei <a href="http://www.multimap.com" class="liexternal">Multimap.com</a>.<br />
Folgender Code-Schnippsel würde z.B. meinen Wohnort St. Johann in Tirol auf der Karte darstellen und zentrieren:</p>
<div class="dean_ch"><span class="kw2">var</span> map = <span class="kw2">new</span> GMap2<span class="br0">&#40;</span>document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;map&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> point = <span class="kw2">new</span> GLatLng<span class="br0">&#40;</span><span class="nu0">47.5222</span>, <span class="nu0">12.4263</span><span class="br0">&#41;</span>;<br />
map.<span class="me1">setCenter</span><span class="br0">&#40;</span>point, <span class="nu0">13</span><span class="br0">&#41;</span>;<br />
map.<span class="me1">addOverlay</span><span class="br0">&#40;</span><span class="kw2">new</span> GMarker<span class="br0">&#40;</span>point<span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
<h3>St. Johann in Tirol als Mittelpunkt der Welt</h3>
<p>Folgendes Beispiel zeigt eine erweiterte Anwendung von Google Maps &#8211; die Darstellung wurde um Bedienelemente ergänzt und als Marker wurde mein Logo verwendet. Jeder Klick auf die Karte erhöht den Zoomlevel um einen Grad.</p>
<div id="googlemap001" class="googlemap"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.golser.info/karten-mit-google-maps-api-10042007/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grundlagen der Suchmaschinenoptimierung</title>
		<link>http://www.golser.info/suchmaschinenoptimierung-seo-12052005</link>
		<comments>http://www.golser.info/suchmaschinenoptimierung-seo-12052005#comments</comments>
		<pubDate>Thu, 12 May 2005 03:50:13 +0000</pubDate>
		<dc:creator>Gusti</dc:creator>
				<category><![CDATA[Bakkalaureatsarbeit]]></category>
		<category><![CDATA[WebMarketing]]></category>
		<category><![CDATA[codesnippet]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[suchmaschinen]]></category>
		<category><![CDATA[webmarketing]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.golser.info/?p=427</guid>
		<description><![CDATA[Einteilung der Ranking-Kriterien Im Zusammenhang mit Suchmaschinenoptimierung gibt es eine wichtige Unterscheidung in sogenannte On the Page und Off the Page Ranking-Kriterien. Die On the Page Kriterien werden ausschließlich durch den Seitenaufbau bestimmt (z.B. durch den Header der Seite, Verlinkung, Überschriften usw.). Off the Page wird im Gegensatz dazu rein durch die Linkstruktur (sowohl seiteninterne [...]]]></description>
			<content:encoded><![CDATA[<h3>Einteilung der Ranking-Kriterien</h3>
<p>Im Zusammenhang mit Suchmaschinenoptimierung gibt es eine wichtige Unterscheidung in sogenannte <em>On the Page</em> und <em>Off the Page</em> Ranking-Kriterien. Die <em>On the Page</em> Kriterien werden ausschließlich durch den Seitenaufbau bestimmt (z.B. durch den <em>Header</em> der Seite, Verlinkung, Überschriften usw.). <em>Off the Page</em> wird im Gegensatz dazu rein durch die Linkstruktur (sowohl seiteninterne als auch externe Links) bestimmt und ist somit nicht direkt beeinflussbar. Der wohl bekannteste Vertreter für diese Ranking-Kategorie ist das <em>PageRank-System</em> von Google.</p>
<h3>Keyword Recherche</h3>
<p>Das Ermitteln relevanter und passender Keywords ist wohl die wichtigste Tätigkeit einer jeden Suchmaschinenoptimierung. Man sollte sich vorerst selbst die Frage stellen,</p>
<blockquote><p class="nospace">was würde ich bei einer Suchmaschine eingeben, wenn ich nach meinen Produkten bzw. meinen angebotenen Leistungen suchen würde?</p>
</blockquote>
<p>Ergänzt man diese durch &#8220;Brainstorming&#8221; ermittelten Schlüsselwörter mit denen, die man beispielsweise durch Auswertung von <a href="/kostenpflichtige-dienste-12052005" class="liinternal">Google AdWords</a> erhalten hat, ist das schon mal ein guter Ausgangspunkt für die nachfolgende Optimierung.<br />
<span id="more-427"></span><br />
Im nächsten Schritt sollte man diese ermittelten Schlüsselwörter bei den wichtigsten Suchmaschinen eingeben und die Ergebnislisten begutachten. Bieten die am besten gereihten Sites ähnliche Produkte und Dienstleistungen, dann hat man wohl ein lukratives Gebiet gefunden und kann beginnen seine eigenen Seiten dahingehend zu optimieren.</p>
<p>Gewiss kann man sich von den bestgereihten Einträgen bereits einiges abschauen. Besonderes Augenmerk sollte man hierbei auf den <code>&lt;title&gt;</code>-Tag, Meta-Angaben, Überschriften (<code>&lt;h1&gt;</code> &#8211; <code>&lt;h6&gt;</code>), Hervorhebungen (<code>&lt;b&gt;</code>, <code>&lt;i&gt;</code>, <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>) und Linktext legen.</p>
<h3>Suchmaschinenfreundliches Design</h3>
<p>Nachdem man sich eine Liste mit Keywords zurecht gelegt hat, muss man diese Schlüsselwörter nun den einzelnen Seiten des Webauftritts passend zuordnen. Als Faustregel sollte man jeder Seite nicht mehr als 3&nbsp;wichtige Suchbegriffe zuweisen und sie in weiterer Folge für diese Keywords optimieren. Will man bei einem Internetauftritt beispielsweise 30 Keywords unterbringen, dann sollte dieser schon mindestens 10 verschiedene Seiten aufweisen.</p>
<p>Im nächsten Schritt bestimmt man für jede Seite das wichtigste Keyword und bildet daraus den Dateinamen. Am besten erstellt man eine Auflistung aller Dateinamen mit den zugeordneten Schlüsselwörtern, da diese Information später bei der Verlinkung eine wichtige Rolle spielt.</p>
<h4>Optimierung des sichtbaren Textes</h4>
<p>Bei vielen Suchmaschinen wird den als Überschriften gekennzeichneten Textpassagen (HTML-Tag <code>&lt;h1&gt;</code> &#8211; <code>&lt;h6&gt;</code>) eine besondere Bedeutung zugesprochen, da diese den Text gliedern und den Inhalt kurz und prägnant benennen. Aus diesem Grund sollten möglichst viele Keywords innerhalb dieser Tags, besonders zwischen <code>&lt;h1&gt;&lt;/h1&gt;</code> und <code>&lt;h2&gt;&lt;/h2&gt;</code>, platziert werden. Weiters sollte man versuchen, die wichtigsten Schlüsselwörter möglichst &#8220;weit oben&#8221; im Quelltext zu positionieren – am besten gleich nach dem <code>&lt;body&gt;</code>-Tag, da dieser Bereich von Suchmaschinen als besonders wichtig eingestuft wird. Ebenso wird auch dem letzten Absatz einer Seite eine höhere Bedeutung zugesprochen – es macht also durchaus Sinn, am Ende jeder Seite nochmal die wichtigsten Keywords zu wiederholen. Generell bevorzugen Suchmaschinen Seiten mit viel (sichtbarem) Text, daher sollten die einzelnen Seiten mindestens 250 Wörter aufweisen.</p>
<h4>Keyword-Dichte</h4>
<p>Darunter versteht man nichts anderes als die Häufigkeit eines Schlüsselwortes bezogen auf die Wortanzahl der gesamten Seite. Wichtige Keywords sollten eine Dichte von in etwa <del datetime="2010-03-06T15:03:55+00:00">5% bis 10%</del> <strong>3% bis 5%</strong> aufweisen. In diesem Zusammenhang sollte man anmerken, dass sich auch der Linktext (z.B. <code>&lt;a href="page.html"&gt;Linktext&lt;/a&gt;</code>) auf die Keyword-Dichte auswirkt. Es gibt auch noch viele andere Methoden um die Keyword-Dichte zu erhöhen, die ich nachfolgend vorstellen möchte.</p>
<h4>Optimierung des Headers</h4>
<p>Unter &#8220;Header&#8221; versteht man jenen Bereich, der im HTML-Quellcode zwischen den <code>&lt;head&gt;&lt;/head&gt;</code>-Tags positioniert ist. Das Grundgerüst eines &#8220;suchmaschinenfreundlichen&#8221; Headers sollte folgenden Aufbau aufweisen:</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;head&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Max. 3 Keyword-Phrasen; max. 70 Zeichen<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;meta</span> <span class="kw3">name</span>=<span class="st0">&quot;description&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;Beschreibung; max. 255 Z.&quot;</span> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;meta</span> <span class="kw3">name</span>=<span class="st0">&quot;keywords&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;Schlüsselworte; max. 1000 Z.&quot;</span> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;meta</span> <span class="kw3">name</span>=<span class="st0">&quot;robots&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;index, follow&quot;</span> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/head&gt;</span></span></div>
<p>Man sollte beherzigen, dass die <code>description</code> nicht nur eine Wiederholung der Schlüsselwörter, sondern eine Beschreibung des wirklichen Seiteninhalts sein sollte, da sie von einigen Suchmaschinen verwendet wird um einen Eintrag zu bilden. Weiters möchte ich anmerken, dass sich der Stellenwert der <code>&lt;meta&gt;</code>-Angaben hinsichtlich der Relevanzbeurteilung von Webseiten stark vermindert hat – Google beispielsweise ignoriert die <code>keywords</code>-Angabe völlig! Über die Notwendigkeit der <code>robots</code>-Angabe könnte man auch streiten, aber es schadet sicher nicht, explizit anzugeben, dass alle Links verfolgt werden sollen.</p>
<p>Bei der Optimierung des Seiten-Headers ist sicher am wichtigsten, dass jede Seite einen eigenen, mit Keywords angereicherten <code>&lt;title&gt;</code> erhält. Der Titel der Seite sollte nicht zu lang sein (max. 70 Zeichen), da sonst den einzelnen Wörtern weniger Relevanz beigemessen wird.<br />
Man sollte auch darauf achten, dass die Datei möglichst &#8220;schlank&#8221; ist und somit alle Scripts und CSS-Angaben in externe Dateien auslagern:</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;link</span> <span class="kw3">type</span>=<span class="st0">&quot;text/css&quot;</span> <span class="kw3">rel</span>=<span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span>=<span class="st0">&quot;styles.css&quot;</span> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;scripts.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div>
<h4>Anker und Links</h4>
<p>Ein Anker wird verwendet um eine bestimmte Stelle innerhalb einer Seite zu referenzieren, auf die dann verlinkt werden kann. Diese &#8220;on page links&#8221; sind eine weitere Möglichkeit Schlüsselwörter unterzubringen und somit die Keyword-Dichte zu erhöhen. Bevor man einen Anker setzt, sollte man sich eine passende Anwendung dafür überlegen. Ein &#8220;Klassiker&#8221; ist sicherlich der &#8220;Top-Link&#8221; am Ende einer Seite. Um den Link zum Seitenanfang für die Suchmaschinenoptimierung zu nutzen, könnte man beispielsweise mit</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;a</span> <span class="kw3">name</span>=<span class="st0">&quot;seo&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/a&gt;</span></span></div>
<p>am Anfang der Seite einen Anker setzen und dann am Ende der Seite darauf verweisen:</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;a</span> <span class="kw3">href</span>=<span class="st0">&quot;#seo&quot;</span><span class="kw2">&gt;</span></span>SEO<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span></div>
<p>Durch diese Vorgehensweise hat man einerseits die Keyword-Dichte für das Wort &#8220;SEO&#8221; (<em>Search Engine Optimization</em>) erhöht und noch zusätzlich durch die Ausführung als Linktext die Relevanz des Wortes gesteigert. Ein berechtigtes Gegenargument könnte wohl sein, dass man &#8220;nachdenken&#8221; muss warum der Link &#8220;SEO&#8221; und nicht einfach &#8220;top&#8221; heißt und man somit gegen das wichtigste Usability-Gesetz verstößt.</p>
<h4>alt-Attribute von Grafiken</h4>
<p>Das <code>alt</code>-Attribut beschreibt eine Grafik auf einer Website. Dieser Beschreibungstext wird angezeigt, während sich ein Bild lädt, wenn ein Bild nicht mehr online verfügbar ist und nicht angezeigt werden kann, wenn ein User eine Website mit einem reinen Text-Browser besucht oder wenn man mit der Maus über ein Bild fährt. Die meisten Browser erlauben es auch, das Anzeigen von Bildern auszuschalten, um die Geschwindigkeit zu erhöhen. Sehbehinderten Internetusern wird dieser Text anstelle der Bildinformation vorgelesen oder ausgegeben.</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;img</span> <span class="kw3">src</span>=<span class="st0">&quot;keywords.jpg&quot;</span> <span class="kw3">alt</span>=<span class="st0">&quot;keyword research truly is the life<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;blood of internet marketing&quot;</span> /<span class="kw2">&gt;</span></span></div>
<p>Der Textbereich innerhalb des <code>alt</code>-Attributs wird von Suchmaschinen höher gewertet als Fließtext und eignet sich hervorragend zum Erhöhen der Keyword-Dichte. Daher sollten alle Bilder mit einem passenden, Schlüsselwörter aufweisenden Text versehen werden.</p>
<h4>Domain-, Datei- und Verzeichnisnamen/Struktur</h4>
<p>Da manche Suchmaschinen auch die Domain auf Schlüsselwörter analysieren, ist es sicher hilfreich, mehrere Domains mit verschiedenen Schreibweisen und Varianten zu besitzen – nicht nur um in Suchmaschinen gefunden zu werden, sondern auch um Schreibfehler von potentiellen Kunden abdecken zu können.<br />
Suchmaschinen bewerten in der Ordnerstruktur &#8220;tiefer liegende&#8221; Dateien meist als weniger relevant als hierarchisch höher liegende Seiten. Daher sollte man die Verzeichnisstruktur möglichst flach halten und für wichtige Bereiche der Seite eigene <em>Subleveldomains</em> anlegen. Diese Domains können als eigene Websites bei Suchmaschinen registriert werden und werden von den Crawlern auch als &#8220;vollwertige&#8221; Domain behandelt. Das bedeutet, auch wenn die hinter einer Subleveldomain liegende Website in der Ordnerstruktur tiefer liegt, wird sie als oberste Hierarchieebene bewertet und alle darunter liegenden Seiten relativ dazu betrachtet.</p>
<p>Weiters sollte man dynamische Seiten mit Parameterübergaben vermeiden bzw. die Seiten für Suchmaschinen möglichst &#8220;statisch&#8221; wirken lassen. Dies lässt sich mit einem sogenannten <em>URL Rewrite</em> realisieren – eine scheinbar statische Seite wird erst beim Aufruf in ihr &#8220;dynamisches Äquivalent&#8221; umgewandelt. Dies kann durch entsprechende Modifikationen der <code>.htaccess</code>-Dateien auf Unix-Servern realisiert werden.<br />
Als Beispiel hierzu möchte ich eine bei einer Bildergalerie angewendete Kombination von Subleveldomain und URL Rewrite anführen:<br />
Ein dynamisch erzeugtes Bild mit der URL <code>www.domain.at/gallery/details.php?image_id=100</code> habe ich in den suchmaschinenfreundlichen Link <code>gallery.domain.at/img100.htm</code> umgewandelt.</p>
<h3>PageRank</h3>
<p>Wie bereits erwähnt, ist der PageRank ein <em>Off the Page</em> Ranking-Kriterium und stellt Google&#8217;s Maß für die Relevanz einer Seite dar. Zur Berechnung des Rankings einer Seite werden sowohl die <em>On the Page</em> Kriterien als auch der PageRank betrachtet. Sind beispielsweise zwei Seiten <em>On the Page</em> nahezu für die gleichen Keywords optimiert, dann entscheidet meist der PageRank welche Seite weiter oben im Suchergebnis aufscheint.</p>
<p>Die &#8220;PageRank-Theorie&#8221; geht davon aus, dass wenn eine Seite A auf eine Seite B verlinkt, dann hält Seite A die Seite B für eine wichtige Seite – es ist also eine Art &#8220;Stimme&#8221; für Seite B. Der verwendete Linktext spielt für den PageRank keine Rolle. Es fließt jedoch die &#8220;Wichtigkeit&#8221; der auf eine Seite verweisenden Links in die Berechnung ein. Hat eine Seite viele &#8220;wichtige&#8221; Links, die auf sie verlinken, dann werden auch die ausgehenden Links auf andere Seiten als &#8220;wichtiger&#8221; eingestuft.</p>
<p>Obwohl man heutzutage einen Link nicht mehr als &#8220;Empfehlung&#8221; für eine Seite werten kann (man denke beispielsweise an &#8220;Linkaustausch&#8221;), ist der PageRank nachwievor ein wichtiges Ranking-Kriterium, da er viel schwerer beeinflussbar ist als andere Ranking-Faktoren.</p>
<p>Der PageRank wird für jede einzelne Seite einer Website berechnet, sobald diese von Google indiziert wurde (z.B. durch einen <em>Backlink</em>). Den PageRank einer Seite kann man sich mit Hilfe der <a href="http://toolbar.google.com/intl/de/" class="liexternal">Google Toolbar</a> anzeigen lassen. Die Skala reicht von 0 bis 10, wobei eine Seite mit PageRank 10 für Google am wichtigsten ist.</p>
<p>Backlinks führen einerseits zu einer höheren Relevanzbeurteilung der verlinkten Seite und sorgen auch noch für einen &#8220;Ranking-Boost&#8221; für die im Linktext vorkommenden Keywords.<br />
Linkt beispielsweise eine Seite A mit</p>
<div class="dean_ch"><span class="sc2"><span class="kw2">&lt;a</span> <span class="kw3">href</span>=<span class="st0">&quot;hagenberg.html&quot;</span> <span class="kw3">title</span>=<span class="st0">&quot;Hagenberg&quot;</span><span class="kw2">&gt;</span></span>Hagenberg<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span></div>
<p>auf Seite B, so erzielt Seite B eine Verbesserung des Rankings für das Keyword &#8220;Hagenberg&#8221;. Das erklärt auch, warum fast alle Sites bei der Suche nach ihrem Domainnamen auf Platz 1 landen.</p>
<p>Diese &#8220;Gesetzmäßigkeit&#8221; gilt natürlich auch für interne Verlinkungen – verwendet man zum Beispiel für den Link zur Startseite nicht &#8220;home&#8221;, sondern ein Keyword, für das die Startseite optimiert wurde, wäre das aus Sicht der Suchmaschinenoptimierung sehr empfehlenswert, man landet jedoch wieder bei einem Usability-Problem.</p>
<h3>SEO Don&#8217;ts</h3>
<p>Hier möchte ich noch in kompakter Form ein paar wichtige Punkte anführen, die man im Zusammenhang mit Suchmaschinenoptimierung vermeiden sollte. Da das Bereitstellen einer von Suchmaschinen verfolgbaren Linkstruktur ein besonders wichtiger Punkt ist, sollte man auf folgende Elemente möglichst verzichten:</p>
<ul>
<li>Flash (besonders Flash-Navigationen)</li>
<li>JavaScript-Links</li>
<li>Frames</li>
<li>Image-Maps</li>
<li>Drop-Down-Menüs (<code>&lt;option&gt;</code>-Tag)</li>
</ul>
<h3></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.golser.info/suchmaschinenoptimierung-seo-12052005/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
