{"id":1368,"date":"2013-03-22T11:20:38","date_gmt":"2013-03-22T10:20:38","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1368"},"modified":"2013-04-05T18:40:32","modified_gmt":"2013-04-05T16:40:32","slug":"dropdown-menus-links-auf-zentrierten-seiten","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1368","title":{"rendered":"Dropdown-Men\u00fcs links auf zentrierten Seiten"},"content":{"rendered":"<p>Mit CSS l\u00f6st man Probleme, die man ohne es nicht h\u00e4tte. Zumindest k\u00f6nnte man in dieser Richtung leicht den Eindruck bekommen, wenn man sich anschaut, wieviel CSS n\u00f6tig ist, um ein simples Dropdown-Men\u00fc zu erhalten, dessen sich aufklappenden Untermen\u00fcs allesamt am linken Rand des Hauptmen\u00fcs beginnen. Soweit an sich nicht schwer, lediglich, wenn dann noch hinzukommt, dass man alle Items mit ausreichend Flussmittel versehen muss, damit der letzte Men\u00fceintrag bis zum rechten Rand aufgef\u00fcllt wird. Okay, soweit zur Aufgabe, die Umsetzung in der Praxis ist dann doch wieder einmal &#8211; wie bereits angedeutet &#8211; etwas aufw\u00e4ndiger, wie wir gleich sehen werden.<!--more--><\/p>\n<p>Als erstes m\u00fcssen wir dazu unser Grundger\u00fcst f\u00fcr das Men\u00fc erzeugen. Am Einfachsten realisiert sich dies mit einer Liste von DIVs:<\/p>\n<pre lang=\"html5\" escaped=\"true\">&lt;div class=\"menu\"&gt;\r\n    &lt;div class=\"item\"&gt;Item 1&lt;\/div&gt;\r\n    &lt;div class=\"item\"&gt;Item 2&lt;\/div&gt;\r\n    &lt;div class=\"item\"&gt;Item 3&lt;\/div&gt;\r\n    &lt;div class=\"item\"&gt;Item 4&lt;\/div&gt;\r\n    &lt;div class=\"item\"&gt;Item 5&lt;\/div&gt;\r\n    &lt;!-- ... --&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Um Men\u00fceintrag und das auszuklappende Men\u00fc zu trennen ist im ersten Unter-Element der Titel des Eintrags und in einem abgetrennten eigenen Element das Untermen\u00fc untergebracht:<\/p>\n<pre lang=\"html5\" escaped=\"true\">&lt;div class=\"item\"&gt;\r\n    &lt;div class=\"caption\"&gt;Item 1&lt;\/div&gt;\r\n    &lt;div class=\"submenu\"&gt;\r\n        &lt;ul&gt;\r\n            &lt;li&gt;Subitem 1&lt;\/li&gt;\r\n        &lt;\/ul&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Soweit ist der ganze Kram noch absolut einleuchtend, chaotisch wird es erst ab dem Punkt, was man einem Browser so alles sagen muss, damit daraus der erwartete Effekt entsteht.<\/p>\n<pre lang=\"css\" escaped=\"true\">.menu {\r\n    position: relative;\r\n}\r\n.menu .item {\r\n    position: static;\r\n    float: left;\r\n}\r\n\r\n.menu .item:last-child {\r\n    float: none;\r\n}\r\n\r\n.menu .item .submenu {\r\n    position: absolute;\r\n    left: 0px;\r\n    opacity: 0;\r\n}\r\n\r\n.menu .item:hover .submenu, .menu .item .submenu:hover {\r\n    opacity: 100;\r\n}<\/pre>\n<p>Und da das jetzt sicherlich dem einen oder anderen zu schnell ging &#8211; ich habe ungef\u00e4hr 3 Tage dran gesessen, bevor es wie gew\u00fcnscht lief &#8211; noch einmal in langsam zum Abschreiben \ud83d\ude09<\/p>\n<p>Die Realisierung des Dropdown-Men\u00fcs ist einfach \u00fcber die letzte CSS-Regel erledigt: Wenn sich der Cursor \u00fcber dem Item ODER dem Submenu befindet, dann bitte dieses anzeigen. Andernfalls wird \u00fcber die Regel dar\u00fcber sichergestellt, dass keines der Men\u00fcs angezeigt wird.<\/p>\n<p>Etwas komplizierter sind die Men\u00fc-Eintr\u00e4ge: Diese werden mittels Links-Floaten in die Men\u00fczeile aufgef\u00e4delt. Um hier einen Abschluss zu bekommen, wird das letzte Element ohne Float-Angabe direkt platziert. Dadurch erh\u00e4lt es genau den verbleibenden Platz auf der Zeile. Um das Floaten dynamisch zu gestalten, wird mittels des passenden CSS-Selektors automatisch das letzte Element gew\u00e4hlt.<\/p>\n<p>Interessant wird nun der Punkt, zur Positionierung der Untermen\u00fcs: W\u00fcrde man in der Klasse .item einfach position:relative; angeben, w\u00fcrden sich alle Positionsangaben auf den Item beziehen. In diesem Fall wollen wir aber den Parent haben. Dies erreichen wir, indem wir den Positionierungsmodus static verwenden, der dem Browser sagt, dass dieses Element in der Positionierung von relativ und absolut positionierten Elementen uninteressant ist und \u00fcbersprungen werden kann. Mit diesem kleinen, aber wesentlichen Trick bezieht sich das left:0; im .submenu dann auch auf das .menu-Element und zeigt das Men\u00fc wie gew\u00fcnscht an.<\/p>\n<p>Ein Hinweis noch in Bezug auf Margins und Paddings in einer derart aufgebauten Men\u00fczeile: Die Abst\u00e4nde k\u00f6nnen unter Umst\u00e4nden etwas unintuitiv wirken, da auf Grund des Floatings die vorderen Elemente als Teil des letzten Elementes dargestellt werden. Man muss also passend seine Margins und Paddings an diesen Umstand anpassen.<\/p>\n<p>On Popular Request: <a href=\"http:\/\/blog.benny-baumann.de\/wp-content\/uploads\/menu.html\">Demo f\u00fcr links ausgerichtetes Men\u00fc<\/a><\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1368&amp;md5=baa0d5029e1b84840cf3b44095438598\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Mit CSS l\u00f6st man Probleme, die man ohne es nicht h\u00e4tte. Zumindest k\u00f6nnte man in dieser Richtung leicht den Eindruck bekommen, wenn man sich anschaut, wieviel CSS n\u00f6tig ist, um ein simples Dropdown-Men\u00fc zu erhalten, dessen sich aufklappenden Untermen\u00fcs allesamt am linken Rand des Hauptmen\u00fcs beginnen. Soweit an sich nicht schwer, lediglich, wenn dann noch [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[332,98,69,331],"class_list":["post-1368","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-css","tag-developement","tag-internet","tag-webdesign"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1368"}],"version-history":[{"count":10,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1368\/revisions"}],"predecessor-version":[{"id":1417,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1368\/revisions\/1417"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}