Blog

Ein fancy Hover-Menü mit CSS gestalten

Navigationen bestehen oft aus Dropdown-Menüs, die meist mit JavaScript eingeblendet werden. Doch das geht auch nur mit CSS. In diesem Beispiel zeigen wir ein einfaches Menü mit vier Hauptpunkten, dessen Untermenüs per Hover erscheinen – ganz ohne JavaScript.

Thomas Bieli

Thomas Bieli

Lead Frontend Entwickler

CSS Trick: Hover-Menü

Eine Navigation ist fast auf jeder Seite vorhanden.

Auf gewissen Seiten besteht diese aus nur einer Ebene, auf anderen aus zwei oder sogar mehr. Dies setzt sich sehr oft aus einer Navigationsleiste mit Dropdown-Menüs zusammen, die sich z.B. mithilfe der Maus einblenden lassen.

Um dies zu ermöglichen, wird oft JavaScript benötigt. Wir stellen euch hier aber eine reine CSS-Lösung vor, die ohne JavaScript auskommt.

Let’s get started

Hier ein einfaches Menü, welches aus vier Hauptmenüpunkten besteht. «Nav 2» hat allerdings noch ein Submenu. Dieses soll mithilfe eines Hover-Effekts, wenn wir also mit der Maus über den Hauptmenüpunkt fahren, geöffnet werden.

Nav Beispiel

Das Problem:
Durch den Abstand zwischen dem Haupt- und dem Submenü entsteht das Problem, dass das Submenü geschlossen wird, sobald man mit der Maus zu einem Punkt im Submenü fahren möchte.

Nav Problem

Dieses Problem könnte man mithilfe eines kleinen JavaScript-Snippets lösen. Mithilfe des onmouseover-Events wird das Submenü eingeblendet und mit dem onmouseout-Event wieder ausgeblendet. Dabei kann ein kurzes Time-out eingebaut werden, sodass genügend Zeit bleibt, wenn der Cursor vom Hauptmenüpunkt auf das Submenü fährt. Andernfalls wird derselbe Fehler auftreten wie mit der aktuellen CSS Lösung. Das Submenü wird sich zu schnell schliessen.

In diesem Fall ist es schöner, mithilfe eines Pseudo-Elements die Lücke zwischen Hauptmenü und Untermenü zu füllen. Das Pseudo-Element wird hier rot dargestellt.

Nav lösung

Weiteres Problem:
Nun werden jedoch die Hauptmenüpunkte links und rechts neben dem «Nav 2» von dem Pseudo-Element leicht überdeckt. Es ist also nicht so einfach, diese anzuklicken.

Nav Problem nicht klickbar

Dieses Problem können wir jedoch lösen, indem wir das rote Pseudo-Element anpassen. Wir können sogar versuchen ein Dreieck mit zwei Pseudo-Elementen ein Dreieck zu formen, um die optimale Fläche abzudecken.

Nav Dreieck lösung

Mit dem Dreieck werden die Elemente links und rechts nicht mehr überdeckt und sind nun wieder leicht klickbar.

Nav Lösung demo

Zuletzt wird die Farbe der beiden Pseudo-Elemente von rot nach transparent umgeschrieben. Somit haben wir jetzt ein Hover-Menü, welches ohne JavaScript funktioniert.

Code zum nachmachen

HTML

html
<div class="menu">
<ul class="menu__list">
<li class="menu__item">
<span>Punkt 1</span>
</li>
<li class="menu__item">
<span>Punkt 2</span>
<div class="menu__submenu-wrapper">
<ul class="menu__submenu">
<li class="menu__submenu-item">Subpunkt 1</li>
<li class="menu__submenu-item">Subpunkt 2</li>
<li class="menu__submenu-item">Subpunkt 3</li>
<li class="menu__submenu-item">Subpunkt 4</li>
</ul>
<ul class="menu__submenu">
<li class="menu__submenu-item">Subpunkt 5</li>
<li class="menu__submenu-item">Subpunkt 6</li>
<li class="menu__submenu-item">Subpunkt 7</li>
<li class="menu__submenu-item">Subpunkt 8</li>
</ul>
</div>
</li>
<li class="menu__item">
<span>Punkt 3</span>
</li>
<li class="menu__item">
<span>Punkt 4</span>
</li>
</ul>
</div>


CSS

css
.menu {
margin: 20px auto;
text-align: center;
}
.menu__list {
list-style: none;
display: inline-flex;
background-color: #ECECEC;
padding: 0;
border-radius: 3px;
}
.menu__item {
position: relative;
padding: 5px 15px;
cursor: pointer;
}
.menu__item:hover .menu__submenu-wrapper {
display: flex;
}
.menu__submenu-wrapper {
display: none;
position: absolute;
left: 50%;
transform: translateX(-50%);
background-color: #ECECEC;
margin-top: 10px;
z-index: 5;
}
.menu__submenu {
list-style: none;
padding: 0;
}
.menu__submenu:after, .menu__submenu:before {
display: block;
content: " ";
position: absolute;
top: -20px;
background-color: transparent;
width: 55%;
height: 50px;
}
.menu__submenu:after {
left: 5px;
transform: rotate(-25deg);
}
.menu__submenu:before {
right: 5px;
transform: rotate(25deg);
}
.menu__submenu-item {
padding: 3px 5px;
white-space: nowrap;
}


Fazit

Manchmal unterschätzen wir die Lösungen von CSS und die Art, wie sich CSS in den letzten Jahren entwickelt hat. Oftmals ist dieselbe, komplexe Javascript-Lösung auch mit CSS möglich. Das einzige Problem, auf das Webdeveloper immer stossen ist jedoch der Hover auf Mobile-Geräten. Da es auf diesen Geräten keine Hover- sondern nur Tap-Effekte geben kann, muss man sich genau überlegen wie man die Lösung für Submenüs umsetzt.

Weitere Stories

coop.ch successstory

Wie wir gemeinsam mit Coop-Experten die Lade-Performance der E-Commerce-Plattform optimieren

Ein Einblick in die Zusammenarbeit mit den Inhouse-Spezialisten von Coop. Erfahren Sie, wie durch die gemeinsame technische Optimierung kritischer Render-Pfade und Code-Strukturen die Lade-Performance der E-Commerce-Plattform nachhaltig gesteigert wurde.

Story Raffiniert Lighthouse

Barrierefreiheit (Accessibility) im Schweizer Onlinehandel: Gesetzliche Anforderungen und technische Umsetzung.

Barrierefreiheit im Schweizer Onlinehandel ist geschäftskritisch: Der EAA verschärft die Rechtslage, bis zu 20 % der Kunden werden sonst ausgeschlossen. Wer jetzt handelt, gewinnt Rankings, Performance und Conversion.

Story KRC

Von Excel zur App: Wie Kilian Ricklin mit einer massgeschneiderten PWA sein Coaching-Business skaliert hat.

Erfahre, wie wir für Kilian Ricklin manuelle Prozesse durch eine performante Progressive Web App (PWA) ersetzt haben. Mit Fokus auf Kosteneffizienz und Nutzererlebnis haben wir eine zentrale Plattform geschaffen, die dein Kunden-Management revolutioniert und echtes Wachstum ermöglicht.

Story Sprängi

In 4 Wochen zum Start: Wie eine neue Event-Location dank schneller Web-Lösung durchstartete

Unter extremem Zeitdruck entwickelten wir für die Event-Location Sprängi in nur einem Monat einen SEO-optimierten Onepager mit Buchungssystem – ein Beispiel für unsere pragmatische Herangehensweise, die lokale Sichtbarkeit und reibungslose digitale Prozesse ab dem ersten Tag ermöglicht.

Das Kaufverhalten im Onlineshop

Das Kaufverhalten im Onlineshop: Wie Onlineshop-Giganten gezielt dein Kaufverhalten beeinflussen

Im hart umkämpften E-Commerce setzen Plattformen wie Amazon, Zalando, Etsy und Temu nicht nur auf Preise oder Sortiment. Entscheidend sind psychologische Mechanismen und gezielte UX/UI-Strategien, die Kaufentscheidungen beeinflussen, Vertrauen stärken und Kunden langfristig binden.

Illustration eines Laptops

Responsive Tables: Die bessere Option zu Tabellen

Tabellen werden häufig verwendet, um Daten übersichtlich darzustellen. Auch auf Webseiten sind sie oft zu finden. Allerdings werden sie immer seltener eingesetzt, da es oft Probleme mit der Darstellung auf kleinen Geräten wie Tablets oder Handys gibt.