<?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>Matu´s Blog - Webprogrammierung und jede Menge Tipps &#38; Tricks &#187; CSS</title>
	<atom:link href="http://einmal-am-tag.de/category/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://einmal-am-tag.de</link>
	<description>Das Weblog zum Thema Webprogrammierung &#38; Design:(X)HTML und CSS, PHP, mySQL, CMS u.v.m.</description>
	<lastBuildDate>Sat, 10 Apr 2010 14:37:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Dynamisches Stylesheet (Dynamic CSS)</title>
		<link>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/</link>
		<comments>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 19:35:21 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Stylesheet]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1287</guid>
		<description><![CDATA[

Web 2.0 ist in aller Munde. Nachrichten werden zwischen einzelnen Webseiten ausgetauscht (Stichwort Abonnementdienste wie RSS/Atom). Weblogs schießen wie Pilze aus den Boden. Dynamische Webseiten (DHTML) sowie DOM-Scripting sind in der heutigen Zeit zum Standard geworden. Menüs klappen auf, Texte werden eingeblendet, Seiteninhalte lassen sich einfach verschieben … überall bewegt sich etwas. 
Es werden Techniken [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><strong>Web 2.0</strong> ist in aller Munde. Nachrichten werden zwischen einzelnen Webseiten ausgetauscht (Stichwort Abonnementdienste wie <strong>RSS/Atom</strong>). <strong>Weblogs</strong> schießen wie Pilze aus den Boden. Dynamische Webseiten (<strong>DHTML</strong>) sowie <strong><acronym title='Document Object Model'>DOM</acronym></strong>-Scripting sind in der heutigen Zeit zum Standard geworden. Menüs klappen auf, Texte werden eingeblendet, Seiteninhalte lassen sich einfach verschieben … überall bewegt sich etwas. </p>
<p>Es werden Techniken eingesetzt, die Web-Anwendungen wie Desktop-Anwendungen aussehen lassen (Stichwort <strong>Ajax</strong>). Rein statische Seiten fristen in den Weiten des Internet nur noch ein Schatten-Dasein.<br />
Und wenn wir ehrlich sind, haben wir uns daran gewöhnt. </p>
<p>Wir erwarten, das Webprogrammierer -und Designer die Seiten so gestalten, das sie attraktiv und „<acronym title='Benutzerfreundlichkeit'>usability</acronym>“ daher kommen. Das Webseiten auch körperlich beeinträchtigten Menschen zugänglich sind (Stichwort Barrierefreiheit) und nach Möglichkeit in jedem Browser … zumindest einigermaßen … ähnlich aussehen. <span id="more-1287"></span></p>
<p>Es können Videos und Fotos betrachtet, Musik gehört und Spiele gespielt werden. Animationen, erstellt mit Java, Flash, Javascript oder als GIF-Bild, lassen Webseiten „leben“ (wenn sie uns nicht gerade stören).</p>
<p>Und da ich von diesen Dingen einfach fasziniert bin, habe ich mich daran gesetzt, dem <strong>Stylesheet</strong> meines Blogs mit Hilfe von PHP ebenfalls etwas Dynamik einzuhauchen. </p>
<p><strong>Anleitung dynamisches Stylesheet</strong><br />
Zuerst muss die Endung der normalen Stylesheet-Datei …</p>
<pre>
style.<span style='color:red;'>css</span>
</pre>
<p>&#8230; durch &#8230;</p>
<pre>
style.css.<span style='color:red;'>php</span>
</pre>
<p>&#8230; ersetzt werden.<br />
Eingebunden wird die neue dynamische Stylesheet-Datei wie gewohnt im Head-Bereich der Seite:</p>
<pre>
&lt;!DOCTYPE html PUBLIC …
&lt;html&gt;
  &lt;head&gt;
    <span style='color:red;'>&lt;link rel="stylesheet" type="text/css" href="pfad_zur_datei/style.css.php" /&gt;</span>
  &lt;/head&gt;
  &lt;body&gt;
  ...
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nun wird im neuen Stylesheet innerhalb eines PHP-Blocks der <a href=' http://de.wikipedia.org/wiki/Internet_Media_Type' title='Wikipedia Content-Type'>Content-type</a> angegeben, da der Server beim Parsen sonst davon ausgeht, dass es sich hierbei um eine gewöhnliche HTML-Datei handelt. Dazu wird im Kopf der css.php-Datei folgendes deklariert:</p>
<pre>
&lt;?php
  <span style='color:red;'>header('Content-type: text/css');</span>
  <span style='color:#aaa;'> /*
    An dieser Stelle wird der Quellcode eingefügt.
    Mehr dazu später …
   */</span>
?&gt;

/* Begin Typography &#038; Colors */

body {

	font-size: 62.5%; /* Resets 1em to 10px */

	font-family: Arial, Helvetica, Sans-Serif;

	background: #063164; 

	color: #999;

	text-align: center;

	}
…
</pre>
<p>Nun „weiß“ der Server Bescheid, gibt die PHP-Datei als CSS-Datei an den Browser und dieser kann die Datei anschließend richtig interpretieren.</p>
<h5 class='trigger'>Erklärung</h5>
<div>
Im Gegensatz zu einer normalen Stylesheet-Datei, die der jeweilige Browser direkt durch den angegebenen Pfad im Head-Bereich der Webseite <acronym title='einliest'> „annektiert“</acronym>, wird die neue PHP-CSS-Datei zuerst vom Server (auf Grund der <span style='color:red;'>.php</span>-Endung!) durch den PHP-Parser geschickt.<br />
Dieser erkennt den eingefügten PHP-Block </p>
<pre>
&lt;?php
 …
?&gt;
</pre>
<p>und arbeitet den dort eingefügten Quellcode ab. Erst danach wird die (inhaltlich geänderte) Datei zurückgeschickt und steht nun dem jeweiligen Browser zur Verfügung. Dieser erkennt, genau wie der Besucher der Seite, durch die explizite Angabe des Content-Types eine ganz normale CSS-Datei. Der PHP-Code kann dagegen nicht eingesehen werden!
</p></div>
<p>Da mir diese Webseite neben dem Bloggen auch als „Bastelstube“ dient (siehe auch mein <a href='http://einmal-am-tag.de/kolophon/' title='Kolophon'>Kolophon</a>), um Webtechniken anzuwenden, hatte ich mir überlegt, die Hintergrundfarbe beim ersten Aufruf der Seite zufällig aus einem Pool von Hintergrundgrafiken generieren zu lassen. Diese sind bereits als PNG-Dateien auf dem <acronym title='Speicherplatz der Webseite bei einem Server-Hosting-Provider'>Webspace </acronym> hinterlegt und werden über den Name eingebunden.</p>
<pre>
   bg_hellgruen.png
   bg_blau.png
   bg_beige.png
   ...
</pre>
<p>Dazu legte ich zunächst ein Array an, in das die Namen derjenigen Grafiken einfügte wurde, die später angezeigt werden sollen.</p>
<pre>
$farben = array('weiss', 'schwarz', 'blau', 'gruen',
        'beige', 'hellblau', 'hellgruen', 'rose',
        'sand', 'grau_gruen');
</pre>
<p>Aus diesem wird ein zufälliges ausgewählt</p>
<pre>
 $zufall = array_rand($farben, 1);<span style='color:#aaa;'>/* ... die 1 kann bei einem
Wert auch weggelassen werden */</span>
 $zufalls_farbe = $farben[$zufall];
</pre>
<p>und danach in einem switch-Kontrollblock die Textfarbe an die jeweilige Hintergrundfarbe angepasst, um einen ausreichenden Kontrast zu garantieren.</p>
<pre>
switch ($zufalls_farbe) {
    case 'weiss':
     $_SESSION['textcolor'] = '#222';
        break;
    case 'beige':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellblau':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'oliv':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'rose':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellgruen':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'sand':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'grau_gruen':
      $_SESSION['textcolor'] = '#222';
        break;
    default:
      $_SESSION['textcolor'] = '#aaa';
        break;
  }
</pre>
<p>Anstatt des <em>switch</em>-Kontrollblocks kann natürlich auch eine if-Abfrage eingesetzt werden. Ich habe dies lediglich auf diese Art gelöst, um wieder mal mit der <em>switch</em>-Syntax zu arbeiten. Hinsichtlich der Geschwindigkeit dürften sich beide Möglichkeiten (auch bei größeren Datenmengen) nicht wesentlich unterscheiden (unter Programmierern führt dieser Aspekt gern zu ausufernden Diskussionen &#8211;> kürzer, schneller …).</p>
<p>Um die einmal ausgewählte Hintergrundfarbe während des Besuchs beizubehalten, wird noch eine Session-Variable erstellt. In dieser wird beim ersten Einlesen der css.php-Datei ebenfalls die zufällig generierte Hintergrundfarbe gespeichert. </p>
<pre>
 $_SESSION['color'] = $zufalls_farbe;
</pre>
<p>Dies wurde für die Textfarbe bereits schon im <em>switch</em> realisiert.<br />
Normalerweise legt der Browser die CSS- Datei (und noch einige andere Dateien, z.B. Grafiken) im eigenen Cache-Speicher ab und ein erneutes Einlesen ist bei Seitenwechsel nicht mehr nötig. Dadurch kann die Webseite nach dem ersten Aufruf schneller geladen werden. </p>
<p>Da dies aber nicht garantiert ist (was mir meine Erfahrungen auch bestätigen), wird bei jedem Einlesen überprüft, ob diese Session-Variable existiert. Sollte dies der Fall sein, erfolgt keine erneute Auswahl der Hintergrundfarbe, sondern es wird dann der gespeicherte Wert der Session-Variable verwendet. Dafür wird der gesamte Quellcode in eine Abfrage eingeschlossen, welche direkt überprüft, ob die Session-Variable bereits existiert.</p>
<pre>
if(!isset($_SESSION['color'])) {
...
}
<span style='color:#aaa;'>/* Nur wenn die SESSION-Variable noch nicht (!)
existiert, wird eine neue Farbe ausgewählt
*/</span>
</pre>
<p>Nun werden die gefüllten Variablen an den jeweiligen Stellen im normalen Stylesheet-Bereich eingefügt und mit dem <em>echo</em>-Befehl ausgegeben.</p>
<pre>
#header {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
        if(isset($_SESSION['color'])) echo $_SESSION['color'];
        else echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
        <span style='color:#aaa;'>/* Der else-Block dient nur als Beispiel
        und dürfte nicht ausgeführt werden*/</span>
	}
...

#content {
	font-size: 1.35em;
        color:&lt;?php if(isset($_SESSION['textcolor'])) echo $_SESSION['textcolor']; else echo '#222'; ?&gt;;
	}
...
</pre>
<p>Durch diese Maßnahme bekommt jeder Besucher der Seite beim ersten Aufruf eine zufällige Hintergrundfarbe, die auch bei Seitenwechsel erhalten bleibt (es sei denn, es wird ein anderer Hintergrund über den <a class='einstellungen'>Einstellungen-Button</a> gewählt).</p>
<p>Aber anstatt der Hintergrundfarbe könnte auch der body-Hintergrund geändert werden. In dem PHP-Bereich kann das ganze Potenzial dieser Scriptsprache eingesetzt werden, um das Stylesheet den eigenen Bedürfnissen <em>dynamisch</em> anzupassen.<br />
Auch eine Darstellung, welche an die jeweilige Tageszeit angepasst wird bzw. von dieser abhängig ist, kann so leicht realisiert werden (time-Funktion von PHP). </p>
<pre>
 <span style='color:#aaa;'>/* H - Stunde im 24-Stunden-Format (00-23 ) */</span>
if (date("H")&gt;8 &#038;&#038; date("H")&lt;20){
$background = "#ffffff";
    $color = "#000000";
  } else {
    $background = "#000000";
    $color = "#ffffff";
  }
</pre>
<p>Doch es traten auch Probleme auf. Die Stylesheet-Anpassungen für die  <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_evil.gif' alt="Icon Evil in " class='wp-smiley' />  -Browser der Redmonder habe ich direkt im Stylesheet stehen und nicht wie sonst üblich über eine Browserweiche (Conditional Comments ) als zusätzliches Stylesheet eingebunden.<br />
Die Separierung erfolgt über die &#8220;Holzhammer-Methode&#8221; mit dem <em>!important</em>-Hack:</p>
<pre>
<span style='color:#aaa'>/* Beispiel */</span>
.navigation {
	display: block;
	text-align: center;
        <span style='color:#aaa;'>/* 'Normale' Browser führen diese Zuweisung aus ... */</span>
	margin-top: 10px !important;
        <span style='color:#aaa;'>/* ... während der IE !important nicht kennt und diese
        Zuweisung interpretiert */</span>
        margin-top:0px;
        <span style='color:#aaa;'>/* Dies wird dann wieder von allen ausgeführt */</span>
	margin-bottom: 60px;
	}
</pre>
<p>Diese Art, IE-Bugs zu beheben, sollte eigentlich nicht verwendet werden ( &#8230; um das Grund-Stylesheet sauber zu halten). Da ich jedoch bisher nicht viele Anpassungen vornehmen mußte, habe ich es auf diese (nicht besonders elegante Weise) gelöst.<br />
Nach Umänderung meines Stylesheets zu einer PHP-CSS-Datei mit Content-Type-Deklaration wurde ich auch sofort bestraft und der Hack funktionierte aus mir unerklärlichen Gründen nicht mehr. Als Folge wurde meine Seite 3 Tage lang etwas &#8220;zerissen&#8221; im IE angezeigt, bis ich es als Firefox-Nutzer endlich gemerkt hatte. Dadurch wurde ich mal wieder daran erinnert, dass in der Programmierung umfangreiche Tests unabdingbar sind.<br />
Nun hätte ich mein Grund-Stylesheet ändern und die IE-Anweisungen auslagern können. Ich entschied mich aber dafür, den PHP-Teil in eine separate Datei zu schreiben und zusätzlich in die Seite einzufügen. So können zukünftige weitere Schritte überschaubarer realisiert werden.</p>
<p>Ich hoffe, diese Einführung in dynamische Stylesheets war hilfreich für eigene Projekte. </p>
<h5 class='trigger'>Hier noch mal der gesamte Quellcode</h5>
<div>
<pre>
&lt;?php
session_start(); <span style='color:#aaa;'>/* ... muss am Anfang eingefügt werden */</span>
<span style='color:#aaa;'>/* error_reporting(E_ALL)  und ini_set('display_errors', 'On') zur Fehlersuche */</span>
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header('Content-type: text/css');

<span style='color:#aaa;'>/* Zufallshintergrund */</span>
if(!isset($_SESSION['color'])) {

  $farben = array('weiss', 'schwarz', 'blau', 'gruen', 'beige', 'hellblau', 'hellgruen', 'rose', 'sand', 'grau_gruen');
  $zufall = array_rand($farben, 1);<span style='color:#aaa;'>/* ... die 1 kann bei einem Wert auch weggelassen werden */</span>
  $zufalls_farbe = $farben[$zufall];

  switch ($zufalls_farbe) {
    case 'weiss':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'beige':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellblau':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'oliv':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'rose':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellgruen':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'sand':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'grau_gruen':
      $_SESSION['textcolor'] = '#222';
        break;
    default:
      $_SESSION['textcolor'] = '#ccc';
        break;
  }
  $_SESSION['color'] = $zufalls_farbe;
}
?&gt;

#header {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
             if(isset($_SESSION['color']))
                 echo $_SESSION['color'];
             else
                 echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
	}

#container_inside {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
             if(isset($_SESSION['color']))
                 echo $_SESSION['color'];
             else
                 echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
	}

#content {
	font-size: 1.35em;
        color:&lt;?php
            if(isset($_SESSION['textcolor']))
               echo $_SESSION['textcolor'];
            else
               echo '#222'; ?&gt;;
	}
</pre>
</div>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS Spezial: Gezieltes Ansprechen von HTML-Elementen</title>
		<link>http://einmal-am-tag.de/2009-05/css-spezial-gezieltes-ansprechen-von-elementen/</link>
		<comments>http://einmal-am-tag.de/2009-05/css-spezial-gezieltes-ansprechen-von-elementen/#comments</comments>
		<pubDate>Thu, 21 May 2009 13:33:02 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=442</guid>
		<description><![CDATA[

Wer sich mit Cascading-Stylesheets befasst, sei es beruflich oder privat, definiert die Style-Informationen der grundlegenden Elemente im Allgemeinen in einer externen .css-Datei.
 Vor allem Anfänger, die sich erst kurz mit dem Thema befasst haben, erkennen dabei nicht die weiterreichenden Möglichkeiten dieser deklarativen Stylesheet-Sprache, einzelne Elemente oder Bereiche gezielt ansprechen zu können.
Als erste Stufe der Separierung wird [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Wer sich mit <strong>Cascading-Stylesheets</strong> befasst, sei es beruflich oder privat, definiert die Style-Informationen der <a href="http://einmal-am-tag.de/2009-05/css-blitztutorial#grundlegendeElemente" title="Grundlegende HTML-Elemente in Cascading Stylesheets">grundlegenden Elemente</a> im Allgemeinen in einer externen <em>.css</em>-Datei.</h4>
<p> Vor allem Anfänger, die sich erst kurz mit dem Thema befasst haben, erkennen dabei nicht die weiterreichenden Möglichkeiten dieser deklarativen Stylesheet-Sprache, einzelne Elemente oder Bereiche gezielt ansprechen zu können.<span id="more-442"></span></p>
<p>Als erste Stufe der Separierung wird hierzu das jeweilige Block-Element (div) mit einer <strong>Klasse</strong> -oder <strong>ID</strong>-Deklaration versehen, damit es angeprochen werden kann. Aufbauend auf diesen &#8220;Angriffspunkten&#8221;, d.h. das gezielte Ansprechen eines zu gestaltenden Bereiches über die zugeordnete Klasse bzw. ID, kann nun auf die einzelnen Elemente innerhalb dieses separierten Bereiches eingewirkt werden, ohne das dies Einfluss auf die restliche Webseite hat.<br />
Beispiel:<br />
Webseiten enthalten üblicherweise Struktur-Bereiche wie container (main, wrapper), header, content, menu, sidebar und footer. Nun definiert man zum Beispiel zunächst die allgemeinen Deklarationen für den <em>a</em>-Tag (hover, visited, focus, active) :</p>
<pre>
a {
color: #aaa;
text-decoration: none;
}

a:hover{
color: #ccc;
text-decoration: underline;
}

...
</pre>
<p><strong>Nur</strong> bei dem content- sowie sidebar-Bereich soll nun noch ein Zusatz in Form eines nachstehenden Images (<img src="/wp-content/themes/technical/images/button/link.png" alt="Link in " />) durch das <em>:after</em>-Pseudoelement angehängt werden. Die Links im Text-Bereich (content) und im Seiten-Bereich (sidebar) sollen also im <strong>Gegensatz</strong> zu a-Tags im header, menu oder footer-Bereich zusätzlich kenntlich gemacht werden, was dann <a href="http://einmal-am-tag.de/2009-05/css-trick-genaues-ansprechen-von-elementen#anker" >so</a> aussehen soll.<a name="anker"></a><br />
Dazu muss im Stylesheet folgendes deklariert werden:</p>
<pre>
#content, #sidebar a:after {
content:" "url(images/link.png);
}
</pre>
<p>Der Pfad zum Image muss natürlich angepasst werden.<br />
Dies würde nun allen Links in den Bereichen </p>
<pre>
&lt;div id="content"&gt; Inhalt mit a-Tags &lt;/div&gt;
&lt;div id="sidebar"&gt; Inhalt mit a-Tags &lt;/div&gt;
</pre>
<p>ein Image anhängen.<br />
Ich gehe davon aus, das bis hier alles bekannt sein sollte. Nun gehen wir aber noch einen Schritt weiter. Was wäre, wenn sich innerhalb dieser beiden Bereiche eine sogenannte &#8220;Sprungmarke&#8221; befindet. Ein a-Tag, der es ermöglicht, an eine (diese) bestimmte Stelle zu <cite>springen</cite>:</p>
<pre>
&lt;a name="anker"&gt;
</pre>
<p>Dieser ist eigentlich nicht sichtbar, da hier das <em>href</em>-Attribute fehlt (&#8230; was durchaus gewollt ist). Durch unsere zusätzliche Style-Zuweisung würde aber auch diesem nun ein (sichtbares) Image angehängt werden, was hier fehl am Platz wäre.<br />
<cite>Was tun sprach Zeus</cite><br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x60, Erstellt 05.06.09 */
google_ad_slot = "5369890293";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Eine Möglichkeit wäre es, jeden a-Tag, wo das Image gewünscht wird, einer Klasse zuzuordnen:</p>
<pre>
.image a:after {
content:" "url(images/link.png);
}
</pre>
<p>Das sieht im Stylesheet sogar noch kürzer aus. Aber nun müßte <strong>jedes</strong> a-Tag mit dieser Klassen-Definition versehen werden:</p>
<pre>
&lt;a href="http://ziellink" class="image"&gt;Link&lt;/a&gt;
</pre>
<p>Nicht sehr sinnvoll, oder?!<br />
Daher möchte ich auf den Titel dieses Artikels zurück kommen und eine weitere Möglichkeit offerieren, einzelne Elemente direkt anzusprechen.<br />
Dazu gebe ich zunächst ein paar Beispiele:</p>
<pre>
#content, #sidebar a[href]:after {             //Beispiel 1
content:" "url(images/link.png);
}

#content, #sidebar ul li a[href]:after {       //Beispiel 2
content:" "url(images/link.png);
}

#content, #sidebar ul ul li a[href]:after {    //Beispiel 3
content:" "url(images/link.png);
}

p.textinput input[type="text"]:hover {         //Beispiel 4
background: #EBF4FF;
}
...
</pre>
<p>Bestimmt kann ich mir weitere Kommentare sparen, dennoch eine kurze Erklärung.<br />
Beispiel 1 würde <strong>nur</strong> a-Tags innerhalb der Bereiche mit den IDs <em>content</em> und <em>sidebar</em> ansprechen (und ein Image anhängen), die ein <em>href</em>-Attribute enthalten. Den zuvor angesprochene Anker jedoch nicht, da hier dieses Attribute nicht vorhanden ist.<br />
Beispiel 2 würde allen a-Tags innerhalb einer ungeordneten Liste (ul) ein Image anhängen. Bei Beispiel 3 beschränkt sich das wiederrum nur auf Unterlisten einer übergeordneten <em>ul</em>-Liste.<br />
Beispiel 4 würde alle Textfelder innerhalb von <em>p</em>-Tags (Abschnitte) angesprechen, denen die Klasse <em>textinput</em> zugeordnet wurde. So läßt sich zum Beispiel die Hintergrundfarbe ändern, wenn man mit dem Mauszeiger drüberfährt ( &#8230; dies könnte man noch auf <em>focus</em> erweitern, interessant bei Formularen &#8230;).</p>
<p>So kann gezielt auf jedes Element bzw. auf jedes Element innerhalb eines Bereiches eingewirkt werden.</p>
<p>Teilweise findet man in CSS-Dateien die wildesten Konstrukte, dagegen sind die hier aufgeführten Beispiele noch einfach gehalten.<br />
Ich habe schon Seiten gesehen, wo Experten in Sachen CSS  Bildanimationen erstellt haben, die normalerweise mit Javascript realisiert werden (z.B. Lupeneffekt). Leider finde ich den Link nicht mehr, werde ihn aber nach Möglichkeit nachreichen.</p>
<p>Wenn man sich erst einmal damit beschäftigt hat, erweitert es den eigenen Horizont in Bezug auf die Gestaltung von Webseiten ungemein.</p>
<p>Ich hoffe, dieses Spezial war für den einen oder anderen hilfreich und informativ.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/css-spezial-gezieltes-ansprechen-von-elementen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS Blitztutorial</title>
		<link>http://einmal-am-tag.de/2009-05/css-blitztutorial/</link>
		<comments>http://einmal-am-tag.de/2009-05/css-blitztutorial/#comments</comments>
		<pubDate>Wed, 20 May 2009 15:15:11 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Style]]></category>
		<category><![CDATA[Tag]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=404</guid>
		<description><![CDATA[

Cascading Style Sheets (CSS) haben die Aufgabe, die HTML-Seite bzw. die HTML-Elemente zum einen zu gestalten und zum anderen zu strukturieren.
 Hierbei gibt es mehrere Möglichkeiten, Style-Informationen in eine HTML-Datei einzubringen.
1. Per direktem Inline-Style (Style-Definition befindet sich DIREKT am HTML-Element):
BEISPIEL 			  
&#60;table style="background-color: #ff0000; color: #0000ff;"&#62;
  

2. Per Style im head-Tag der Seite:
Beispiel

&#60;html&#62;
&#60;!DOCTYPE [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4><strong>Cascading Style Sheets</strong> (CSS) haben die Aufgabe, die <acronym title="Hypertext Markup Language">HTML</acronym>-Seite bzw. die HTML-Elemente zum einen zu <em>gestalten</em> und zum anderen zu <em>strukturieren</em>.</h4>
<p> Hierbei gibt es mehrere Möglichkeiten, Style-Informationen in eine HTML-Datei einzubringen.<span id="more-404"></span></p>
<p>1. Per direktem Inline-Style (Style-Definition befindet sich <strong>DIREKT</strong> am HTML-Element):</p>
<p>BEISPIEL 			  </p>
<pre><span>&lt;table <span style="color:red">style</span>="background-color: #ff0000; color: #0000ff;"&gt;</span>
  </pre>
<p><p>
2. Per Style im head-Tag der Seite:</p>
<p>Beispiel</p>
<pre>
&lt;html&gt;
&lt;!DOCTYPE ... &gt;
&lt;meta ... /&gt;

&lt;head&gt;
...
&lt;style type='text/css' media='screen'&gt;
table {
	background-color: #ff0000;
	color: #0000ff;
	width: 80%;
	border: 1px 5px 10px 20px solid #00ff00;
  }
&lt;/style&gt;
...
&lt;/head&gt;
&lt;body&gt;
...
</pre>
<p>3. Per externer Datei (Dateiname zum Beispiel &raquo;style.<span style="color:red">css</span>&laquo;):
</p>
<p>BEISPIEL</p>
<pre>
  table {
	background-color: #ff0000;
	color: #0000ff;
	width: 80%;
	border: 1px 5px 10px 20px solid #00ff00;
  }

  h1, h2, h3, h4 {
	font-family: "Trebuchet MS", Verdana, Arial, sans-serif;
	font-weight: bold;
	font-style: italic;
	color: #000000;
  }
  usw.
  </pre>
<p>
 Die Datei &raquo;style.css&laquo; wird dabei an einer Stelle abgespeichert, die mit ihrem <acronym title="Weg innerhalb des Ordnerverzeichnisses">Pfad</acronym> im <span>&lt;head&gt;</span>-Tag der HTML-Datei eingetragen wird:
</p>
<p>BEISPIEL</p>
<pre>
<span>&lt;html&gt;</span>
  <span>&lt;head&gt;</span>
    <span>&lt;meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"&gt;</span>
    <span>&lt;title&gt;</span><span>&lt;/title&gt;</span>
    <span style="color:red">&lt;link rel="stylesheet" type="text/css" href="pfadangabe/style.css"&gt;</span>

	...
</pre>
<p>
 So können die Style-Definitionen zur Laufzeit Ihrer HTML-Seite automatisch in das Rendern (Berechnung der Darstellung) mit einbezogen werden.<br />
Merke: Die dritte (externe) Variante stellt die gebräuliche Methode dar. Denn sollte mal etwas geändert werden müssen, so muss lediglich die externe CSS-Datei bearbeitet werden und nicht jede einzelne HTML-Seite.</p>
<p> Man kann so für jedwedes HTML-Tag eine eigene Style-Information hinterlegen. Der Nachteil dabei ist, dass, wenn man beispielsweise den Tag <span>&lt;table&gt;</span> mit Styles belegt, <strong>jede</strong> Tabelle auf der HTML-Seite so dargestellt wird, wie der Style dies vorgibt. So würde eine Übersichtstabelle über Telefonnummern genau so aussehen wie eine, die Kochrezepte darstellen soll.<br />
<br />
 Um dies zu verhindern und einzelne HTML-Objekte eben einzeln ansprechen zu können, hat man ein System integriert, das per<br />
 <strong>Klassenangabe</strong> (class=&#8230;) das jeweilige Element genau spezifiziert. Im Grunde wird dabei einem HTML-Element eine Art Name<br />
 vergeben, über den es angesprochen wird:
</p>
<p>BEISPIEL	</p>
<pre>&nbsp;&nbsp;<span>&lt;table class="irgendeinwort"&gt;</span>&nbsp;...&nbsp;<span>&lt;/table&gt;</span></pre>
<p>
 Im Stylesheet (&raquo;style.css&laquo;) wird dann definiert, <strong>wie</strong> diese Klasse gestaltet werden soll.<br />
 Da es sich um eine Klasse handelt, muss dies auch im Stylesheet berücksichtigt werden. Schließlich ist <em>&#8220;irgendeinwort&#8221;</em> ja kein HTML-Tag.</p>
<p>Klassendefinitionen werden im Stylesheet mit einem <strong>Punkt</strong> (.) begonnen und direkt danach wird der Begriff notiert, den man<br />
 im Klassenaufruf in der HTML-Datei benutzt hat:
</p>
<p>BEISPIEL</p>
<pre>
(Stylesheet)
...

<span style="color:red">.</span>irgendeinwort {
	background-color: #ff0000;
	color: #0000ff;
}

...
</pre>
<p>
 Mit dieser Klassendefinition ist es nun möglich, <strong>JEDEM</strong> HTML-Element, dem diese Klasse zugeordnet wird, genau <strong>diese</strong> Gestaltung zu geben. Mit anderen Worten: wenn Sie in Ihrem HTML-Code eine Headline &lt;h1&gt; mit der Klasse <em>&#8220;irgendeinwort&#8221;</em> belegen,
</p>
<p>BEISPIEL</p>
<pre><span>&lt;h1 class="irgendeinwort"&gt;</span> ... <span>&lt;/h1&gt;</span></pre>
<p>
 dann wird (auch) diese Headline mit rotem Hintergrund hinterlegt, sowie der Text mit blauer Farbe dargestellt. Dies gilt für (fast) alle anderen HTML-Elemente auch. Probieren Sie dies bitte aus.
</p>
<p>
 Analog zu den Klassen können auch <strong>IDs</strong> benutzt werden:
</p>
<p>Aufruf HTML:</p>
<pre><span>&lt;p id="andereswort"&gt;</span> ... <span>&lt;/p&gt;</span></pre>
<p>Defininition CSS:	</p>
<pre><span style="color:red">#</span>andereswort {...}</pre>
<p>
 Wie man sehen kann, beginnen ID-Definitionen im Stylesheet im Gegensatz zum Punkt der Klasse mit einer Raute (#).<br />
 IDs sind dominanter als Klassen und überschreiben diese.<br />
Merke: Eine ID darf (pro Begriff) im Gegensatz zu einer Klasse nur <strong>EINMAL</strong> innerhalb einer HTML-Seite vorkommen!
</p>
<p>
 Es lassen sich natürlich nicht nur Farben und Schrifttypen definieren.<br /> <br />
Ein besonders wichtiges Gestaltungswerkzeug sind die Ränder und Abstände, die unsere HTML-Elemente umgeben und die da heißen:
</p>
<pre>
&nbsp;&nbsp;<span style="color:red">margin</span>&nbsp;&nbsp;&nbsp;&rarr;&nbsp;&nbsp;Außenabstand um ein Element herum
&nbsp;&nbsp;<span style="color:red">padding</span>&nbsp;&nbsp;&rarr;&nbsp;&nbsp;Innenabstand innerhalb eines Elementes
&nbsp;&nbsp;<span style="color:red">border</span>&nbsp;&nbsp;&nbsp;&rarr;&nbsp;&nbsp;Rand um ein Element herum
</pre>
<p>Die Gesamtbreite eines Objektes ergibt sich damit durch folgende Formel:</p>
<pre>
margin&nbsp;+&nbsp;border&nbsp;+&nbsp;padding&nbsp;+&nbsp;width&nbsp;+&nbsp;padding&nbsp;+&nbsp;border&nbsp;+&nbsp;margin
------&nbsp;&nbsp;&nbsp;------&nbsp;&nbsp;&nbsp;-------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-------&nbsp;&nbsp;&nbsp;------&nbsp;&nbsp;&nbsp;------
                        |           |
             |          +-----------+          |
    |        +---------------------------------+         |
    +----------------------------------------------------+
</pre>
<p>BEISPIEL</p>
<pre>
(Stylesheet)
...

.irgendeinwort {
	background-color: #ff0000;
	color: #0000ff;
	margin: 20px;
	padding: 10px;
	border: 5px solid #ff3366;
}

...
</pre>
<p> Folgende Schreibweisen sind dabei möglich:</p>
<pre>
margin [padding] [border]: 10px;
&rarr; rund um das Objekt 10 Pixel

margin [padding] [border]: 10px 20px;
&rarr; 10 Pixel oben und unten, 20 Pixel rechts und links

margin [padding] [border]: 10px 20px 5px;
&rarr; 10 Pixel oben, 20 Pixel rechts und 20 Pixel links, 5 Pixel unten

margin [padding] [border]: 10px 20px 5px 1px;
&rarr; 10 Pixel oben, 20 Pixel rechts, 5 Pixel unten, 1 Pixel links
</pre>
<p>
 Läuft also im Uhrzeigersinn und beginnt oben.
</p>
<p>
<a name="grundlegendeElemente"></a><br />
Als abschließende Information sollte man die unten aufgeführten Tags von vorne herein mit Definitionen versehen:
</p>
<pre>
body {
	schriftfamilie;
	schriftgröße;
	zeilenabstand;
	farbe;
	hintergrundfarbe;
	außenabstand;
	innenabstand;
}

p {
	farbe;
	einzug;
	zeilenabstand;
}

h1, h2, h3, h4, h5, h6 {
	farbe;
	auszeichnung;
	border?;
	hintergrundfarbe?;
}

a {
	farbe;
	text-decoration;
	größe;
}

a:hover {
	farbe;
	fett?;
}

a:visited {
	.....
}

a:focus {
	.....
}
</pre>
<p class="content">
Damit haben Sie erst einmal die grundsätzlichen Elemente einer HTML-Datei optisch definiert.<br />
Wer jetzt &#8220;Blut geleckt&#8221; hat, kann tiefer greifende Informationen über Cascading Stylesheets unter <a href="http://www.css4you.de">css4you</a>,  <a href="http://de.selfhtml.org">selfhtml.org</a>, <a href="http://www.peterkropff.de">peterkropff</a> &#8230; nachgelesen.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/css-blitztutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

