<?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>TheGeek.de &#187; menüs</title>
	<atom:link href="http://thegeek.de/t/menus/feed" rel="self" type="application/rss+xml" />
	<link>http://thegeek.de</link>
	<description>WordPress, PHP, JavaScript, Web 2.0, Gaming, Motorräder, Fotografie, Piratenpartei, Privates</description>
	<lastBuildDate>Tue, 07 Feb 2012 13:21:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Interessantes Menü mit CSS Rotation</title>
		<link>http://thegeek.de/interessantes-menu-mit-css-rotation</link>
		<comments>http://thegeek.de/interessantes-menu-mit-css-rotation#comments</comments>
		<pubDate>Tue, 08 Dec 2009 12:06:02 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[menüs]]></category>
		<category><![CDATA[programmieren]]></category>
		<category><![CDATA[rotation]]></category>

		<guid isPermaLink="false">http://thegeek.de/?p=390</guid>
		<description><![CDATA[Gestern habe ich einen Artikel über Rotation von HTML Elementen mittels CSS auf snook.ca gelesen und da kam mir die Idee, dass mit diesen CSS-Anweisungen ja auch ein stylisches Menü gebastelt werden kann. Also habe ich mich gestern Abend kurz an den Rechner gesetzt und ein wenig gespielt. Nach anfänglichen Problemen im FireFox &#8211; was [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern habe ich einen Artikel über Rotation von HTML Elementen mittels CSS auf <a href="http://snook.ca/archives/html_and_css/css-text-rotation">snook.ca</a> gelesen und da kam mir die Idee, dass mit diesen CSS-Anweisungen ja auch ein stylisches Menü gebastelt werden kann. Also habe ich mich gestern Abend kurz an den Rechner gesetzt und ein wenig gespielt. Nach anfänglichen Problemen im FireFox &#8211; was ich nicht erwartet hätte, ich dachte eher der IE spackt mal wieder rum &#8211; hat es mit meinem 90° gegen den Uhrzeigersinn gedrehtem Menü auch hingehauen.</p>
<p>Viel braucht es wirklich nicht, nur ein wenig HTML und ein wenig CSS, wobei der HTML-Code für das Menü absoluter Standard-Code ist, der auch für ein Top-Menü Verwendung finden würde.<span id="more-390"></span></p>
<pre class="brush:html">
<div id="menucontainer">
<div id="menu">
		<a href="#1">Home</a>
		<a href="#2">Weblog</a>
		<a href="#3">Infos</a>
		<a href="#4">Pornos</a>
		<a href="#5">Impressum</a>
	</div>
</div>
</pre>
<p>Der &#8220;menucontainer&#8221; ist übrigens überflüssig, den habe ich nur verwendet, weil ich das Menü nicht zentrieren, sondern etwas versetzt nach links anzeigen wollte.</p>
<p>Klarer wird es sichlich mit dem folgenden CSS, welches das Menü darstellt:</p>
<pre class="brush:css">
* {
	margin: 0em;
	padding: 0em;
	border: none;
}
#menucontainer {
	width: 800px;
	margin: auto auto;
}
#menu {
	width: 200px;
	-webkit-transform: rotate( -90deg );
	-moz-transform: rotate( -90deg );
	-moz-transform-origin: 100px 100px;
	filter: progid:DXImageTransform.Microsoft.BasicImage( rotation=3 );
}
#menu a:link, #menu a:visited {
	background-color: #F00;
	color: #FFF;

	margin-bottom: 25px;
	width: 200px;
	height: 50px;
	padding: 5px;
	line-height:90%;
	display: block;

	font-family: sans-serif;
	font-weight: bold;
	font-size: 24px;
	text-decoration: none;
}
#menu a:hover {
	background-color: #DDD;
	color: #F00;
}
</pre>
<p>Wenn ich ein CSS-Stylesheet beginne, schalte ich zuerst für alle Elemente die margins, paddings und die borders aus, um sie später für die Elemente wieder zu setzen, wo ich diese Eigenschaften wirklich brauche. Das macht die ganze Sache immer klarer und behebt viele Probleme mit dem IE auf einen Schlag.</p>
<p>Dem div &#8220;menucontainer&#8221; wird dann eine Breite von 800 Pixeln zugewiesen und ein automatischer margin, wodurch das gesamte div element im Browser zentriert wird.</p>
<p>Dann kommt schon die Anweidung, die das Menü gegen den Uhrzeigersinn dreht. Zuerst wird eine Breite vergeben, die der Breite der einzelnen Menüpunkte entspricht. Das muss so sein, sonst funktioniert es im IE 7 nicht.<br />
Danach folgen Anweisungen für die verschiedenen Browser um die Rotation durchzuführen. Wichtig beim FireFox: &#8220;-moz-transform-origin&#8221; muss korrekt gesetzt werden, sonst sitzen die Menüpunkte später zu tief. Jeweils die Hälfte der Menüpunkt-Breite für horizontalen und vertikalen Wert haben sich bei mir bewährt.</p>
<p>Die einzelnen Menüpunkt können beliebig formatiert werden, auch margins und paddings sind kein Problem. Wichtig ist allerdings, dass &#8220;display&#8221; auf &#8220;block&#8221; gesetzt wird und feste Breiten und Höhen vergeben werden, sonst wird es Probleme bei der Darstellung geben.</p>
<p>Getestet habe ich die Anweisungen im IE 7 und im FireFox 3.5. Im IE 6 läufts so lala, könnte man sicherlich auch noch hinbekommen, aber ich bin der Meinung, dass der IE 6 nicht mehr unterstützt werden muss. Wer den IE 6 noch nutzt, der fährt auch Autos ohne Bremsen.</p>
<p><a href="http://www.codemonster.de/source/menu_rotation_test.php" target="_blank">Hier gibt&#8217;s die komplette Datei</a> und hier eine kleine Vorschau, wie es aussehen könnte:</p>
<style type="text/css">
	#rotationtest_menucontainer {
		width: 800px;
		margin: auto auto;
	}
	#rotationtest_menu {
		width: 200px;
		-webkit-transform: rotate( -90deg );
		-moz-transform: rotate( -90deg );
		-moz-transform-origin: 100px 100px;
		filter: progid:DXImageTransform.Microsoft.BasicImage( rotation=3 );
	}
	#rotationtest_menu a:link, #rotationtest_menu a:visited {
		background-color: #F00;
		color: #FFF;</p>
<p>		margin-bottom: 25px;
		width: 200px;
		height: 50px;
		padding: 5px;
		line-height:90%;
		display: block;</p>
<p>		font-family: sans-serif;
		font-weight: bold;
		font-size: 24px;
		text-decoration: none;
	}
	#rotationtest_menu a:hover {
		background-color: #DDD;
		color: #F00;
	}
</style>
<div id="rotationtest_menucontainer">
<div id="rotationtest_menu">
		<a href="#1">Home</a><br />
		<a href="#2">Weblog</a><br />
		<a href="#3">Infos</a><br />
		<a href="#4">Pornos</a><br />
		<a href="#5">Impressum</a>
	</div>
</div>
<p><a href="http://flattr.com/thing/331572/Interessantes-Menu-mit-CSS-Rotation" target="_blank"><br />
<img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://thegeek.de/interessantes-menu-mit-css-rotation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tab-Menüs mit Prototype generalisieren</title>
		<link>http://thegeek.de/tab-menus-mit-prototype-generalisieren</link>
		<comments>http://thegeek.de/tab-menus-mit-prototype-generalisieren#comments</comments>
		<pubDate>Fri, 27 Nov 2009 14:37:56 +0000</pubDate>
		<dc:creator>Marc</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[menüs]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[tabbing]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://thegeek.de/?p=367</guid>
		<description><![CDATA[Wer kennt es nicht: Mehrere Datentabellen oder -abschnitte auf einer Seite und der Benutzer verliert schnell den Überblick. Die Lösung: Ein wenig JavaScript, mit ein wenig CSS und ein paar DIVs garniert, das ganze kräftig durchkneten und fertig ist der Tabbed-Content für jeden Einsatzzweck. Hier ein wenig HTML: Datenblatt 1 Datenblatt 2 Datenblatt 3 Datenblatt [...]]]></description>
			<content:encoded><![CDATA[<p>Wer kennt es nicht: Mehrere Datentabellen oder -abschnitte auf einer Seite und der Benutzer verliert schnell den Überblick. Die Lösung: Ein wenig JavaScript, mit ein wenig CSS und ein paar DIVs garniert, das ganze kräftig durchkneten und fertig ist der Tabbed-Content für jeden Einsatzzweck. <span id="more-367"></span></p>
<p>Hier ein wenig HTML:</p>
<pre class="brush:html">
<div id="tabmenu">
<div id="tab_datasheet1" class="tab active">Datenblatt 1</div>
<div id="tab_datasheet2" class="tab">Datenblatt 2</div>
<div id="tab_datasheet3" class="tab">Datenblatt 3</div>
<div id="tab_datasheet4" class="tab">Datenblatt 4</div>
<div id="tab_datasheet5" class="tab">Datenblatt 5</div>
</div>
<div id="datasheet1">Jede Menge Daten (1)</div>
<div id="datasheet2" style="display:none">Jede Menge Daten (2)</div>
<div id="datasheet3" style="display:none">Jede Menge Daten (3)</div>
<div id="datasheet4" style="display:none">Jede Menge Daten (4)</div>
<div id="datasheet5" style="display:none">Jede Menge Daten (5)</div>
</pre>
<p>Oben findet sich unser Tab-Menü, dass die insgesamt 5 Daten-Layer per Klick einblenden soll. Die DIVs mit den Daten sind per Style-Definition erstmal nicht sichtbar, bis auf den ersten DIV, da davon auszugehen ist, dass ohne einen Klick auf etwas das erste Datenblatt angezeigt werden soll. Damit das Tab-Menü auch ansprechend aussieht, brauchen wir noch folgende CSS Definitionen:</p>
<pre class="brush:css">
#tabmenu {
	overflow:hidden;
	border-bottom:1px solid #FFF;
}
#tabmenu .tab {
	float:left;
	border:1px solid #660000;
	border-bottom:none;
	margin-left:3px;
	padding:3px;
	background-color:#F4F4F4;
	font-weight:bold;
}
#tabmenu .active {
	background-color:#FFFFFF;
	color:#000099;
}
#tabmenu .tab:hover {
	background-color:#FFFFFF;
	cursor:pointer;
}
</pre>
<p>Damit wir nun nicht für jeden einzelnen Tab eine &#8220;onclick&#8221; Aktion schreiben müssen, habe ich mir überlegt ein auf Prototype aufsetzendes JavaScript zu schreiben, dass anhand der verwendeten IDs der Tabs und der Daten-DIVs (die nur zueinander passen müssen) eine generell einsetzbare Lösung schafft. Das Skript kann im Head-Bereich der Seite eingebunden werden und durchsucht beim Aufruf, ob Tabs vorhanden sind und behandelt diese entsprechend.</p>
<pre class="brush:js">
/**
 * Render a tabbed menu
 */
var tabids = [];
var containerids = [];
function create_tabs()
{
	$$('.tab').all( function( el ) {
			tabids.push( el.id );
			containerids.push( el.id.replace( 'tab_', '' ) );
			el.observe( 'click', handle_tab_click );
			return true;
	} );
}
/**
 * Hande a clicked tab
 */
function handle_tab_click( event )
{
	// Get container id
	containerid = this.id.replace( 'tab_', '' );
	// Set active tab menu point
	tabids.all( function( tab ) {
		$(tab).removeClassName( 'active' );
		return true;
	} );
	this.addClassName( 'active' );
	// Set active tab content container
	containerids.all( function( container ) {
		$(container).hide();
		return true;
	} );
	$(containerid).show();
}
/**
 * Init tabbing
 */
Event.observe( window, 'load', create_tabs );
</pre>
<p>Die erste Funktion &#8220;create_tabs&#8221; sucht alle DIV-Layer innerhalb der Seite, die mit der CSS-Klasse &#8220;tab&#8221; versehen sind. Die gefundenen Tabs werden danach zur weiteren Verarbeitung in einem Array gespeichert und mit einer String-Ersetzung der zugehörige Daten-Layer ermittelt. Die IDs der Datenlayer werden ebenfalls in einem Array gespeichert. Zu guter letzt wird dem Tab-Menüpunkt noch eine Handler-Funktion zugewiesen.</p>
<p>Die zweite Funktion ist diese Handler-Funktion. Beim Klick wird zuerst ermittelt, welcher Daten-Layer angezeigt werden soll, indem durch eine Zeichenersetzung das &#8220;tab_&#8221; in der ID des Tab-Menüpunkts entfernt wird. Übrig bleibt dann z.B. &#8220;datasheet1&#8243;, wenn der erste Menüpunkt ausgewählt wurde. So weiß die Funktion für den späteren Verlauf, welcher DIV angezeigt werden muss.</p>
<p>Nun geht es daran, das Tab-Menü entsprechend zu verändern, denn es soll ja der angeklickte Menüpunkt hervorgehoben werden. Dazu entfernen wir per Prototype-Methode &#8220;all&#8221;, die auf das bei der Initialisierung erstellte Array angewendet wird, bei allen Tabs die CSS Klasse &#8220;active&#8221;. Danach wir die Klasse &#8220;active&#8221; dann beim angeklickten Punkt gesetzt und das Menü ändert sich so entsprechend dem Nutzerverhalten.</p>
<p>Dann durchlaufen wir ebenfalls mit &#8220;all&#8221; das Array, das die IDs der Datenblätter enthält und verstecken mittels &#8220;hide&#8221; alle DIVs. Nun wird nur noch das richtige DIV eingeblendet und das Tabbing ist komplett.</p>
<p>Großes Finale im Skript ist dann noch ein Event-Observer, der nach dem Laden der Seite die Funktion &#8220;create_tabs&#8221; aufruft und so alle auf der Seite gefundenen Tabs initialisiert.</p>
<p>Wichtig für den Einsatz des Skripts ist nur folgendes: Die IDs der Tab-Menüpunkt und der Layer mit den Daten müssen auf einander abgestimmt sein und ein Tab-Menüpunkt muss immer mit &#8220;tab_&#8221; beginnen. Lege ich also einen Tab mit der ID &#8220;tab_datentabelle123&#8243; an, dann muss das DIV mit den Daten die ID &#8220;datentabelle123&#8243; haben, sonst funktioniert es nicht. Natürlich müssen die Tab-Menüpunkte auch die richtigen CSS-Klassen haben, aber das versteht sich wohl von selbst.</p>
<p>Und so könnte es aussehen:</p>
<div id="tabmenu">
<div id="tab_datasheet1" class="tab active">Datenblatt 1</div>
<div id="tab_datasheet2" class="tab">Datenblatt 2</div>
<div id="tab_datasheet3" class="tab">Datenblatt 3</div>
<div id="tab_datasheet4" class="tab">Datenblatt 4</div>
<div id="tab_datasheet5" class="tab">Datenblatt 5</div>
</div>
<div id="datasheet1">Jede Menge Daten (1)</div>
<div id="datasheet2" style="display:none">Jede Menge Daten (2)</div>
<div id="datasheet3" style="display:none">Jede Menge Daten (3)</div>
<div id="datasheet4" style="display:none">Jede Menge Daten (4)</div>
<div id="datasheet5" style="display:none">Jede Menge Daten (5)</div>
<style type="text/css">
#tabmenu {
	overflow:hidden;
	border-bottom:1px solid #FFF;
}
#tabmenu .tab {
	float:left;
	border:1px solid #660000;
	border-bottom:none;
	margin-left:3px;
	padding:3px;
	background-color:#F4F4F4;
	font-weight:bold;
}
#tabmenu .active {
	background-color:#FFFFFF;
	color:#000099;
}
#tabmenu .tab:hover {
	background-color:#FFFFFF;
	cursor:pointer;
}
</style>
<p><script type="text/javascript">
/**
 * Render a tabbed menu
 */
var tabids = [];
var containerids = [];
function create_tabs()
{
	$$('.tab').all( function( el ) {
			tabids.push( el.id );
			containerids.push( el.id.replace( 'tab_', '' ) );
			el.observe( 'click', handle_tab_click );
			return true;
	} );
}
/**
 * Hande a clicked tab
 */
function handle_tab_click( event )
{
	// Get container id
	containerid = this.id.replace( 'tab_', '' );
	// Set active tab menu point
	tabids.all( function( tab ) {
		$(tab).removeClassName( 'active' );
		return true;
	} );
	this.addClassName( 'active' );
	// Set active tab content container
	containerids.all( function( container ) {
		$(container).hide();
		return true;
	} );
	$(containerid).show();
}
/**
 * Init tabbing
 */
create_tabs();
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://thegeek.de/tab-menus-mit-prototype-generalisieren/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

