Cómo hacer que el menú desplegable de Twitter Bootstrap esté al pasar el mouse en lugar de hacer clic

1204
falter 2012-01-16 23:36.

Me gustaría que mi menú Bootstrap se desplegara automáticamente al pasar el mouse, en lugar de tener que hacer clic en el título del menú. También me gustaría perder las pequeñas flechas al lado de los títulos del menú.

30 answers

604
Andres Ilich 2012-04-14 04:46.

Creé un menú desplegable puro basado en el último marco de Bootstrap (v2.0.2) que tiene soporte para múltiples submenús y pensé en publicarlo para futuros usuarios:

body {
  padding-top: 60px;
  padding-bottom: 40px;
}

.sidebar-nav {
  padding: 9px 0;
}

.dropdown-menu .sub-menu {
  left: 100%;
  position: absolute;
  top: 0;
  visibility: hidden;
  margin-top: -1px;
}

.dropdown-menu li:hover .sub-menu {
  visibility: visible;
}

.dropdown:hover .dropdown-menu {
  display: block;
}

.nav-tabs .dropdown-menu,
.nav-pills .dropdown-menu,
.navbar .dropdown-menu {
  margin-top: 0;
}

.navbar .sub-menu:before {
  border-bottom: 7px solid transparent;
  border-left: none;
  border-right: 7px solid rgba(0, 0, 0, 0.2);
  border-top: 7px solid transparent;
  left: -7px;
  top: 10px;
}

.navbar .sub-menu:after {
  border-top: 6px solid transparent;
  border-left: none;
  border-right: 6px solid #fff;
  border-bottom: 6px solid transparent;
  left: 10px;
  top: 11px;
  left: -6px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <a href="#" class="brand">Project name</a>
      <div class="nav-collapse">
        <ul class="nav">
          <li class="active"><a href="#">Home</a></li>
          <li><a href="#">Link</a></li>
          <li><a href="#">Link</a></li>
          <li><a href="#">Link</a></li>
          <li class="dropdown">
            <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li>
                <a href="#">2-level Dropdown <i class="icon-arrow-right"></i></a>
                <ul class="dropdown-menu sub-menu">
                  <li><a href="#">Action</a></li>
                  <li><a href="#">Another action</a></li>
                  <li><a href="#">Something else here</a></li>
                  <li class="divider"></li>
                  <li class="nav-header">Nav header</li>
                  <li><a href="#">Separated link</a></li>
                  <li><a href="#">One more separated link</a></li>
                </ul>
              </li>
              <li><a href="#">Another action</a></li>
              <li><a href="#">Something else here</a></li>
              <li class="divider"></li>
              <li class="nav-header">Nav header</li>
              <li><a href="#">Separated link</a></li>
              <li><a href="#">One more separated link</a></li>
            </ul>
          </li>
        </ul>
        <form action="" class="navbar-search pull-left">
          <input type="text" placeholder="Search" class="search-query span2">
        </form>
        <ul class="nav pull-right">
          <li><a href="#">Link</a></li>
          <li class="divider-vertical"></li>
          <li class="dropdown">
            <a class="#" href="#">Menu</a>
          </li>
        </ul>
      </div>
      <!-- /.nav-collapse -->
    </div>
  </div>
</div>

<hr>

<ul class="nav nav-pills">
  <li class="active"><a href="#">Regular link</a></li>
  <li class="dropdown">
    <a href="#" data-toggle="dropdown" class="dropdown-toggle">Dropdown <b class="caret"></b></a>
    <ul class="dropdown-menu" id="menu1">
      <li>
        <a href="#">2-level Menu <i class="icon-arrow-right"></i></a>
        <ul class="dropdown-menu sub-menu">
          <li><a href="#">Action</a></li>
          <li><a href="#">Another action</a></li>
          <li><a href="#">Something else here</a></li>
          <li class="divider"></li>
          <li class="nav-header">Nav header</li>
          <li><a href="#">Separated link</a></li>
          <li><a href="#">One more separated link</a></li>
        </ul>
      </li>
      <li><a href="#">Another action</a></li>
      <li><a href="#">Something else here</a></li>
      <li class="divider"></li>
      <li><a href="#">Separated link</a></li>
    </ul>
  </li>
  <li class="dropdown">
    <a href="#">Menu</a>
  </li>
  <li class="dropdown">
    <a href="#">Menu</a>
  </li>
</ul>

Manifestación

914
My Head Hurts 2012-01-17 00:26.

Para que el menú se coloque automáticamente al pasar el mouse, esto se puede lograr usando CSS básico. Debe configurar el selector para la opción de menú oculto y luego configurarlo para que se muestre como bloque cuando se coloca el licursor sobre la etiqueta correspondiente . Tomando el ejemplo de la página de arranque de Twitter, el selector sería el siguiente:

ul.nav li.dropdown:hover > ul.dropdown-menu {
    display: block;    
}

Sin embargo, si está utilizando las funciones de respuesta de Bootstrap, no querrá esta funcionalidad en una barra de navegación colapsada (en pantallas más pequeñas). Para evitar esto, envuelva el código anterior en una consulta de medios:

@media (min-width: 979px) {
  ul.nav li.dropdown:hover > ul.dropdown-menu {
    display: block;
  }
}

Para ocultar la flecha (signo de intercalación), esto se hace de diferentes maneras dependiendo de si está utilizando Twitter Bootstrap versión 2 y anterior o versión 3:

Bootstrap 3

Para eliminar el signo de intercalación en la versión 3, solo necesita eliminar el HTML <b class="caret"></b>del .dropdown-toggleelemento de anclaje:

<a class="dropdown-toggle" data-toggle="dropdown" href="#">
    Dropdown
    <b class="caret"></b>    <-- remove this line
</a>

Bootstrap 2 e inferior

Para eliminar el signo de intercalación en la versión 2, necesita un poco más de información sobre CSS y le sugiero que observe cómo funciona el :afterpseudo elemento con más detalle. Para comenzar en su camino hacia la comprensión, para apuntar y eliminar las flechas en el ejemplo de arranque de Twitter, usaría el siguiente selector y código CSS:

a.menu:after, .dropdown-toggle:after {
    content: none;
}

Funcionará a su favor si analiza más a fondo cómo funcionan y no solo usa las respuestas que le he dado.

Gracias a @CocaAkat por señalar que nos faltaba el combinador secundario ">" para evitar que se mostraran submenús en el elemento flotante principal.

231
Cory Price 2012-02-25 08:00.

Además de la respuesta de "Me duele la cabeza" (que fue genial):

ul.nav li.dropdown:hover ul.dropdown-menu{
    display: block;    
}

Hay 2 problemas persistentes:

  1. Al hacer clic en el enlace desplegable, se abrirá el menú desplegable. Y permanecerá abierto a menos que el usuario haga clic en otro lugar, o pase el mouse sobre él, creando una interfaz de usuario incómoda.
  2. Hay un margen de 1 px entre el enlace desplegable y el menú desplegable. Esto hace que el menú desplegable se oculte si se mueve lentamente entre el menú desplegable y el menú desplegable.

La solución a (1) es eliminar los elementos "class" y "data-toggle" del enlace de navegación

<a href="#">
     Dropdown
     <b class="caret"></b>
</a>

Esto también le brinda la posibilidad de crear un enlace a su página principal, lo que no era posible con la implementación predeterminada. Simplemente puede reemplazar el "#" con cualquier página que desee enviar al usuario.

La solución a (2) es eliminar el margen superior en el selector de menú desplegable.

.navbar .dropdown-menu {
    margin-top: 0px;
}
132
John Montgomery 2012-05-23 07:49.

He usado un poco de jQuery:

// Add hover effect to menus
jQuery('ul.nav li.dropdown').hover(function() {
  jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
}, function() {
  jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();
});
71
Ranjith 2014-04-05 20:24.

Simplemente personalice su estilo CSS en tres líneas de código

.dropdown:hover .dropdown-menu {
   display: block;
}
70
stereoscience 2014-02-01 07:28.

Aquí hay muchas soluciones realmente buenas. Pero pensé que seguiría adelante y pondría el mío aquí como otra alternativa. Es solo un simple fragmento de jQuery que lo hace como lo haría el bootstrap si fuera compatible con los menús desplegables en lugar de hacer clic. Solo probé esto con la versión 3, así que no sé si funcionaría con la versión 2. Guárdelo como un fragmento en su editor y téngalo con solo presionar una tecla.

<script>
    $(function() { $(".dropdown").hover(
            function(){ $(this).addClass('open') }, function(){ $(this).removeClass('open') }
        );
    });
</script>

Básicamente, solo dice que cuando se desplaza sobre la clase desplegable, se le agregará la clase abierta. Entonces simplemente funciona. Cuando deja de pasar el mouse sobre el li principal con la clase desplegable o el ul / li secundario, elimina la clase abierta. Obviamente, esta es solo una de las muchas soluciones, y puede agregarla para que funcione solo en instancias específicas de .dropdown. O agregue una transición a padre o hijo.

22
Amr 2014-09-28 11:13.

Si tiene un elemento con una dropdownclase como esta (por ejemplo):

<ul class="list-unstyled list-inline">
    <li class="dropdown">
        <a data-toggle="dropdown" href="#"><i class="fa fa-bars"></i> Dropdown 1</a>
        <ul class="dropdown-menu">
            <li><a href="">Item 1</a></li>
            <li><a href="">Item 2</a></li>
            <li><a href="">Item 3</a></li>
            <li><a href="">Item 4</a></li>
            <li><a href="">Item 5</a></li>
        </ul>
    </li>
    <li class="dropdown">
        <a data-toggle="dropdown" href="#"><i class="fa fa-user"></i> Dropdown 2</a>
        <ul class="dropdown-menu">
            <li><a href="">Item A</a></li>
            <li><a href="">Item B</a></li>
            <li><a href="">Item C</a></li>
            <li><a href="">Item D</a></li>
            <li><a href="">Item E</a></li>
        </ul>
    </li>
</ul>

Luego, puede hacer que el menú desplegable se despliegue automáticamente al pasar el cursor sobre, en lugar de tener que hacer clic en su título, utilizando este fragmento de código jQuery:

<script>
    $('.dropdown').hover( function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
        },
        function() {
            $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(); } ); $('.dropdown-menu').hover(
        function() {
            $(this).stop(true, true); }, function() { $(this).stop(true, true).delay(200).fadeOut();
        }
    );
</script>

Aquí hay una demostración

Esta respuesta se basó en la respuesta de @Michael , hice algunos cambios y agregué algunas adiciones para que el menú desplegable funcione correctamente

20
CWSpear 2012-10-12 17:02.

[Actualización] El complemento está en GitHub y estoy trabajando en algunas mejoras (como usar solo con atributos de datos (no es necesario JS). Dejo el código a continuación, pero no es lo mismo que en GitHub.

Me gustó la versión puramente CSS, pero es bueno tener un retraso antes de que se cierre, ya que generalmente es una mejor experiencia de usuario (es decir, no se castiga por un desliz del mouse que sale 1 px del menú desplegable, etc.), y como se menciona en los comentarios , hay 1px de margen con el que tiene que lidiar o, a veces, el navegador se cierra inesperadamente cuando se mueve al menú desplegable desde el botón original, etc.

Creé un pequeño complemento rápido que he usado en un par de sitios y funcionó muy bien. Cada elemento de navegación se maneja de forma independiente, por lo que tienen sus propios temporizadores de retardo, etc.

JS

// outside the scope of the jQuery plugin to
// keep track of all dropdowns
var $allDropdowns = $();

// if instantlyCloseOthers is true, then it will instantly
// shut other nav items when a new one is hovered over
$.fn.dropdownHover = function(options) { // the element we really care about // is the dropdown-toggle's parent $allDropdowns = $allDropdowns.add(this.parent()); return this.each(function() { var $this = $(this).parent(), defaults = { delay: 500, instantlyCloseOthers: true }, data = { delay: $(this).data('delay'),
                instantlyCloseOthers: $(this).data('close-others') }, options = $.extend(true, {}, defaults, options, data),
            timeout;

        $this.hover(function() { if(options.instantlyCloseOthers === true) $allDropdowns.removeClass('open');

            window.clearTimeout(timeout);
            $(this).addClass('open'); }, function() { timeout = window.setTimeout(function() { $this.removeClass('open');
            }, options.delay);
        });
    });
};  

El delayparámetro es bastante autoexplicativo y instantlyCloseOtherscerrará instantáneamente todos los demás menús desplegables que estén abiertos cuando pase el cursor sobre uno nuevo.

No es CSS puro, pero con suerte ayudará a alguien más a esta hora tardía (es decir, este es un hilo antiguo).

Si lo desea, puede ver los diferentes procesos por los que pasé (en una discusión sobre el #concrete5IRC) para que funcione a través de los diferentes pasos en esta esencia:https://gist.github.com/3876924

El enfoque del patrón de complemento es mucho más limpio para admitir temporizadores individuales, etc.

Consulte la publicación del blog para obtener más información.

17
Amay Kulkarni 2015-10-07 01:47.

Esto funcionó para mí:

.dropdown:hover .dropdown-menu {
    display: block;
}
15
BSUK 2017-11-19 10:23.

Esto está integrado en Bootstrap 3. Simplemente agregue esto a su CSS:

.dropdown:hover .dropdown-menu {
    display: block;
}
10
caarlos0 2012-08-17 15:51.

Aún mejor con jQuery:

jQuery('ul.nav li.dropdown').hover(function() {
  jQuery(this).find('.dropdown-menu').stop(true, true).show();
  jQuery(this).addClass('open');
}, function() {
  jQuery(this).find('.dropdown-menu').stop(true, true).hide();
  jQuery(this).removeClass('open');
});
9
sdvnksv 2015-09-23 22:47.

Puede usar el $().dropdown('toggle')método predeterminado para alternar el menú desplegable al pasar el mouse:

$(".nav .dropdown").hover(function() {
  $(this).find(".dropdown-toggle").dropdown("toggle");
});
9
Maxim Filippov 2012-11-01 10:22.

Solo quiero agregar que si tiene varios menús desplegables (como yo), debe escribir:

ul.nav li.dropdown:hover > ul.dropdown-menu {
    display: block;    
}

Y funcionará correctamente.

8
Alex 2013-09-10 23:53.

En mi opinión, la mejor manera es así:

;(function($, window, undefined) { // Outside the scope of the jQuery plugin to // keep track of all dropdowns var $allDropdowns = $(); // If instantlyCloseOthers is true, then it will instantly // shut other nav items when a new one is hovered over $.fn.dropdownHover = function(options) {

        // The element we really care about
        // is the dropdown-toggle's parent
        $allDropdowns = $allDropdowns.add(this.parent());

        return this.each(function() {
            var $this = $(this),
                $parent = $this.parent(),
                defaults = {
                    delay: 500,
                    instantlyCloseOthers: true
                },
                data = {
                    delay: $(this).data('delay'), instantlyCloseOthers: $(this).data('close-others')
                },
                settings = $.extend(true, {}, defaults, options, data), timeout; $parent.hover(function(event) {

                // So a neighbor can't open the dropdown
                if(!$parent.hasClass('open') && !$this.is(event.target)) {
                    return true;
                }

                if(settings.instantlyCloseOthers === true)
                    $allDropdowns.removeClass('open'); window.clearTimeout(timeout); $parent.addClass('open');
            }, function() {
                timeout = window.setTimeout(function() {
                    $parent.removeClass('open'); }, settings.delay); }); // This helps with button groups! $this.hover(function() {
                if(settings.instantlyCloseOthers === true)
                    $allDropdowns.removeClass('open'); window.clearTimeout(timeout); $parent.addClass('open');
            });

            // Handle submenus
            $parent.find('.dropdown-submenu').each(function(){ var $this = $(this); var subTimeout; $this.hover(function() {
                    window.clearTimeout(subTimeout);
                    $this.children('.dropdown-menu').show(); // Always close submenu siblings instantly $this.siblings().children('.dropdown-menu').hide();
                }, function() {
                    var $submenu = $this.children('.dropdown-menu');
                    subTimeout = window.setTimeout(function() {
                        $submenu.hide(); }, settings.delay); }); }); }); }; $(document).ready(function() {
        // apply dropdownHover to all elements with the data-hover="dropdown" attribute
        $('[data-hover="dropdown"]').dropdownHover();
    });
})(jQuery, this);

Marcado de muestra:

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="false">
        Account <b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
        <li><a tabindex="-1" href="#">My Account</a></li>
        <li class="divider"></li>
        <li><a tabindex="-1" href="#">Change Email</a></li>
        <li><a tabindex="-1" href="#">Change Password</a></li>
        <li class="divider"></li>
        <li><a tabindex="-1" href="#">Logout</a></li>
    </ul>
</li>
8
Mark Williams 2014-03-01 22:52.

La mejor manera de hacerlo es simplemente activar el evento de clic de Bootstrap con un desplazamiento. De esta manera, debería seguir siendo compatible con dispositivos táctiles.

$('.dropdown').hover(function(){ $('.dropdown-toggle', this).trigger('click'); 
});
7
Mehdi Maghrouni 2013-10-01 04:35.

Lo he logrado de la siguiente manera:

$('ul.nav li.dropdown').hover(function(){ $(this).children('ul.dropdown-menu').slideDown(); 
    }, function(){
       $(this).children('ul.dropdown-menu').slideUp(); 
});

Espero que esto ayude a alguien...

5
Sudharshan 2014-05-15 02:05.

También se agregó margin-top: 0 para restablecer el margen CSS de bootstrap para .dropdown-menu para que la lista del menú no desaparezca cuando el usuario pasa lentamente del menú desplegable a la lista del menú.

ul.nav li.dropdown:hover > ul.dropdown-menu {
    display: block;    
}

.nav .dropdown-menu {
    margin-top: 0;
}
5
stinaq 2012-02-28 08:01.

Probablemente sea una idea estúpida, pero para eliminar la flecha que apunta hacia abajo, puede eliminar la

<b class="caret"></b>

Sin embargo, esto no hace nada para el que apunta hacia arriba ...

5
István Ujj-Mészáros 2015-06-27 17:13.

He publicado un complemento adecuado para la funcionalidad de desplazamiento del menú desplegable de Bootstrap 3, en el que incluso puede definir qué sucede al hacer clic en el dropdown-toggleelemento (el clic se puede deshabilitar):

https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover


¿Por qué lo hice cuando ya hay muchas soluciones?

Tuve problemas con todas las soluciones existentes anteriormente. Los CSS simples no están usando la .openclase en el .dropdown, por lo que no habrá comentarios sobre el elemento de alternancia desplegable cuando el menú desplegable esté visible.

Los js están interfiriendo con hacer clic en .dropdown-toggle, por lo que el menú desplegable aparece al pasar el mouse, luego lo oculta al hacer clic en un menú desplegable abierto, y al mover el mouse, el menú desplegable se activará para volver a aparecer. Algunas de las soluciones js están rompiendo la compatibilidad con iOS, algunos complementos no funcionan en los navegadores de escritorio modernos que son compatibles con los eventos táctiles.

Es por eso que creé el complemento Bootstrap Dropdown Hover que previene todos estos problemas usando solo la API estándar de JavaScript de Bootstrap, sin ningún truco . Incluso los atributos de Aria funcionan bien con este complemento.

4
Jibato 2016-10-27 02:52.

Use este código para abrir el submenú al pasar el mouse (solo escritorio):

$('ul.nav li.dropdown').hover(function () { if ($(window).width() > 767) {
        $(this).find('.dropdown-menu').show(); } }, function () { if ($(window).width() > 767) {
        $(this).find('.dropdown-menu').hide().css('display','');
    }
});

Y si desea que se pueda hacer clic en el menú de primer nivel, incluso en dispositivos móviles, agregue esto:

    $('.dropdown-toggle').click(function() {
    if ($(this).next('.dropdown-menu').is(':visible')) { window.location = $(this).attr('href');
    }
});

El submenú (menú desplegable) se abrirá con el mousehover en el escritorio y con clic / toque en el móvil y la tableta. Una vez que se abrió el submenú, un segundo clic le permitirá abrir el enlace. Gracias a if ($(window).width() > 767), el submenú ocupará todo el ancho de la pantalla en el móvil.

$('.dropdown').hover(function(e){$(this).addClass('open')})
3
allochi 2012-04-12 06:26.

Esto ocultará a los que están arriba

.navbar .dropdown-menu:before {
   display:none;
}
.navbar .dropdown-menu:after {
   display:none;
}
3
Kevin Nuut 2012-03-28 07:53.

Esto debería ocultar los menús desplegables y sus signos de intercalación si son más pequeños que una tableta.

@media (max-width: 768px) {
    .navbar ul.dropdown-menu, .navbar li.dropdown b.caret {
        display: none;
    }
}
3
Fizex 2013-01-11 21:01.

La solución jQuery es buena, pero tendrá que lidiar con eventos de clic (para dispositivos móviles o tabletas) ya que el desplazamiento no funcionará correctamente ... ¿Podría tal vez hacer alguna detección de cambio de tamaño de ventana?

La respuesta de Andres Ilich parece funcionar bien, pero debería estar envuelta en una consulta de medios:

@media (min-width: 980px) {

    .dropdown-menu .sub-menu {
        left: 100%;
        position: absolute;
        top: 0;
        visibility: hidden;
        margin-top: -1px;
    }

    .dropdown-menu li:hover .sub-menu {
        visibility: visible;
    }

    .dropdown:hover .dropdown-menu {
        display: block;
    }

    .nav-tabs .dropdown-menu, .nav-pills .dropdown-menu, .navbar .dropdown-menu {
        margin-top: 0;
    }

    .navbar .sub-menu:before {
        border-bottom: 7px solid transparent;
        border-left: none;
        border-right: 7px solid rgba(0, 0, 0, 0.2);
        border-top: 7px solid transparent;
        left: -7px;
        top: 10px;
    }
    .navbar .sub-menu:after {
        border-top: 6px solid transparent;
        border-left: none;
        border-right: 6px solid #fff;
        border-bottom: 6px solid transparent;
        left: 10px;
        top: 11px;
        left: -6px;
    }
}
3
Kash 2018-08-30 23:41.

La solución muy simple para la versión 2, solo CSS. Mantiene la misma funcionalidad amigable para dispositivos móviles y tabletas.

@media (min-width: 980px) {
    .dropdown:hover .dropdown-menu {
       display: block;
    }
}
3
Drew 2019-02-21 12:51.

Esto funciona para Bootstrap V4

JS:

<script>
        $(function() { $('.dropdown-hover').hover(
                function() { $(this).addClass('show'); $(this).find('[data-toggle="dropdown"]').attr('aria-expanded', true); $(this).find('.dropdown-menu').addClass('show'); }, function() { $(this).removeClass('show'); $(this).find('[data-toggle="dropdown"]').attr('aria-expanded',false); $(this).find('.dropdown-menu').removeClass('show'); }
            );
        });
    </script>

Vanilla Bootstrap 4 Dropdown HTML, excepto por la adición de la clase desplegable-hover:

<div class="dropdown dropdown-hover">
<button class="btn btn-text dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    ABOUT
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
    <a class="dropdown-item" href="#">Action</a>
    <a class="dropdown-item" href="#">Another action</a>
    <a class="dropdown-item" href="#">Something else here</a>
</div>

Si no desea habilitar selectivamente la función de desplazamiento mediante el uso de la clase .dropdown-hover, simplemente cambie el selector de jquery de .dropdown-hover a .dropdown.

2
Hari Krishnan 2014-01-22 19:53.

Sobrescriba bootstrap.js con este script.

jQuery(document).ready(function ($) { $('.navbar .dropdown').hover(function() {
    $(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown(); }, function() { var na = $(this)
    na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
});

$('.dropdown-submenu').hover(function() { $(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
}, function() {
    var na = $(this)
    na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
});

}); 
2
Sarah Vessels 2014-02-19 09:43.

Esta es mi técnica que agrega un ligero retraso antes de que se cierre el menú después de que dejas de desplazarte por el menú o el botón de alternancia. El <button>que normalmente haría clic para mostrar el menú de navegación es #nav_dropdown.

$(function() { var delay_close_it, nav_menu_timeout, open_it; nav_menu_timeout = void 0; open_it = function() { if (nav_menu_timeout) { clearTimeout(nav_menu_timeout); nav_menu_timeout = null; } return $('.navbar .dropdown').addClass('open');
  };
  delay_close_it = function() {
    var close_it;
    close_it = function() {
      return $('.navbar .dropdown').removeClass('open'); }; return nav_menu_timeout = setTimeout(close_it, 500); }; $('body').on('mouseover', '#nav_dropdown, #nav_dropdown *', open_it).on('mouseout', '#nav_dropdown', delay_close_it);
  return $('body').on('mouseover', '.navbar .dropdown .dropdown-menu', open_it).on('mouseout', '.navbar .dropdown .dropdown-menu', delay_close_it);
});
2
johna 2015-02-26 17:30.

Para mejorar la respuesta de Sudharshan, envuelvo esto en una consulta de medios para evitar el desplazamiento cuando se usa el ancho de pantalla XS ...

@media (min-width:768px)
{
    ul.nav li.dropdown:hover > ul.dropdown-menu {
        display: block;    
    }

    .nav .dropdown-menu {
        margin-top: 0;
    }
}

Además, no se requiere el signo de intercalación en el marcado, solo la clase desplegable para li .

2
Fred K 2013-03-16 08:34.

Esto funciona para WordPress Bootstrap:

.navbar .nav > li > .dropdown-menu:after,
.navbar .nav > li > .dropdown-menu:before {
    content: none;
}

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Se revela la estatua de Godzilla más nueva de Tokio

Se revela la estatua de Godzilla más nueva de Tokio

Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

El alcalde de Chicago realmente quiere que Elon Musk perfore un túnel debajo de la ciudad

Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language