Dies ist ein ziemlich altes UX-Konzept, über das ich schon eine Weile nichts mehr gehört habe, das aber bei mehrstufigen Dropdown-Menüs immer noch relevant ist. Ein feingranularer Zeiger wie eine Maus muss manchmal durch ziemlich enge Korridore reisen, um genau dorthin zu gelangen, wo er in einem Dropdown-Menü hingehört. Es ist leicht, etwas falsch zu machen (der Mauszeiger verlässt den Pfad) und dafür bestraft zu werden, dass es sich schließt. Vielleicht können wir das weniger frustrierend machen.
Ein grundlegender CSS-Ansatz
Dropdown-Menüs sind typischerweise so konzipiert, dass ein Untermenü durch CSS bei einem :hover eines Elternelements angezeigt wird. Oder bei einer Zustandsänderung in JavaScript mit mouseenter / mouseover. Der Trick besteht also darin, zu versuchen, das Eintreten dieser Ereignisse zu verhindern. Die Korridore sozusagen erweitern.
Der Hauptgrund, warum ich darüber nachgedacht habe, ist, dass die Korridore für unsere Untermenüs im Haupt-Dropdown bei CodePen sehr eng waren. Um sie an der Engstelle zu erweitern, habe ich dem Untermenü ein paar Pseudoelemente hinzugefügt. Wenn die Maus darüber fährt, passiert nichts, es ist so, als wäre die Maus wie gewohnt innerhalb des Untermenüs.

Dies ist eine sehr leichte Technik, die nur CSS erfordert, was mir gefällt. Die leichte Gefahr besteht darin, dass man eine beträchtliche Anzahl angrenzender Menüelemente überdecken kann, was bedeuten könnte, dass ein Benutzer über ein legitimes Menüelement fährt und es nicht anklicken kann. Ich stelle mir vor, dass in vielen Fällen einfach die Maus ein wenig bewegt wird und es funktioniert, aber es ist definitiv ein Balanceakt zwischen zu klein und zu groß.
Die Geschichte davon reicht bis ins Jahr 2005 zurück und eine klassische Position is Everything Demo

Und potenziell eine Thierry Koblentz Demo.
CSS-Grenzen erweitern
John Gardner entwickelte einen Ansatz, bei dem alle Menüs zusätzlichen Platz um sich herum haben, was die nachgiebigen Hover-Offs ermöglicht.

Sieht so aus, als wäre das aus dem Internet gelöscht worden, tut mir leid! Es gibt viele CSS-Dropdown-Menüs auf CodePen zum Erkunden.
(Kein) Hover-Intent
Haben Sie schon von „Hover Intent“ gehört? Das ist dieses Konzept, bei dem man nicht sofort auf Mauspositionsereignisse reagiert. Man wartet einen Bruchteil einer Sekunde, um sicher zu sein, dass der Benutzer eine Reaktion wünschte. Es ist wie eine absichtliche Verzögerung. Es wird in Situationen verwendet, in denen die Benutzeroberfläche ohne sie zu zappelig wäre.
Das Gegenteil davon könnten wir „Unhover Intent“ nennen. Wir reagieren sofort auf ein Hover-Ereignis, aber erst nach einiger Zeit auf ein Hover-Off. In CSS könnte man etwas tun wie
.submenu {
visibility: hidden;
transition: 0.2s 1s; /* delay of 1 seconds on hover off */
}
.parent:hover .submenu {
visibility: visible;
transition-delay: 0s; /* react immediately on hover */
}
Beachten Sie, dass wir hier visibility verwenden, was übergangsfähig ist, im Gegensatz zu display, was (merkwürdigerweise) nicht übergangsfähig ist.
JavaScript ist sicherlich auch in der Lage, „Unhover Intent“ zu implementieren. Man würde es ähnlich wie ein Debouncing angehen, bei dem man die Funktionen, die zum Schließen führen, nicht aufruft, es sei denn, es ist eine gewisse Zeit vergangen. Das könnte mit einem setTimeout geschehen, den man löscht, wenn die Maus zurückkehrt. Dies ist zu vereinfacht, aber
var timer;
$(".parent").on("mouseover", function() {
clearTimeout(timer);
openSubmenu();
}).on("mouseleave", function() {
timer = setTimeout(
closeSubmenu
, 1000);
});
function openSubmenu() {
$(".submenu").addClass("open");
}
function closeSubmenu() {
$(".submenu").removeClass("open");
}
Keine dieser Unhover-Demos hat das Korridorenproblem durch Vergrößerung gelöst, sie haben es durch Vergebung eines schnellen Verfehlens der Mausposition gelöst.
Den engen Korridor vermeiden
Es gibt keine Regel, dass Untermenü-Dropdowns zur Seite gehen müssen. Wenn sie sich direkt darunter öffnen, bleibt der Korridor breit. Hier ist ein Beispiel dafür von Timothy M. LeBlanc.
Mit einem JavaScript-dreieck schick werden
Es gibt einen großartigen Beitrag von Ben Kames vor ein paar Jahren zu diesem Thema. Er untersuchte, wie flink die Dropdown-Menüs von Amazon.com im Vergleich zu anderen Dropdowns waren, die Verzögerungstaktiken zur Bewältigung der Benutzerfreundlichkeit einsetzen. Die Magie war Mathematik! Wenn die Maus in einem vernünftigen Winkel zum neu geöffneten Untermenü fuhr, löste sie die anderen Menüelemente nicht aus. Visuelle Hilfe.

Ben hat daraus ein jQuery-Plugin gemacht, das Sie hier ausprobieren können.
Er hat auch absolut Recht damit
Ich bin sicher, dass dieses Problem vor langer Zeit gelöst, vergessen, wiederentdeckt, erneut gelöst, vergessen, wiederentdeckt und wieder gelöst wurde.
Das ist eine traurige Wahrheit über viele Dinge in unserer Branche.
Jon Neal versuchte, die jQuery-Abhängigkeit zu entfernen und die Mathematik mit „baryzentrischen Koordinaten“ zu verbessern.
Alex Popov schrieb und sagte, er habe sich mit dieser Demo beschäftigt und deren Funktionalität verbessert. Ich hatte keine Zeit, alles wieder in meinen Kopf zu laden, um die funktionalen Unterschiede zu verstehen, aber hier ist ein Link zu Alex' Version, falls Sie sich damit tiefgehend beschäftigen und nach Möglichkeiten suchen.
Andere Bedenken
Ich denke, ein weiser Mensch sagte einmal
„Manchmal haben Besucher Ihrer Website eine Maus und manchmal nicht.“
Hoffentlich funktionieren Ihre Dropdowns auch mit Touch. Sie können sie sicherlich zum Laufen bringen! Sie können auch entscheiden, ob Sie allen Code zur Effizienz bündeln möchten oder ob eine Art Feature-Erkennung erforderlich ist, um verschiedene Skripte und Stile nach Bedarf zu laden (oder eine Kombination aus beidem).
Tastaturbedienbarkeit ist ein weiteres klassisches Problem bei Dropdown-Menüs. Ich wollte Sie nicht mit der Vorstellung allein lassen, dass die Verbesserung der Mausbewegung alles ist, was Sie für eine gute Dropdown-UX tun müssen. Es gibt immer etwas zu verbessern!
Sehr coole Beispiele
Interessante Sachen! So viele verschiedene Möglichkeiten, dieses Problem anzugehen.
Mehr Inhalt, mehr Probleme, obwohl ich argumentieren müsste, dass ein riesiger Baum von Untermenüs wahrscheinlich an sich schlechte UX ist.
Nie daran gedacht, Pseudoelemente für das zu verwenden, tolle Idee!
Es scheint, als würde die Kombination Ihres bestehenden Tricks mit den engen Korridoren (die roten Rechtecke) mit der (Un-)Hover-Intent-Technik eine ziemlich ausgeklügelte Lösung ergeben. Verwenden Sie größere, nachgiebigere Pseudoelemente (oder einen überlappenden Rand am Untermenü) mit z. B. einer Übergangszeit von 0,1 s. Auf diese Weise können Sie die Ecken auf dem Weg zum Untermenü abschneiden, aber wenn Sie tatsächlich das nächste Element nach unten wünschen, ist die Verzögerung minimal.
Könnten Sie versuchen, CSS-Dreiecke (z. B. mit Bordertricks) zu verwenden, um Ihre unsichtbaren quadratischen Affordanzen in Dreiecke zu verwandeln? Es könnte andere Menüelemente nur ein wenig weniger stören. Sie könnten die Dreiecke wahrscheinlich sogar horizontal länger machen und dabei die Störungen minimieren.
Der Punkt bei CSS-Dreiecken ist, dass es sich nicht wirklich um Dreiecke handelt, sondern um Quadrate, bei denen 2-3 Ränder transparent sind, sodass sie nur wie Dreiecke aussehen.
Es wäre jedoch möglich, kleine SVG-Schnipsel zu verwenden (schwerer im DOM). Oder vielleicht noch besser, CSS
clip-path: polygon()um eine dreieckige Fläche zu erhalten.Sie könnten jedoch ein Element drehen... das würde die Korrelation zwischen der Maus, die scheinbar über einem Element liegt, und der tatsächlichen Position auf diesem Element beibehalten. Verwenden Sie etwas JavaScript-Magie, um die Größe des Rechtecks und den Drehwinkel zu ermitteln, der so eingestellt ist, dass ein Punkt dort ist, wo die Maus das Dropdown-Menü aktiviert hat, und die beiden benachbarten Punkte an den nächstgelegenen oberen und unteren Ecken (für horizontal öffnende Menüs) oder linken und rechten Ecken (für vertikal öffnende Menüs) des Dropdown-Menüs positioniert sind ( Illustration).
Ich verwende die Übergangsverzögerungstechnik schon lange und finde, dass sie großartig funktioniert.
Auf den Punkt gebracht! Meiner Meinung nach der beste Ansatz.
Danke für die Erwähnung. Ich verwende auch seit langem die Übergangsverzögerung dafür. Hier ist ein Beispiel, das die Übergangsverzögerung bei einem Mega-Menü implementiert. Beachten Sie, wie Sie, wenn das Menü geöffnet ist, einen diagonalen Mauspfad zu den Unterlinks nehmen können. http://sparkexperience.com/projects/mclaren/member/?for=individualgroup
Ich bin mit Matt einer Meinung. Die Übergangsverzögerung ist meiner Meinung nach der eleganteste Weg, Navigationsprobleme zu vermeiden.
Guter Artikel. Gut, dass ich nicht der Einzige bin, der mit Dropdown-Usability-Frustrationen zu kämpfen hat. Einige gute Lösungen hier.
Guter Artikel, ich habe in der Vergangenheit sowohl die Pseudoelement- als auch die Verzögerungstechniken verwendet.
Bei Touch-Events ist das nicht so einfach, finde ich.
Wir könnten Dropdowns mit einem Klickereignis auslösen, aber was ist, wenn der Benutzer wirklich zur Landing Page der gesamten Kategorie gelangen wollte?
Ich neige dazu, immer eine Landing Page zu haben, die eine Navigation zu den Unterseiten enthält, damit Touch-Geräte trotzdem zur gewünschten Stelle navigieren können.
Für Bildschirme unterhalb des Breakpoints der Navigation ermöglicht das „Mobile“-Menü das Auslösen von Untermenüs oder die Navigation zur Landing Page, je nachdem, auf welchen Teil des Menüelements geklickt wird. Das Problem, dass dies auf größeren Bildschirmen nicht der Fall ist, liegt darin, dass ich die Mausinteraktion, die man auf dem Desktop hat, nicht verlieren möchte.
Einfach. Ein erster Klick erweitert das Dropdown und fügt eine Klasse wie „clicked“ hinzu.
Ein zweiter Klick führt zum Linkziel, wenn das Element die Klasse „clicked“ hat.
gergfegrege: Das könnte funktionieren, aber ich finde, es könnte zu einer ziemlich schlechten UX führen. Es wurde den Webnutzern eingebrannt, nicht doppelt auf das Web zu klicken. Nur sehr wenige Benutzer wüssten, dass es möglich ist, zur Elterntastseite zu navigieren, es sei denn, Sie geben eine Art visuellen Hinweis.
Ich stimme Ihnen bezüglich Doppelklicks zu.
Ich habe dies bei einigen Websites mit mehreren Navigationsebenen behandelt. Wenn das mobile Menü angezeigt wird und eine Sub-Navigation vorhanden ist, reproduziere ich das übergeordnete Navigations-Element und füge es als Kind-Link ein. Wenn Sie auf ein Menüelement klicken, wird die Sub-Navigation angezeigt und das erste Kind des Untermenüs ist ein Link zur Landing- (oder übergeordneten) Seite. Wenn es keine Kinder gibt, mache ich das nicht und lasse es zur Seite verlinken. Wenn Sie dies tun, benötigen Sie ein Symbol oder eine Möglichkeit, Untermenüs anzuzeigen.
Dieses Codepen verwendet diese Methode. Es verwendet auch ein Zurück-Navigations-Element, um zwischen den verschiedenen Navigationsebenen zu wechseln.
Das ist großartig. Ich benutze immer Superfish für die Navigation, diese Tricks werden alle damit funktionieren. Danke für das Teilen.
Zur Hintergrundinformation: Ich erinnere mich, dass Bruce Tognazzini dies als ein Problem beschrieb, das von Apples von der Vergangenheit geliebten Human Interface Group in den 80er Jahren gelöst wurde. Die Lösung war sehr ähnlich zu der, die in den Dropdown-Menüs von Amazon implementiert wurde.
Wow! Wirklich schöner Beitrag! Danke
Ich mag die Art und Weise, wie Sie die CodePen-Dropdowns gemacht haben, Chris. Einfach und effektiv. Das einzige Problem, das ich habe, und es ist ein kleiner, persönlicher Punkt: Wenn Sie über die Pseudoelemente fahren, verschwinden die Hover-Styles auf dem Linkelement, sodass Sie nicht sehen können, dass das aktuelle Element noch aktiv ist.
Ich denke, der einzige Weg, dies zu erreichen, wäre, entweder den
:hover-Zustand auf.has-submenuanzuwenden oder den:hoverauf dem.has-submenuzu duplizieren, wie zum Beispiel:http://jsfiddle.net/ahallicks/cLofnrcd/
Basierend auf Ihren Ideen habe ich das folgende Skript erstellt, um verschachtelte Bootstrap-Navigationsmenüs zu ermöglichen. Sie sind vollständig responsive und benötigen keine Korridore oder Ähnliches.
https://github.com/dsentker/BootstrapSubnav
schauen Sie sich Voronoi an. Algorithmen für Benutzeroberflächen -> https://www.youtube.com/watch?v=90NsjKvz9Ns
Ich setze immer einen Timer. Es ist die kürzeste, schnellste und einfachste Lösung. Ich weiß, dass es **JavaScript** erfordert, aber ehrlich gesagt, wie surfen Sie heutzutage im Web ohne JavaScript. Außerdem kann ich mit einem Timer Beziehungen zwischen Momenten anpassen. Eingang vs. Ausgang, Dropdown-Ebenen und Schaltfläche zu Schaltfläche können je nach Zeit unterschiedlich sein. Die andere Sache, für die ich einen Timer verwende, sind Menüreaktionen auf Mobilgeräten.
Das Web idiotensicher machen, eine Klasse nach der anderen. Gut gemacht, Chris, ich habe in der Vergangenheit nach Lösungen für dieses Problem gesucht und Sie haben endlich eine gefunden, die wirklich funktioniert und gut funktioniert.
Nette Idee
Im Ernst, was IST Libero?
Das ist so seltsam, ich habe gestern an einem dreistufigen, nebeneinander liegenden Menü gearbeitet und hatte genau dieses Problem. Danke!
Bezüglich des Tastaturzugangs haben wir einen ziemlich guten Tastaturtracker für Nichols College eingerichtet. Der Code ist auch auf Github.
Gute Arbeit! Habe noch nie darüber nachgedacht, Pseudoelemente und Verzögerung in das Gesamtbild des Menüs zu integrieren! Danke!
Nun, das war mein Beitrag zu dem Problem im Jahr 2014.
http://playground.idesigned.cz/projects/hoverintentmegamenu/
Ich habe auch Pseudoelemente verwendet. Aber mit Rotation und Animationen, um mehr Platz zu bedecken. Diese Lösung liegt irgendwo zwischen Ihrem „grundlegenden CSS-Ansatz“ und „Amazons schickem JavaScript-Dreieck“.
Ich kann Ihnen nicht sagen, ob die Lösung für die Benutzer funktioniert, da das Projekt, für das ich diesen Snippet entwickelt habe, noch nicht in Produktion ist.
Alles, was Sie brauchen, ist, einen Timeout zu Ihrem Trigger hinzuzufügen, und dann den Timeout löschen.
Ich muss Tim Rourke zustimmen: verschachtelte Menüs bedeuten im Allgemeinen, dass etwas schrecklich schief geht... Bei der Arbeit an einer E-Commerce-Website für einen riesigen amerikanischen Brillenhändler glaube ich ehrlich gesagt, dass wenn Sie Untermenüs von einem Top-Menü-Link aus erstellen, Ihr Text überarbeitet werden muss; oder Ihre Website ist übermäßig komplex und beeinträchtigt die Marketingleistung.
Autovervollständigungen, Filter, Tags, eine schöne Seitenleiste oder seitwärts scrollende Brot krumen-ähnliche Menüs (ähnlich wie die alten Flash-Menüs) funktionieren immer besser als Dropdowns und haben oft keine der Probleme mit Leistung und Caching, die riesige Menübäume haben können; so können Sie die Menüs reparieren und gleichzeitig die Website schneller machen!