<?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>PehBehBeh &#187; Webentwicklung</title>
	<atom:link href="http://pehbehbeh.de/webentwicklung/feed/" rel="self" type="application/rss+xml" />
	<link>http://pehbehbeh.de</link>
	<description>Erfahrungen eines Hobby-Webentwicklers</description>
	<lastBuildDate>Mon, 21 May 2012 07:18:38 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>5+ CSS-Methoden um Text durch Bilder zu ersetzen</title>
		<link>http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/</link>
		<comments>http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 05:06:32 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=2249</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2012/03/css.png" class="attachment-post-thumbnail wp-post-image" alt="CSS" title="CSS" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Die wohl bekannteste Methode, Text durch ein Bild zu ersetzen (z.B. in einem Logo), ist wahrscheinlich die -9999px-Variante.  Ein Artikel im 37signals-Blog brachte mich dazu, über weitere Methoden nachzudenken. &#8211; In diesem Artikel habe ich sie zusammengefasst. Methode 1 &#8211; &#8230; <a href="http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2012/03/css.png" class="attachment-post-thumbnail wp-post-image" alt="CSS" title="CSS" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Die wohl bekannteste Methode, Text durch ein Bild zu ersetzen (z.B. in einem Logo), ist wahrscheinlich die -9999px-Variante.  Ein <a href="http://37signals.com/svn/posts/3126-another-9999px">Artikel im 37signals-Blog</a> brachte mich dazu, über weitere Methoden nachzudenken. &#8211; In diesem Artikel habe ich sie zusammengefasst.</p>
<p><hr style="clear: both;" /></p>
<h2>Methode 1 &#8211; text-indent: -9999px</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp;
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> <span class="re3">-9999px</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>Der Klassiker muss hier natürlich erwähnt werden. <img src='http://pehbehbeh.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Methode 2 - line-height: 9999px</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background-image</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.gif</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp;
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">line-height</span><span class="sy0">:</span> <span class="re3">9999px</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>Ist mir erst vor Kurzem zufällig auf <a href="http://spreeblick.com/">Spreeblick</a> aufgefallen.</p>
<h2>Methode 3 &#8211; display: none</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background-image</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.gif</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re0">#logo</span> span <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>Diese Methode erfordert ein zusätzliches &lt;span&gt;-Element.</p>
<h2>Methode 4 &#8211; height: 0</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">padding-top</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp;
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>Hier wird <code>padding-top</code> für die Höhe des Bilder verwendet. <strong>Quelle:</strong> <a href="http://37signals.com/svn/posts/3126-another-9999px">Another -9999px</a></p>
<h2>Methode 5 - text-indent: 100%</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp;
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> <span class="re3">100%</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">white-space</span><span class="sy0">:</span> <span class="kw2">nowrap</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>Performanter als die -9999px-Variante, da hier keine riesige Box vom Browser gerendert werden muss. <strong>Quelle:</strong> <a href="http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/">Replacing the 9999px hack (new image replacement)</a></p>
<h2>Methode 6 &#8211; Glider/Levin</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re0">#logo</span> span <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">100%</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">100%</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span> &nbsp;
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><strong>Quelle:</strong> <a href="http://meiert.com/de/publications/articles/20050513/#toc-gilder-levin">Glider-/Levin-Methode</a></p>
<h2>Methode 7 &#8211; Pseudo-Elemente</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp;<span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp;<span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re0">#logo</span><span class="re2">:before </span><span class="br0">&#123;</span>
&nbsp; &nbsp;<span class="kw1">content</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">font-size</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp;<span class="kw1">line-height</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><strong>Quelle:</strong> <a href="http://nicolasgallagher.com/css-image-replacement-with-pseudo-elements/">CSS image replacement with pseudo-elements (NIR)</a></p>
<h2>Methode 8 &#8211; font: 0/0 a</h2>
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="re0">#logo</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">logo.png</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">font</span><span class="sy0">:</span> <span class="nu0">0</span>/<span class="nu0">0</span> a<span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">text-shadow</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="kw2">transparent</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="kw2">transparent</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><strong>Quelle:</strong> <a href="https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757c9e03dda4e463fb0d4db5a5f82d7">Update CSS image replacement technique (HTML5 Boilerplate)</a></p>
<p>Die Snippets habe ich auch als <a href="https://gist.github.com/1960110">Gist auf GitHub</a> angelegt. Alle meine Gists sind außerdem nach Kategorie sortiert im <a href="http://dev.pehbehbeh.de/snippets/">Snippet-Bereich meiner DevZone</a> zu finden.</p>
<p><strong><em>Welche von den oben genannten Methoden nutzt ihr?<br />
Oder gibt es vielleicht noch bessere Wege?</em></strong></p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/html-css/" title="Alle Artikel in HTML &amp; CSS ansehen">HTML &amp; CSS</a> |
    <strong>Tags:</strong> 
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/#comments">4 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/html-css/methoden-text-bilder-ersetzen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Image Data URIs: Beispiel &amp; Generator</title>
		<link>http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/</link>
		<comments>http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 15:42:09 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Adresse]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Attribut]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Bild]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Generator]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Image Data URI]]></category>
		<category><![CDATA[Nachteile]]></category>
		<category><![CDATA[Quelltext]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Vorteile]]></category>
		<category><![CDATA[Whitespace]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=2220</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2012/03/url.png" class="attachment-post-thumbnail wp-post-image" alt="URL" title="URL" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Image Data URIs sind eine nützliche Methode HTTP-Requests beim Aufruf einer Seite zu sparen. Anstelle der normalen Adresse zu einem Bild, ist es möglich die Bilddaten in Form eines Base64-kodierten Strings innerhalb des src-Attributs zu platzieren. Ein kleines Beispiel Zur &#8230; <a href="http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2012/03/url.png" class="attachment-post-thumbnail wp-post-image" alt="URL" title="URL" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Image Data URIs sind eine nützliche Methode HTTP-Requests beim Aufruf einer Seite zu sparen. Anstelle der normalen Adresse zu einem Bild, ist es möglich die Bilddaten in Form eines <a href="http://de.wikipedia.org/wiki/Base64">Base64</a>-kodierten Strings innerhalb des src-Attributs zu platzieren.</p>
<p><hr style="clear: both;" /></p>
<h2>Ein kleines Beispiel</h2>
<p>Zur Demonstration habe ich zwei identische Bilder eingebunden:</p>
<blockquote><p><img class="size-full wp-image-2229" title="Pfeil nach rechts" src="http://pehbehbeh.de/wp-content/uploads/2012/03/arrow_right.png" alt="" width="128" height="128" /><img class="" title="Pfeil nach rechts" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNQTFRFBAcHwMHBFBcX7+/voaKiQ0VFIyYm4ODggYODYmRk0NDQU1VVsLGxkZKSMzY2cnR0////l9YmXAAAABF0Uk5T/////////////////////wAlrZliAAAC7klEQVR42uyayW4sIQxFzTzUlP//2tcvUhaRuuDamGpFwote4tM2UNi+9PVhowWwABbAAlgAC2ABLIA/CpD2vAVLPxZC9vUxAOdLpDdmtyPNB3A+UMNONgMPIBVLPdvMNAATCLLTTwFIoPvvTWnUAVwmlm1OF8BEYpo9NAEuEhgWBATAnSSyWHUAqiWhWa8BsIv9v8yPA3gasjIKMOi/T9AB2GnYjhGAascBOvugCeA0/BNVMcCp4p+sEwJcpGRBBmBIzQ4JgIt6AJQEAJei/0YSbgESqZpnAwRdgMgFMETPhICeCcB9CG4AanOxy+qF4AagNNcy7lILwXsA117r9eiu/BwZBoAHlvLcPBQGwIn8F26pYHGABAYz8fKwwwAezuYeR3PwFmDDtxMnDxEGsJz9zMhDAgES80DBedhBgJ17otE8ZBAg868ULA8BBAiSOw0p4ONMgFfg+lcjCCC81b/SJjgGmgD9PJjZAL08YABpBKCdBwzADAE08/AMgCuDAHUM4LAf3YTm/OgpcOWzx/Do3YUVAzhlAObUuopF34Je9O+epSQpzI0g+pzPsWcDgM30CwSoTID+V7BRHr59lPIAMlwiVRQgMAAYowwLP8sPGACO/vcEAwaoKEBmFageL06xhw13kORwgAwAJG6HYGOU56kLwK3Nb3s0JOlRGV5V3GoP3AG0qzMv6aFlXptOs1Hc7NnTrFkRGID7Vm18JgD3AOaZADTa9arN2uj4AMkqAhjJyObQ819kQ6swPwFtAKeVhCqdG1Yd/14+uvWTN0B/eJ1n+++O78uo/9MNChjKXP+AhGNogFm6ShpAxOKn5R+V8Rg74/xxhExJJCSAZESolEtwHEE1GSpm447p4q4u5+OM6WxGxXQcQaODC7Hi8FVZkk53RNV/zwb4XzB0bsbNMxfky3rdXm7iYDfv2MvJhM3VX+H3hgjlkCmbR6Td1Rjjj9ePGVhkidsXwAJYAAtgASyABbAAPg7wT4ABAEYSjudgB/2SAAAAAElFTkSuQmCC" alt="" width="128" height="128" /></p>
<p><em>links mit Adresse im src-Attribut,</em><br />
<em>rechts mit Image Data URI</em></p></blockquote>
<p>An dieser Stelle lohnt sich ein Blick in den Quelltext. Dort findet man folgenden Inhalt im src-Attribut des zweiten Bildes:
<div class="pms">
<div class="txt">
<pre class="de1">data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNQTFRFBAcHwMHBFBcX7+/voaKiQ0VFIyYm4
ODggYODYmRk0NDQU1VVsLGxkZKSMzY2cnR0////l9YmXAAAABF0Uk5T/////////////////////wAlrZliAAAC7klEQVR42uyayW4sIQxFzTzUlP//2tcvUhaRuuDamGpFwo
te4tM2UNi+9PVhowWwABbAAlgAC2ABLIA/CpD2vAVLPxZC9vUxAOdLpDdmtyPNB3A+UMNONgMPIBVLPdvMNAATCLLTTwFIoPvvTWnUAVwmlm1OF8BEYpo9NAEuEhgWBATAnSS
yWHUAqiWhWa8BsIv9v8yPA3gasjIKMOi/T9AB2GnYjhGAascBOvugCeA0/BNVMcCp4p+sEwJcpGRBBmBIzQ4JgIt6AJQEAJei/0YSbgESqZpnAwRdgMgFMETPhICeCcB9CG4A
anOxy+qF4AagNNcy7lILwXsA117r9eiu/BwZBoAHlvLcPBQGwIn8F26pYHGABAYz8fKwwwAezuYeR3PwFmDDtxMnDxEGsJz9zMhDAgES80DBedhBgJ17otE8ZBAg868ULA8BB
AiSOw0p4ONMgFfg+lcjCCC81b/SJjgGmgD9PJjZAL08YABpBKCdBwzADAE08/AMgCuDAHUM4LAf3YTm/OgpcOWzx/Do3YUVAzhlAObUuopF34Je9O+epSQpzI0g+pzPsWcDgM
30CwSoTID+V7BRHr59lPIAMlwiVRQgMAAYowwLP8sPGACO/vcEAwaoKEBmFageL06xhw13kORwgAwAJG6HYGOU56kLwK3Nb3s0JOlRGV5V3GoP3AG0qzMv6aFlXptOs1Hc7Nn
TrFkRGID7Vm18JgD3AOaZADTa9arN2uj4AMkqAhjJyObQ819kQ6swPwFtAKeVhCqdG1Yd/14+uvWTN0B/eJ1n+++O78uo/9MNChjKXP+AhGNogFm6ShpAxOKn5R+V8Rg74/xx
hExJJCSAZESolEtwHEE1GSpm447p4q4u5+OM6WxGxXQcQaODC7Hi8FVZkk53RNV/zwb4XzB0bsbNMxfky3rdXm7iYDfv2MvJhM3VX+H3hgjlkCmbR6Td1Rjjj9ePGVhkidsXw
AJYAAtgASyABbAAPg7wT4ABAEYSjudgB/2SAAAAAElFTkSuQmCC</pre>
</div>
</div>
<p>Zur besseren Lesbarkeit darf übrigens Whitespace vorhanden sein.</p>
<h2>Image Data URI Generator</h2>
<p>Um an die Data URI zu gelangen, habe ich einen kleinen Generator in meiner <a href="http://dev.pehbehbeh.de/">DevZone</a> gebastelt, der eine URL zu seinem beliebigen Bild im Web entgegennimmt und die passende Image Data URI zurückgibt.</p>
<div id="attachment_2231" class="wp-caption aligncenter" style="width: 490px;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; display: block; margin-right: auto; margin-left: auto;"><img class="size-large wp-image-2231" title="Image Data URI Generator" src="http://pehbehbeh.de/wp-content/uploads/2012/03/image-data-uri-generator1-480x214.png" alt="Image Data URI Generator" width="480" height="214" /><p style=' padding: 0 4px 5px; margin: 0;'  class="wp-caption-text">Image Data URI Generator</p></div>
<blockquote><p><a href="http://dev.pehbehbeh.de/apps/imageDataUri/">Hier geht&#8217;s zur App →</a></p></blockquote>
<h3>Weiterführende Links</h3>
<p><a href="http://de.wikipedia.org/wiki/Data-URL">Auf Wikipedia</a> gibt es eine ausführliche Auflistung der <a href="http://de.wikipedia.org/wiki/Data-URL#Vorteile">Vor</a>-und <a href="http://de.wikipedia.org/wiki/Data-URL#Nachteile">Nachteile</a>. Außerdem werden dort die <a href="http://de.wikipedia.org/wiki/Data-URL#Webbrowser-Unterst.C3.BCtzung">unterstützten Browser</a> aufgelistet. Bedauerlicherweise wird der IE7 nicht supportet und im IE8 sind die Data URIs auf 32 kB beschränkt.</p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/html-css/" title="Alle Artikel in HTML &amp; CSS ansehen">HTML &amp; CSS</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/adresse/" rel="tag">Adresse</a>, <a href="http://pehbehbeh.de/tag/app/" rel="tag">App</a>, <a href="http://pehbehbeh.de/tag/attribut/" rel="tag">Attribut</a>, <a href="http://pehbehbeh.de/tag/base64/" rel="tag">Base64</a>, <a href="http://pehbehbeh.de/tag/beispiel/" rel="tag">Beispiel</a>, <a href="http://pehbehbeh.de/tag/bild/" rel="tag">Bild</a>, <a href="http://pehbehbeh.de/tag/browser/" rel="tag">Browser</a>, <a href="http://pehbehbeh.de/tag/demo/" rel="tag">Demo</a>, <a href="http://pehbehbeh.de/tag/generator/" rel="tag">Generator</a>, <a href="http://pehbehbeh.de/tag/http/" rel="tag">HTTP</a>, <a href="http://pehbehbeh.de/tag/ie7/" rel="tag">IE7</a>, <a href="http://pehbehbeh.de/tag/ie8/" rel="tag">IE8</a>, <a href="http://pehbehbeh.de/tag/image-data-uri/" rel="tag">Image Data URI</a>, <a href="http://pehbehbeh.de/tag/nachteile/" rel="tag">Nachteile</a>, <a href="http://pehbehbeh.de/tag/quelltext/" rel="tag">Quelltext</a>, <a href="http://pehbehbeh.de/tag/request/" rel="tag">Request</a>, <a href="http://pehbehbeh.de/tag/string/" rel="tag">String</a>, <a href="http://pehbehbeh.de/tag/vorteile/" rel="tag">Vorteile</a>, <a href="http://pehbehbeh.de/tag/whitespace/" rel="tag">Whitespace</a>, <a href="http://pehbehbeh.de/tag/wikipedia/" rel="tag">Wikipedia</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/#comments">2 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/html-css/image-data-uris-beispiel-generator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>money.js &#8211; Währungsumrechnung mit aktuellen Wechselkursen</title>
		<link>http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/</link>
		<comments>http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 23:09:27 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Bibliothek]]></category>
		<category><![CDATA[money.js]]></category>
		<category><![CDATA[Open Source Exchange Rates API]]></category>
		<category><![CDATA[Währungsumrechnung]]></category>
		<category><![CDATA[Wechselkurs]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1993</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/11/money.png" class="attachment-post-thumbnail wp-post-image" alt="Geld" title="Geld" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />money.js ist eine kleine (&#60;1kb) JavaScript-Bibliothek zur Währungsumrechnung. Gedacht ist die Zusammenarbeit mit der stündlich aktualisierten Open Source Exchange Rates API. Es können jedoch auch eigene Wechselkurse angegeben werden. Beispiele Hier ein paar der offiziellen Beispiele: 1 2 3 4 5 &#8230; <a href="http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/11/money.png" class="attachment-post-thumbnail wp-post-image" alt="Geld" title="Geld" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p><a href="http://josscrowcroft.github.com/money.js/">money.js</a> ist eine kleine<em> (&lt;1kb)</em> JavaScript-Bibliothek zur Währungsumrechnung. Gedacht ist die Zusammenarbeit mit der stündlich aktualisierten <a href="http://josscrowcroft.github.com/open-exchange-rates/">Open Source Exchange Rates API</a>. Es können jedoch auch eigene Wechselkurse angegeben werden.</p>
<p><hr style="clear: both;" /></p>
<h2>Beispiele</h2>
<p>Hier ein paar der offiziellen Beispiele:
<div class="pms">
<table class="javascript">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="co1">// From any currency, to any currency:</span>
fx.<span class="me1">convert</span><span class="br0">&#40;</span><span class="nu0">12.99</span><span class="sy0">,</span> <span class="br0">&#123;</span>from<span class="sy0">:</span> <span class="st0">&quot;GBP&quot;</span><span class="sy0">,</span> to<span class="sy0">:</span> <span class="st0">&quot;HKD&quot;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Chaining sugar:</span>
fx<span class="br0">&#40;</span><span class="nu0">1000</span><span class="br0">&#41;</span>.<span class="me1">from</span><span class="br0">&#40;</span><span class="st0">&quot;USD&quot;</span><span class="br0">&#41;</span>.<span class="me1">to</span><span class="br0">&#40;</span><span class="st0">&quot;GBP&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
fx<span class="br0">&#40;</span><span class="nu0">1000</span><span class="br0">&#41;</span>.<span class="me1">to</span><span class="br0">&#40;</span><span class="st0">&quot;AED&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// With simple settings and defaults, making this possible:</span>
fx.<span class="me1">convert</span><span class="br0">&#40;</span><span class="nu0">5318008</span><span class="br0">&#41;</span><span class="sy0">;</span>
fx<span class="br0">&#40;</span><span class="nu0">5318008</span><span class="br0">&#41;</span>.<span class="me1">to</span><span class="br0">&#40;</span><span class="st0">&quot;AED&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h2>Weiterführende Links</h2>
<ul>
<li><a href="http://josscrowcroft.github.com/money.js/">Offizielle Website</a></li>
<li><a href="http://josscrowcroft.github.com/money.js/#playground">Demo Playground</a></li>
<li><a href="http://josscrowcroft.github.com/money.js/#documentation">Dokumentation</a></li>
<li><a href="https://github.com/josscrowcroft/money.js/">GitHub Repository</a></li>
<li><a href="http://josscrowcroft.github.com/open-exchange-rates/">Open Source Exchange Rates API</a></li>
</ul>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/javascript/" title="Alle Artikel in JavaScript ansehen">JavaScript</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/bibliothek/" rel="tag">Bibliothek</a>, <a href="http://pehbehbeh.de/tag/money-js/" rel="tag">money.js</a>, <a href="http://pehbehbeh.de/tag/open-source-exchange-rates-api/" rel="tag">Open Source Exchange Rates API</a>, <a href="http://pehbehbeh.de/tag/waehrungsumrechnung/" rel="tag">Währungsumrechnung</a>, <a href="http://pehbehbeh.de/tag/wechselkurs/" rel="tag">Wechselkurs</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/#comments">4 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/javascript/waehrungsumrechnung-wechselkurs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dropbox Public-Ordner mit eigener Domain</title>
		<link>http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/</link>
		<comments>http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 00:03:30 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[Ordner]]></category>
		<category><![CDATA[Public]]></category>
		<category><![CDATA[Subdomain]]></category>
		<category><![CDATA[Verzeichnis]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1614</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/06/dropbox_psycho.png" class="attachment-post-thumbnail wp-post-image" alt="Psycho Dropbox" title="Psycho Dropbox" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Mittlerweile gibt es unzählige Möglichkeiten die Dropbox produktiv zu nutzen. Eine davon ist, den Public-Ordner als Download-Server zu verwenden. Wie das mit der eigenen Domain funktioniert, werde ich euch in diesem Artikel beschreiben. Schritt 1: Die persönliche ID Zunächst benötigen &#8230; <a href="http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/06/dropbox_psycho.png" class="attachment-post-thumbnail wp-post-image" alt="Psycho Dropbox" title="Psycho Dropbox" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Mittlerweile gibt es unzählige Möglichkeiten die Dropbox produktiv zu nutzen. Eine davon ist, den Public-Ordner als Download-Server zu verwenden. Wie das mit der eigenen Domain funktioniert, werde ich euch in diesem Artikel beschreiben.</p>
<p><hr style="clear: both;" /></p>
<p><a title="Get Dropbox" href="http://db.tt/EUt3Cep"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter" title="Dropbox Logo" src="/wp-content/uploads/2011/06/esuslogo101409-480x162.png" alt="" width="480" height="162" /></a></p>
<h2>Schritt 1: Die persönliche ID</h2>
<p>Zunächst benötigen wir die persönliche ID des eigenen Public-Ordners. Den Link zu einer Datei in eurem Public-Ordner erhaltet ihr über das Kontextmenü. Dieser entspricht folgendem Schema:</p>
<blockquote><p><strong>http://dl.dropbox.com/u/<span style="color: #ff0000;">123456</span>/</strong>ordner/datei.abc</p></blockquote>
<p>Der rot markierte Teil ist die ID.</p>
<h2>Schritt 2: (Sub-)Domain anlegen</h2>
<p>Nun legt ihr die Domain oder eine Subdomain an. Für mein Beispiel nutze ich folgende Subdomain:</p>
<blockquote><p>download.pehbehbeh.de</p></blockquote>
<h2>Schritt 3: .htaccess-Datei erstellen</h2>
<p>Damit die erstellte Domain jetzt zu unserem Public-Ordner weiterleitet, ist eine .htaccess-Datei im Root-Verzeichnis der Domain mit folgendem Inhalt nötig:
<div class="pms">
<table class="none">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
</pre>
</td>
<td class="de1">
<pre class="de1">&lt;IfModule mod_rewrite.c&gt;
&nbsp; &nbsp; RewriteEngine on
&nbsp; &nbsp; RewriteRule ^(.*)$ http://dl.dropbox.com/u/839455/$1 [L,QSA]
&lt;/IfModule&gt;</pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><em>Nicht vergessen die eigene ID einzutragen!</em></p>
<h3>Beispiele</h3>
<p>Folgende Anfragen&#8230;</p>
<blockquote><p>download.pehbehbeh.de/<strong>beispiel.txt</strong><br />
download.pehbehbeh.de/<strong>test/mit/ordner/123.txt</strong><br />
download.pehbehbeh.de/<strong>mein_riesiges_archiv.zip</strong></p></blockquote>
<p>&#8230;landen jetzt hier:</p>
<blockquote><p>dl.dropbox.com/u/839455/<strong>beispiel.txt</strong><br />
dl.dropbox.com/u/839455/<strong>test/mit/ordner/123.txt</strong><br />
dl.dropbox.com/u/839455/<strong>mein_riesiges_archiv.zip</strong></p></blockquote>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/htaccess/" rel="tag">.htaccess</a>, <a href="http://pehbehbeh.de/tag/datei/" rel="tag">Datei</a>, <a href="http://pehbehbeh.de/tag/domain/" rel="tag">Domain</a>, <a href="http://pehbehbeh.de/tag/download/" rel="tag">Download</a>, <a href="http://pehbehbeh.de/tag/dropbox/" rel="tag">Dropbox</a>, <a href="http://pehbehbeh.de/tag/id/" rel="tag">ID</a>, <a href="http://pehbehbeh.de/tag/ordner/" rel="tag">Ordner</a>, <a href="http://pehbehbeh.de/tag/public/" rel="tag">Public</a>, <a href="http://pehbehbeh.de/tag/subdomain/" rel="tag">Subdomain</a>, <a href="http://pehbehbeh.de/tag/verzeichnis/" rel="tag">Verzeichnis</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/#comments">3 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/dropbox-public-ordner-eigene-domain/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial: Websockets mit JavaScript und PHP &#8211; Teil 2: Linktipps</title>
		<link>http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/</link>
		<comments>http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 14:29:00 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Comet Daily]]></category>
		<category><![CDATA[David Walsh]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox 3.7]]></category>
		<category><![CDATA[Firefox 4.0]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Kompatibilität]]></category>
		<category><![CDATA[Linktipps]]></category>
		<category><![CDATA[Nettuts+]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Protokoll]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Serie]]></category>
		<category><![CDATA[Sicherheitslücke]]></category>
		<category><![CDATA[Socket.IO]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Version]]></category>
		<category><![CDATA[WebSocket API]]></category>
		<category><![CDATA[Websocket.org]]></category>
		<category><![CDATA[WebSockets]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1460</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/03/socket.png" class="attachment-post-thumbnail wp-post-image" alt="Socket" title="Socket" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Lang ist&#8217;s her: Im April letzten Jahres schrieb ich den ersten Artikel zur Serie WebSockets mit JavaScript und PHP. Da ich es verpennt habe, die Serie fortzusetzen und es mittlerweile ein paar sehr gute Tutorials da draußen gibt, möchte ich &#8230; <a href="http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/03/socket.png" class="attachment-post-thumbnail wp-post-image" alt="Socket" title="Socket" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Lang ist&#8217;s her: Im April letzten Jahres schrieb ich den <a title="Tutorial: WebSockets mit JavaScript und PHP – Teil 1: Grundlagen und das Interface" href="http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-grundlagen-interface/">ersten Artikel</a> zur <a href="http://pehbehbeh.de/series/websockets/">Serie WebSockets mit JavaScript und PHP</a>. Da ich es verpennt habe, die Serie fortzusetzen und es mittlerweile ein paar sehr gute Tutorials da draußen gibt, möchte ich die Reihe mit diesem Artikel und ein paar WebSocket-Linktipps abschließen.</p>
<p><hr style="clear: both;" /></p>
<h2>Entwicklung</h2>
<p>„Damals” steckte das Thema noch in den Kinderschuhen &#8211; doch mittlerweile sind WebSockets neben Chrome auch in den neuesten Versionen von Safari implementiert. Für den Firefox war zwar die Version 3.7 angepeilt &#8211; doch wegen einer Sicherheitslücke im Protokolldesign, werden es die WebSockets nicht einmal in die finale Version von Firefox 4.0 schaffen. (<a href="http://www.heise.de/security/meldung/WebSockets-in-Firefox-4-wegen-Luecke-im-Protokolldesign-deaktiviert-Update-1150157.html">Quelle</a>) In Opera sind sie deshalb seit Version 11 standardmäßig deaktiviert und lassen sich nur über einen Eintrag in der Config wieder aktivieren. (<a href="http://dev.opera.com/articles/view/introducing-web-sockets/">Quelle</a>)</p>
<h2>Linktipps</h2>
<p><strong>Wikipedia: <a href="https://secure.wikimedia.org/wikipedia/en/wiki/WebSockets">Websockets</a></strong></p>
<ul>
<li>allgemeiner Überblick</li>
</ul>
<p><strong><a href="http://websocket.org/">Websocket.org</a></strong></p>
<ul>
<li>kurze Zusammenfassung</li>
<li>Beispiele mit Testserver</li>
<li>genauere Betrachtung &amp; Vorteile von WebSockets</li>
</ul>
<p><strong>Comet Daily: <a href="http://cometdaily.com/2010/11/04/state-of-websocket-support/">State of Websocket Support</a></strong></p>
<ul>
<li>Welche Browser unterstützen WebSockets?</li>
</ul>
<p><strong>Nettuts+: <a href="http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/">Start Using HTML5 WebSockets Today</a></strong></p>
<ul>
<li>Was sind WebSockets?</li>
<li>Was ersetzen WebSockets?</li>
<li>Implementierung von Websockets<br />
(Server, URLs &amp; Ports, Client, Events, etc&#8230;)</li>
</ul>
<p><strong>David Walsh: <a href="http://davidwalsh.name/websocket">WebSocket und Socket.IO</a></strong></p>
<ul>
<li>Was ist die WebSocket API?</li>
<li>Verwendung der WebSocket API</li>
<li>WebSockets mit Socket.IO</li>
<li>dojox.Socket und Socket.IO</li>
</ul>
<p><em>Solltet ihr noch weitere gute Linktipps haben, schreibt sie einfach in die Kommentare. Ich werde die Liste dann ergänzen.</em></p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/javascript/" title="Alle Artikel in JavaScript ansehen">JavaScript</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/api/" rel="tag">API</a>, <a href="http://pehbehbeh.de/tag/artikel/" rel="tag">Artikel</a>, <a href="http://pehbehbeh.de/tag/browser/" rel="tag">Browser</a>, <a href="http://pehbehbeh.de/tag/comet-daily/" rel="tag">Comet Daily</a>, <a href="http://pehbehbeh.de/tag/david-walsh/" rel="tag">David Walsh</a>, <a href="http://pehbehbeh.de/tag/entwicklung/" rel="tag">Entwicklung</a>, <a href="http://pehbehbeh.de/tag/firefox/" rel="tag">Firefox</a>, <a href="http://pehbehbeh.de/tag/firefox-3-7/" rel="tag">Firefox 3.7</a>, <a href="http://pehbehbeh.de/tag/firefox-4-0/" rel="tag">Firefox 4.0</a>, <a href="http://pehbehbeh.de/tag/google-chrome/" rel="tag">Google Chrome</a>, <a href="http://pehbehbeh.de/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://pehbehbeh.de/tag/kompatibilitaet/" rel="tag">Kompatibilität</a>, <a href="http://pehbehbeh.de/tag/linktipps/" rel="tag">Linktipps</a>, <a href="http://pehbehbeh.de/tag/nettuts/" rel="tag">Nettuts+</a>, <a href="http://pehbehbeh.de/tag/opera/" rel="tag">Opera</a>, <a href="http://pehbehbeh.de/tag/php/" rel="tag">PHP</a>, <a href="http://pehbehbeh.de/tag/protokoll/" rel="tag">Protokoll</a>, <a href="http://pehbehbeh.de/tag/safari/" rel="tag">Safari</a>, <a href="http://pehbehbeh.de/tag/serie/" rel="tag">Serie</a>, <a href="http://pehbehbeh.de/tag/sicherheitsluecke/" rel="tag">Sicherheitslücke</a>, <a href="http://pehbehbeh.de/tag/socket-io/" rel="tag">Socket.IO</a>, <a href="http://pehbehbeh.de/tag/tutorial/" rel="tag">Tutorial</a>, <a href="http://pehbehbeh.de/tag/version/" rel="tag">Version</a>, <a href="http://pehbehbeh.de/tag/websocket-api/" rel="tag">WebSocket API</a>, <a href="http://pehbehbeh.de/tag/websocket-org/" rel="tag">Websocket.org</a>, <a href="http://pehbehbeh.de/tag/websockets/" rel="tag">WebSockets</a>, <a href="http://pehbehbeh.de/tag/wikipedia/" rel="tag">Wikipedia</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/#comments">ein Kommentar</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/javascript/tutorial-websockets-mit-javascript-und-php-teil-2-linktipps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Das HTML5-Logo wurde veröffentlicht</title>
		<link>http://pehbehbeh.de/webentwicklung/html-css/html5-logo/</link>
		<comments>http://pehbehbeh.de/webentwicklung/html-css/html5-logo/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 15:28:33 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[3D Effects]]></category>
		<category><![CDATA[Badge]]></category>
		<category><![CDATA[Badge Builder]]></category>
		<category><![CDATA[Connectivity]]></category>
		<category><![CDATA[Device Access]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTML5 Logo]]></category>
		<category><![CDATA[Logo]]></category>
		<category><![CDATA[Multimedia]]></category>
		<category><![CDATA[Offline Storage]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[Sticker]]></category>
		<category><![CDATA[Styling]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[T-Shirt]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Technology Classes]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1364</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/01/html5logo.png" class="attachment-post-thumbnail wp-post-image" alt="HTML5 Logo" title="HTML5 Logo" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Etwas überraschend wurde das offizielle HTML5-Logo veröffentlicht. Ich finde es persönlich sehr gelungen und wenn es dazu beträgt, HTML5 stärker zu verbreiten &#8211; warum nicht? Doch ich will euch nicht länger auf die Folter spannen&#8230; So sieht es aus: Auf &#8230; <a href="http://pehbehbeh.de/webentwicklung/html-css/html5-logo/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2011/01/html5logo.png" class="attachment-post-thumbnail wp-post-image" alt="HTML5 Logo" title="HTML5 Logo" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Etwas überraschend wurde <a href="http://www.w3.org/html/logo/">das offizielle HTML5-Logo</a> veröffentlicht. Ich finde es persönlich sehr gelungen und wenn es dazu beträgt, HTML5 stärker zu verbreiten &#8211; warum nicht? Doch ich will euch nicht länger auf die Folter spannen&#8230;</p>
<p><hr style="clear: both;" /></p>
<p>So sieht es aus:</p>
<p style="text-align: center;"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="size-large wp-image-1365 aligncenter" title="HTML5 Topper" src="http://pehbehbeh.de/wp-content/uploads/2011/01/html5-topper-480x324.png" alt="" width="480" height="324" /></p>
<p style="text-align: left;">Auf der offiziellen Seite gibt es das <a href="http://www.w3.org/html/logo/#downloads">Logo in sämtlichen Variationen und Größen zum Download</a> als PNG- oder SVG-Datei. Zudem sind noch sogenannte <strong>Technology Classes</strong> verfügbar, mit denen Technologien dargestellt werden können, die zum Einsatz kommen:</p>
<table border="0" width="100%">
<tbody>
<tr>
<td><img class="alignnone size-full wp-image-1369" title="HTML5: 3D Effects" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_3D_Effects_32.png" alt="" width="32" height="32" /><br />
3D Effects</td>
<td><img class="alignnone size-full wp-image-1370" title="HTML5: Connectivity" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Connectivity_32.png" alt="" width="32" height="32" /><br />
Connectivity</td>
<td><img class="alignnone size-full wp-image-1371" title="HTML5: Device Access" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Device_Access_32.png" alt="" width="32" height="32" /><br />
Device Access</td>
<td><img class="alignnone size-full wp-image-1372" title="HTML5: Multimedia" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_MultiMedia_32.png" alt="" width="32" height="32" /><br />
Multimedia</td>
</tr>
<tr>
<td><img class="alignnone size-full wp-image-1373" title="HTML5: Offline Storage" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Offline_Storage_32.png" alt="" width="32" height="32" /><br />
Offline Storage</td>
<td><img class="alignnone size-full wp-image-1374" title="HTML5: Performance" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Performance_32.png" alt="" width="32" height="32" /><br />
Performance</td>
<td><img class="alignnone size-full wp-image-1375" title="HTML5: Semantics" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Semantics_32.png" alt="" width="32" height="32" /><br />
Semanticss</td>
<td><img class="alignnone size-full wp-image-1376" title="HTML5: Styling" src="http://pehbehbeh.de/wp-content/uploads/2011/01/HTML5_Styling_32.png" alt="" width="32" height="32" /><br />
Styling</td>
</tr>
</tbody>
</table>
<p>Neben den verschiedenen Logos und Technology Icons gibt es noch den <a href="http://www.w3.org/html/logo/#badge-builder"><strong>Badge Builder</strong></a>, mit dem man kinderleicht ein Badge für die eigenen Website erstellen kann. Beispiel: Folgendes Badge enthält Performance, Semantics und Styling:</p>
<p><a href="http://www.w3.org/html/logo/"><br />
<img title="HTML5 Powered with CSS3 / Styling, Performance &amp; Integration, and Semantics" src="http://www.w3.org/html/logo/badge/html5-badge-h-css3-performance-semantics.png" alt="HTML5 Powered with CSS3 / Styling, Performance &amp; Integration, and Semantics" width="197" height="64" /><br />
</a></p>
<p style="text-align: left;">Zu guter Letzt können noch <a href="http://www.w3.org/html/logo/#swag">T-Shirts und kostenlose Sticker</a> bestellt werden&#8230;</p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/html-css/" title="Alle Artikel in HTML &amp; CSS ansehen">HTML &amp; CSS</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/3d-effects/" rel="tag">3D Effects</a>, <a href="http://pehbehbeh.de/tag/badge/" rel="tag">Badge</a>, <a href="http://pehbehbeh.de/tag/badge-builder/" rel="tag">Badge Builder</a>, <a href="http://pehbehbeh.de/tag/connectivity/" rel="tag">Connectivity</a>, <a href="http://pehbehbeh.de/tag/device-access/" rel="tag">Device Access</a>, <a href="http://pehbehbeh.de/tag/download/" rel="tag">Download</a>, <a href="http://pehbehbeh.de/tag/html5/" rel="tag">HTML5</a>, <a href="http://pehbehbeh.de/tag/html5-logo/" rel="tag">HTML5 Logo</a>, <a href="http://pehbehbeh.de/tag/logo/" rel="tag">Logo</a>, <a href="http://pehbehbeh.de/tag/multimedia/" rel="tag">Multimedia</a>, <a href="http://pehbehbeh.de/tag/offline-storage/" rel="tag">Offline Storage</a>, <a href="http://pehbehbeh.de/tag/performance/" rel="tag">Performance</a>, <a href="http://pehbehbeh.de/tag/png/" rel="tag">PNG</a>, <a href="http://pehbehbeh.de/tag/semantics/" rel="tag">Semantics</a>, <a href="http://pehbehbeh.de/tag/sticker/" rel="tag">Sticker</a>, <a href="http://pehbehbeh.de/tag/styling/" rel="tag">Styling</a>, <a href="http://pehbehbeh.de/tag/svg/" rel="tag">SVG</a>, <a href="http://pehbehbeh.de/tag/t-shirt/" rel="tag">T-Shirt</a>, <a href="http://pehbehbeh.de/tag/technologie/" rel="tag">Technologie</a>, <a href="http://pehbehbeh.de/tag/technology-classes/" rel="tag">Technology Classes</a>, <a href="http://pehbehbeh.de/tag/website/" rel="tag">Website</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/html-css/html5-logo/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/html-css/html5-logo/#comments">keine Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/html-css/html5-logo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lesbare Zeitdifferenz à la Facebook &amp; Twitter mit PHP/WordPress darstellen</title>
		<link>http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/</link>
		<comments>http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 06:30:54 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1170</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/10/clock-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="Uhr" title="Uhr" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />In sozialen Netzwerken wie Facebook und Twitter ist es üblich nicht den Zeitstempel eines Postings anzuzeigen, sondern die verstrichene Zeitspanne seit der Erstellung. In WordPress ist dies mit der Funktion human_time_diff() möglich, die sich schon seit Version 1.5 im Core &#8230; <a href="http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/10/clock-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="Uhr" title="Uhr" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>In sozialen Netzwerken wie Facebook und Twitter ist es üblich nicht den Zeitstempel eines Postings anzuzeigen, sondern die verstrichene Zeitspanne seit der Erstellung. In WordPress ist dies mit der Funktion <code>human_time_diff()</code> möglich, die sich schon seit Version 1.5 im Core befindet &#8211; doch was steckt eigentlich hinter dieser Funktion?</p>
<p><hr style="clear: both;" /></p>
<h2>Die Funktion in WordPress</h2>
<p>Der Funktion <a href="http://codex.wordpress.org/Function_Reference/human_time_diff"><code>human_time_diff()</code></a> besitzt einen Pflichtparameter <strong>(<code>$from</code>)</strong> und einen optionalen Parameter <strong>(<code>$to</code>)</strong>. Zwischen diesen beiden Zeitstempeln wird die Differenz berechnet und in einem lesbaren Format zurückgegeben. Sollte kein zweiter Wert angegeben werden wird immer der aktuelle Zeitstempel verwendet, was in den meisten Fällen ausreichen sollte.</p>
<h3>Beispiel 1: Artikel</h3>
<div class="pms">
<table class="php">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">echo</span> human_time_diff<span class="br0">&#40;</span>get_the_time<span class="br0">&#40;</span><span class="st_h">'U'</span><span class="br0">&#41;</span><span class="sy0">,</span> current_time<span class="br0">&#40;</span><span class="st_h">'timestamp'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">' ago'</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h3>Beispiel 2: Kommentare</h3>
<p><?php echo human_time_diff(get_comment_time('U'), current_time('timestamp')) . ' ago'; ?>
<div class="pms">
<table class="php">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">echo</span> human_time_diff<span class="br0">&#40;</span>get_the_time<span class="br0">&#40;</span><span class="st_h">'U'</span><span class="br0">&#41;</span><span class="sy0">,</span> current_time<span class="br0">&#40;</span><span class="st_h">'timestamp'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">' ago'</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h2>Die eigene Funktion</h2>
<p>Möchte man dieses Feature in die eigene (nicht-WordPress) Seite integrieren, muss man entweder selbst Hand anlegen oder in die <code>wp-includes/formatting.php</code> schauen. Dort findet man den Schnipsel der Funktion, der sich natürlich noch an die eigenen Bedürfnisse (z.B. die deutsche Sprache) anpassen lässt.
<div class="pms">
<table class="php">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="kw2">function</span> human_time_diff<span class="br0">&#40;</span> <span class="re0">$from</span><span class="sy0">,</span> <span class="re0">$to</span> <span class="sy0">=</span> <span class="st_h">''</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw3">empty</span><span class="br0">&#40;</span><span class="re0">$to</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$to</span> <span class="sy0">=</span> <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$diff</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span> <span class="kw3">abs</span><span class="br0">&#40;</span><span class="re0">$to</span> <span class="sy0">-</span> <span class="re0">$from</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">&lt;=</span> <span class="nu0">3600</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mins</span> <span class="sy0">=</span> <span class="kw3">round</span><span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">/</span> <span class="nu0">60</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$mins</span> <span class="sy0">&lt;=</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mins</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* translators: min=minute */</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$since</span> <span class="sy0">=</span> <span class="kw3">sprintf</span><span class="br0">&#40;</span>_n<span class="br0">&#40;</span><span class="st_h">'%s min'</span><span class="sy0">,</span> <span class="st_h">'%s mins'</span><span class="sy0">,</span> <span class="re0">$mins</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$mins</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">&lt;=</span> <span class="nu0">86400</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">&gt;</span> <span class="nu0">3600</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hours</span> <span class="sy0">=</span> <span class="kw3">round</span><span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">/</span> <span class="nu0">3600</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$hours</span> <span class="sy0">&lt;=</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hours</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$since</span> <span class="sy0">=</span> <span class="kw3">sprintf</span><span class="br0">&#40;</span>_n<span class="br0">&#40;</span><span class="st_h">'%s hour'</span><span class="sy0">,</span> <span class="st_h">'%s hours'</span><span class="sy0">,</span> <span class="re0">$hours</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$hours</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">elseif</span> <span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">&gt;=</span> <span class="nu0">86400</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$days</span> <span class="sy0">=</span> <span class="kw3">round</span><span class="br0">&#40;</span><span class="re0">$diff</span> <span class="sy0">/</span> <span class="nu0">86400</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$days</span> <span class="sy0">&lt;=</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$days</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$since</span> <span class="sy0">=</span> <span class="kw3">sprintf</span><span class="br0">&#40;</span>_n<span class="br0">&#40;</span><span class="st_h">'%s day'</span><span class="sy0">,</span> <span class="st_h">'%s days'</span><span class="sy0">,</span> <span class="re0">$days</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$days</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$since</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/php/" title="Alle Artikel in PHP ansehen">PHP</a> |
    <strong>Tags:</strong> 
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/#comments">keine Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/php/lesbare-zeitdifferenz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pixelgenaue Objekterkennung mit HTML5 Canvas als Hilfsmittel</title>
		<link>http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/</link>
		<comments>http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 13:54:04 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Alpha-Wert]]></category>
		<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Clickmap]]></category>
		<category><![CDATA[CSS-Klasse]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Cursor]]></category>
		<category><![CDATA[Deckkraft]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[Demonstration]]></category>
		<category><![CDATA[Div]]></category>
		<category><![CDATA[Effekt]]></category>
		<category><![CDATA[Element]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Grafik]]></category>
		<category><![CDATA[Hilfsmittel]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Image Map]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[mouseenter]]></category>
		<category><![CDATA[mouseleave]]></category>
		<category><![CDATA[mousemove]]></category>
		<category><![CDATA[Offset]]></category>
		<category><![CDATA[Pixel]]></category>
		<category><![CDATA[Seitenabstand]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Transparenz]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1051</guid>
		<description><![CDATA[<img width="48" height="48" src="http://pehbehbeh.de/wp-content/uploads/2010/08/cursor-object.png" class="attachment-post-thumbnail wp-post-image" alt="Mauszeiger auf Objekt" title="Mauszeiger auf Objekt" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Wenn wir uns im Netz bewegen bestehen alle Websites irgendwie aus Kästen. Alles ist in irgendeiner Art und Weise irgendwie rechteckig. Zwar geben uns neue CSS3-Techniken die Möglichkeit unsere Elemente abzurunden, aber dennoch: Sie sind Kästen. Wen man eine schöne &#8230; <a href="http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="48" height="48" src="http://pehbehbeh.de/wp-content/uploads/2010/08/cursor-object.png" class="attachment-post-thumbnail wp-post-image" alt="Mauszeiger auf Objekt" title="Mauszeiger auf Objekt" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Wenn wir uns im Netz bewegen bestehen alle Websites irgendwie aus Kästen. Alles ist in irgendeiner Art und Weise irgendwie rechteckig. Zwar geben uns neue CSS3-Techniken die Möglichkeit unsere Elemente abzurunden, aber dennoch: Sie sind Kästen. Wen man eine schöne (nicht rechteckige) Grafik anklickbar machen möchte &#8211; und zwar nicht den gesamten Kasten, in dem sie sich befindet, muss man zum Beispiel auf arbeitsintensive Image Maps oder Flash zurückgreifen.</p>
<p>In diesem Artikel möchte ich euch zeigen, dass es mit Hilfe des Canvas-Elements aus HTML5 auch anders funktioniert. Das Element wird dabei <span style="text-decoration: underline;">nur als Hilfsmittel</span> genutzt und nicht dazu, die Grafik einzubinden.</p>
<p><hr style="clear: both;" /></p>
<h2>Die Idee</h2>
<p>Die Idee stammt zugegebenermaßen nicht von mir selbst &#8211; die Umsetzung in diesem Artikel jedoch schon. Ich schaute letztens eine interessantes Video über die <a href="http://www.youtube.com/watch?v=_RRnyChxijA">Erstellung einer Game Engine in JavaScript</a>. Im Video wurde darüber gesprochen Canvas als ein Tool zu benutzen um Pixeldaten aus einem Bild auszulesen &#8211; genauer gesagt aus einer PNG-Datei, die Transparenz beinhaltet.</p>
<p>So lässt sich ein zweidimensionales Array aus Nullen und Einsen erstellen, mit Hilfe dessen man leicht entscheiden kann, ob die Maus sich auf oder neben dem Objekt befindet. Dabei ist man noch nicht einmal beschränkt auf Klick-Events. Nette Hover-Effekte lassen sich genauso gut erstellen.</p>
<h2>Demonstration</h2>
<p>Obwohl es in  allen modernen Browsern funktionieren sollte, habe ich die Demo kurz  im Firefox abgefilmt, sodass auch wirklich jeder in den Genuss kommen kann. Im Video ist ein Hover-Effekt zu sehen, der die Deckkraft der Bilder verändert.</p>
<p><a href="http://dev.pehbehbeh.de/demos/objectRecognition/"><strong>Link zur Live-Demo »</strong></a></p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Qaj0eIeVZ3g?fs=1&amp;hl=de_DE"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Qaj0eIeVZ3g?fs=1&amp;hl=de_DE" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<h2>Setup</h2>
<h3>HTML</h3>
<p>Wie ich anfangs bereits erwähnte, können Bilder ganz normal in die Seite eingebunden werden, wie man es gewohnt ist. In meinem Beispiel habe ich Divs erstellt, die ein Hintergund-Bild besitzen.
<div class="pms">
<table class="html4strict">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;main&quot;</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;container&quot;</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable arrow&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable build&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable building&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable folder&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">hr</span> <span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable home&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable interact&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable paint&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable pathing&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">hr</span> <span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable pen&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable people&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable phonebook&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable plus&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">hr</span> <span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable printer&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable school&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable vault&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;clickable world&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">hr</span> <span class="sy0">/</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h3>CSS</h3>
<p>Die CSS-Regeln sind ebenfalls überschaubar. Die Deckkraft wird bei allen Bildern etwas verringert. Im Internet Explorer funktioniert der Effekt eh nicht, deswegen müssen wir uns auch auch nur um die Deckkraft bei den anderen Browsern kümmern.
<div class="pms">
<table class="css">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre>
</td>
<td class="de1">
<pre class="de1">hr <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">clear</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.clickable</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">128px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">128px</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">margin-right</span><span class="sy0">:</span> <span class="re3">30px</span><span class="sy0">;</span>
&nbsp; &nbsp; -moz-opacity<span class="sy0">:</span> <span class="nu0">0.5</span><span class="sy0">;</span>
&nbsp; &nbsp; opacity<span class="sy0">:</span> <span class="nu0">0.5</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.hover</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; -khtml-opacity<span class="sy0">:</span> <span class="nu0">1.0</span><span class="sy0">;</span>
&nbsp; &nbsp; -moz-opacity<span class="sy0">:</span> <span class="nu0">1.0</span><span class="sy0">;</span>
&nbsp; &nbsp; opacity<span class="sy0">:</span> <span class="nu0">1.0</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.arrow</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/arrow.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span>
<span class="re1">.build</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/build.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span>
<span class="re1">.building</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/building.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; <span class="br0">&#125;</span>
<span class="re1">.folder</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/folder.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
<span class="re1">.home</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/home.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span>
<span class="re1">.interact</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/interact.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;<span class="br0">&#125;</span>
<span class="re1">.paint</span> &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/paint.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="re1">.pathing</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/pathing.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; <span class="br0">&#125;</span>
&nbsp;
<span class="re1">.pen</span> &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/pen.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="re1">.people</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/people.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;<span class="br0">&#125;</span>
<span class="re1">.phonebook</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/phonebook.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="re1">.plus</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/plus.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span>
&nbsp;
<span class="re1">.printer</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/printer.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; <span class="br0">&#125;</span>
<span class="re1">.school</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/school.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;<span class="br0">&#125;</span>
<span class="re1">.vault</span> &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/vault.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="re1">.world</span> &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="st0">'../img/world.png'</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; <span class="br0">&#125;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h3>JavaScript</h3>
<p>Ich folgenden JavaScript-Teil werde ich jQuery-Funktionen nutzen, die mir das Leben hier und da etwas einfacher machen. Die Funktionen sind aber keinesfalls für die Umsetzung notwendig.</p>
<p>Insgesamt ist der oben gezeigt Hover-Effekt in drei Teile aufgeteilt:</p>
<ol>
<li>Die Maus betritt den Div <em>(mouseenter)</em></li>
<li>Die Maus bewegt sich im Div <em>(mousemove)</em></li>
<li>Die Maus verlässt den Div<em> (mouseleave)<br />
</em></li>
</ol>
<p>Natürlich muss jeder selbst wissen, wie man es letzendlich implementiert. Ich möchte lediglich die Grundidee mit diesem Beispiel veranschaulichen.</p>
<h4>1. Event: mouseenter</h4>
<p>Wenn die Maus den Div betritt, muss das Array erzeugt werden, das die Bild-Daten enthält. Dazu wird ein Canvas-Element erstellt, in dem das Hintergrundbild des Divs gezeichnet wird. Danach können die Pixel ausgelesen werden. Anhand des Alpha-Wertes (jeder vierte Wert) wird die Transparenz abgefragt und eine Clickmap erzeugt (0=nichts, 1=Objekt).</p>
<p>Zum Schluss wird die Clickmap gespeichert, damit wir sie im nächsten Schritt abfragen können.</p>
<p>Mit den jQuery-Funktionen ist alles recht simpel und schick gelöst. Nur mit der Abfrage des Hintergrundbildes bin ich noch nicht ganz zufrieden. Genaueres dazu hatte ich bereits letztens in <a href="http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/">einem anderen Artikel</a> geäußert.
<div class="pms">
<table class="javascript">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre>
</td>
<td class="de1">
<pre class="de1">$<span class="br0">&#40;</span><span class="st0">'.clickable'</span><span class="br0">&#41;</span>.<span class="me1">mouseenter</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">var</span> canvas <span class="sy0">=</span> document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">'canvas'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw2">var</span> context <span class="sy0">=</span> canvas.<span class="me1">getContext</span><span class="br0">&#40;</span><span class="st0">'2d'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">var</span> img <span class="sy0">=</span> <span class="kw2">new</span> Image<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; img.<span class="kw3">onload</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Bild nachzeichnen &amp; ImageData auslesen</span>
&nbsp; &nbsp; &nbsp; &nbsp; canvas.<span class="me1">width</span> &nbsp;<span class="sy0">=</span> img.<span class="me1">width</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; canvas.<span class="me1">height</span> <span class="sy0">=</span> img.<span class="me1">height</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; context.<span class="me1">drawImage</span><span class="br0">&#40;</span>img<span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> imageData <span class="sy0">=</span> context.<span class="me1">getImageData</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> img.<span class="me1">width</span><span class="sy0">,</span> img.<span class="me1">height</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Clickmap erstellen</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> clickMap <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">,</span> n<span class="sy0">=</span>imageData.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">&lt;</span>n<span class="sy0">;</span> i<span class="sy0">+=</span><span class="nu0">4</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> row <span class="sy0">=</span> Math.<span class="me1">floor</span><span class="br0">&#40;</span><span class="br0">&#40;</span>i<span class="sy0">/</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="sy0">/</span>img.<span class="me1">width</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> col <span class="sy0">=</span> <span class="br0">&#40;</span>i<span class="sy0">/</span><span class="nu0">4</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="br0">&#40;</span>row <span class="sy0">*</span> img.<span class="me1">width</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>clickMap<span class="br0">&#91;</span>row<span class="br0">&#93;</span><span class="br0">&#41;</span> clickMap<span class="br0">&#91;</span>row<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clickMap<span class="br0">&#91;</span>row<span class="br0">&#93;</span><span class="br0">&#91;</span>col<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#40;</span>imageData.<span class="me1">data</span><span class="br0">&#91;</span>i<span class="sy0">+</span><span class="nu0">3</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="nu0">0</span> <span class="sy0">:</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Clickmap speichern</span>
&nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'clickMap'</span><span class="sy0">,</span> clickMap<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co1">// Bild-Quelle angeben und onload-Event auslösen</span>
&nbsp; &nbsp; img.<span class="me1">src</span> <span class="sy0">=</span> obj.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">'backgroundImage'</span><span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="co2">/\&quot;/g</span><span class="sy0">,</span> <span class="st0">''</span><span class="br0">&#41;</span>.<span class="me1">slice</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h4>2. Event: mousemove</h4>
<p>Wenn wir die Maus über dem Div bewegen wird abgefragt ob wir uns auf einem sichtbaren Pixel befinden. Wenn dies der Fall ist, wird dem Div eine CSS-Klasse hinzugefügt bzw. wieder entfernt, wenn der Cursor sich auf einem transparenten Pixel befindet. In diesem Beispiel ändert die CSS-Klasse die Deckkraft.</p>
<p>Bei der Berechnung der Cursor-Position werden Seitenabstand und Scrollweite berücksichtigt. Die Offset-Werte müssen gerundet werden, da es im Firefox zu Dezimalwerten kommen kann.
<div class="pms">
<table class="javascript">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre>
</td>
<td class="de1">
<pre class="de1">$<span class="br0">&#40;</span><span class="st0">'.clickable'</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="st0">&quot;undefined&quot;</span> <span class="sy0">===</span> <span class="kw1">typeof</span><span class="br0">&#40;</span>obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'clickMap'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">var</span> offset <span class="sy0">=</span> obj.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw2">var</span> xPos <span class="sy0">=</span> e.<span class="me1">clientX</span> <span class="sy0">-</span> Math.<span class="me1">round</span><span class="br0">&#40;</span>offset.<span class="me1">left</span><span class="br0">&#41;</span> <span class="sy0">+</span> $<span class="br0">&#40;</span>window<span class="br0">&#41;</span>.<span class="me1">scrollLeft</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw2">var</span> yPos <span class="sy0">=</span> e.<span class="me1">clientY</span> <span class="sy0">-</span> Math.<span class="me1">round</span><span class="br0">&#40;</span>offset.<span class="me1">top</span><span class="br0">&#41;</span> &nbsp;<span class="sy0">+</span> $<span class="br0">&#40;</span>window<span class="br0">&#41;</span>.<span class="me1">scrollTop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">'clickMap'</span><span class="br0">&#41;</span><span class="br0">&#91;</span>yPos<span class="br0">&#93;</span><span class="br0">&#91;</span>xPos<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">'hover'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">'hover'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h4>3. Event: mouseleave</h4>
<p>Da der Fall auftreten könnte, das jemand die Maus besonders Schnell aus dem Div zieht oder das Bild am Rande des Divs einen sichtbaren Pixel besitzt sollte die CSS-Klasse auf jeden Fall entfernt werden, sobald man den Div verlässt.
<div class="pms">
<table class="javascript">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
</pre>
</td>
<td class="de1">
<pre class="de1">$<span class="br0">&#40;</span><span class="st0">'.clickable'</span><span class="br0">&#41;</span>.<span class="me1">mouseleave</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">'hover'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h2>Fazit</h2>
<p>Das war&#8217;s. Hat mich zwar einige Zeit gekostet diesen Effekt zu basteln, aber wenn man es jetzt so sieht, steckt nicht wirklich viel dahinter. Ich hoffe, dass ich euch damit weiterhelfen oder zumindest inspirieren konnte. Ich finde es zunmindest erstaunlich, wie neue Web-Technologien uns die Arbeit erleichtern können.</p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/javascript/" title="Alle Artikel in JavaScript ansehen">JavaScript</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/alpha-wert/" rel="tag">Alpha-Wert</a>, <a href="http://pehbehbeh.de/tag/artikel/" rel="tag">Artikel</a>, <a href="http://pehbehbeh.de/tag/browser/" rel="tag">Browser</a>, <a href="http://pehbehbeh.de/tag/canvas/" rel="tag">Canvas</a>, <a href="http://pehbehbeh.de/tag/clickmap/" rel="tag">Clickmap</a>, <a href="http://pehbehbeh.de/tag/css-klasse/" rel="tag">CSS-Klasse</a>, <a href="http://pehbehbeh.de/tag/css3/" rel="tag">CSS3</a>, <a href="http://pehbehbeh.de/tag/cursor/" rel="tag">Cursor</a>, <a href="http://pehbehbeh.de/tag/deckkraft/" rel="tag">Deckkraft</a>, <a href="http://pehbehbeh.de/tag/demo/" rel="tag">Demo</a>, <a href="http://pehbehbeh.de/tag/demonstration/" rel="tag">Demonstration</a>, <a href="http://pehbehbeh.de/tag/div/" rel="tag">Div</a>, <a href="http://pehbehbeh.de/tag/effekt/" rel="tag">Effekt</a>, <a href="http://pehbehbeh.de/tag/element/" rel="tag">Element</a>, <a href="http://pehbehbeh.de/tag/event/" rel="tag">Event</a>, <a href="http://pehbehbeh.de/tag/firefox/" rel="tag">Firefox</a>, <a href="http://pehbehbeh.de/tag/flash/" rel="tag">Flash</a>, <a href="http://pehbehbeh.de/tag/funktion/" rel="tag">Funktion</a>, <a href="http://pehbehbeh.de/tag/game-engine/" rel="tag">Game Engine</a>, <a href="http://pehbehbeh.de/tag/grafik/" rel="tag">Grafik</a>, <a href="http://pehbehbeh.de/tag/hilfsmittel/" rel="tag">Hilfsmittel</a>, <a href="http://pehbehbeh.de/tag/hover/" rel="tag">Hover</a>, <a href="http://pehbehbeh.de/tag/html5/" rel="tag">HTML5</a>, <a href="http://pehbehbeh.de/tag/ie/" rel="tag">IE</a>, <a href="http://pehbehbeh.de/tag/image-map/" rel="tag">Image Map</a>, <a href="http://pehbehbeh.de/tag/jquery/" rel="tag">jQuery</a>, <a href="http://pehbehbeh.de/tag/mouseenter/" rel="tag">mouseenter</a>, <a href="http://pehbehbeh.de/tag/mouseleave/" rel="tag">mouseleave</a>, <a href="http://pehbehbeh.de/tag/mousemove/" rel="tag">mousemove</a>, <a href="http://pehbehbeh.de/tag/offset/" rel="tag">Offset</a>, <a href="http://pehbehbeh.de/tag/pixel/" rel="tag">Pixel</a>, <a href="http://pehbehbeh.de/tag/seitenabstand/" rel="tag">Seitenabstand</a>, <a href="http://pehbehbeh.de/tag/tool/" rel="tag">Tool</a>, <a href="http://pehbehbeh.de/tag/transparenz/" rel="tag">Transparenz</a>, <a href="http://pehbehbeh.de/tag/video/" rel="tag">Video</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/#comments">11 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/javascript/objekterkennung-html5-canvas/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JavaScript: URL des Hintergrundbildes auslesen (Problem + Lösung)</title>
		<link>http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/</link>
		<comments>http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 19:45:18 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[backgroundImage]]></category>
		<category><![CDATA[Element]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Gecko]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Hintergrundbild]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Lösung]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Style]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Webkit]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=1016</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/08/link-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="Link" title="Link" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Heute stand ich mal wieder vor einem kleinen Problem und bin mir bis jetzt nicht sicher, ob ich es optimal gelöst habe. Ich hoffe auf Verbesserungsvorschläge oder Zustimmung von euch. Mein Problem: Die Hintergrundbild-URL eines Divs muss ausgelesen werden&#8230; Das &#8230; <a href="http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/08/link-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="Link" title="Link" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Heute stand ich mal wieder vor einem kleinen Problem und bin mir bis jetzt nicht sicher, ob ich es optimal gelöst habe. Ich hoffe auf Verbesserungsvorschläge oder Zustimmung von euch. Mein Problem: Die Hintergrundbild-URL eines Divs muss ausgelesen werden&#8230;</p>
<p><hr style="clear: both;" /></p>
<h2>Das Problem</h2>
<p>An sich ist es kein Problem auf bestimmte Style-Werte von Elementen zuzugreifen. Wenn man jedoch die URL eines Hintergrundbildes (<a href="http://de.selfhtml.org/javascript/objekte/style.htm"><code>style.backgroundImage</code></a>) abfragt, erhält man &#8211; je nach Browser-Engine &#8211; unterschiedliche Rückgabewerte:</p>
<p><strong>Gecko <em>(z.B. Firefox)</em></strong></p>
<blockquote><p><code>url("http://pfad.de/zum/bild.png")</code></p></blockquote>
<p><strong>Webkit <em>(z.B. Chrome &amp; Safari)</em></strong></p>
<blockquote><p><code>url(http://pfad.de/zum/bild.png)</code></p></blockquote>
<p>Das haben zumindest meine Tests mit den neusten Versionen der jeweiligen Browser ergeben. Bei Chrome und Safari wird die URL nicht in Anführungszeichen gesetzt. Wenn man sich jetzt als Ziel gesetzt hat, <span style="text-decoration: underline;">nur die URL</span> des Hintergrundbildes abzufragen, muss man beide Engines beachten.</p>
<h2>Die Lösung</h2>
<p>Meine Lösung besteht darin, dass ich zunächst die Anführungszeichen aus der Zeichenkette entferne und danach alle Zeichen &#8211; bis auf die ersten Vier sowie das Letzte &#8211; mittels <a href="http://de.selfhtml.org/javascript/objekte/string.htm#slice"><code>slice()</code></a> extrahiere:
<div class="pms">
<table class="javascript">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="kw2">var</span> url <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'foo'</span><span class="br0">&#41;</span>.<span class="me1">style</span>.<span class="me1">backgroundImage</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="co2">/\&quot;/g</span><span class="sy0">,</span> <span class="st0">''</span><span class="br0">&#41;</span>.<span class="me1">slice</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p><em>Der Internet Explorer 8 verhält sich in diesem Fall wie der Firefox. Andere Versionen habe ich nicht getestet. <strong>Was haltet ihr von dieser Lösung? Gibt es eine bessere oder einfachere Umsetzung?</strong></em></p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/javascript/" title="Alle Artikel in JavaScript ansehen">JavaScript</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/backgroundimage/" rel="tag">backgroundImage</a>, <a href="http://pehbehbeh.de/tag/element/" rel="tag">Element</a>, <a href="http://pehbehbeh.de/tag/engine/" rel="tag">Engine</a>, <a href="http://pehbehbeh.de/tag/firefox/" rel="tag">Firefox</a>, <a href="http://pehbehbeh.de/tag/gecko/" rel="tag">Gecko</a>, <a href="http://pehbehbeh.de/tag/google-chrome/" rel="tag">Google Chrome</a>, <a href="http://pehbehbeh.de/tag/hintergrundbild/" rel="tag">Hintergrundbild</a>, <a href="http://pehbehbeh.de/tag/ie8/" rel="tag">IE8</a>, <a href="http://pehbehbeh.de/tag/loesung/" rel="tag">Lösung</a>, <a href="http://pehbehbeh.de/tag/problem/" rel="tag">Problem</a>, <a href="http://pehbehbeh.de/tag/safari/" rel="tag">Safari</a>, <a href="http://pehbehbeh.de/tag/style/" rel="tag">Style</a>, <a href="http://pehbehbeh.de/tag/url/" rel="tag">URL</a>, <a href="http://pehbehbeh.de/tag/webkit/" rel="tag">Webkit</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/#comments">2 Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/javascript/url-hintergrundbild/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Exotische PHP-Funktionen: uniqid()</title>
		<link>http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/</link>
		<comments>http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 10:13:55 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[eindeutig]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[Parameter]]></category>
		<category><![CDATA[PHP 4]]></category>
		<category><![CDATA[Präfix]]></category>
		<category><![CDATA[Rückgabewert]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[uniqid]]></category>

		<guid isPermaLink="false">http://pehbehbeh.de/?p=972</guid>
		<description><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/08/1281086507_application-x-php-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="PHP" title="PHP" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" />Es ist mal wieder Zeit für einen neuen Part der Artikelserie &#8220;Exotische PHP-Funktionen&#8220;. Heute stelle ich euch eine Funktion vor, mit der eindeutige IDs generiert werden. Die Funktion Die Rede ist von uniqid(). Die offizielle Beschreibung der Funktion lautet: &#8220;Erzeugt &#8230; <a href="http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<img width="64" height="64" src="http://pehbehbeh.de/wp-content/uploads/2010/08/1281086507_application-x-php-64x64.png" class="attachment-post-thumbnail wp-post-image" alt="PHP" title="PHP" style="float: left; padding: 6px; margin: 0 6px 6px 0; border: 6px solid #eee;" /><p>Es ist mal wieder Zeit für einen neuen Part der Artikelserie &#8220;<a href="http://pehbehbeh.de/series/exotische-php-funktionen/">Exotische PHP-Funktionen</a>&#8220;. Heute stelle ich euch eine Funktion vor, mit der eindeutige IDs generiert werden.</p>
<p><hr style="clear: both;" /></p>
<h2>Die Funktion</h2>
<p>Die Rede ist von <a href="http://us2.php.net/manual/de/function.uniqid.php"><code>uniqid()</code></a>. Die offizielle Beschreibung der Funktion lautet: <em>&#8220;Erzeugt eine eindeutige ID&#8221;</em>. So einfach ist das. Der Rückgabewert ist ein 13 Zeichen langer String. Natürlich lässt sich hier, wie bei fast jeder Funktion, noch Einiges über Parameter anpassen.</p>
<h3>Parameter</h3>
<ul>
<li><strong><code>prefix</code></strong> &#8211; <em>fügt der generierten ID einen Präfix hinzu.</em><br />
Das kann in dem Falle hilfreich sein, wenn auf einem Server zur gleichen Mikrosekunde mehrere IDs erstellt werden. Diese würden sich andernfalls gleichen, da die Funktion zeitabhängig ist.</li>
<li><strong><code>more_entropy</code></strong> &#8211; <em>erhöht die Eindeutigkeit der ID, falls auf <code>true</code> gesetzt.</em><br />
Die ID verlängert sich von 13 Zeichen auf 23 Zeichen.</li>
</ul>
<h3>Beispiele</h3>
<div class="pms">
<table class="php">
<tbody>
<tr class="li1">
<td class="ln">
<pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre>
</td>
<td class="de1">
<pre class="de1"><span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// 4c5bdd5b6909c</span>
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;<span class="co1">// 4c5bdd5b690a4</span>
&nbsp;
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="st_h">'foo_'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// foo_4c5bdd5b690bc</span>
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="st_h">'foo_'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// foo_4c5bdd5b690c0</span>
&nbsp;
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="kw4">null</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// 4c5bdd5b690ab7.28264218</span>
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="kw4">null</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// 4c5bdd5b690b58.23513105</span>
&nbsp;
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="st_h">'foo_'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// foo_4c5bdd5b690c56.41912889</span>
<span class="kw1">echo</span> <span class="kw3">uniqid</span><span class="br0">&#40;</span><span class="st_h">'foo_'</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// foo_4c5bdd5b690cb0.45755308</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<h3>Hinweise</h3>
<p>Solltet ihr noch auf PHP 4 fahren, ist der Parameter <strong><code>prefix</code></strong> noch <span style="text-decoration: underline;">nicht</span> optional.</p>
<hr />
<p>
    <strong>Kategorie:</strong> <a href="http://pehbehbeh.de/webentwicklung/" title="Alle Artikel in Webentwicklung ansehen">Webentwicklung</a> &raquo; <a href="http://pehbehbeh.de/webentwicklung/php/" title="Alle Artikel in PHP ansehen">PHP</a> |
    <strong>Tags:</strong> <a href="http://pehbehbeh.de/tag/beispiel/" rel="tag">Beispiel</a>, <a href="http://pehbehbeh.de/tag/eindeutig/" rel="tag">eindeutig</a>, <a href="http://pehbehbeh.de/tag/funktion/" rel="tag">Funktion</a>, <a href="http://pehbehbeh.de/tag/id/" rel="tag">ID</a>, <a href="http://pehbehbeh.de/tag/parameter/" rel="tag">Parameter</a>, <a href="http://pehbehbeh.de/tag/php-4/" rel="tag">PHP 4</a>, <a href="http://pehbehbeh.de/tag/praefix/" rel="tag">Präfix</a>, <a href="http://pehbehbeh.de/tag/rueckgabewert/" rel="tag">Rückgabewert</a>, <a href="http://pehbehbeh.de/tag/string/" rel="tag">String</a>, <a href="http://pehbehbeh.de/tag/uniqid/" rel="tag">uniqid</a>
</p>
<p>
    <a href="http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/">zum Artikel</a> |
    <a href="http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/#comments">keine Kommentare</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://pehbehbeh.de/webentwicklung/php/exotische-php-funktionen-uniqid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

