J'aimerais que mon menu Bootstrap se déroule automatiquement au survol, plutôt que d'avoir à cliquer sur le titre du menu. J'aimerais aussi perdre les petites flèches à côté des titres de menu.
css
drop-down-menu
twitter-bootstrap
vaciller
la source
la source
Réponses:
J'ai créé un menu déroulant pur en survol basé sur le dernier framework Bootstrap (v2.0.2) qui prend en charge plusieurs sous-menus et j'ai pensé le publier pour les futurs utilisateurs:
Démo
la source
class="dropdown-toggle" data-toggle="dropdown"
sorte que seul le survol, et non le clic, déclenche le menu. Notez que lorsque vous utilisez des styles réactifs, les menus sont toujours balayés dans le petit bouton en haut à droite, qui est toujours déclenché par un clic. Grand merci!@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
et@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
Pour que le menu passe automatiquement en survol, cela peut être réalisé en utilisant CSS de base. Vous devez définir le sélecteur sur l'option de menu masqué, puis le définir pour qu'il s'affiche sous forme de bloc lorsque la
li
balise appropriée est survolée. En prenant l'exemple de la page d'amorçage twitter, le sélecteur serait le suivant:Cependant, si vous utilisez les fonctionnalités réactives de Bootstrap, vous ne voudrez pas cette fonctionnalité sur une barre de navigation réduite (sur des écrans plus petits). Pour éviter cela, enveloppez le code ci-dessus dans une requête multimédia:
Pour masquer la flèche (curseur), cela se fait de différentes manières selon que vous utilisez Twitter Bootstrap version 2 et inférieure ou version 3:
Bootstrap 3
Pour supprimer le curseur dans la version 3, il vous suffit de supprimer le code HTML
<b class="caret"></b>
de l'.dropdown-toggle
élément d'ancrage:Bootstrap 2 et inférieur
Pour supprimer le signe insertion dans la version 2, vous avez besoin d'un peu plus d'informations sur CSS et je suggère de regarder
:after
plus en détail le fonctionnement du pseudo-élément. Pour vous aider à comprendre, à cibler et à supprimer les flèches dans l'exemple d'amorçage twitter, vous devez utiliser le sélecteur CSS et le code suivants:Cela fonctionnera en votre faveur si vous examinez plus en détail leur fonctionnement et pas seulement en utilisant les réponses que je vous ai données.
Merci à @CocaAkat d'avoir signalé qu'il manquait le combinateur enfant ">" pour empêcher l'affichage des sous-menus sur le survol des parents.
la source
margin: 0;
, sinon la marge de 1px ci-dessus.dropdown-menu
provoque un comportement buggy.data-toggle="dropdown"
attribut.En plus de la réponse de "My Head Hurts" (qui était super):
Il y a 2 problèmes persistants:
La solution à (1) consiste à supprimer les éléments "class" et "data-toggle" du lien nav
Cela vous donne également la possibilité de créer un lien vers votre page parent - ce qui n'était pas possible avec l'implémentation par défaut. Vous pouvez simplement remplacer le "#" par la page que vous souhaitez envoyer à l'utilisateur.
La solution à (2) consiste à supprimer la marge supérieure du sélecteur de menu .dropdown
la source
data-toggle="dropdown"
attribut, qui semblait fonctionner..nav-pills .dropdown-menu { margin-top: 0px; }
J'ai utilisé un peu de jQuery:
la source
$('ul.nav li.dropdown').hover(function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(); }, function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut().hover(function() { $(this).stop(true, true); }); });
: Lorsque le sous-menu est en vol stationnaire, arrêtez fadeOutIl y a beaucoup de très bonnes solutions ici. Mais j'ai pensé que j'irais de l'avant et mettrais le mien ici comme une autre alternative. C'est juste un simple extrait de jQuery qui le fait comme bootstrap s'il prend en charge le survol pour les listes déroulantes au lieu de simplement cliquer. Je ne l'ai testé qu'avec la version 3, donc je ne sais pas si cela fonctionnerait avec la version 2. Enregistrez-le sous forme d'extrait dans votre éditeur et ayez-le en un seul clic.
Fondamentalement, cela signifie simplement que lorsque vous survolez la classe déroulante, elle y ajoutera la classe ouverte. Ensuite, cela fonctionne. Lorsque vous arrêtez de survoler le parent li avec la classe déroulante ou les ul / li enfants, il supprime la classe ouverte. Évidemment, ce n'est qu'une des nombreuses solutions, et vous pouvez y ajouter pour le faire fonctionner uniquement sur des instances spécifiques de .dropdown. Ou ajoutez une transition au parent ou à l'enfant.
la source
Personnalisez simplement votre style CSS en trois lignes de code
la source
Si vous avez un élément avec une
dropdown
classe comme celle-ci (par exemple):Ensuite, vous pouvez faire en sorte que le menu déroulant soit automatiquement déroulé au-dessus de la souris, plutôt que d'avoir à cliquer sur son titre, en utilisant cet extrait de code jQuery:
Voici une démo
Cette réponse s'est appuyée sur la réponse de @Michael , j'ai apporté quelques modifications et ajouté quelques ajouts pour que le menu déroulant fonctionne correctement
la source
[Mise à jour] Le plugin est sur GitHub et je travaille sur quelques améliorations (comme utiliser uniquement avec des attributs de données (aucun JS nécessaire). J'ai laissé le code ci-dessous, mais ce n'est pas la même chose que sur GitHub.
J'ai aimé la version purement CSS, mais c'est agréable d'avoir un délai avant sa fermeture, car c'est généralement une meilleure expérience utilisateur (c'est-à-dire non punie pour un glissement de souris qui dépasse 1 px en dehors de la liste déroulante, etc.), et comme mentionné dans les commentaires , il y a 1px de marge que vous devez gérer ou parfois la navigation se ferme de manière inattendue lorsque vous passez au menu déroulant à partir du bouton d'origine, etc.
J'ai créé un petit plugin rapide que j'ai utilisé sur quelques sites et cela a bien fonctionné. Chaque élément de navigation est géré indépendamment, de sorte qu'ils ont leurs propres temporisateurs de retard, etc.
JS
Le
delay
paramètre est assez explicite, et leinstantlyCloseOthers
fermera instantanément toutes les autres listes déroulantes ouvertes lorsque vous survolerez une nouvelle.Pas du CSS pur, mais j'espère que cela aidera quelqu'un d'autre à cette heure tardive (c'est-à-dire que c'est un vieux fil).
Si vous le souhaitez, vous pouvez voir les différents processus que j'ai passés (dans une discussion sur l'
#concrete5
IRC) pour le faire fonctionner via les différentes étapes de cet essentiel: https://gist.github.com/3876924L'approche du modèle de plugin est beaucoup plus propre pour prendre en charge les minuteries individuelles, etc.
Voir l' article de blog pour en savoir plus.
la source
Cela a fonctionné pour moi:
la source
Ceci est intégré à Bootstrap 3. Ajoutez simplement ceci à votre CSS:
la source
Encore mieux avec jQuery:
la source
jQuery('ul.nav li.dropdown').hover(function() { jQuery(this).closest('.dropdown-menu').stop(true, true).show(); jQuery(this).addClass('open'); }, function() { jQuery(this).closest('.dropdown-menu').stop(true, true).hide(); jQuery(this).removeClass('open'); });
que le sous-menu ne s'affiche pas en survol.Vous pouvez utiliser la
$().dropdown('toggle')
méthode par défaut pour basculer le menu déroulant au survol:la source
Je veux juste ajouter que si vous avez plusieurs listes déroulantes (comme moi), vous devriez écrire:
Et cela fonctionnera correctement.
la source
margin: 2px 0 0;
ce qui signifiait une entrée lente de la souris par le dessus a caché le menu prématurément.ul.dropdown-menu{ margin-top: 0; }
À mon avis, la meilleure façon est la suivante:
Exemple de balisage:
la source
La meilleure façon de le faire est de simplement déclencher l'événement Click de Bootstrap avec un survol. De cette façon, il doit rester convivial pour les appareils tactiles.
la source
Je l'ai géré comme suit:
J'espère que ça aidera quelqu'un...
la source
Également ajouté margin-top: 0 pour réinitialiser la marge CSS bootstrap pour .dropdown-menu afin que la liste des menus ne disparaisse pas lorsque l'utilisateur passe lentement du menu déroulant à la liste des menus.
la source
C'est probablement une idée stupide, mais pour supprimer simplement la flèche pointant vers le bas, vous pouvez supprimer le
Cela ne fait rien pour celui qui pointe vers le haut, cependant ...
la source
J'ai publié un plugin approprié pour la fonctionnalité de survol de la liste déroulante Bootstrap 3, dans lequel vous pouvez même définir ce qui se passe lorsque vous cliquez sur le
dropdown-toggle
élément (le clic peut être désactivé):https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
Pourquoi je l'ai fait alors qu'il existe déjà de nombreuses solutions?
J'ai eu des problèmes avec toutes les solutions existantes. Les CSS simples n'utilisent pas la
.open
classe sur le.dropdown
, donc il n'y aura aucun retour sur l'élément à bascule déroulant lorsque le menu déroulant est visible.Les js interfèrent en cliquant sur
.dropdown-toggle
, donc la liste déroulante apparaît au survol, puis la masque lorsque vous cliquez sur une liste déroulante ouverte, et en déplaçant la souris, la liste déroulante réapparaîtra. Certaines des solutions js ne respectent pas la compatibilité iOS, certains plugins ne fonctionnent pas sur les navigateurs de bureau modernes qui prennent en charge les événements tactiles.C'est pourquoi j'ai créé le plugin Bootstrap Dropdown Hover qui empêche tous ces problèmes en utilisant uniquement l'API javascript Bootstrap standard, sans aucun piratage . Même les attributs Aria fonctionnent bien avec ce plugin.
la source
bootstrap-dropdown-hover
, car il semble faire le travail et plus compact. Je construis un site d'atterrissage avec la barre de navigation du côté gauche.Utilisez ce code pour ouvrir le sous-menu au survol de la souris (bureau uniquement):
Et si vous voulez que le menu de premier niveau soit cliquable, même sur mobile, ajoutez ceci:
Le sous-menu (menu déroulant) sera ouvert avec le survol de la souris sur le bureau et avec un clic / toucher sur le mobile et la tablette. Une fois le sous-menu ouvert, un deuxième clic vous permettra d'ouvrir le lien. Grâce au
if ($(window).width() > 767)
, le sous-menu occupera toute la largeur de l'écran sur mobile.la source
la source
Cela masquera ceux
la source
Cela devrait masquer les listes déroulantes et leurs carets s'ils sont plus petits qu'une tablette.
la source
La solution jQuery est bonne, mais elle devra gérer les événements de clic (pour mobile ou tablette) car le survol ne fonctionnera pas correctement ... Pourrait peut-être faire une détection de redimensionnement de la fenêtre?
La réponse d'Andres Ilich semble bien fonctionner, mais elle devrait être enveloppée dans une requête médiatique:
la source
La solution très simple pour la version 2, uniquement CSS. Conserve la même fonctionnalité conviviale pour mobile et tablette.
la source
Remplacez bootstrap.js par ce script.
la source
Voici ma technique qui ajoute un léger délai avant que le menu ne soit fermé après avoir arrêté de survoler le menu ou le bouton bascule. Le
<button>
fichier sur lequel vous cliqueriez normalement pour afficher le menu de navigation est#nav_dropdown
.la source
Pour améliorer la réponse de Sudharshan, j'encapsule cela dans une requête multimédia pour empêcher le survol lorsque sur des largeurs d'affichage XS ...
De plus, le signe d'insertion dans le balisage n'est pas requis, juste la classe déroulante pour le li .
la source
Cela fonctionne pour WordPress Bootstrap:
la source
Vous avez donc ce code:
Normalement, cela fonctionne sur un événement de clic, et vous voulez qu'il fonctionne sur un événement de survol. C'est très simple, utilisez simplement ce code JavaScript / jQuery:
Cela fonctionne très bien et voici l'explication: nous avons un bouton et un menu. Lorsque nous survolons le bouton, nous affichons le menu, et lorsque nous passons la souris sur le bouton, nous masquons le menu après 100 ms. Si vous vous demandez pourquoi j'utilise cela, c'est parce que vous avez besoin de temps pour faire glisser le curseur du bouton sur le menu. Lorsque vous êtes dans le menu, l'heure est réinitialisée et vous pouvez y rester autant de fois que vous le souhaitez. Lorsque vous quittez le menu, nous masquons le menu instantanément sans aucun délai.
J'ai utilisé ce code dans de nombreux projets, si vous rencontrez des problèmes pour l'utiliser, n'hésitez pas à me poser des questions.
la source