<?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>Brusdeylins &#187; Webdesign</title>
	<atom:link href="http://brusdeylins.info/tag/webdesign/feed/" rel="self" type="application/rss+xml" />
	<link>http://brusdeylins.info</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 18:25:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bookmarking Ajax/Flash</title>
		<link>http://brusdeylins.info/webdesign/bookmarking-ajax-flash/</link>
		<comments>http://brusdeylins.info/webdesign/bookmarking-ajax-flash/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 13:45:12 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.brusdeylins.info/?p=294</guid>
		<description><![CDATA[
Die L&#246;sung ist bekannt und an sich einfach. Wird mittels Ajax / Flex / Flash dynamisch ein neuer Inhalt angezeigt, muss mittels Java-Script die URL des Browsers entsprechend ge&#228;ndert werden. Der Haken dabei: der Browser l&#228;dt die Seite neu! Dies kann aber mit einem Trick verhindert werden.
Hier spielt das Hash-Zeichen (#)  in der URL [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->
<a href="http://brusdeylins.info/media/post-images/ajax-flash-flex.jpg" title="Bookmarking Ajax / Flex - (c) Matthias Brusdeylins" rel="lightbox[singlepic46]" >
	<img class="ngg-singlepic ngg-right" src="http://brusdeylins.info/media/cache/46__150x300_ajax-flash-flex.jpg" alt="Bookmarking Ajax / Flex" title="Bookmarking Ajax / Flex" />
</a>
Das Problem ist bekannt: Webanwendungen die ihre zentralen Inhalte mittels Ajax-Technologie &#228;ndern, m&#252;ssen zus&#228;tzlich daf&#252;r Sorge tragen, dass ihre dynamisch ge&#228;nderten Inhalte ebenfalls in der URL-Leiste des Browsers referenzierbar bleiben. Diese Aufgabe muss auch von Flash-/Flex-Anwendungen durchgef&#252;hrt werden. Wird im Flash-Plugin ein neuer Inhalt nachgeladen, &#228;ndert sich normalerweise nichts an der URL im Browserfenster. Somit gibt es ohne Eigeninitiative keine M&#246;glichkeit direkt an den neu angezeigten Inhalt zu springen.<!--:--><span id="more-294"></span><!--:de--></p>
<p>Die L&#246;sung ist bekannt und an sich einfach. Wird mittels <a title="Was ist Ajax" href="http://ajaxpatterns.org/Whats_Ajax" target="_blank">Ajax</a> / <a title="Was ist Flex" href="http://www.adobe.com/products/flex/overview/" target="_blank">Flex</a> / <a title="Die Flash Plattform" href="http://www.adobe.com/flashplatform/" target="_blank">Flash</a> dynamisch ein neuer Inhalt angezeigt, muss mittels Java-Script die URL des Browsers entsprechend ge&#228;ndert werden. Der Haken dabei: der Browser l&#228;dt die Seite neu! Dies kann aber mit einem Trick verhindert werden.</p>
<p>Hier spielt das <strong>Hash-Zeichen (#) </strong> in der URL eine wichtige Rolle. Es dient zur Angabe eines Ankerpunktes (siehe <a title="W3C - Syntax of anchor names" href="http://www.w3.org/TR/REC-html40/struct/links.html#h-12.2.1" target="_blank">W3C-Syntax of anchor names</a>) in der aktuell angezeigten Webseite. Eine Ankerpunkt-Angabe geh&#246;rt streng genommen nicht mehr zur URL, da sie nicht an den Web- / Applikationsserver gesendet wird. Der Browser versucht den mit dem Hash-Zeichen angegebenen Ankerpunkt innerhalb der aktuellen Seite zu finden und scrollt dann direkt an diesen Punkt. Findet der Browser keinen passenden Anker, bleibt die Position unver&#228;ndert. Eine Webseite kann somit ein Inhaltsverzeichnis am Anfang pr&#228;sentieren, deren Links nur reine Ankerwerte enthalten. Ein Klick auf solch einen Link sorgt daf&#252;r, dass der Browser an die Ankerstelle des gew&#252;nschten Kapitels  springt. Dabei wird die Webseite <em>nicht</em> neu geladen. Und genau diesen Effekt macht man sich hier zu Nutze.</p>
<p>Wird der angezeigte Inhalt mittels Ajax oder in einer Flash-Anwendung aktualisiert, so muss der Ankerwert, welcher f&#252;r den angezeigten Inhalt steht, mittels <strong>Java-Script</strong> in der URL angepasst werden. Hierf&#252;r gibt es zwei M&#246;glichkeiten. Entweder man setzt den Wert in <code>window.location.<strong>hash</strong></code> oder man verwendet die Location-Methode <code>window.location.<strong>Replace()</strong></code> mit exakt der aktuellen URL, die nur am Ankerwert ge&#228;ndert wurde (unterscheidet sich die URL <em>vor</em> dem Anker-Hash von der aktuellen URL, startet der Browser eine neue Anfrage und l&#228;dt die entsprechende Seite nach!). Der Unterschied zwischen diesen beiden M&#246;glichkeiten liegt in der Browser-History. Wird die URL mittels der Methode <code>Replace()</code> ersetzt, wird die &#252;berschriebene URL-Angabe im Browser <em>nicht</em> als &#8220;besuchte Seite&#8221; vermerkt, was dazu f&#252;hrt, dass eine Navigation &#8220;zur&#252;ck&#8221; mittels des <strong>Back-Buttons</strong> nicht m&#246;glich ist. Dies kann ein gew&#252;nschter Effekt sein, wenn eine Anwendung ohne die Browser-Navigations-Buttons arbeiten, aber Bookmarking unterst&#252;tzen will.</p>
<p>Da der Web- / Applikationsserver bei einer Anfrage der Art <code>http://somedomain.com/path/to/site/#<em>document-id</em></code> nur die Angabe <code>http://somedomain.com/path/to/site/</code> vom Browser zugesendet bekommt, also keine Anker-Angaben, muss mittels Ajax oder Flash/Flex (f&#252;r Flex siehe: <a title="Flex-Methode von Java-Script aufrufen" href="http://livedocs.adobe.com/flex/2/docs/00001014.html#191735" target="_blank">Accessing Flex from Javascript</a> und <a title="Javascript von Flex aufrufen" href="http://livedocs.adobe.com/flex/2/docs/00001007.html#197592" target="_blank">Accessing Javascript from Flex</a>) zu Beginn zus&#228;tzlich eine neue Anfrage f&#252;r den Dokumenten-Inhalt gestartet werden. Hierzu wertet ein Java-Script nachdem die Webseite eingeladen wurde (Event-Funktion in <code>window.onload</code>) den Inhalt von <code>window.location.<strong>hash </strong></code>aus und ruft die entsprechende Nachlade-Funktion f&#252;r Ajax oder in einer Flash-Anwendung auf.  Die Adresse k&#246;nnte daf&#252;r beispielsweise <code>http://somedomain.com/path/to/document/<em>document-id</em></code>/ lauten. Diese Aktion muss ein Javascript auch dann durchf&#252;hren, wenn sich durch den Back-Button oder durch eine &#8220;seiteninterne&#8221; Navigation der Anker-Wert &#228;nderte. Um diese &#196;nderungen zu &#252;berwachen bietet es sich an, einen <strong>Timer</strong> zu implementieren, der in regelm&#228;&#223;igen Abst&#228;nden &#252;berpr&#252;ft, ob die URL im Browser noch zu dem aktuell angezeigten Inhalt passt. Wenn nicht, wird hier wieder per Ajax-Request bzw. innerhalb der Flash-/Flex-Anwendung der Inhalt angepasst. Eine detaillierte Beschreibung zu diesem &#8220;Ajax-Pattern&#8221; kann unter <a title="Ajax-Patterns - Unique URLs" href="http://ajaxpatterns.org/Unique_URLs" target="_blank">ajaxpatterns.org</a> nachgelesen werden. Hier findet man auch passende Codebeispiele.</p>
<p>(updating url for bookmarking AJAX or Flash applications using the anchor syntax)<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/webdesign/bookmarking-ajax-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PNG im IE mit HTC</title>
		<link>http://brusdeylins.info/webdesign/png-im-ie-mit-htc/</link>
		<comments>http://brusdeylins.info/webdesign/png-im-ie-mit-htc/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 12:45:20 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Grafik]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.brusdeylins.info/blog/2007/09/06/png-im-ie-mit-htc/</guid>
		<description><![CDATA[Mit dem Microsoft Internet Explorer 5.0 wurde ein neuer, nicht standardisierter Mechanismus zum Einbinden sogenannter HTML-Komponenten (HTC) eingef&#252;hrt. Da diese HTCs ausschlie&#223;lich vom Internet Explorer verstanden werden, folgt hier eine weitere M&#246;glichkeit browserabh&#228;ngige F&#228;higkeiten einzubauen. Hier wird eine Erweiterung zum Artikel &#8220;PNG im Internet Explorer&#8221; beschrieben. Es empfiehlt sich, diesen vorher zu lesen.
Die Abk&#252;rzung HTC [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->Mit dem Microsoft Internet Explorer 5.0 wurde ein neuer, nicht standardisierter Mechanismus zum Einbinden sogenannter HTML-Komponenten (<a href="http://msdn.microsoft.com/workshop/components/htc/reference/htcref.asp" target="_blank">HTC</a>) eingef&#252;hrt. Da diese HTCs ausschlie&#223;lich vom Internet Explorer verstanden werden, folgt hier eine weitere M&#246;glichkeit browserabh&#228;ngige F&#228;higkeiten einzubauen. Hier wird eine Erweiterung zum Artikel &#8220;<a href="http://www.brusdeylins.info/webdesign/png-im-internet-explorer/" target="_blank">PNG im Internet Explorer</a>&#8221; beschrieben. Es empfiehlt sich, diesen vorher zu lesen.<!--:--><span id="more-32"></span><!--:de--></p>
<p>Die Abk&#252;rzung HTC steht f&#252;r HTML Component. Durch solche Komponenten kann man das Verhalten bestimmter HTML-Elemente definieren und sauber auslagern. Dazu werden Programmabl&#228;ufe in JScript bzw. VBScript ausgew&#228;hlten Ereignissen bestimmter Elemente zugeordnet. Eingebunden werden diese Komponenten mittels dem nicht Standardkonformen CSS-Attribut <code>behavior: url(datei.htc)</code>. Da dies nur der Internet Explorer versteht, wird auf diesem Weg Code eingebunden, der ausschlie&#223;lich f&#252;r   diesen Browser g&#252;ltig ist. So zum Beispiel auch ein Script, das den Microsoft-PNG-Filter den einzelnen Grafikelementen einer Seite automatisch zuordnet.</p>
<p>Dies macht das &#8220;<a href="http://www.twinhelix.com/css/iepngfix/" target="_blank">IE PNG Fix</a>&#8220;, welches auf TwinHelix vorgestellt wird und f&#252;r den Internet Explorer ab der Version 5.5 eingesetzt werden kann. Hierbei handelt es sich um die gleiche technische Grundlage, die im Artikel &#8220;<a href="http://www.brusdeylins.info/blog/2007/08/08/png-im-internet-explorer/" target="_blank">PNG im Internet Explorer</a>&#8221; beschrieben wird. Nur werden diese CSS-Informationen automatisch mittels eines HTCs den einzelnen Elementen zugeordnet. Man muss sich somit in der Gestaltung der Style-Sheet-Dateien diesbez&#252;glich keine gesonderten &#220;berlegungen machen.</p>
<p>Wie oben schon angesprochen handelt es sich bei dem CSS-Attribut <code>behavior</code> um kein Standardkonformes Attribut, was dazu f&#252;hrt, dass eine CSS-Validierung fehlschl&#228;gt.  Man kann allerdings solche &#220;berpr&#252;fungen ggf. austricksen, indem man das HTC mittels eines JavaScripts einbindet. Der Code hierf&#252;r wird im mitgelieferten Beispiel in den Sourcen dargestellt und ist hier nochmals aufgelistet:</p>
<pre>
&lt;script type="text/javascript"&gt;
    if (document.all &amp;&amp; document.styleSheets &amp;&amp; document.styleSheets[0] &amp;&amp; document.styleSheets[0].addRule)
    {
        // Feel free to add rules for specific tags only, you just have to call it several times.
        document.styleSheets[0].addRule('*', 'behavior: url(iepngfix.htc)');
    }
&lt;/script&gt;</pre>
<p><!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/webdesign/png-im-ie-mit-htc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Theme-Design und CSS</title>
		<link>http://brusdeylins.info/webdesign/theme-design-und-css/</link>
		<comments>http://brusdeylins.info/webdesign/theme-design-und-css/#comments</comments>
		<pubDate>Sun, 02 Sep 2007 15:16:09 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.brusdeylins.info/blog/2007/09/02/theme-design-und-css/</guid>
		<description><![CDATA[Das Internet bietet viele Wordpress-Themes zum Herunterladen, mit denen man seinen eigenen Blog optisch gestalten kann. Ist jedoch mehr Individualit&#228;t erw&#252;nscht, muss man sich die M&#252;he machen und ein eigenes Theme gestalten. Neben Kenntnisse in einem modernen Grafiktool, wie zum Beispiel in Adobe Photoshop und dem n&#246;tigen grafischen Feingef&#252;hl, sowie Grundkenntnisse in PHP, ist auch [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->Das Internet bietet viele Wordpress-Themes zum Herunterladen, mit denen man seinen eigenen Blog optisch gestalten kann. Ist jedoch mehr Individualit&#228;t erw&#252;nscht, muss man sich die M&#252;he machen und ein eigenes Theme gestalten. Neben Kenntnisse in einem modernen Grafiktool, wie zum Beispiel in Adobe Photoshop und dem n&#246;tigen grafischen Feingef&#252;hl, sowie Grundkenntnisse in PHP, ist auch das Studium der Dokumente auf der WordPress-Webseite zum Thema <a href="http://codex.wordpress.org/Blog_Design_and_Layout" target="_blank">Design und Layout</a> erforderlich. Fr&#252;her oder sp&#228;ter st&#246;&#223;t man unter Umst&#228;nden auf das Problem, dass seine Seite von den einzelnen Webbrowsern mit leichten Abweichungen dargestellt wird. Abst&#228;nde und Breitenangaben scheinen unterschiedlich interpretiert zu werden.<!--:--><span id="more-31"></span><!--:de--></p>
<h3>CSS-Default-Werte</h3>
<p>Die einzelnen Browser zeigen einen Inhalt mit unterschiedlichen Vorgabewerten an. Abst&#228;nde zwischen Abs&#228;tze und &#220;berschriften, sowie Schriftgr&#246;&#223;en weichen leicht voneinander ab, zumindest wenn diese nicht explizit in einem Style-Sheet definiert werden. Um zu vermeiden, dass eine CSS-Definition zur H&#228;lfte mit Normierungswerten best&#252;ckt ist, empfiehlt es sich, eine extra Definitionsdatei f&#252;r das Zur&#252;cksetzen aller Werte anzulegen und einzubinden. Hier bieten sich die YUI-CSS-Definitionen von  Yahoo (BSD License) zum Zur&#252;cksetzen der Abst&#228;nde (<a title="yui reset style sheet" href="http://developer.yahoo.com/yui/reset/" target="_blank">Reset</a>) und Normieren der Schriftgr&#246;&#223;en (<a title="yui font style sheet" href="http://developer.yahoo.com/yui/fonts/" target="_blank">Font</a>) an. Leider werden hier sogenannte CSS-Browserweichen eingesetzt, was dazu f&#252;hrt, dass das CSS nicht valide ist.</p>
<p>Wem kleine Abweichungen in der Font-Normierung nichts ausmachen, kann von mir das Reset-Style-Sheet &#8220;<a title="style_reset.css" href="http://www.brusdeylins.info/content/webdesign/style_reset.css" target="_blank">style_reset.css</a>&#8221; herunterladen und in seine Projekte einsetzten (BSD License). Der Vorteil dieser Definition besteht darin, dass sie die <a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank">W3C-CSS-Pr&#252;fung</a> besteht (siehe Icon im Fu&#223;bereich)! Dieses CSS kann dann mittels <code>@import url('style_reset.css');</code> am Anfang des jeweiligen Haupt-Style-Sheets eingebunden werden. Danach sollte allerdings darauf geachtet werden, dass alle Schriftgr&#246;&#223;en nur noch prozentual angegeben werden. Welche Prozentwerte f&#252;r welche Gr&#246;&#223;enpixel stehen wird in der CSS-Datei als Kommentar aufgelistet.</p>
<h3>CSS-Box-Modell</h3>
<p>Leider interpretiert der Microsoft Internet-Explorer 5 / 6 das CSS-Box-Modell eines 
<a href="http://brusdeylins.info/media/post-images/cssboxmodel.jpg" title="Css-Box-Model
Bildquelle: Brusdeylins.Info" rel="lightbox[singlepic9]" >
	<img class="ngg-singlepic ngg-left" src="http://brusdeylins.info/media/cache/9_web20_150x400_cssboxmodel.jpg" alt="Css-Box-Model" title="Css-Box-Model" />
</a>
HTML-Elements mit fester Breitenangabe etwas anders, als es urspr&#252;nglich <a href="http://www.w3.org/TR/CSS21/box.html" target="_blank">gedacht</a> war. Innerhalb seiner Breite liegen der sichtbare Rahmen (Border), sowie der innere Abstand (Padding) eines Elementes.  Dies bedeutet (und dies auch nur sicher, wenn die Breite angegeben wurde), je gr&#246;&#223;er diese beide Parameter sind, um so weniger Platz bleibt f&#252;r den Inhalt eines Elementes. Der CSS-Standard definiert die Interpretation der Breitenangabe hier anders. Die Breitenangabe gilt dem Inhalt. Rahmen, sowie innerer und &#228;u&#223;erer Abstand (Margin) liegen au&#223;erhalb dieser Breitenangabe. Man mu&#223; sie also zu dieser Angabe addieren, um die komplette Breite zu ermitteln. Welches der beiden Vorgehen intuitiver ist, vor allem auch mit dem Wissen, das die Hintergrundfarbe bzw. das Hintergrundbild auch noch im Padding-Bereich sichtbar ist, sei mal dahingestellt. Die unterschiedlichen Interpretationen des CSS-Box-Modells erschweren das Gestalten einer Webseite bzw. das Erstellen von Wordpress-Themes, welche in der Regel aus einer Kombination mehrerer DIV-Elemente besteht.</p>
<p>Es gibt unterschiedliche Herangehensweisen, um dieses Problem in den Griff zu bekommen. Eine besteht in der Definition unterschiedlicher Breitenangaben, eine f&#252;r den Internet Explorer und eine f&#252;r die restlichen Browser. Dies kann mit so genannten CSS-Browserweichen (CSS-Hacks) in einer globalen Style-Sheet-Definition erreicht werden. Da solche CSS-Dateien aber nicht Standardkonform sind und auf Interpretations-Schw&#228;chen der einzelnen Browser basieren, ist davon abzuraten. Eine weitere M&#246;glichkeit besteht im Einsatz von Kommentar- bzw. PHP-Browserweichen. Beispiele hierf&#252;r findet man in dem Artikel “<a href="http://www.brusdeylins.info/webdesign/png-im-internet-explorer/" target="_blank">PNG im Internet Explorer</a>“.</p>
<p>Will man allerdings nicht zwei CSS-Dateien pflegen, gibt es noch eine weitere Herangehensweise. 
<a href="http://brusdeylins.info/media/post-images/divandmargin.jpg" title="Padding Simulation mit verschachtelten DIVs - Bildquelle: Brusdeylins.Info" rel="lightbox[singlepic12]" >
	<img class="ngg-singlepic ngg-right" src="http://brusdeylins.info/media/cache/12_web20_150x400_divandmargin.jpg" alt="Padding Simulation mit verschachtelten DIVs" title="Padding Simulation mit verschachtelten DIVs" />
</a>
Beide Interpretationen des CSS-Box-Modells haben eins gemeinsam: der &#228;u&#223;ere Abstand (Margin) liegt wirklich au&#223;erhalb der Breitendefinition. Verzichtet man nun auf den Rand (Border) und den inneren Abstand (Padding) komplett (Wert = 0px, oder Einsatz von style_reset.css, s.o.) werden die Angaben von allen Browsern gleich interpretiert. Um nun auch einen inneren Abstand in einem DIV-Element zu realisieren, muss ein weiteres DIV-Element, welches den eigentlichen Inhalt tr&#228;gt, in dieses gelegt werden. Der Margin-Wert des inneren DIVs entspricht dann dem urspr&#252;nglichen Padding-Wert. Jetzt muss noch eine Eigenart der vertikalen Margin-Werte behandelt werden. Wie im CSS 2.1 Standard beschrieben schl&#228;gt hier das so genannte <a href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins" target="_blank">Collapsing-Margins</a> zu, was dazu f&#252;hrt, dass der &#8220;margin-top&#8221; Wert des inneren DIVs gerne komplett ignoriert wird. (<em>Der Internet-Explorer 5/6 h&#228;lt sich hier nicht an den Standard und ordnet die Elemente wie erwartet an. Er addiert vertikale Margin-Werte grunds&#228;tzlich auf, was meist zu unerw&#252;nscht gr&#246;&#223;eren Abst&#228;nden zwischen Elementen f&#252;hrt.</em>) Hier hilft ein Trick, welcher auch aus dem Standard herausgelesen werden kann: Die einzelnen DIVs bekommen eine Overflow-Definition mit einem Wert ungleich &#8220;visible&#8221;. Da in der Regel kein Text &#252;ber die DIV-Content-Grenzen hinweg angezeigt werden soll, kann hier die Definition <code>overflow: hidden;</code> eingebunden werden. Auf diese Art und Weise k&#246;nnen einheitliche WordPress-Themes mit validen CSS-Definitionen erstellt werden.</p>
<h3>BluePrintCSS</h3>
<p>Eine sch&#246;ne Sammlung  nutzbarer CSS-Definitionen liefert auch Google mit ihrem <a href="http://www.blueprintcss.org/" target="_blank">BluePrintCSS</a>. Der Schwerpunkt dieses CSS-Frameworks liegt in der Typographie. So wird auch ein Stylesheet f&#252;r den Druck geliefert. Auch zieht die Idee eines Grid-Layouts aus dem Print-Design-Umfeld in die Stylesheets ein. Dadurch stellt ein Mehrspalten-Layout kein Problem mehr dar. Die Eigenarten des Internet-Explorers wurden hier in einem eigenen Stylesheet sauber getrennt abgelegt.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/webdesign/theme-design-und-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inhalte &#252;ber Formular-Elemente</title>
		<link>http://brusdeylins.info/webdesign/inhalte-ueber-formular-elemente/</link>
		<comments>http://brusdeylins.info/webdesign/inhalte-ueber-formular-elemente/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 13:24:42 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.blog.brusdeylins.info/blog/2007/08/30/inhalte-ueber-formular-elemente/</guid>
		<description><![CDATA[Vielen ist bestimmt schon aufgefallen, da&#223; sich Formularelemente auf einer Webseite, welche im Internet Explorer angezeigt wird, gerne in den Vordergrund dr&#228;ngeln.  Dieser Effekt nervt vor allem, wenn individuelle Tooltips mittels DIV-Layer f&#252;r eine Eingabemaske eingebaut werden.
Die L&#246;sung dieses Problems besteht in der Integration eines iFrames, welches zwischen den Formular-Elementen und dem dar&#252;ber anzuzeigenden [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->Vielen ist bestimmt schon aufgefallen, da&#223; sich Formularelemente auf einer Webseite, welche im Internet Explorer angezeigt wird, gerne in den Vordergrund dr&#228;ngeln.  Dieser Effekt nervt vor allem, wenn individuelle Tooltips mittels DIV-Layer f&#252;r eine Eingabemaske eingebaut werden.<!--:--><span id="more-33"></span><!--:de--><br />
Die L&#246;sung dieses Problems besteht in der Integration eines iFrames, welches zwischen den Formular-Elementen und dem dar&#252;ber anzuzeigenden Inhalt liegt. Dieser Trick wird auch gerne &#8220;Iframe Shim&#8221; genannt. Ein Beispielcode kann im <a href="http://www.soxiam.com/Code/UsingIframeShimToCoverOverFormSelectBoxes" target="_blank">Soxiam Wiki</a> gefunden werden und wird hier nochmals aufgelistet:</p>
<pre>&lt;html&gt;
&lt;head&gt;
 &lt;script&gt;
  function DivSetVisible(state)
  {
   var DivRef = document.getElementById('PopupDiv');
   var IfrRef = document.getElementById('DivShim');
   if(state)
   {
    DivRef.style.display = "block";
    IfrRef.style.width = DivRef.offsetWidth;
    IfrRef.style.height = DivRef.offsetHeight;
    IfrRef.style.top = DivRef.style.top;
    IfrRef.style.left = DivRef.style.left;
    IfrRef.style.zIndex = DivRef.style.zIndex - 1;
    IfrRef.style.display = "block";
   }
   else
   {
    DivRef.style.display = "none";
    IfrRef.style.display = "none";
   }
  }
 &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;form&gt;
  &lt;select&gt;
   &lt;option&gt;A Select Box is Born ....&lt;/option&gt;
  &lt;/select&gt;
 &lt;/form&gt;
 &lt;div
  id="PopupDiv"
  style="position:absolute; top:25px; left:50px; padding:4px; display:none; background-color:#000000; color:#ffffff; z-index:100"&gt;
  .... and a DIV can cover it up&lt;br&gt;through the help of an IFRAME.
 &lt;/div&gt;
 &lt;iframe
  id="DivShim"
  src="javascript:false;"
  scrolling="no"
  frameborder="0"
  style="position:absolute; top:0px; left:0px; display:none;"&gt;
 &lt;/iframe&gt;
 &lt;br&gt;
 &lt;br&gt;
  &lt;a href="#" onclick="DivSetVisible(true)"&gt;Click to show DIV.&lt;/a&gt;
 &lt;br&gt;
 &lt;br&gt;
  &lt;a href="#" onclick="DivSetVisible(false)"&gt;Click to hide DIV.&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>F&#252;r das oben angesprochene Problem mit den Tooltips m&#252;ssen die Layer nun entsprechend automatisch aktiviert bzw. deaktiviert werden. Dazu wird das Mouse-Move-Event in Kombination eines Timers eingesetzt. Ein gutes Beispiel hierf&#252;r findet man unter anderem auch auf der Seite von <a href="http://www.dyn-web.com/dhtml/tooltips/tooltip-selects.html" target="_blank">Dynamic Web Coding</a>.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/webdesign/inhalte-ueber-formular-elemente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PNG im Internet Explorer</title>
		<link>http://brusdeylins.info/webdesign/png-im-internet-explorer/</link>
		<comments>http://brusdeylins.info/webdesign/png-im-internet-explorer/#comments</comments>
		<pubDate>Wed, 08 Aug 2007 21:14:12 +0000</pubDate>
		<dc:creator>Matthias Brusdeylins</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Grafik]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.blog.brusdeylins.info/blog/2007/08/08/png-im-internet-explorer/</guid>
		<description><![CDATA[
Um diesen Browser dazu zu bewegen, die normierte Transparenz einer PNG-Datei anzuzeigen, m&#252;ssen einige Kniffe vollzogen werden. Der Grundschritt besteht im Einsatz des Microsoft-Filters AlphaImageLoader. Bei Grafiken, direkt im Inhalt einer Seite, kann der Internet Explorer mit folgendem Konstrukt zur Transparenz &#252;berredet werden (f&#252;r diesen Anwendungsbereich gibt es im Web auch unterschiedliche JavaScript-Programme, welche nachtr&#228;glich [...]]]></description>
			<content:encoded><![CDATA[<p><!--:de-->
<a href="http://brusdeylins.info/media/post-images/bcxp-wow.jpg" title="Bildquelle: wow.bcxp.de" rel="lightbox[singlepic40]" >
	<img class="ngg-singlepic ngg-right" src="http://brusdeylins.info/media/cache/40_web20_150x400_bcxp-wow.jpg" alt="bcxp-wow.jpg" title="bcxp-wow.jpg" />
</a>
Transparente PNG-Grafiken erm&#246;glichen die Gestaltung von sch&#246;nen und effektvollen Webseiten. Sie k&#246;nnen den Hintergrund durchschimmern lassen und haben nicht den von GIF-Grafiken bekannten verfranzten Rand (siehe z.B. die <a title="WOW BcxP Clan" href="http://bcxp.de/" target="_blank">BcxP-Clan-Seite</a>). Die heutigen, modernen Web-Browser kommen inzwischen alle ohne Probleme mit solchen Grafiken zurecht. Alle? Nicht ganz. Der Microsoft® Internet Explorer in der Version 5.5 bis 6.x ben&#246;tigt hier eine gesonderte Handhabung&#8230;<!--:--><span id="more-24"></span><!--:de--></p>
<p>Um diesen Browser dazu zu bewegen, die normierte Transparenz einer PNG-Datei anzuzeigen, m&#252;ssen einige Kniffe vollzogen werden. Der Grundschritt besteht im Einsatz des Microsoft-Filters <a href="http://msdn2.microsoft.com/en-us/library/ms532969.aspx" target="_blank">AlphaImageLoader</a>. Bei Grafiken, direkt im Inhalt einer Seite, kann der Internet Explorer mit folgendem Konstrukt zur Transparenz &#252;berredet werden (f&#252;r diesen Anwendungsbereich gibt es im Web auch unterschiedliche JavaScript-Programme, welche nachtr&#228;glich alle IMG-Tags entsprechend erweitern. Bitte beachten: Wenn mittels der Filteranweisung ein Bild einem IMG-Tag hinzugef&#252;gt wird, dann sollte die Source auf ein transparentes GIF zeigen.):</p>
<pre>&lt;img src="blank.gif" width="xxx" height="xxx" alt="xxx" <strong>style="filter:
progid:DXImageTransform.Microsoft.AlphaImageLoader(src='Bild.png');"</strong> &gt;</pre>
<p>Werden allerdings PNG-Grafiken mittels CSS-Definitionen als Hintergrundbilder in HTML-Elemente wie z.B. dem DIV eingesetzt, muss man schon mehrere Schritte unternehmen:</p>
<ol>
<li>Es muss unterschieden werden, ob ein moderner Browser oder der Internet Explorer 5.5 &#8211; 6.x die Webseite besucht.</li>
<li>F&#252;r den Internet-Explorer muss der Filter im Cascading Style Sheet (CSS) angegeben werden.</li>
<li>Hyperlinks in HTML-Elementen mit PNG-Hintergrund m&#252;ssen ggf. gesondert behandelt werden.</li>
</ol>
<h2>1. Die Browser-Weiche</h2>
<p>Das Ziel dieser Weiche besteht in der Ermittlung des Browsers, welcher eine Anfrage an den Webserver stellt. Dies ist von N&#246;ten, da wir f&#252;r den Internet Explorer eine spezielle Filterdefinition im CSS (siehe unten) ben&#246;tigen, die wiederum andere Browser nicht verstehen.</p>
<h3>Die PHP-Weiche</h3>
<p>Es gibt unterschiedliche M&#246;glichkeiten das Problem mit der Filterzuordnung zu l&#246;sen. Eine von mir bevorzugte L&#246;sung besteht darin, unterschiedliche Style-Sheet-Dateien zu erstellen, eine f&#252;r moderne Webbrowser und eine f&#252;r den Internet Explorer 5.5 &#8211; 6.x. Diese Dateien k&#246;nnen dann abh&#228;ngig vom Browser-Request in die Webseite eingebunden werden. Der fragende Browser kann mittels PHP ermittelt werden. Der Aufruf &#8220;<code>&lt;?php echo $_SERVER ["HTTP_USER_AGENT"]; ?&gt;</code>&#8221; liefert hier beispielsweise &#8220;<code>Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)</code>&#8220;. Bedient man sich nun der PHP-Funktion <a href="http://de2.php.net/strstr" target="_blank">strstr()</a>, kann man feststellen, ob ein bestimmter Teilstring in dieser Angabe vorkommt. Uns interessiert hier das Vorkommen von &#8220;<em>MSIE 5</em>&#8221; und &#8220;<em>MSIE 6</em>&#8221; (Der Internet Explorer 7 kommt mit PNG-Grafiken zurecht, versteht allerdings auch die Filter. Theoretisch reicht auch eine Pr&#252;fung auf ausschlie&#223;lich &#8220;<em>MSIE</em>&#8220;). Eine PHP-Weiche k&#246;nnte nun folgenderma&#223;en aussehen:</p>
<pre>&lt;?php
    if ((strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 5"))
        ||
        (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 6"))) {
?&gt;
    &lt;style type="text/css" media="screen"&gt;
        /* IE 5-6 : modifiziere Hauptstylesheet
                    oder binde neues ein  */
    &lt;/style&gt;
&lt;?php
    } else {
?&gt;
    &lt;style type="text/css" media="screen"&gt;
        /* moderne Browser: modifiziere Hauptstylesheet
                            oder binde neues ein  */
    &lt;/style&gt;&lt;?php
    }
?&gt;</pre>
<h3>Die Kommentar-Weiche in der HTML</h3>
<p>Ein weiterer Weg besteht im Einsatz einer Kommentar-Weiche direkt im HTML-Code, welche der Internet-Explorer versteht. Hier kann sogar ein Versionsvergleich des Browsers eingebaut werden. Das folgende Beispiel definiert eine CSS-Anpassung speziell f&#252;r den IE zwischen der Version 5.5 und 6.x.</p>
<pre>&lt;!--[if lt IE 7]&gt;
&lt;!--[if gte IE 5.500]&gt;
    &lt;style type="text/css"&gt;
        /* definiere hier speziell f&#252;r den Internet Explorer */
    &lt;/style&gt;
&lt;![endif]--&gt;
&lt;![endif]--&gt;</pre>
<h3>Der CSS-Hack</h3>
<p>Es ist nicht wirklich sch&#246;n, aber eine weitere M&#246;glichkeit der Unterscheidung besteht im Ausnutzen der differenzierten Interpretation der CSS-Definitionen. Der Internet Explorer in der Version 5.x-6.x versteht die CSS-Schreibweise &#8220;<code>html &gt; body #TagID {}</code>&#8221; nicht. Daf&#252;r kommt er als einziger mit der Schreibweise &#8220;<code>* html #TagID {}</code>&#8221; zurecht (f&#252;r ihn ist also das HTML-Element nicht das Root-Element). So ist es uns m&#246;glich, zwei unterschiedliche CSS-Definitionen f&#252;r ein und dasselbe Element in eine CSS-Datei einzubinden. Dies geht allerdings nur solange gut, wie die Browser entsprechend nicht dazu lernen! (siehe auch: <a href="http://www.lipfert-malik.de/webdesign/tutorial/bsp/css-weiche-filter.html" target="_blank">Webseite von Kristof Lipfert</a>).</p>
<h2>2. Microsoft-Filterdefinition im CSS</h2>
<p>F&#252;r den Internet-Explorer muss der Microsoft-Filter <a href="http://msdn2.microsoft.com/en-us/library/ms532969.aspx" target="_blank">AlphaImageLoader</a> im Style-Sheet angegeben werden. Dieser Filter l&#228;dt das PNG Bild ein und pr&#228;sentiert dieses mitsamt der Transparenz. Der Parameter <code>sizingMethod='scale'</code> sorgt daf&#252;r, dass das Bild ggf. gestreckt oder in einer Wiederholung dargestellt werden kann.</p>
<p><em><strong>ACHTUNG</strong></em><strong>: </strong>Die Bild-URL in der Filterdefinition darf keine Sonderzeichen, wie z.B. ein Leerzeichen enthalten, ansonsten kann es passieren, das sich das PNG-Hintergrundbild des entsprechenden HTML-Elements (meist DIV) ungewollt an die obere Kante des Vorg&#228;nger-Elements ausrichtet! Auch sollte hier die URL immer komplett angegeben werden.</p>
<p>Das folgende Beispiel definiert f&#252;r ein HTML-Element ein PNG-Hintergrundbild, welches in den unterschiedlichen Browsern mit richtiger Transparenz dargestellt wird (es wird der CSS-Hack eingesetzt).</p>
<pre>#elementID {  		     /* f&#252;r alle Browser g&#252;ltig */
        /* PNG im Hintergrund wiederholen */
        background-repeat: repeat;
        background-position: center top;
}

html &gt; body #elementID {     /* moderner Browser */
        background: url("./background.png")
}

* html #elementID {          /* Internet Explorer */
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src="http://.../background.png", sizingMethod="scale");
}</pre>
<h2>3. Herstellen der Link-Funktionalit&#228;t</h2>
<p>HTML-Elemente (z.B. DIV-Tags), welche Links umschlie&#223;en und eine PNG-Datei als Hintergrundbild enthalten, verhindern im Internet Explorer 5/6 ggf. die korrekte Funktionalit&#228;t der Hyperlinks. Diese lassen sich meist nicht mehr anklicken. Hier gibt es einen an sich unerkl&#228;rlichen Trick der angewendet werden muss: die Link-Tags <code>&lt;a&gt;</code> werden mittels CSS explizit relativ positioniert:</p>
<pre>*a {position: relative;}</pre>
<p>Damit dies auch wirklich zum erw&#252;nschten Ergebnis f&#252;hrt, d&#252;rfen die Elemente mit PNG-Hintergrund, in denen solche Links enthalten sind, <strong>NICHT</strong> relativ positioniert werden!<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://brusdeylins.info/webdesign/png-im-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
