<?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>coldheat.deTutorials &#8211; coldheat.de</title>
  <atom:link href="https://www.coldheat.de/category/tutorials/feed" rel="self" type="application/rss+xml" />
  <link>https://www.coldheat.de</link>
  <description>Oxymoron#1</description>
  <lastBuildDate>Thu, 23 Apr 2026 10:29:59 +0000</lastBuildDate>
  <language>de</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
  
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://www.coldheat.de/category/tutorials/feed"/>
  <item>
    <title>jQuery &#8211; Flash of Unstyled Content</title>
    <link>https://www.coldheat.de/2009/03/jquery-flash-of-unstyled-content</link>
    <comments>https://www.coldheat.de/2009/03/jquery-flash-of-unstyled-content#respond</comments>
    <pubDate>Fri, 13 Mar 2009 11:33:18 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Website]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/?p=1430</guid>
    <description><![CDATA[Seit Ewigkeiten mal wieder ein winziges Tutorial von mir zur Lösung eines durchaus nervigen kleinen Problems. Nutzt man jQuery im großen Stil mit dynamisch geladenen Inhalten und aufwendigerem CSS, kann es zum Effekt kommen, den man <em>Flash of unstyled Content</em>&#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>

    <img src="https://www.coldheat.de/archiv/bilder/entry-thumbs/480/website-wip.jpg" 
         class="entrythumb" 
         alt="jQuery &#8211; Flash of Unstyled Content" />

    <p>Seit Ewigkeiten mal wieder ein winziges Tutorial von mir zur Lösung eines durchaus nervigen kleinen Problems. Nutzt man jQuery im großen Stil mit dynamisch geladenen Inhalten und aufwendigerem CSS, kann es zum Effekt kommen, den man <em>Flash of unstyled Content</em> nennt. Der Browser lädt Inhalte, die noch nicht vollständig mit Stilen und Klassen versehen sind und zeigt somit Inhalte in falscher Form an. Mein <a href="https://www.coldheat.de/archive">Archiv</a> war hier ein Musterbeispiel, welches mittlerweile aber ausgebessert ist. Zugegeben nur ein Schönheitsfehler aber einer, der sich ganz einfach beheben lässt.</p>
<p>Ich bin nicht der Erste, der dieses Problem versucht zu lösen. Wer danach googled wird viele Lösungen finden. Auch ich habe nur <a href="http://www.learningjquery.com/2008/10/1-awesome-way-to-avoid-the-not-so-excellent-flash-of-amazing-unstyled-content" title="1 (Awesome) Way To Avoid the (Not So Excellent) Flash of (Amazing) Unstyled Content">eine  Lösung</a> zu <em>meiner</em> gemacht. Zwei Vorrausettzungen sind zu erfüllen. Zum einen möchte ich so wenig zusätzlichen Quellcode und zum anderen solle es eine pure Javaskript-Lösung sein, die Nutzer mit deaktiviertem Javaskript ignoriert. Im schlimmsten Fall versteckt man mit CSS Elemente, die nur angezeigt werden, wenn Javaskript aktiv ist. Diesen Fall möchte man vermeiden.</p>
<p><span id="more-1430"></span></p>
<p>Grundsätzlich laufen alle Lösungen nach dem gleichen Prinzip. Beim Laden der Seite werden ungestylte Elemente versteckt und nach dem jQuery seinen Zauber hat wirken lassen, zeigt man diese Elemente wieder an. jQuery selbst bietet dafür nicht grundlos eine document.ready-Funktion, die praktisch dafür geschaffen ist. Wir brauchen 2 Zeilen jQuery und 1 Zeile CSS.</p>
<p>Die Javaskript-Frage koppeln wir an die CSS-Regel, die somit nur greift, wenn Javaskript aktiv ist. Dafür schlägt learningJQuery das HTML-Tag vor. Also verpasst man diesem Tag einfach eine neue CSS-Klasse/ID:</p>
<pre>
    $('html').addClass('js');
</pre>
<p>basiert darauf CSS, um das gewünschte Element zu verstecken</p>
<pre>
    .js #zuVersteckendesElement {display: none;}
</pre>
<p>und entfernt die .js-Klasse vom HTML-Tag, wenn das Dokument fertig geladen ist:</p>
<pre>
    $(document).ready(function(){
        $('html').removeClass('js');
    });
</pre>
<p>Was hier passiert ist schnell und einfach beschrieben:</p>
<ol>
<li>Dokument beginnt zu laden</li>
<li>.js-Klasse wird HTML-Tag zugewiesen</li>
<li>CSS-Klasse greift somit und versteckt das gerade geladene Element</li>
<li>Dokument ist fertig geladen und strukturiert</li>
<li>.js-Klasse wird entfernt</li>
<li>Element erscheint auf der Seite</li>
</ol>
<p>Das ist mal wirklich einfach. Kleine Probleme kann es geben, wenn man verschiedene jQuery-Module mit der Lösung kombiniert, was mir im Archiv passiert ist. Hier habe ich etwas rumgedoktort, wie die CSS-Regel aussehen muss, damit das Element versteckt, das jQuery-Tabs aber nicht beeinflusst werden. Abgesehen davon, eine sehr elegante Lösung.</p>        <p>Feedback: <a href="https://www.coldheat.de/2009/03/jquery-flash-of-unstyled-content#respond" title="0 Kommentare">0 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2009/03/jquery-flash-of-unstyled-content/feed</wfw:commentRss>
    <slash:comments>0</slash:comments>
    </item>
    <item>
    <title>Skript zum Einbinden von RSS-Feeds auf Webseiten</title>
    <link>https://www.coldheat.de/2008/03/skript-zum-einbinden-von-rss-feeds-auf-webseiten</link>
    <comments>https://www.coldheat.de/2008/03/skript-zum-einbinden-von-rss-feeds-auf-webseiten#comments</comments>
    <pubDate>Tue, 11 Mar 2008 11:43:24 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Website]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2008/03/skript-zum-einbinden-von-rss-feeds-auf-webseiten.php</guid>
    <description><![CDATA[Meine Link-List auf der Start-Seite bzw. der dazugehörige Feed, sind nichts anderes, als meine Empfehlungen im Google-Reader. Ein Klick im Reader und die Überschriften erscheinen auch hier. Zwar bietet Google dafür extra eine vorgefertigte Lösung, die mir aber zu aufgebläht &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>

    <img src="https://www.coldheat.de/archiv/bilder/entry-thumbs/480/rss.png" 
         class="entrythumb" 
         alt="Skript zum Einbinden von RSS-Feeds auf Webseiten" />

    <p>Meine Link-List auf der Start-Seite bzw. der dazugehörige Feed, sind nichts anderes, als meine Empfehlungen im Google-Reader. Ein Klick im Reader und die Überschriften erscheinen auch hier. Zwar bietet Google dafür extra eine vorgefertigte Lösung, die mir aber zu aufgebläht in der Struktur und insgesamt zu unflexibel ist. Google bietet aber auch eine eigene API zum Sammeln und ausgeben von Feeds auf Webseiten, damals noch einfach Google Feed API genannt, heute schon als Google <a href="http://www.google.com/uds/solutions/dynamicfeed/index.html" title="Google AJAX Feed API">AJAX Feed API</a> betitelt.</p>
<p>Der Zusatz AJAX sorgt für noch aufgeblähteren Quellcode und völlig fehlende Semantik, weshalb ich auch hier wieder einen großen Bogen um die fertigen Lösungen mache und was Eigenes bastle. Es folgt ein kurzes Tutorial zum Javaskript der Feed-Darstellung.</p>
<h3>Inhalte verlinken nicht stehlen</h3>
<p>Nichts gegen die immer beliebter werdenden <a href="http://en.wikipedia.org/wiki/News_aggregator" title="Aggregator">Feed-Aggregatoren</a> &#8211;  Webseiten, die praktisch nur Inhalte anderer Seiten mit Hilfe derer Feeds bei sich darstellen &#8211; ich halte eine solche Praxis für aüßerst fragwürdig. Hier entsteht der Eindruck fremde Inhalte als eigene verkaufen zu wollen. Links zur Quelle hin oder her, falsch bleibt falsch. Komplette Feed-Items sollte man einfach nicht absaugen und einfach so bei sich darstellen, das ist einfach schlechte Schule. Gute Schule dagegen ist ein einfacher Link der Überschrift, hin zur fremden Seite. Nichts anderes bringt das folgende Skript mit.</p>
<h3>warum keine fertige Lösung?</h3>
<p>Fertige Lösungen gibt es zwar viele, aber bei allen bin ich immer irgendwo eingeschränkt. Sei es viel zu komplexer Quellcode, langsame Skript-Performance, oder Grenzen bei der CSS-Gestaltung. Nur bei einer eigenen Lösung ist man alle Probleme los. Hinzu kommt, dass es kinderleicht ist, mit Google&#8217;s APIs zu arbeiten. Was man als erstes benötigt ist ein API-Schlüssel von Google, der sich <a href="http://code.google.com/apis/ajaxfeeds/signup.html" title="" feed api signup>hier</a> holen lässt. Meine Version ist damals noch mit der alten Version dieser API entstanden, gehe aber mal stark davon aus, dass Schlüssel und API abwärtskompatibel sind und somit mein Skript, auch mit neuen Schlüsseln funktioniert.</p>
<p>Dieser API-Schlüssel wird dann auf der jeweiligen Seite, mit einem Skript-Verweis im Head aktiviert:</p>
<pre>
&lt;script type="text/javascript" src="http://www.google.com/jsapi?key=sgj[...]"&gt;&lt;/script&gt;
</pre>
<h3>feed-display.js</h3>
<p>Das <a href="https://www.coldheat.de/archiv/themenseiten/feed-display.js" title="Feed-Display Skript">fertige Skript</a> auf den eigenen Server packen und auf der eigenen Seite, wie schon den API-Schlüssel einbinden:</p>
<pre>
&lt;script type="text/javascript" src="http://www.meinewebsite.de/feed-display.js"&gt;&lt;/script&gt;
</pre>
<p><span id="more-373"></span></p>
<p>Nun kann man mit folgender Syntax munter Feeds auf der eigenen Seite darstellen lassen. Wer zum Beispiel eine Liste mit Links zu den letzten 5 Einträngen dieser Seite, in einer Div mit der id &#8222;cold-heat&#8220; haben möchte, bekommt es mit folgendem Aufruf im HTML:</p>
<pre>
&lt;script type="text/javascript"&gt;
new rssdisplayer("cold-heat", "https://www.coldheat.de/feed", 5, "title")
&lt;/script&gt;
</pre>
<p>Die Ausgabe mit HTML sieht dann wie folgt aus:</p>
<pre>
&lt;div id="cold-heat"&gt;
&lt;ul&gt;
    &lt;li class="blogtitle"&gt;Titel des Blogs&lt;/li&gt;
    &lt;li class="tagline"&gt;Blog-Beschreibung&lt;/li&gt;
    &lt;li&gt;&lt;a title="Titel des Artikels" href="https://www.coldheat.de/..."&gt;Titel des Artikels&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a title="2" href="https://www.coldheat.de/..."&gt;2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a title="3" href="https://www.coldheat.de/..."&gt;3&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a title="4" href="https://www.coldheat.de/..."&gt;4&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a title="5" href="https://www.coldheat.de/..."&gt;5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>Eine einfache valide Struktur, ohne große Schnörkel. Für jeden Feed benötigt man dann einen separaten Aufruf des Skripts. Wer unbedingt die kompletten Inhalte nutzen möchte, sollte sich das Skript genauer anschauen, es beinhaltet alle Zutaten auch komplette Inhalte der Links darzustellen. Die Schlüssel-Zeile ist im Skript ausreichend kommentiert.</p>        <p>Feedback: <a href="https://www.coldheat.de/2008/03/skript-zum-einbinden-von-rss-feeds-auf-webseiten#comments" title="5 Kommentare">5 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2008/03/skript-zum-einbinden-von-rss-feeds-auf-webseiten/feed</wfw:commentRss>
    <slash:comments>5</slash:comments>
    </item>
    <item>
    <title>Google Chart API</title>
    <link>https://www.coldheat.de/2007/12/google-chart-api</link>
    <comments>https://www.coldheat.de/2007/12/google-chart-api#comments</comments>
    <pubDate>Mon, 10 Dec 2007 11:29:03 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Diagramme]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Tutorial]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2007/12/google-chart-api.php</guid>
    <description><![CDATA[Man kann über Google so viel schwarzmalen wie man möchte, aber die immer neuen APIs sind immer wieder einfach besser als die Konkurrenz. Die nun offene <a href="http://code.google.com/apis/chart/" title="Google Chart API">Chart API</a> ist da keine Ausname. Es ist die eierlegende Wollmilchsau geworden. Einst exklusives &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Man kann über Google so viel schwarzmalen wie man möchte, aber die immer neuen APIs sind immer wieder einfach besser als die Konkurrenz. Die nun offene <a href="http://code.google.com/apis/chart/" title="Google Chart API">Chart API</a> ist da keine Ausname. Es ist die eierlegende Wollmilchsau geworden. Einst exklusives internes Tool für Google, steht es nun jedem Anwender offen, sofern man sich mit 50.000 Abfragen pro Tag begnügt.</p>
<p>Für diese Seite sind die Pie-Charts am interessantesten. Nach kurzem Lesen der Instruktionen, bekomme ich aus den alten Daten <a href="https://www.coldheat.de/archiv/2007/08/wow-klassenverteilung-bei-level-70.php" title="" klassenverteilung bei level>dieses Eintrags</a>, sowas heraus:</p>
<p><img decoding="async" class="stdimg" src="http://chart.apis.google.com/chart?cht=p3&#038;chd=s:GIIJKKLMN&#038;chs=590x242&#038;chl=Shaman|Paladin|Druid|Hunter|Warlock|Rogue|Priest|Mage|Warrior&#038;chco=6688ff,ffaaaa,ff9d29,c6ee8c,b58be8,ffeb63,f2f1e8,86d6ff,ba8e4f" alt="Diagramm Klassenverteilung auf Level 70" /></p>
<p>Hierzu ein winziges kurzes Tutorial, das kurz die API erklären soll. Da diese Art von Diagrammen die sicherlich einfachsten der API sind, bietet sich mein Beispiel auch bestens an. Im Gegensatz zu anderen Google APIs braucht man hier keinen API Key, sondern arbeitet einzig und allein mit URLs. Jede URL baut sich aus mehreren Paramentern auf. Fangen wir mal einfach an mit einem einfacherem Diagramm:</p>
<p><img decoding="async" class="stdimg" src="http://chart.apis.google.com/chart?cht=p3&#038;chs=590x242&#038;chd=s:1cs&#038;chl=Label-1|Label-2|Label-3" alt="Muster Diagramm 1" /></p>
<p>Die URL für dieses Diagramm besteht aus 4 Parametern, die durch ein Ampersand-Symbol verbunden, in der URL an das API übergeben werden. Die Parameter hierfür lauten:</p>
<pre>
1. cht=p3
2. chs=468x242
3. chd=s:1cs
4. chl=Label-1|Label-2|Label-3
</pre>
<p>Zeile 1 definiert die Art des Diagramms. Zeile 2 beschreibt die Größe, alle Diagramme werden als normales Bild ausgegeben. Zeile 3 beschreibt die eigentlichen Werte und Zeile 4 schließlich die Beschriftung dieser Werte. Die URL umschreibt also: &#8222;Zeichne ein Diagramm der Art 3D Pie-Chart, in den Maßen 468 Pixel breit und 242 Pixel hoch. Gebe dem Diagramm 3 Werte &#8211; 53, 28, 19 &#8211; und beschrifte diese Werte mit Label-1, Label-2 und Label-3.&#8220; Soweit so einfach.</p>
<p><span id="more-335"></span>
Etwas abstrakter wird es bei der eigentlichen Beschreibung der Werte. Google bietet hier drei Methoden, alle umschreiben eine andere Art der Kodierung. Mein einfaches Beispiel funktioniert mit dem was Google als Simple Encoding betitelt und was der String chs= in der URL einleitet. Hier die Regeln zum Simple Encoding:</p>
<blockquote>
<ul>
<li>Upper case A = 0, B = 1 and so on to Z = 25.</li>
<li>Lower case a = 26, b= 27 and so on to z = 51.</li>
<li>Zero (0) = 52 and so on to 9 = 61.</li>
<li>Specify a missing value with an underscore (_).</li>
<li>If you have more than one set of data, separate each set with a comma (,).</li>
</ul>
</blockquote>
<p>Meine 3 Werte (53, 28, 19) werden in dieser Kodierung also als &#8222;1cs&#8220; beschrieben.</p>
<ul>
<li>1 = 53</li>
<li>c = 28</li>
<li>s = 19</li>
</ul>
<p>Wer diesen Schritt einmal durchschaut hat, der hat das Schlimmste hinter sich. Viel mehr gibt es eigentlich nicht zu schreiben. Diese API ist äußerst einfach für diese simplen Diagramme. Komplexer wird es erst bei anderen Diagramm-Arten.</p>
<p>Neben dem dreidimensionalen Pie-Chart, gibt es natürlich auch die klassische zweidimensionale Variante:</p>
<p><img decoding="async" class="stdimg" src="http://chart.apis.google.com/chart?cht=p&#038;chs=590x242&#038;chd=s:1cs&#038;chl=Label-1|Label-2|Label-3" alt="Muster Diagramm 2" /></p>
<p>Man darf das Ganze auch einfärben. Entweder mit einem Farbwert, welcher dann abgestuft wird:</p>
<p><img decoding="async" class="stdimg" src="http://chart.apis.google.com/chart?cht=p3&#038;chs=590x242&#038;chd=s:1cs&#038;chl=Label-1|Label-2|Label-3&#038;chco=336699" alt="Muster Diagramm 3" /></p>
<p>Oder auch mit je einem separaten Farbwert für die einzelnen Abschnitte:</p>
<p><img decoding="async" class="stdimg" src="http://chart.apis.google.com/chart?cht=p3&#038;chs=590x242&#038;chd=s:1cs&#038;chl=Label-1|Label-2|Label-3&#038;chco=336699,fed42a,d11400" alt="Muster Diagramm 4" /></p>
<p>Kann nur jedem empfehlen sich die API mal näher anzuschauen. Glaube da wird man hier bei mir in Zukunft mehr von sehen. Daumen hoch für Google&#8217;s <a href="http://code.google.com/apis/chart/" title="Google Chart API">Chart API</a>. Kleines aber feines Detail am Rande: Läd man eine dieser URLs für sich separat, dann ist das Favicon im Browser auch wirklich eine verkleinerte Ansicht des jeweiligen Diagramms.</p>        <p>Feedback: <a href="https://www.coldheat.de/2007/12/google-chart-api#comments" title="1 Kommentar">1 Kommentar</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2007/12/google-chart-api/feed</wfw:commentRss>
    <slash:comments>1</slash:comments>
    </item>
    <item>
    <title>Diagramme im Web &#8211; zweiter Teil</title>
    <link>https://www.coldheat.de/2007/05/diagramme-im-web-zweiter-teil</link>
    <comments>https://www.coldheat.de/2007/05/diagramme-im-web-zweiter-teil#respond</comments>
    <pubDate>Tue, 29 May 2007 10:11:39 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Diagramme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Webstandards]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2007/05/diagramme-im-web-zweiter-teil.php</guid>
    <description><![CDATA[Ich mach es kurz für heute. Was wir hier sehen ist ein 100% freiskalierbares Balkendiagramm, mit leicht geänderter Ausrichtung als das letzte. Was hier so einfach aussieht, hat diesmal wirklich etwas mehr Zeit in Anspruch genommen, dank einer nicht wirklich &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Ich mach es kurz für heute. Was wir hier sehen ist ein 100% freiskalierbares Balkendiagramm, mit leicht geänderter Ausrichtung als das letzte. Was hier so einfach aussieht, hat diesmal wirklich etwas mehr Zeit in Anspruch genommen, dank einer nicht wirklich funktionierenden vertikalen Ausrichtung bei CSS-Formaten.</p>
<dl class="data-2">
<dt><span>Wert 1</span></dt>
<dd style="height:54%;"><span>46%</span></dd>

<dt><span>Wert 2</span></dt>
<dd style="height:76%;"><span>24%</span></dd>

<dt><span>Wert 3</span></dt>
<dd style="height:11%;"><span>89%</span></dd>

<dt><span>Wert 4</span></dt>
<dd style="height:38%;"><span>62%</span></dd>

<dt><span>Wert 5</span></dt>
<dd style="height:71%;"><span>29%</span></dd>
</dl>
<p>Ich bin zufrieden mit dem Ergebnis. Leider ist das Markup diesmal etwas komplizierter geworden, primär eben weil im CSS schlecht bis garnicht vertikal zu positionieren ist. Problem war, dass ich mit CSS nur sehr schwer an einer Grundlinie (in diesem Falle der Definitionsliste) ausrichten kann, die Balken in dieser Art Diagramm aber eben nach oben wachsen sollen und nicht nach unten. Der Trick besteht diesmal darin, dass was optisch als Balken wahrgenommen wird, nicht auf dem eigentlich Wert der Liste zu legen. Was hier als Balken gesehen wird, ist das Ergebnis von überlagertem dt und dd-Tag der Definitionsliste.</p>
<p class="side-caption">Grafik zum besseren Verständnis vom Markup des Diagramms</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/diagramm-2.png" height="159" alt="Markup-Grafik Balkendiagramm"/></p>
<p>Die Farbe des Balken bringt also diesmal das dt-Tag und das dd-Tag deckt dieses ab. Um nun den darzustellenden Wert zu erzielen bekommt das dd-Tag diesmal eine Höhe, welche 100% minus des darzustellenden Wertes entspricht. Im Quellcode sieht das dann so aus:</p>
<p><span id="more-298"></span></p>
<pre>
&lt;dt&gt;Wert 4&lt;/dt&gt;
&lt;dd style="height:38%;"&gt;62%&lt;/dd&gt;
</pre>
<p>Zwar erscheint nun mit passendem CSS der Balken, aber die einzelnen Werte und die Bezeichnung sind noch deplaziert. Hier kommt nun zusätzliches Markup in Form von span-Tags hinzu. Leider habe ich keine andere Lösung gefunden, die völlige Skalierbarkeit garantiert, aber dazu gleich mehr. Der Quellcode samt span-Tags sieht dann so aus.</p>
<pre>
&lt;dt&gt;&lt;span&gt;Wert 4&lt;/span&gt;&lt;/dt&gt;
&lt;dd style="height:38%;"&gt;&lt;span&gt;62%&lt;/span&gt;&lt;/dd&gt;
</pre>
<h3>span</h3>
<p>Die span-Tags nutze ich nun um die Werte dank z-index nach vorn zu holen und an die richtige vertikale Stelle zu schieben. Positionierung und Bemaßung dieses Diagramms findet nur mit Prozent-Werten statt, was eben den Vorteil hat, dass ich später die Liste insgesamt (dl-Tag) egal wie bemaßen kann und der Inhalt sich immer perfekt anpasst, egal ob das Diagramm 200 oder 2000 Pixel hoch/breit sein soll, alles passt sich automatisch an. Wer hier liesst wird sich sicherlich rudimentär mit CSS auskennen. Vertikale Anpassung ist in dem Fall kein Problem. Anspruchsvoller dagegen die Horizontale, da sich eben auch die Anzahl der Balken ändert. Es gibt ein paar Schlüsselwerte:</p>
<pre>
.content dl.data-2 dt,
.content dl.data-2 dd {
width:12%;
}
.content dl.data-2 dd {
margin:0 0 0 -12%;
}
.content dl.data-2 dt {
margin:0 0 0 4.7%;
}
</pre>
<p>Die 12% entsprechen jeweils der Breite und dem negativen Margin beide Elemente der Liste. Die 4.7% sind der horizontale Abstand zwischen den Balken des Diagramms. Ich wünschte ich könnte eine schöne mathematische Herleitung des Wertes bringen, aber irgendwie ist diese bei der Arbeit am Diagramm verloren gegangen.</p>
<p>Wichtig ist dennoch, dass man grundlegend zählen sollte wieviele Werte darzustellen sind, das ganze verdoppeln, Wert notieren und die 100% durch Wert-X teilen. Somit bekommt man einen recht guten Wert für die Breite der Balken. Die 100% ergeben dann jeweils X-Anzahl Balken und X-Anzahl Zwischenräume. In meinem Beispiel 5<em>12+5</em>4.7=83,5. Wie man sieht habe ich in meinem Beispiel noch etwas Luft nach oben.</p>
<h3>Vor- und Nachteile</h3>
<p>Problematisch hierbei ist eine Verteilung der Stildefinitionen auf CSS und Inline-Elemente. Dadurch erhält man bei wechselnenden Wertemengen auch immer jeweils separate CSS-Klassen bzw. IDs. Jedes Diagramm bekäme sein eigenes CSS-Format, was eigentlich dem Sinn von CSS etwas verfremdet.</p>
<p>Dem gegenüber steht jedoch eine Darstellung von Diagramm-Werten, die auch ohne CSS erschließbar bleiben und sich leicht für jedes andere Medium formatieren lassen.</p>        <p>Feedback: <a href="https://www.coldheat.de/2007/05/diagramme-im-web-zweiter-teil#respond" title="0 Kommentare">0 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2007/05/diagramme-im-web-zweiter-teil/feed</wfw:commentRss>
    <slash:comments>0</slash:comments>
    </item>
    <item>
    <title>Balken-Diagramme im Web-Design</title>
    <link>https://www.coldheat.de/2007/04/balkendiagramme-im-webdesign</link>
    <comments>https://www.coldheat.de/2007/04/balkendiagramme-im-webdesign#comments</comments>
    <pubDate>Thu, 26 Apr 2007 15:52:20 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Diagramme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Webstandards]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2007/04/balken-diagramme-im-web-design.php</guid>
    <description><![CDATA[Reine Neugier, ein entstehender Eintrag zu WoW und viele schlechte fremde Beispiele, sind Grund für das folgende kleine Tutorial. Diagramme im Web reduzieren sich zu 90% auf hübsch gemachte Bild-Daten. Meist hochkompromierte Jpegs aus höchstkomplizierten Excel-Diagrammen. Solche Daten sind zum &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Reine Neugier, ein entstehender Eintrag zu WoW und viele schlechte fremde Beispiele, sind Grund für das folgende kleine Tutorial. Diagramme im Web reduzieren sich zu 90% auf hübsch gemachte Bild-Daten. Meist hochkompromierte Jpegs aus höchstkomplizierten Excel-Diagrammen. Solche Daten sind zum einen langweilig und zum anderen nicht wirklich barierefrei zugänglich. Das möchte ich nun hiermit ändern.</p>
<p>Ich gebe zu, dass ich hier mit dem Titel <em>Diagramme</em> einen Bruchteil aller möglichen Diagramm-Arten verarbeite: Balkendiagramme. Der Grund ist simpel. Zum einen deckt man mit dieser Art fast alle möglichen darzustellenden Daten ab und diese Art eignet sich perfekt, um sie einfach, sauber und dennoch ansehnlich mit HTML und CSS darzustellen.</p>
<h3>Struktur</h3>
<p>Die erste wichtige Frage lautet, wie baue ich ein Balken-Diagramm inhaltlich korrekt, zugänglich und valide auf, um es anschließend möglichst variabel mit CSS zu stylen?</p>
<p>Optisch sehr gelungen sind für meinen Geschmack, Diagramme auf den Produkt-Seiten von Apple. Ein Augenschmauß, der seine Schwächen im HTML versteckt. Nehmen wir <a href="http://www.apple.com/macpro/performance.html" title="Apple MacPro">dieses Beispiel</a>. Wer in den Quellcode schaut, entdeckt Gutes und Schlechtes. Apple&#8217;s Webdesigner strukturieren hier ausladend mit Div- und span-Elementen innerhalb einer Definitions-Liste. Andere Lösungen für Diagramme setzten ebenfalls auf komplizierte Span-Div-Gebilde oder auch die immer beliebten normalen Listen.</p>
<p class="side-caption">Beispiel für die Anwendung von Diagrammen im Web: Apple Produkseite <a href="http://www.apple.com/macpro/performance.html" title="Apple MacPro">zum MacPro</a></p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/apple-css-graph.png" alt="Screenshot - Apple Performance Diagramm"/></p>
<p>Wer hier öfters liest, wird mitbekommen haben, dass ich immer für möglichst einfache und effektive Lösungen bin. Zwar ist mein Beispiel sicherlich schon zu einfach, aber es zeigt hoffentlich die grundlegende Herangehensweise. Meine Wahl für die HTML-Struktur eines solchen Diagramms fällt wie auch bei Apple auf eine Definitions-Liste.</p>
<p><span id="more-294"></span>
Fraglich ist, ob eine solche Liste inhatlich auch korrekt für diese Art der Daten ist. Für meinen Geschmack ist es das geeignetste Element zur Darstellung von Diagramm-Daten. Inhatlich hat man einen Namen samt Wert und diese Zuordnung ist auch vom W3C <a href="http://www.w3.org/TR/html401/struct/lists.html#h-10.3" title="W3C - Definition Lists">ausdrücklich gestattet</a>.</p>
<blockquote>
<p>Definition lists vary only slightly from other types of lists in that list items consist of two parts: a term and a description. The term is given by the DT element and is restricted to inline content. The description is given with a DD element that contains block-level content.</p>
<p>[&#8230;]</p>
<p>Another application of DL, for example, is for marking up dialogues, with each DT naming a speaker, and each DD containing his or her words.</p>
</blockquote>
<p>Solch eine Definitionsliste hat zwei wesentliche Vorteile: sie bietet sowohl von in Struktur als auch vom Inhalt, zwei zusammengehörige Tags: dt und dd. Für ein solches Balkendiagramm deshalb perfekt geeignet, um jeweils den Namen und Wert der darzustellenden Daten zu tragen.</p>
<pre>
&lt;dl class="data-1"&gt;
&lt;dt&gt;Wert 1&lt;/dt&gt;
&lt;dd&gt;46%&lt;/dd&gt;

&lt;dt&gt;Wert 2&lt;/dt&gt;
&lt;dd&gt;24%&lt;/dd&gt;

&lt;dt&gt;Wert 3&lt;/dt&gt;
&lt;dd&gt;89%&lt;/dd&gt;

&lt;dt&gt;Wert 4&lt;/dt&gt;
&lt;dd&gt;62%&lt;/dd&gt;

&lt;dt&gt;Wert 5&lt;/dt&gt;
&lt;dd&gt;29%&lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p>Viel einfacher kann man solche Daten sicherlich nicht mit HTML umsetzen. Mit solch einer Struktur habe ich erstmal alles was ich brauche: eine dl-Liste samt einer Klasse und jeweils passenden dl- und dd-Tags. Spans und Divs sind erstmal überflüssig, was nicht überflüssig ist, sind noch ein paar zusätzliche style-Definitionen innerhalb der dd-Tags, da diese später den eigentlichen Balken darstellen sollen.</p>
<pre>
&lt;dl class="data-1"&gt;
&lt;dt&gt;Wert 1&lt;/dt&gt;
&lt;dd style="width:46%;"&gt;46%&lt;/dd&gt;

&lt;dt&gt;Wert 2&lt;/dt&gt;
&lt;dd style="width:24%;"&gt;24%&lt;/dd&gt;

&lt;dt&gt;Wert 3&lt;/dt&gt;
&lt;dd style="width:89%;"&gt;89%&lt;/dd&gt;

&lt;dt&gt;Wert 4&lt;/dt&gt;
&lt;dd style="width:62%;"&gt;62%&lt;/dd&gt;

&lt;dt&gt;Wert 5&lt;/dt&gt;
&lt;dd style="width:29%;"&gt;29%&lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p>Ein so einfache Stuktur lässt sich besonders auch ohne CSS ohne Bilder oder sonstiges sinnvoll auswerten, jeder Wert besitzt eine eigene Angabe. Wir nennen sowas barierefrei. Diese Informationen funktionieren schon jetzt, was fehlt ist nur noch eine bessere Visualisierung. Hier kommt wie immer CSS ins Spiel.</p>
<h3>CSS</h3>
<p>Auch das CSS ist wirklich einfach gestrikt. Ich definiere eine Breite für das DL-Tag, floate anschließend sowohl dt- als auch dd-Tags, lasse dt-Tag den Float clearen und verpasse beiden dann etwas Farbe und Kante. Zur besseren Übersicht hier jeweils nur die wichtigsten CSS-Zeilen:</p>
<pre>
dl.data-1 {
margin:20px 20px 10px 20px;
overflow:auto;
}
dl.data-1 dt {
border-right:0;
height:18px;
clear:left;
float:left;
text-align:center;
width:15%;
}
dl.data-1 dd {
text-align:center;
font-weight:bold;
float:left;
clear:none;
height:18px;
}
</pre>
<p>Da entsteht nun ein kleines Problem, sofern ich mein dt-Tag direkt neben dem dd- floaten möchte. Das dt-Tag braucht zum Floaten eine feste Breite, die dd-Tags daneben varieren aber in der Breite, durch die inline-style-Definitionen aus dem Schritt zuvor. Es gilt nun eine Lösung zu finden, die dem dt-Tag eine fixe Breite ermöglicht, ohne jedoch über die 100% der Gesamtbreite der Liste zu stossen. Angenommen ich gebe den dt-Tags eine feste Breite von 20%, dann habe ich ein Problem mit dem 3ten Wert im Diagramm, welches eine Breite von 89% darstellen soll. 20% + 89% = 109%. Ups.</p>
<p>An dieser Stelle lobe ich mir, dass zumindestens ein paar Dinge aus dem guten alten furchtbaren Mathematik-Unterricht hängen geblieben sind. Die Lösung besteht darin, der style-Breite den Wert der dt-Breite abzuziehen und schon kommen wir wieder auf die maximalen 100%. Angenommen ich möchte dem dt-Tag eine Breite von 15% geben, dann ändern sich die style-Werte wie folgt:</p>
<pre>
&lt;dl class="data-1"&gt;
&lt;dt&gt;Wert 1&lt;/dt&gt;
&lt;dd style="width:31%;"&gt;46%&lt;/dd&gt;

&lt;dt&gt;Wert 2&lt;/dt&gt;
&lt;dd style="width:9%;"&gt;24%&lt;/dd&gt;

&lt;dt&gt;Wert 3&lt;/dt&gt;
&lt;dd style="width:74%;"&gt;89%&lt;/dd&gt;

&lt;dt&gt;Wert 4&lt;/dt&gt;
&lt;dd style="width:47%;"&gt;62%&lt;/dd&gt;

&lt;dt&gt;Wert 5&lt;/dt&gt;
&lt;dd style="width:14%;"&gt;29%&lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p>dt- und dd-Tag besitzen nun zusammen die endgültige Breite, des darzustellenden Wertes. Der Rest ist ein kleiner farblicher Anstrich.</p>
<h3>Beispiel Diagramm</h3>
<dl class="data-1">
<dt>Wert 1</dt>
<dd style="width:31%;">46%</dd>

<dt>Wert 2</dt>
<dd style="width:9%;">24%</dd>

<dt>Wert 3</dt>
<dd style="width:74%;">89%</dd>

<dt>Wert 4</dt>
<dd style="width:47%;">62%</dd>

<dt>Wert 5</dt>
<dd style="width:14%;">29%</dd>
</dl>
<p>Zugegeben dieses Diagramm besitzt ein paar Einschränkungen, die in einem zweiten Teil hierzu behandelt werden. Was ich hier zeigen wollte war die Einfachheit von Balken-Diagrammen mit validem HTML und CSS, ohne aufgeblähte Struktur oder gar Grafiken. Das Thema bietet noch viel mehr&#8230; deshalb bis zum zweiten Teil.</p>        <p>Feedback: <a href="https://www.coldheat.de/2007/04/balkendiagramme-im-webdesign#comments" title="14 Kommentare">14 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2007/04/balkendiagramme-im-webdesign/feed</wfw:commentRss>
    <slash:comments>14</slash:comments>
    </item>
    <item>
    <title>1024.2 &#8211; Tanz auf dem Raster</title>
    <link>https://www.coldheat.de/2007/04/10242-tanz-auf-dem-raster</link>
    <comments>https://www.coldheat.de/2007/04/10242-tanz-auf-dem-raster#comments</comments>
    <pubDate>Tue, 10 Apr 2007 15:52:46 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Raster]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Website]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2007/04/10242-tanz-auf-dem-raster.php</guid>
    <description><![CDATA[Eigentlich sollten die wertvollen Osterfeiertage auch genutzt werden um die neue Gestaltung hier einen Schritt vorran zu bringen, aber wieso oft blieb vom guten Vorsatz nicht viel übrig. Statt dessen kämpften DVDs und ein paar <a href="http://www.nintendo.com/systemsds" title="Nintendo DS">DS</a>-Spiele um meine Aufmerksamkeit. &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Eigentlich sollten die wertvollen Osterfeiertage auch genutzt werden um die neue Gestaltung hier einen Schritt vorran zu bringen, aber wieso oft blieb vom guten Vorsatz nicht viel übrig. Statt dessen kämpften DVDs und ein paar <a href="http://www.nintendo.com/systemsds" title="Nintendo DS">DS</a>-Spiele um meine Aufmerksamkeit. Besonders dieses <a href="http://www.imdb.com/title/tt0083866/" title="E.T.">teuflische Filmwerk</a> hat seine Spuren hinterlassen. Ich habe <em>E.T.</em> nun seit ein paar Jahren nicht mehr gesehen und hoffte der Film hätte seine Wirkung verloren, aber falsch gedacht. E.T. ist bei mir wie auf Knöpfe drücken mit dem Ergebnis nasser Augen. Ich liebe und hasse diesen Film dafür, wird Zeit für ein E.T.-Eintrag samt Kindheits-Erinnerungen zum ersten Kino-Besuch meines Lebens. Aber genug dazu&#8230;</p>
<p>Als nachträgliche Erleuterung zum ersten Teil noch ein paar Details zum neuen/alten Grundraster. Wirklich viel verändert hat sich nicht, d.h. die grundsätzlichen Maße bleiben alle bestehen. Hier nochmal die Illustration vom alten Tutorial:</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/tutorials/html-raster/teil-2/infografik-752-raster.png" alt="Infografik: Raster-Maße"/></p>
<p>Neu hinzugekommen ist eine vierte &#8222;große&#8220; Spalte bzw. eine zusätzliche Teilung der alten Spalten in neue Kleinere. Warum? Einfach um etwas mehr Freiheit bei der Anordnung auf dem Raster zu erhalten, mal schauen wieviel Spielraum ich habe:</p>
<p><span id="more-292"></span></p>
<p class="side-caption">Das erweiterte Raster ist nun feiner und insgesamt breiter.</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/1024/raster-neu.jpg" alt="Infografik: neue Raster-Maße"/></p>
<p>Das Problem mit zusätzlichem Platz ist eine sinnvolle Nutzung. Nicht jeder Inhalt funktioniert plötzlich auf mehr Raum besser. Ich hatte nie wirklich Probleme mit der noch aktuellen schmalen Breite der Seite. Im Gegenteil, es sitzt alles so optimiert an seinem Platz, dass es schwer ist nun eine neue Ordnung hinein zu bringen.</p>
<p>Die Idee war, die zusätzliche Breite auch auf den jeweiligen Inhalt &#8211; und somit primär den Text-Blöcken &#8211; zu nutzen. Die Breite eines Text-Blocks ist jedoch eine sehr sensible Eigenschaft. Ich möchte mich zwar nicht selbst loben, aber die Lesbarkeit dieser Seite ist wirklich gut und die Breite der Text-Blöcke ist daran nicht unschuldig. Dennoch lohnt es sich immer zu Testen. Dank CSS eine Frage von wenigen Minuten.</p>
<p class="side-caption">Zum Vergleich zwei Möglichkeiten Text und Bild auf der Seite neu anzuordnen.</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/1024/v5-5-textbreite.jpg" alt="Infografik: Vergleich Text-Breite"/></p>
<p>Diese Grafik zeigt zwei Versuche irgendwie sinnvoll die neuen Maße des Raster zu nutzen. Jeweils Rot markiert, Bereiche die ich für problematisch halte, wo optisch eine Unruhe oder ein Loch entsteht, genau was ich mit einem Raster vermeiden möchte.</p>
<p>Auf der linken Seite, nutze ich die volle neue zusätzliche Breite, auf der rechten Seite hat sich praktisch im Vergleich zum jetzigen Stand nichts verändert. Links geht Lesbarkeit und Ruhe abhanden, Rechts dagegen wirkt die Seite stark ungleichgewichtig, besonders im oberen Teil. Der logische Schritt wäre also eine Mischung aus beiden Lösungen.</p>
<h3>weniger ist mal wieder mehr</h3>
<p><img decoding="async" class="floatright" src="https://www.coldheat.de/archiv/bilder/1024/v5-5-textbreite-2.jpg" alt="Infografik: neues Layout">Allein schon an der Anzahl und Größe der optischen Probleme dieses Layouts scheint dies die beste Lösung bisher zu sein. Ich kann nur jedem Empfehlen auch im Webdesign mal &#8222;Abstand&#8220; von dem Layout zu nehmen. Ich habe hier einfach mal Screenshots der Seiten verkleinert und plötzlich kommen Schwächen ans Licht, die man bei der normalen Bildschirm-Betrachtung oft sehr spät entdeckt.</p>
<p>Alle obskuren Versuche, mit der Brechstange die Inhalte in die Breite zu ziehen, verursachen mehr Schaden als Verbesserungen. Die Gestaltung fühlt sich einfach nicht mehr so ausgeglichen an. Sicherlich mögen die Seiten insgesamt dann kürzer werden und wir bekommen ja auch an jeder Ecke gesagt, dass Scrolling schlecht sei. Noch schlechter sind allerdings miese Lesbarkeit und optische Unruhe. Ich opfere gern Seitenlänge und zwinge zum Scrollen, wenn dafür das Verständnis für den Inhalt steigt.</p>
<p>Ein <a href="https://www.coldheat.de/test.php" title="Test-Seite">aktueller Stand</a> zeigt zusätzlich ein paar veränderte Details. So ist meine Spalte für Marginalien/Bildunterschriften und Überschriften erstmal auf die Hälfte geschrumpft. Daraus resultiert auch, dass ich die Text-Ausrichtung ändern kann, weil ich nun kaum viel Weißraum zum Text überspielen muss wie jetzt vielleicht noch. Eine rechte Textausrichtung macht plötzlich wenig Sinn. Ob die kleinen Überschriften weiterhin so links fließen werden sei mal noch dahingestellt. 102 Pixel sind verdammt wenig, vermutlich rücken die Zwischenüberschriften somit noch klassisch in die eigentliche Text-Spalte hinein.</p>
<p>So wie momentan die eigentlichen Inhalte auf der Seite stehen, bin ich wirklich zufrieden damit. Der visuelle Rhythmus stimmt sowohl vertikal als auch horizontal, zumindestens beim eigentlichen Eintrags-Inhalt. Drumherum herrscht noch Chaos, aber das wird in den kommenden Tagen beseitigt.</p>        <p>Feedback: <a href="https://www.coldheat.de/2007/04/10242-tanz-auf-dem-raster#comments" title="2 Kommentare">2 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2007/04/10242-tanz-auf-dem-raster/feed</wfw:commentRss>
    <slash:comments>2</slash:comments>
    </item>
    <item>
    <title>1024.1 &#8211; Dokumentation zur neuen Gestaltung</title>
    <link>https://www.coldheat.de/2007/04/10241-dokumentation-zur-neuen-gestaltung</link>
    <comments>https://www.coldheat.de/2007/04/10241-dokumentation-zur-neuen-gestaltung#comments</comments>
    <pubDate>Thu, 05 Apr 2007 09:54:34 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Raster]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Website]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2007/04/10241-dokumentation-zur-neuen-gestaltung.php</guid>
    <description><![CDATA[Was <a href="https://www.coldheat.de/archiv/2007/03/1024-pixel.php" title="1024 Pixel">hier</a> schonmal Erwähnung fand und die rätselhafte Bezeichnung <em>1024.1</em> trägt, ist eine Artikel-Serie für die nächsten paar Wochen, mit dem Ziel, dieser Seite einen kleinen neuen Anstrich zu verpassen. Dies ist also der erste Teil, auf dem Weg zu &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Was <a href="https://www.coldheat.de/archiv/2007/03/1024-pixel.php" title="1024 Pixel">hier</a> schonmal Erwähnung fand und die rätselhafte Bezeichnung <em>1024.1</em> trägt, ist eine Artikel-Serie für die nächsten paar Wochen, mit dem Ziel, dieser Seite einen kleinen neuen Anstrich zu verpassen. Dies ist also der erste Teil, auf dem Weg zu einem funktionierenden 1024 Pixel breitem Webdesign. 1024.1 halt.</p>
<p>Das Ganze fing so simpel an und entwickelt sich langsam zu echten Herausforderung. Die Idee war recht einfach, eine zusätzliche Spalter für das Grundraster, dort hinein die üblichen Randspalten-Daten des Blogs und fertig. Nun daraus ist nun offensichtlich mehr geworden. Das <a href="http://coldheat.de/archiv/000233tutorial_gestaltungsraster_im_webdesign.html" title="Gestaltungsraster im Webdesign">Raster</a> hat sich verändert bzw. ist feiner geworden und damit kommen die Probleme.</p>
<p>Im Gegensatz zu vielen anderen gebe ich hier offen zu woran ich mir bei der Gestaltung so orientiere. Die <em>Times</em> (also das Printmagazin <em>Times</em>) hat neulich ein Redesign auf die Beine gestellt, was einfach gnadenlos gut funktioniert. Wer die Chance hat sollte mal einen Blick riskieren. Es gibt es einen kurzen <a href="http://blog.pentagram.com/archives/2007/03/new_work_time_magazine.php" title="Times Redesign">Online-Artikel</a> drüber.</p>
<p><span id="more-291"></span></p>
<h3>mehr Platz, mehr Probleme</h3>
<p>Statt einfach eine neue Spalte reinzuknallen versuche ich die Seite insgesamt harmonischer in die Breite wachsen zu lassen. Dabei ergeben sich immer wieder neue Lücken, die es zu füllen gilt. So zum Beispiel wird das Formular für die Kommentare auch neu angeordnet werden müssen:</p>
<p class="side-caption">Layout Kommentar-Eingabe</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/wip-version-5-5.png" alt="Layout Kommentar-Eingabe"/></p>
<p>Lässt sich das Formular noch relativ einfach auf das neue Raster legen, so fällt dies bei anderen Elementen schwerer. Was den Kopf der Einträge angeht, so werde ich hier noch mehr vereinfachen. Zur Zeit gibt es noch viele Einschränkungen für mich. Es gibt einen Grund wieso ich keine großen Bilder zu Beginn eines Eintrags integrieren kann, weil diese Bilder mit den Rand-Informationen an gleicher Stelle überlagern würden. Dies ist der aktuelle Stand des neuen Seiten-Kopfes eines Eintrags:</p>
<p class="side-caption">Layout Seiten-Kopf</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/wip-version-5-5-2.png" alt="Layout Seiten-Kopf"/></p>
<p>Ein offensichtliches Problem entsteht dann, wenn das Grundraster ausgeblendet ist, denn dann findet das Auge eine unansehnliche optische Lücke zwischen den Randinformationen und dem eigentlichen Mittel-Teil. Die Idee war nun, die Breite für Texte und Bilder eines Eintrags ein klein wenig zu erhöhen und so die Lücke zu schließen. Was gut klingt funktioniert nur teilweise sehr gut, denn ich habe ich mich nun was die Bilder betrifft auf eine Größe festgelegt, genau so breit wie der Text-Block. Wenn ich diesen nich breiter angelege passen die Bilder nicht mehr.</p>
<p class="side-caption">Wenn der Text breiter läuft als bisher kommt es zu Problemen.</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/wip-version-5-5-4.png" alt="Problem Bilderbreite"/></p>
<p>Andererseits funktioniert es, wenn die gleichen Bilder eine Bildunterschrift besitzen:</p>
<p><img decoding="async" class="smlimg" src="https://www.coldheat.de/archiv/bilder/wip-version-5-5-3.png" alt="Problem Bilderbreite"/></p>
<p>Genau an dieser Stelle hänge ich nun fest. Ich fürchte auch dieses Problem so schnell nicht lösen zu können. Vermutlich wird trotz eines breiteren Layouts, die Breite der Eintragsinhalte gleich bleiben. Es gäbe zwar Lösungen, aber die wären alle zu umständlich und unflexibel für meinen Geschmack. Irgendwie habe ich mir die Sache einfacher vorgestellt, diese zusaätzlichen Pixel bringen mehr Arbeit mit sich, als ich dachte.</p>        <p>Feedback: <a href="https://www.coldheat.de/2007/04/10241-dokumentation-zur-neuen-gestaltung#comments" title="13 Kommentare">13 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2007/04/10241-dokumentation-zur-neuen-gestaltung/feed</wfw:commentRss>
    <slash:comments>13</slash:comments>
    </item>
    <item>
    <title>Lightbox-Skript bei AJAX-Inhalten</title>
    <link>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten</link>
    <comments>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten#comments</comments>
    <pubDate>Tue, 07 Nov 2006 14:25:56 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Tutorial]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2006/11/lightbox-skript-bei-ajax-inhalten.php</guid>
    <description><![CDATA[Ich bin immer noch am Rumwerkeln meines Online-Portfolios, nun allerdings nähert sich das Ganze zumindestens funktional der Fertigstellung oder einfach formuliert: es funzt alles. Was hat diese Geschichte nun so kompliziert gemacht?
Das Portfolio ist ein separater Blog in der &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Ich bin immer noch am Rumwerkeln meines Online-Portfolios, nun allerdings nähert sich das Ganze zumindestens funktional der Fertigstellung oder einfach formuliert: es funzt alles. Was hat diese Geschichte nun so kompliziert gemacht?</p>
<p>Das Portfolio ist ein separater Blog in der gleichen Movable-Type Installation wie auch der Hauptblog hier oder der <a href="https://www.coldheat.de/linkblog/" title="Quicklinks">Linkblog</a>. Mein Wunsch war es, so möglichst einfach das Portfolio verwalten zu können, ohne groß manuell neue Links setzen zu müssen, so wie bei der jetzigen Galerie.</p>
<p>Schreibe ich nun einen neuen Eintrag in den Portfolio-Blog, dann werden auch die Archive dieses separaten Blogs aktualisiert. Diese Archive hole ich mir dann mit Hilfe von AJAX in den Hauptblog hier. Dank Movable-Type kann ich das Portfolio sogar sehr einfach nach Kategorien verwalten und mit genau diesen Kategorie-Archiven arbeitet die Hauptseite.</p>
<p>Klickt der Besucher dann zum Beispiel den Link <em>Non-Print</em>, dann holt sich die Seite das Kategorie-Archiv <em>Non-Print</em> vom Portfolio-Blog und lädt es in die aktuelle Seite des Browsers. Soweit nicht allzu kompliziert. Probleme kamen, als ich das <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a>-Skript zum Vergrößern der Portfolio-Bilder nutzen wollten.</p>
<p><a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> initialisiert sich beim Laden der Seite im Browser und kann dann genau mit den Inhalten arbeiten, die zu dieser Zeit vorhanden sind. Wenn ich nun mit AJAX die Kategorie-Archive in die Seite lade, dann ändern sich die Inhalte, aber <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> bekommt davon nichts mit und kann somit nicht damit arbeiten. Ein paar Google-Suchen später, brachten <a href="http://www.dynamicdrive.com/forums/archive/index.php/t-11098.html" title="dynamicdrive.com/forums">zwei</a> <a href="http://www.dynamicdrive.com/forums/showthread.php?t=13003" title="dynamicdrive.com/forums">Links</a> Licht ins Dunkel, denn so gut sind meine Javaskript-Kenntnisse dann auch nicht, um so ein Ding zu lösen.</p>
<p><span id="more-253"></span>
Folgende Funktion wird zusätzlich in die Seite eingefügt, die auch die AJAX-Links beinhaltet:</p>
<pre>
function pollC(id, load){
if (!load&amp;&amp;document.getElementById(id)){
document.getElementById(id).id='';
return;
}
else if (load&amp;&amp;document.getElementById(id)){
if (id=='loadedmarker')  //optional
initLightbox();  //required
return;
}
else if (load&amp;&amp;!document.getElementById(id))
setTimeout("pollC('"+id+"', 'load')", 60);
}
</pre>
<p>Entscheidend bzw. anzupassen ist Zeile 7. Man muss Lightbox dann neu initialisieren, wenn der HTML-Code der Kategorie-Archive dank AJAX in die Seite integriert wurde, so dass Lightbox, denn Code neu parsen kann und so die Stellen findet, wo es gebraucht wird.</p>
<p>Um zu wissen, wann alle Inhalte geladen sind braucht es eine Art Markierung. Dieser Marker &#8211; ein einfaches &lt;span id=&#8220;loadedmarker&#8220;&gt;&lt;/span&gt; &#8211; befindet sich ganz am Ende vom Template des Kategoriearchivs:</p>
<pre>
&lt;MTEntries&gt;
&lt;hr/&gt;

&lt;$MTEntryBody safe_urls="1"$&gt;
&lt;h2 id="a&lt;$MTEntryID pad="1"$&gt;"&gt;&lt;$MTEntryTitle$&gt;&lt;/h2&gt;
&lt;$MTEntryMore safe_urls="1"$&gt;
&lt;/MTEntries&gt;

&lt;span id="loadedmarker"&gt;&lt;/span&gt;
</pre>
<p>Wenn also alle richtigen Inhalte geladen sind, sieht dieses Poll-Skript den Marker und initialisiert Lightbox neu.</p>
<p>Nun funktioniert Lightbox zwar, aber nur auf den ersten Blick. Lade ich die gleiche Seite ein zweites Mal mit AJAX, dann <em>erinnert</em> sich das Poll-Skript daran und intialisiert Lightbox nicht mehr. Einfach ausgedrückt muss Lightbox jedes mal neu intialisiert werden, wenn sich der Inhalt ändert. Ob die Inhalte bereits vorher cached wurden oder nicht, spielt keine Rolle. Lightbox braucht aktuell für jede Änderungen des HTML-Code eine neue Intialisierung. Dieses Problem löst das Poll-Skript indem es zusätzlich alte, bereits einmal gelandene IDs löscht.</p>
<p>Die eigentliche AJAX-Links, die den Ablauf dann auslösen werden somit etwas länger:</p>
<pre>
&lt;a href="javascript://" onmousedown="pollC('loadedmarker')"
onmouseup="getMyHTML('../portfolio/archiv/category/nonprint',
'ajax-container');pollC('loadedmarker', 'load')"&gt;Non-Print&lt;/a&gt;
</pre>
<p>Bei onmousedown löscht er die Marker-ID bzw. setzt den Status auf <em>unbekannt</em>, um wirklich jedesmal neu zu intialisieren. Bei onmouseup werden die externen Inhalte in das Div mit der ID <em>ajax-container</em> geladen um darin den Marker &#8211; das span mit der <em>loadedmarker</em> &#8211; zu finden und den Status auf geladen zu setzen, woraufhin Lightbox neu initialisiert wird. Aufwendiger als gedacht, aber nun funzt&#8217;s. Jetzt ehlen nur noch die echten Inhalte^^</p>
<p>Jede Skript-Spielerei die eine nächträgliche Initialisierung bei AJAX-geladenen Inhalten benötigt, lässt sich mit <a href="http://www.dynamicdrive.com/forums/showthread.php?t=13003" title="dynamicdrive.com/forums">diesem Skript</a> richten. <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> hier ist nur ein klassisches Beispiel.</p>        <p>Feedback: <a href="https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten#comments" title="3 Kommentare">3 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten/feed</wfw:commentRss>
    <slash:comments>3</slash:comments>
    </item>
    <item>
    <title>tricky sticky  Footer</title>
    <link>https://www.coldheat.de/2006/08/tricky-sticky-footer</link>
    <comments>https://www.coldheat.de/2006/08/tricky-sticky-footer#comments</comments>
    <pubDate>Wed, 09 Aug 2006 14:35:30 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Website]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2006/08/tricky-sticky-footer.php</guid>
    <description><![CDATA[Bei der Arbeit am Portfolio, zeigte sich ein nerviges, altes und immer ignoriertes Problem. Der Footer dieser Div-Struktur <em>klebt</em> leider nicht immer schön am Fuß des Browserfensters&#8230; nun ja nun <a href="https://www.coldheat.de/cgi-bin/mt/mt-search.cgi?IncludeBlogs=1&#38;search=nox&#38;x=&#38;y=" title="Beispiel: Sticky Footer">tut er es</a>. Das soll kein episch langer Text &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Bei der Arbeit am Portfolio, zeigte sich ein nerviges, altes und immer ignoriertes Problem. Der Footer dieser Div-Struktur <em>klebt</em> leider nicht immer schön am Fuß des Browserfensters&#8230; nun ja nun <a href="https://www.coldheat.de/cgi-bin/mt/mt-search.cgi?IncludeBlogs=1&amp;search=nox&amp;x=&amp;y=" title="Beispiel: Sticky Footer">tut er es</a>. Das soll kein episch langer Text werden. Wer bei Google nach <em>sticky footer</em> sucht, erhält als <a href="http://www.themaninblue.com/writing/perspective/2005/08/29/" title="Man in blue: sticky footer">erstes Ergebnis</a> gleich die perfekte Lösung. Die perfekt einfache Lösung?</p>
<p class="side-caption">Hier zu sehen die Grundstruktur der Seite, bestehend aus nur vier Divs.</p>
<p><img decoding="async" class="floatright" width="224" alt="Div-Struktur Version 5" src="https://www.coldheat.de/archiv/bilder/div-struktur-version-5.png">Nun für meinen Aufbau der Seite, schien diese Lösung leider nicht wirklich fehlerlos zu funktionieren. Vor Monaten hatte ich diesen CSS-Code schon einmal versucht in die Seite zu integrieren, jedesmal mit wenig Erfolg, weshalb der kleine Fehler bis heute existierte.</p>
<p>Die dort beschriebene Methode ist in der Tat perfekt, wieso nur funktionierte es nicht für meine Seite? Ein Blick auf den Aufbau der Div-Struktur offenbart das Problem dann doch recht schnell. Die dort angebotene Lösung, setzt einen etwas anderen Aufbau der Divs vorraus. Mein Problem ist die fast schon zu simple Stuktur, bei der das #header-Div, ein Problem darstellt, da es nicht innerhalb des #container-Divs liegt. Leider ist dieser #container mein vom Tutorial bezeichnetes #nonFooter-Div.</p>
<p>Mit meiner Struktur funktioniert es leider nicht ohne Anpassung:</p>
<pre>
&lt;div id="header"&gt;&lt;/div&gt;

&lt;div id="container"&gt;
&lt;div id="content"&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div id="footer"&gt;&lt;/div&gt;
</pre>
<p>So dagegen würde es problemlos funktionieren:</p>
<pre>
&lt;div id="container"&gt;
&lt;div id="header"&gt;&lt;/div&gt;
&lt;div id="content"&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div id="footer"&gt;&lt;/div&gt;
</pre>
<p>Bekommt div#container einen Höhen-Wert von 100%, dann ergibt sich für die Gesamthöhe der Seite ein Wert aus 100% Fenster-Höhe, samt Höhe des Headers und Höhe des Footers. Nur einen zusätzlichen Wert kann ich durch den negativen Margin-Wert der <a href="http://www.themaninblue.com/writing/perspective/2005/08/29/" title="Man in blue: sticky footer">Sticky-Footer</a> Methode negieren, den des Headers leider nicht, genau dies war das Problem.</p>
<p><span id="more-222"></span></p>
<h3>es klebt</h3>
<p>Ich hab in sinnlos komplizierte Richtungen überlegt. Negative Margins samt Script-Berechnung für die Höhe des #container-Divs, die alle das Ziel haben sollten, die Höhe des Headers, aus der Höhe der Seite insgesamt zu entfernen. Wie nimmt man ein Element aus dem Flow der Seite? <span class="code">position:absolute;</span></p>
<p>Wieso fallen einem die einfachsten Lösungen so spät ein. Dieses <span class="code">position:absolute;</span> ist die halbe Miete zur Lösung, der Footer ist sofort <em>sticky</em>. Von hier an spielt wie so oft, ein simpler Zufall die entscheidende Rolle. Ich hatte da immer dieses zweite Div (#content) innerhalb des #containers, primär angelegt um grafische Spielerein auch strukturell im #container-Div zu belassen. Geplant war mal Intro-Bilder für die jeweiligen Kategorien zu zeigen. Dieses #content-Div war schon immer da und konnte endlich eine Aufgabe bekommen.</p>
<p>Durch den nun absolut positionierten Header, klebte auch das #container-Div am oberen Rand der Seite. Ein oberes Padding auf diesem Element hätte theoretisch funktionieren sollen, praktisch tat es das nicht, da verschiedenste Browser wieder unterscheiden und das Padding mal zur Höhe addieren und mal nicht. Das #content-Div war bereit seine Hauptrolle zum Besten zu spielen. Dieses Div musste nun nur einen größeren <span class="code">margin-top</span> Wert bekommen, nämlich zusätzlich genau den Wert der Höhe des Headers. Schon sitzt wieder alles an seinem Platz und der Footer klebt fest am Boden eures Browser-Fensters.</p>
<p>Die vom <a href="http://www.themaninblue.com/" title="Man in blue">Mann in Blau</a> angebotene Methode funktioniert in der Tat perfekt, braucht nur manchmal ein bischen Anpassung an das jeweilige Beispiel, besonders dann, wenn man wirklich jedes überflüssige Div einsparen möchte. Wie konnte ich so eine simple Lösung nur so lange übersehen. Peinlich, peinlich.</p>        <p>Feedback: <a href="https://www.coldheat.de/2006/08/tricky-sticky-footer#comments" title="4 Kommentare">4 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2006/08/tricky-sticky-footer/feed</wfw:commentRss>
    <slash:comments>4</slash:comments>
    </item>
    <item>
    <title>CSS-Microformats &#8211; Trennung von Form, Form, Form und Inhalt</title>
    <link>https://www.coldheat.de/2006/06/cssmicroformats-trennung-von-form-form-form-und-inhalt</link>
    <comments>https://www.coldheat.de/2006/06/cssmicroformats-trennung-von-form-form-form-und-inhalt#comments</comments>
    <pubDate>Fri, 30 Jun 2006 08:55:43 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Microformat]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2006/06/css-microformats-trennung-von-form-form-form-und-inhalt.php</guid>
    <description><![CDATA[<blockquote>
Diesmal gibt es ein kleines Vorwort. Der folgende Text hat sich in Minuten vom absoluten Krampf, zu einem Eintrag entwickelt, der die Veröffentlichung hoffentlich wert ist. Ich bitte daher zu entschuldigen, wenn sich das Ganze noch sehr sinnentleert liest, dieser </blockquote>&#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <blockquote>
<p>Diesmal gibt es ein kleines Vorwort. Der folgende Text hat sich in Minuten vom absoluten Krampf, zu einem Eintrag entwickelt, der die Veröffentlichung hoffentlich wert ist. Ich bitte daher zu entschuldigen, wenn sich das Ganze noch sehr sinnentleert liest, dieser Text war lange Zeit ohne echte Substanz, da ich kein Freund von zu viel Sorgfalt beim Bloggen bin, geht das hier so ungefärbt online. Das ist also mal ein Schnellschuss zum Ende der Woche.</p>
</blockquote>
<p>Ich habe die HTML Struktur dieser Version, mal zur Abwechslung mit größerer Sorgfalt angelegt. Waren die früheren Versuche noch Markups, jeweils für die individuelle Version, so hoffe ich diesmal eine länger haltbare Basis gefunden zu haben. Ich möchte versuchen, das Ganze am Beispiel zu erklären. Auch wenn es nun mittlerweile Standard geworden ist Form und Inhalt zu trennen, so gibt es auch dafür, mehr als eine Möglichkeit der Umsetzung.</p>
<p>Ich weiß selbst noch nicht genau, ob der Text den Eintrag wert ist. Vielleicht ist es die Fortsetzung der Raster-Tutorials, vielleicht auch nicht. Die Geschichte dahinter liest sich wie folgt: ich komme immer wieder in die Situation, bei der ich unsicher bin, auf welches HTML-Element, die später zu formatierende CSS-Klasse oder ID gehört. Wo ist diese ID nun logischer? Bei welcher Lösung habe ich später mehr Möglichkeiten? Die Antwort auf alle Fragen, beantwortet mir meist der Quellcode dieser Startseite hier. Ich denke hier eine relative flexible HTML/CSS-Struktur gefunden zu haben, die sich auch gut skalieren lässt und nicht nur für so ein paar Inhaltseiten funktioniert.</p>
<p>Wer die Entwicklung dieser Gestaltung von Anfang an verfolgt hat, wird mitbekommen haben, wie oft und schnell ich die vielen Listen auf der Startseite neu angeordnet habe. Genau das begründet sich auf der Markup-Struktur der Seite, in Kombination mit einer sehr effizienten Verteilung von CSS-IDs und Klassen. Ich mag es schnell auch kompliziertere Elemente neu positionieren zu können, auch deshalb wurde diese Listen speziell dafür optimiert, besonders in Hinsicht auf ihre Struktur Markup.</p>
<p><span id="more-206"></span></p>
<h3>Praxis</h3>
<p>Grundlage für die Arbeit am Quellcode dieser Seite, war wie auch bei der Gestaltung, das Grundraster. Folgende Tabelle ist erste Anlaufstelle, wenn ich ein neues inhaltliches Element in die Seite integrieren möchte.</p>
<table class="entryTabData" cellspacing="0" summary="Beispiel HTML Kennziffern Version 5">
<tr>
<th scope="col" abbr="HTML-Tag" class="nobg">HTML-Tag</th>
<th class="tabHead" scope="col" abbr="1 Spalte">1 Spalte</th>
<th class="tabHead" scope="col" abbr="2 Spalten">2 Spalten</th>
<th class="tabHead" scope="col" abbr="3 Spalten">3 Spalten</th>
<th class="tabHead" scope="col" abbr="3 Spalten">4 Spalten</th>
</tr>
<tr>
<th scope="row" abbr="DIV" class="spec">&lt;div&gt;</th>
<td>244 Pixel</td>
<td>488 Pixel</td>
<td>732 Pixel</td>
<td>976 Pixel</td>
</tr>
<tr>
<th scope="row" abbr="UL" class="specalt">&lt;ul&gt;</th>
<td class="alt">224 Pixel</td>
<td class="alt">488 Pixel</td>
<td class="alt">732 Pixel</td>
<td class="alt">976 Pixel</td>
</tr>
<tr>
<th scope="row" abbr="LI" class="spec">&lt;li&gt;</th>
<td>204 Pixel</td>
<td>204 Pixel</td>
<td>204 Pixel</td>
<td>204 Pixel</td>
</tr>
</table>
<p class="side-caption">Hier zu sehen, Kenndaten um Elemente auf dem Raster zu positionieren. Diese Tabelle beinhaltet alle wichtigen Größen um alle Spalten des Raster abdecken zu können. In weiser Voraussicht, existieren auch schon Werte für eine mögliche 4-Spalten Version, bei einer 1024 Pixel breite Darstellung.
</p>
<p>Alles noch recht unspektakulär, aber diese kleine Tabelle beinhaltet alles was notwendig ist um schnell, einfach und pixelgenau die Listen neu anzuordnen. Es ist problemlos möglich alle nur erdenklichen Listenformate, auf dieses Raster zu bringen. Wer sich etwas mehr umschaut, wird auch sehen, dass die Listen hier und da in ein anderes Format wechseln und das mit ganz geringem Aufwand. Ein Ausschnitt des Quellcodes zeigt diesen Aufbau:</p>
<pre>
&lt;div id="lastComments"&gt;
&lt;h5&gt;Letzte Kommentare&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>An dieser Stelle die erste Überlegung. Wäre es nicht vielleicht sinnvoller, der Liste die ID zu geben und nicht extra dafür eine DIV anzulegen? Nun ja eigentlich wär dies die Puristen-Lösung, für all jene, die jedes zusätzliche DIV-Element meiden, wie Vampire das Licht. Zwar gehöre auch ich zu den sehr nihilistischen HTML-Codern, aber für meine Seite ist diese Lösung perfekt. Warum?</p>
<h3>ein kleiner Schritt zurück</h3>
<p>Ein Blick zurück in den zweiten Teil des <a href="https://www.coldheat.de/archiv/2006/04/tutorial-gestaltungsraster-im-webdesign-ii.php" title="Tutorial: Gestaltungsraster im Webdesign">Raster-Tutorials</a>. Eine Aussage dieses Textes ist, dass ich jedes Element auch auf dieses Raster passend, floaten lassen kann. Mit dieser Erkenntnis sind nun alle Listen auf dieser Seite gleich formatiert: alles fließt und passt. Jede Liste hat ihr eigenes mit einer ID versehenen DIVs. Nun braucht man sich, beim Blick auf das Stylesheet dieser Seite, nicht mehr über solche ellenlangen Aufzählungen wundern:</p>
<pre>
/*    globale Listenformate
=========================================== */
#lastComments,
#last10,
#qlinks,
#adverts,
#archive,
#themed,
#footcategory,
#prenextBottom,
#mostComments,
.sideDetail,
.side-caption  {
width:244px;
float:left;
margin-left:0;
display:inline;
}

#lastComments ul,
#qlinks ul,
#last10 ul,
#archive ul,
#themed ul,
#footcategory ul,
#mostComments ul {
padding:0;
list-style-type:none;
margin:0;
width:224px;
float:left;
display:inline;
}

#lastComments ul li,
#last10 ul li,
#qlinks ul li,
#archive ul li,
#themed ul li,
#footcategory ul li,
#mostComments ul li {
font-size:90%;
margin-left:20px;
width:206px;
float:left;
display:inline;
padding-left:18px;
}
</pre>
<p>Hier passieren nur ganz grundsätzliche Sachen, nichts Spannendes. Dennoch sieht man hier die Grundlage für jede Liste dieser Seite. Die DIVs dienen mir nun ausschließlich dazu, die Listen hin und her zu schieben und ihre Layout zu verändern. Man kann drüber streiten, ob es der Logik entspricht, Element so indirekt zu formatieren, denn ich definiere diese Listen primär über ihren Container und führe so einen einen gewissen Teil überflüssigen CSS-Code mit. Die separaten Anpassungen der jeweiligen Liste, überschreiben nämlich die oben dargestellten Formate. Wenn die Archivlisten plötzlich über 3 Spalten fließen sollen, muss ich die Breiten ändern:</p>
<pre>
#archive,
#archive ul {
width:732px;
}
</pre>
<p>Dennoch hat es mehr Vorteile als Nachteile, vorher eine globale Formatierung vorzunehmen und diese dann individuell anzupassen. Selbst ohne die individuellen Formate, sitzen diese Elemente perfekt auf dem Raster und durch diese Struktur ist der Aufwand viel geringer Änderungen vorzunehmen.</p>
<p>Wer sich die Raster-Tutorials durchgelesen hat, wird feststellen, dass ich für Floats auf einem Raster, Probleme ergeben können. Dies ist auch hier der Fall. Ich werde nun nicht im Detail aufzeigen wo, wie und was auch hier schief läuft. Man soll ja immer seine Schokoladenseite offenbaren und nicht die dreckigen Ecken. Nur soviel, hier und da kommt mal ein Spaltenzwischenraum hinzu und muss mal wieder vom der Floatbreite subtrahiert werden. Wer sich die Tabelle oben anschaut erkennt schon das Problem, auch hierbei helfen mir die zusätzlichen DIV-Elemente.</p>
<h3>Stylesheet Format</h3>
<p>Es gibt zweifellos die Möglichkeit diese jetzige Code-Struktur effektiver anzuordnen. Auch hier bin ich nicht auf der Jagd nach einzusparenden Bytes, sondern nach Logik und <em>Handling</em>, wie es so schon neudeutsch heißt. Ich weiß wie gern ich kleine Veränderungen benutze, also lege ich diese Seite auch darauf an.</p>
<p>Sicherlich wäre es platzsparender statt:</p>
<pre>
#lastComments ul,
#qlinks ul,
#last10 ul,
#archive ul,
#themed ul,
#footcategory ul,
#mostComments ul {
....
}
</pre>
<p>eine neue alles beinhaltende DIV zu generieren und dann ganz einfach so zu stylen:</p>
<pre>
#ganzNeueDIV ul {
....
}
</pre>
<p>Um das Ganze noch dynamischer zu machen wären IDs und Klassen auf den Listen an sich ebenfalls vorstellbar. So könnte ich das absolut gleiche Ergebnis, mit weniger Code erzielen:</p>
<pre>
#ganzNeueDIV ul#lastComments {
....
}
</pre>
<p>Dennoch bleibe ich bei der jetzigen Variante, die auf den ersten Blick aufgeblähter und weniger optimiert wirkt, aber auf den zweiten Blick und spätestens beim Redesign ihre vollen Stärken offenbart. Ich sehe immer wieder Beispiele (ich werd mich hüten Links zu setzen, zu viele Referer-Dramen in der letzten Zeit), wo durchaus ansprechende Gestaltung präsentiert wird, das Ganze jedoch auf wenig dynamischen Code-Strukturen basierend. CSS ID und Klassen-Monster, die zu Handhaben es einen wahren Zeichendeuter braucht. Ich verstehe dabei natürliche den Sinn bei Auftragsarbeiten, leichter als durch wenig transparente und komplexe Code-Strukturen, kann man den Kunden nicht an sich binden.</p>
<h3>CSS + Microformats = CSS-Microformats?</h3>
<p>Zwar erscheint in jedem zweitem meiner Texte, der große Hammer mit der Aufschrift &#8222;Weniger ist mehr!&#8220;, aber wie man sieht, kann etwas mehr manchmal doch auch seine Vorteile haben. Ich hab mich die letzten Wochen verstärkt mit Mikroformaten beschäftigt, eine höchst interessante Angelegenheit und mit Sicherheit der nächste große Zug, auf den viele aufspringen werden. Für alle die nicht wissen was Mikroformate sind, versuche ich es kurz zu erläutern.</p>
<blockquote>
<p>Microformats are markup that allow expression of semantics in an HTML (or XHTML) web page. Programs can extract meaning from a standard web page that is marked up with microformats.</p>
<p>Existing XHTML (and HTML) standards allow for semantics to be embedded and encoded within them. This is done using specific HTML attributes:</p>
<ul>
<li>class</li>
<li>rel</li>
<li>rev</li>
</ul>
<p>Adding microformats to a standard HTML web page allows machines to process HTML text and to possibly load data into remote databases. This would allow programs such as web crawlers to find items such as contact information, events, and reviews on web pages.</p>
</blockquote>
<p>Man stelle sich eine neue Norm vor, die vorschreibt wie man Informationen innerhalb zu strukturieren hat. Diese <em>Norm</em> sind <a href="http://en.wikipedia.org/wiki/Microformats" title="Microformats">Mikroformate</a>. Vorteil dabei? Informationen werden universell und denoch zugänglicher. Beispiel: wenn ich eine heute bei Google nach einer CD Kritik suche, gebe ich meist den Interpreten, den Titel und das englische Wort für Rezension &#8222;Review&#8220; ein. In vielen Fällen kommt dabei Unbrauchbares zu Tage. Nun gibt es genau dafür schon ein <a href="http://microformats.org/wiki/hreview" title="hreview">Review-Mikroformat</a>, welches mit absoluter Sicherheit bessere Suchergebnisse liefern würde als Google, sofern ein Microformats-Google existieren würde.</p>
<h3>div#reviews ul, ul#reviews, ul li.reviews, ul li a.reviews &#8230;</h3>
<p>Im gewissen Rahmen habe ich kleine <em>Mikroformate</em>, so genannte Nanoformate /joke, für den CSS-Code dieser Seite geschaffen, mit eben den gleichen Vorteilen wie bei Mikroformaten. Ich muss nicht schauen welche ID, welche Klasse oder wie der Code an dieser Stelle ist. Es gibt ein festes CSS-Format, welches mir die Arbeit ungemein erleichtert. CSS Stylesheets können schon heute unglaublich komplex werden und mit Sicht auf CSS-3, wird sich das auch nicht mehr ändern. Zeit darüber nachzudenken auch hier feste Formate zu entwickeln? Ich für meine Arbeiten beantworte diese Frage mit ja. Für viele mag dieser &#8222;Ansatz&#8220; trivial sein, für mich ist er relativ neu und die Überlegung wert, sorgfältig weiter entwickelt zu werden.</p>        <p>Feedback: <a href="https://www.coldheat.de/2006/06/cssmicroformats-trennung-von-form-form-form-und-inhalt#comments" title="3 Kommentare">3 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2006/06/cssmicroformats-trennung-von-form-form-form-und-inhalt/feed</wfw:commentRss>
    <slash:comments>3</slash:comments>
    </item>
  </channel>
</rss>
