Gostaria que meu menu Bootstrap fosse suspenso automaticamente ao passar o mouse, em vez de precisar clicar no título do menu. Eu também gostaria de perder as pequenas flechas ao lado dos títulos do menu.
css
drop-down-menu
twitter-bootstrap
vacilar
fonte
fonte
Respostas:
Criei um menu suspenso puro em foco, com base na mais recente (v2.0.2) estrutura de Bootstrap que oferece suporte a vários submenus e pensei em publicá-la para futuros usuários:
Demo
fonte
class="dropdown-toggle" data-toggle="dropdown"
para que apenas pairasse, não clique acionasse o menu. Observe que, quando você usa estilos responsivos, os menus ainda são arrastados para o pequeno botão no canto superior direito, que ainda é acionado por um clique. Muito obrigado!@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
e@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
Para que o menu apareça automaticamente ao passar o mouse, isso pode ser feito usando CSS básico. Você precisa definir o seletor para a opção de menu oculto e configurá-lo para exibir como bloco quando a
li
tag apropriada for colocada sobre o mouse. Tomando o exemplo da página de inicialização do twitter, o seletor seria o seguinte:No entanto, se você estiver usando os recursos responsivos do Bootstrap, não desejará essa funcionalidade em uma barra de navegação recolhida (em telas menores). Para evitar isso, envolva o código acima em uma consulta de mídia:
Para ocultar a seta (cursor), isso é feito de maneiras diferentes, dependendo de você estar usando o Twitter Bootstrap versão 2 e inferior ou versão 3:
Bootstrap 3
Para remover o sinal de intercalação na versão 3, você só precisa remover o HTML
<b class="caret"></b>
do.dropdown-toggle
elemento anchor:Bootstrap 2 e inferior
Para remover o sinal de intercalação na versão 2, você precisa de um pouco mais de conhecimento sobre CSS e sugiro examinar como o
:after
pseudo elemento funciona com mais detalhes. Para você começar a entender, direcionar e remover as setas no exemplo de inicialização do twitter, use o seguinte seletor e código de CSS:Isso funcionará a seu favor se você examinar mais detalhadamente como isso funciona e não apenas usar as respostas que eu lhe dei.
Agradecemos a @CocaAkat por salientar que estávamos perdendo o combinador filho ">" para impedir que submenus sejam mostrados no cursor principal
fonte
margin: 0;
, caso contrário, a margem de 1 px acima.dropdown-menu
causa comportamento de buggy.data-toggle="dropdown"
atributo.Além da resposta de "My Head Hurts" (que foi ótimo):
Existem dois problemas remanescentes:
A solução para (1) está removendo os elementos "class" e "data-toggle" do link de navegação
Isso também permite que você crie um link para sua página pai - o que não era possível com a implementação padrão. Você pode simplesmente substituir o "#" por qualquer página que você queira enviar ao usuário.
A solução para (2) está removendo a margem superior no seletor de menu .dropdown
fonte
data-toggle="dropdown"
atributo, que parecia funcionar..nav-pills .dropdown-menu { margin-top: 0px; }
Eu usei um pouco de jQuery:
fonte
$('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); }); });
: Quando o submenu é pairar parada fadeOutExistem muitas soluções realmente boas aqui. Mas eu pensei que iria em frente e colocaria o meu aqui como outra alternativa. É apenas um snippet simples do jQuery que faz da maneira que o bootstrap faria se suportasse pairar para menus suspensos em vez de apenas clicar. Eu só testei isso com a versão 3, então não sei se funcionaria com a versão 2. Salve-o como um trecho no seu editor e faça-o com o toque de uma tecla.
Basicamente, está apenas dizendo que quando você passa o mouse na classe suspensa, ela adiciona a classe aberta a ela. Então simplesmente funciona. Quando você para de pairar no li pai com a classe suspensa ou nos ul / li filhos, ele remove a classe aberta. Obviamente, essa é apenas uma das muitas soluções, e você pode adicioná-lo para fazê-lo funcionar apenas em instâncias específicas de .dropdown. Ou adicione uma transição para pai ou filho.
fonte
Simplesmente personalize seu estilo CSS em três linhas de código
fonte
Se você possui um elemento com uma
dropdown
classe como esta (por exemplo):Em seguida, você pode fazer com que o menu suspenso seja suspenso automaticamente ao passar o mouse, em vez de precisar clicar no título, usando este trecho de código jQuery:
Aqui está uma demonstração
Esta resposta foi baseada na resposta do @Michael , fiz algumas alterações e adicionei algumas adições para que o menu suspenso funcione corretamente
fonte
[Update] O plugin está no GitHub e estou trabalhando em algumas melhorias (como usar apenas com atributos de dados (não é necessário JS)) .Deixei o código abaixo, mas não é o mesmo que o GitHub.
Gostei da versão puramente CSS, mas é bom ter um atraso antes de fechar, pois geralmente é uma melhor experiência do usuário (ou seja, não é punida por um deslizamento de mouse que fica 1 px fora da lista suspensa, etc.), e conforme mencionado nos comentários , há 1px de margem com a qual você precisa lidar ou, às vezes, a navegação fecha inesperadamente quando você está indo para a lista suspensa a partir do botão original etc.
Criei um pequeno plugin rápido que usei em alguns sites e funcionou muito bem. Cada item de navegação é tratado de forma independente, para que eles tenham seus próprios temporizadores de atraso, etc.
JS
O
delay
parâmetro é bastante auto-explicativo e oinstantlyCloseOthers
fechará instantaneamente todos os outros menus suspensos abertos quando você passar o mouse sobre um novo.Não é CSS puro, mas espero que ajude alguém a esta hora tardia (ou seja, esse é um tópico antigo).
Se você quiser, poderá ver os diferentes processos pelos quais passei (em uma discussão sobre o
#concrete5
IRC) para fazê-lo funcionar através das diferentes etapas nesta lista: https://gist.github.com/3876924A abordagem do padrão de plug-in é muito mais limpa para suportar temporizadores individuais, etc.
Veja a postagem do blog para mais informações.
fonte
Isso funcionou para mim:
fonte
Isso está embutido no Bootstrap 3. Basta adicionar isso ao seu CSS:
fonte
Ainda melhor com o jQuery:
fonte
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'); });
para que o submenu não seja exibido em foco.Você pode usar o
$().dropdown('toggle')
método padrão para alternar o menu suspenso ao passar o mouse:fonte
Só quero acrescentar que, se você tiver vários menus suspensos (como eu), escreva:
E vai funcionar corretamente.
fonte
margin: 2px 0 0;
que significava que um lento mouseEnter de cima escondeu o menu prematuramente.ul.dropdown-menu{ margin-top: 0; }
Na minha opinião, a melhor maneira é assim:
Exemplo de marcação:
fonte
A melhor maneira de fazer isso é acionar o evento de clique do Bootstrap com um cursor do mouse. Dessa forma, ele ainda deve permanecer amigável ao dispositivo de toque.
fonte
Eu consegui da seguinte maneira:
Espero que isso ajude alguém...
fonte
Também foi adicionado margin-top: 0 para redefinir a margem de bootstrap css para .dropdown-menu, para que a lista de menus não desapareça quando o usuário passar lentamente do menu suspenso para a lista de menus.
fonte
Provavelmente, essa é uma ideia estúpida, mas para remover a seta apontando para baixo, você pode excluir o
Isso não faz nada para o apontador, embora ...
fonte
Publiquei um plug-in adequado para a funcionalidade suspensa de inicialização do Bootstrap 3, na qual você pode definir o que acontece ao clicar no
dropdown-toggle
elemento (o clique pode ser desativado):https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
Por que eu fiz isso quando já existem muitas soluções?
Eu tive problemas com todas as soluções existentes anteriormente. Os CSS simples não estão usando a
.open
classe no.dropdown
, portanto, não haverá feedback sobre o elemento de alternância quando o menu suspenso estiver visível.Os js estão interferindo ao clicar em
.dropdown-toggle
; portanto, o menu suspenso aparece ao passar o mouse e depois o oculta ao clicar em um menu suspenso aberto, e sair do mouse aciona o menu suspenso para que apareça novamente. Algumas das soluções js estão quebrando a compatibilidade com o iOS, alguns plugins não estão funcionando em navegadores de desktop modernos que suportam os eventos de toque.Foi por isso que criei o plug-in Bootstrap Dropdown Hover, que evita todos esses problemas usando apenas a API javascript Bootstrap padrão, sem qualquer invasão . Até os atributos Aria estão funcionando bem com este plugin.
fonte
bootstrap-dropdown-hover
, porque parece fazer o trabalho e mais compacto. Estou construindo um local de pouso com a barra de navegação do lado esquerdo.Use este código para abrir o submenu ao passar o mouse (somente na área de trabalho):
E se você quiser que o menu do primeiro nível seja clicável, mesmo no celular, adicione este:
O submenu (menu suspenso) será aberto com o mouse sobre a área de trabalho e com o clique / toque no celular e tablet. Depois que o submenu foi aberto, um segundo clique permitirá que você abra o link. Graças ao
if ($(window).width() > 767)
, o submenu terá a largura de tela cheia no celular.fonte
fonte
Isso ocultará os que estão
fonte
Isso deve ocultar as listas suspensas e seus pontos de intercalação, se forem menores que um tablet.
fonte
A solução jQuery é boa, mas precisará lidar com eventos de clique (para celular ou tablet), pois o hover não funcionará corretamente ... Talvez seja possível detectar alguma redimensionamento de janela?
A resposta de Andres Ilich parece funcionar bem, mas deve estar envolvida em uma consulta de mídia:
fonte
A solução muito simples para a versão 2, apenas CSS. Mantém a mesma funcionalidade amigável para celular e tablet.
fonte
Substitua bootstrap.js por este script.
fonte
Aqui está minha técnica que adiciona um pequeno atraso antes que o menu seja fechado após você parar de pairar no menu ou no botão de alternância. O
<button>
que você normalmente clicaria para exibir o menu de navegação é#nav_dropdown
.fonte
Para melhorar a resposta de Sudharshan, envolvo isso em uma consulta de mídia para evitar o foco quando as larguras de exibição do XS ...
Além disso, o cursor na marcação não é necessário, apenas a classe suspensa para o li .
fonte
Isso funciona para o WordPress Bootstrap:
fonte
Então você tem este código:
Normalmente, ele funciona em um evento de clique e você deseja que ele funcione em um evento de foco. Isso é muito simples, basta usar este código JavaScript / jQuery:
Isso funciona muito bem e aqui está a explicação: temos um botão e um menu. Quando passamos o mouse, exibimos o menu e, quando passamos o mouse, ocultamos o menu após 100 ms. Se você se pergunta por que eu uso isso, é porque você precisa de tempo para arrastar o cursor do botão sobre o menu. Quando você está no menu, a hora é redefinida e você pode ficar lá quantas vezes quiser. Quando você sai do menu, ocultaremos o menu instantaneamente sem tempo limite.
Eu usei esse código em muitos projetos; se você encontrar algum problema com ele, sinta-se à vontade para me fazer perguntas.
fonte