Me gustaría que mi menú Bootstrap se despliegue automáticamente al pasar el mouse por encima, 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ú.
css
drop-down-menu
twitter-bootstrap
desfallecer
fuente
fuente
Respuestas:
Creé un menú desplegable puro al pasar el ratón basado en el último marco Bootstrap (v2.0.2) que tiene soporte para múltiples submenús y pensé que lo publicaría para futuros usuarios:
Manifestación
fuente
class="dropdown-toggle" data-toggle="dropdown"
para que solo se desplace, no haga clic, activaría el menú. Tenga en cuenta que cuando usa estilos receptivos, los menús aún se desplazan hacia el pequeño botón en la parte superior derecha, que aún se activa con un clic. ¡Muchas gracias!@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
y@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
Para hacer que el menú se coloque automáticamente al pasar el mouse sobre este, esto se puede lograr usando CSS básico. Debe calcular el selector para la opción de menú oculta y luego configurarlo para que se muestre como bloque cuando se coloca la
li
etiqueta correspondiente . Tomando el ejemplo de la página de arranque de Twitter, el selector sería el siguiente:Sin embargo, si está utilizando las funciones de respuesta de Bootstrap, no querrá esta funcionalidad en una barra de navegación contraída (en pantallas más pequeñas). Para evitar esto, envuelva el código anterior en una consulta de medios:
Para ocultar la flecha (intercalar), esto se hace de diferentes maneras dependiendo de si está utilizando Twitter Bootstrap versión 2 y versiones inferiores o 3:
Bootstrap 3
Para eliminar el cursor en la versión 3 solo necesita eliminar el HTML
<b class="caret"></b>
del.dropdown-toggle
elemento de anclaje:Bootstrap 2 y más bajo
Para eliminar el símbolo de intercalación en la versión 2, necesita un poco más de información sobre CSS y le sugiero que mire con
:after
más detalle cómo funciona el pseudo elemento. Para comenzar 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:Funcionará a tu favor si miras más a fondo cómo funcionan y no solo usas las respuestas que te he dado.
Gracias a @CocaAkat por señalar que nos faltaba el ">" combinador secundario para evitar que se muestren submenús en el elemento emergente principal
fuente
margin: 0;
, de lo contrario, el margen de 1px anterior.dropdown-menu
causa un comportamiento defectuoso.data-toggle="dropdown"
atributo.Además de la respuesta de "Me duele la cabeza" (que fue genial):
Hay 2 problemas persistentes:
La solución para (1) es eliminar los elementos "clase" y "alternar datos" del enlace de navegación
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 la página que desee enviar al usuario.
La solución a (2) es eliminar el margen superior del selector .dropdown-menu
fuente
data-toggle="dropdown"
atributo, que parecía funcionar..nav-pills .dropdown-menu { margin-top: 0px; }
He usado un poco de jQuery:
fuente
$('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); }); });
: Cuando el submenú esté suspendido, deje de desvanecerseAquí 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 de la forma en que lo haría bootstrap si admitiera el desplazamiento de los menús desplegables en lugar de simplemente hacer clic. Solo he probado 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 presionando una tecla.
Básicamente, solo dice que cuando pasas el mouse sobre la clase desplegable, agregará la clase abierta. Entonces simplemente funciona. Cuando dejas de desplazarte por el li principal con la clase desplegable o el ul / li secundario, se 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.
fuente
Simplemente personalice su estilo CSS en tres líneas de código
fuente
Si tiene un elemento con una
dropdown
clase como esta (por ejemplo):Luego, puede hacer que el menú desplegable se despliegue automáticamente al pasar el mouse por encima, en lugar de tener que hacer clic en su título, utilizando este fragmento de código jQuery:
Aquí hay una demostración
Esta respuesta se basó en la respuesta de @Michael , he realizado algunos cambios y agregado algunas adiciones para que el menú desplegable funcione correctamente
fuente
[Actualización] El complemento está en GitHub y estoy trabajando en algunas mejoras (como usar solo con atributos de datos (no es necesario JS). Dejé el código a continuación, pero no es lo mismo que lo que está 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 deslizamiento del mouse que va 1 px fuera del menú desplegable, etc.), y como se menciona en los comentarios , hay un margen de 1px 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 retraso, etc.
JS
El
delay
parámetro se explica por sí mismo, einstantlyCloseOthers
instantáneamente cerrará todos los demás menús desplegables que estén abiertos al pasar el mouse sobre uno nuevo.No es CSS puro, pero espero que ayude a alguien más a estas horas de la noche (es decir, este es un hilo viejo).
Si lo desea, puede ver los diferentes procesos por los que pasé (en una discusión sobre el
#concrete5
IRC) para que funcione a través de los diferentes pasos en este resumen: https://gist.github.com/3876924El enfoque de patrón de complemento es mucho más limpio para admitir temporizadores individuales, etc.
Vea la publicación del blog para más.
fuente
Esto funcionó para mí:
fuente
Esto está integrado en Bootstrap 3. Simplemente agregue esto a su CSS:
fuente
Aún mejor con jQuery:
fuente
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 el submenú no se muestre al pasar el mouse.Puede usar el
$().dropdown('toggle')
método predeterminado para alternar el menú desplegable al pasar el mouse:fuente
Solo quiero agregar, que si tiene múltiples menús desplegables (como yo), debe escribir:
Y funcionará correctamente.
fuente
margin: 2px 0 0;
que significaba que un mouse lento Enter desde arriba ocultaba el menú prematuramente.ul.dropdown-menu{ margin-top: 0; }
En mi opinión, la mejor manera es la siguiente:
Marcado de muestra:
fuente
La mejor manera de hacerlo es activar el evento de clic de Bootstrap con un cursor. De esta manera, debe seguir siendo compatible con dispositivos táctiles.
fuente
Lo he logrado de la siguiente manera:
Espero que esto ayude a alguien...
fuente
También se agregó margin-top: 0 para restablecer el margen de arranque de CSS para .dropdown-menu para que la lista de menús no desaparezca cuando el usuario pasa lentamente del menú desplegable a la lista de menús.
fuente
Esta es probablemente una idea estúpida, pero para eliminar la flecha que apunta hacia abajo, puede eliminar el
Sin embargo, esto no hace nada para el que apunta hacia arriba ...
fuente
He publicado un complemento adecuado para la funcionalidad de desplazamiento desplegable de Bootstrap 3, en el que incluso puedes definir qué sucede al hacer clic en el
dropdown-toggle
elemento (el clic se puede desactivar):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
.open
clase en el.dropdown
, por lo que no habrá comentarios sobre el elemento de alternar desplegable cuando el desplegable sea visible.Los js están interfiriendo al 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 se activará el menú desplegable para que aparezca nuevamente. Algunas de las soluciones js están rompiendo la compatibilidad con iOS, algunos complementos no funcionan en los navegadores de escritorio modernos que admiten los eventos táctiles.Es por eso que hice el complemento Bootstrap Dropdown Hover que evita todos estos problemas al usar solo la API estándar de Bootstrap javascript, sin ningún tipo de pirateo . Incluso los atributos de Aria funcionan bien con este complemento.
fuente
bootstrap-dropdown-hover
, porque parece hacer el trabajo y más compacto. Estoy construyendo un sitio de aterrizaje con la barra de navegación del lado izquierdo.Use este código para abrir el submenú en mousehover (solo escritorio):
Y si desea que se pueda hacer clic en el menú del primer nivel, incluso en dispositivos móviles, agregue esto:
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á el ancho de pantalla completa en el móvil.fuente
fuente
Esto ocultará los de arriba
fuente
Esto debería ocultar los menús desplegables y sus cuidados si son más pequeños que una tableta.
fuente
La solución jQuery es buena, pero tendrá que lidiar con los eventos al hacer clic (para dispositivos móviles o tabletas) ya que el desplazamiento no funcionará correctamente ... ¿Tal vez podría hacer alguna detección de cambio de tamaño de ventana?
La respuesta de Andres Ilich parece funcionar bien, pero debería incluirse en una consulta de medios:
fuente
La solución muy simple para la versión 2, solo CSS. Mantiene la misma funcionalidad amigable para dispositivos móviles y tabletas.
fuente
Sobrescriba bootstrap.js con este script.
fuente
Aquí está mi técnica que agrega un ligero retraso antes de que el menú se cierre después de que dejas de desplazarte por el menú o el botón de alternar. Lo
<button>
que normalmente haría clic para mostrar el menú de navegación es#nav_dropdown
.fuente
Para mejorar la respuesta de Sudharshan, envuelvo esto en una consulta de medios para evitar el desplazamiento cuando está en los anchos de pantalla XS ...
Tampoco se requiere el cursor en el marcado, solo la clase desplegable para el li .
fuente
Esto funciona para WordPress Bootstrap:
fuente
Entonces tienes este código:
Normalmente funciona en un evento de clic y desea que funcione en un evento de desplazamiento. Esto es muy simple, solo use este código JavaScript / jQuery:
Esto funciona muy bien y aquí está la explicación: tenemos un botón y un menú. Cuando pasamos el botón, mostramos el menú, y cuando pasamos el mouse del botón, ocultamos el menú después de 100 ms. Si te preguntas por qué lo uso, es porque necesitas tiempo para arrastrar el cursor desde el botón sobre el menú. Cuando está en el menú, se restablece la hora y puede permanecer allí tantas veces como desee. Cuando salga del menú, ocultaremos el menú instantáneamente sin ningún tiempo de espera.
He usado este código en muchos proyectos, si encuentra algún problema al usarlo, no dude en hacerme preguntas.
fuente