Я бы хотел, чтобы меню Bootstrap автоматически выпадало при наведении курсора, а не щелкало заголовок меню. Я также хотел бы потерять маленькие стрелки рядом с заголовками меню.
1184
Я бы хотел, чтобы меню Bootstrap автоматически выпадало при наведении курсора, а не щелкало заголовок меню. Я также хотел бы потерять маленькие стрелки рядом с заголовками меню.
Ответы:
Я создал раскрывающееся меню при наведении курсора, основанное на последней (v2.0.2) платформе Bootstrap, которая поддерживает несколько подменю, и решил опубликовать ее для будущих пользователей:
демонстрация
источник
class="dropdown-toggle" data-toggle="dropdown"
чтобы только зависание, а не щелчок вызывало меню. Обратите внимание, что при использовании адаптивных стилей меню по-прежнему отображаются в маленькой кнопке в правом верхнем углу, которая по-прежнему вызывается щелчком мыши. Большое спасибо!@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
и@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
Чтобы меню автоматически появлялось при наведении, это можно сделать с помощью базового CSS. Вам нужно отработать селектор для скрытого пункта меню, а затем настроить его на отображение в виде блока, когда
li
наведен соответствующий тег. Если взять пример со страницы начальной загрузки Twitter, селектор будет выглядеть следующим образом:Однако, если вы используете отзывчивые функции Bootstrap, вам не понадобятся эти функции на свернутой панели навигации (на экранах меньшего размера). Чтобы избежать этого, оберните код выше в медиа-запрос:
Чтобы скрыть стрелку (курсор), это делается по-разному, в зависимости от того, используете ли вы Twitter Bootstrap версии 2 и ниже или версию 3:
Bootstrap 3
Чтобы удалить каретку в версии 3, вам просто нужно удалить HTML
<b class="caret"></b>
из.dropdown-toggle
элемента привязки:Бутстрап 2 и ниже
Чтобы удалить каретку в версии 2, вам нужно немного больше узнать о CSS, и я предлагаю посмотреть, как
:after
работает псевдоэлемент, более подробно. Чтобы начать понимать, как нацеливать и удалять стрелки в примере начальной загрузки Twitter, вы должны использовать следующий селектор CSS и код:Это будет работать в вашу пользу, если вы посмотрите дальше, как они работают, а не просто используете ответы, которые я вам дал.
Спасибо @CocaAkat за указание на то, что мы пропустили дочерний комбинатор ">" для предотвращения отображения подменю при наведении на родительский элемент
источник
margin: 0;
, в противном случае поле в 1px выше.dropdown-menu
вызывает ошибочное поведение.data-toggle="dropdown"
атрибут.В дополнение к ответу из "My Head Hurts" (это было здорово):
Есть 2 проблемы:
Решением (1) является удаление элементов "class" и "data-toggle" из ссылки nav
Это также дает вам возможность создать ссылку на вашу родительскую страницу - что было невозможно при реализации по умолчанию. Вы можете просто заменить "#" на любую страницу, которую вы хотите отправить пользователю.
Решением (2) является удаление поля на верху в селекторе .dropdown-menu
источник
data-toggle="dropdown"
атрибут, который, казалось, работал..nav-pills .dropdown-menu { margin-top: 0px; }
Я использовал немного JQuery:
источник
$('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); }); });
: Когда подменю находится при наведении, остановка fadeOutЗдесь есть много действительно хороших решений. Но я думал, что я пойду вперед и поставлю свою здесь в качестве другой альтернативы. Это просто простой фрагмент jQuery, который делает это так, как при начальной загрузке, если он поддерживает всплывающие окна вместо всплывающих окон. Я только что проверил это с версией 3, поэтому я не знаю, будет ли это работать с версией 2. Сохраните это как фрагмент в вашем редакторе и сделайте это одним нажатием клавиши.
По сути, он просто говорит, что когда вы наводите курсор на выпадающий класс, он добавляет к нему открытый класс. Тогда это просто работает. Когда вы перестаете зависать на родительском li с выпадающим классом или дочернем ul / li, он удаляет открытый класс. Очевидно, что это только одно из многих решений, и вы можете добавить его, чтобы оно работало только с конкретными экземплярами .dropdown. Или добавьте переход к родительскому или дочернему элементу.
источник
Просто настройте свой стиль CSS в три строки кода
источник
Если у вас есть элемент с таким
dropdown
классом (например):Затем вы можете иметь выпадающее меню для автоматического раскрытия при наведении курсора, вместо того, чтобы нажимать на его заголовок, используя этот фрагмент кода jQuery:
Вот демо
Этот ответ основывался на ответе @Michael , я внес некоторые изменения и добавил некоторые дополнения для правильной работы выпадающего меню.
источник
[Обновление] Плагин на GitHub и я работаю над некоторыми улучшениями (например, использование только с атрибутами данных (JS не требуется). Я оставляю код ниже, но он не такой, как на GitHub.
Мне понравилась чисто CSS-версия, но приятно иметь задержку до ее закрытия, поскольку обычно она удобнее для пользователя (то есть не наказывается за скольжение мыши, которое выходит за 1 пиксель вне выпадающего списка и т. Д.), И, как упоминалось в комментариях есть 1пкс поля, с которым вам приходится иметь дело, или иногда навигация неожиданно закрывается, когда вы переходите к выпадающему меню из исходной кнопки и т. д.
Я создал небольшой плагин, который использовал на нескольких сайтах, и он отлично работал. Каждый элемент навигации обрабатывается независимо, поэтому у них есть свои таймеры задержки и т. Д.
JS
delay
Параметр говорит само за себя, иinstantlyCloseOthers
немедленно закройте все выпадающие, которые открыты при наведении мыши на новый.Не чистый CSS, но, надеюсь, поможет кому-то еще в этот поздний час (т.е. это старая ветка).
Если вы хотите, вы можете увидеть различные процессы, которые я прошел (в обсуждении
#concrete5
IRC), чтобы заставить его работать через различные шаги в этом гисте: https://gist.github.com/3876924Подход шаблона плагинов намного чище для поддержки отдельных таймеров и т. Д.
Смотрите сообщение в блоге для получения дополнительной информации.
источник
Это сработало для меня:
источник
Это встроено в Bootstrap 3. Просто добавьте это в свой CSS:
источник
Еще лучше с jQuery:
источник
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'); });
подменю не отображалось при наведении курсора.Вы можете использовать
$().dropdown('toggle')
метод по умолчанию для переключения выпадающего меню при наведении:источник
Просто хочу добавить, что если у вас есть несколько выпадающих (как я), вы должны написать:
И это будет работать правильно.
источник
margin: 2px 0 0;
означавшем медленный MouseEnter сверху, скрывалось меню преждевременно.ul.dropdown-menu{ margin-top: 0; }
На мой взгляд, лучший способ таков:
Образец разметки:
источник
Лучший способ сделать это - просто вызвать событие нажатия Bootstrap при наведении курсора. Таким образом, он должен оставаться сенсорным устройством.
источник
Мне удалось это следующим образом:
Я надеюсь, что это помогает кому-то...
источник
Также добавлено margin-top: 0, чтобы сбросить поле начальной загрузки css для .dropdown-menu, чтобы список меню не исчезал, когда пользователь медленно перемещается из выпадающего меню в список меню.
источник
Это, вероятно, глупая идея, но просто убрав стрелку, указывающую вниз, вы можете удалить
Это ничего не делает для того, чтобы направить один, хотя ...
источник
Я опубликовал соответствующий плагин для всплывающей подсказки Bootstrap 3, в котором вы даже можете определить, что происходит при нажатии на
dropdown-toggle
элемент (щелчок можно отключить):https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
Почему я сделал это, когда уже есть много решений?
У меня были проблемы со всеми ранее существующими решениями. Простые CSS не используют
.open
класс для.dropdown
, поэтому не будет обратной связи по элементу переключателя раскрывающегося списка, когда раскрывающийся список виден.Js мешают нажатию
.dropdown-toggle
, поэтому раскрывающийся список отображается при наведении курсора, а затем скрывается при нажатии на раскрывающемся раскрывающемся меню, а при перемещении мыши всплывающее окно снова появляется. Некоторые решения js нарушают совместимость с iOS, некоторые плагины не работают на современных настольных браузерах, которые поддерживают сенсорные события.Вот почему я создал плагин Bootstrap Dropdown Hover, который предотвращает все эти проблемы, используя только стандартный API-интерфейс Bootstrap javascript, без какого-либо взлома . Даже атрибуты Aria отлично работают с этим плагином.
источник
bootstrap-dropdown-hover
, потому что, кажется, делать работу и более компактно. Я строю посадочную площадку с левой боковой панелью навигации.Используйте этот код, чтобы открыть подменю при наведении курсора мыши (только на рабочем столе):
И если вы хотите, чтобы меню первого уровня было интерактивным, даже на мобильном устройстве, добавьте следующее:
Подменю (раскрывающееся меню) открывается при наведении курсора мыши на рабочем столе и при нажатии / прикосновении к мобильному телефону и планшету. После открытия подменю второй щелчок откроет ссылку. Благодаря этому
if ($(window).width() > 767)
подменю займет всю ширину экрана на мобильном телефоне.источник
источник
Это скроет
источник
Это должно скрывать выпадающие списки и их каретки, если они меньше планшета.
источник
Решение jQuery хорошо, но ему нужно будет либо справиться с событиями нажатия (для мобильных устройств или планшетов), так как зависание не будет работать должным образом ... Может быть, возможно, будет определено изменение размера окна?
Ответ Андреса Ильича, кажется, работает хорошо, но его следует заключить в медиа-запрос:
источник
Очень простое решение для версии 2, только CSS. Сохраняет одинаковую дружественную функциональность для мобильных устройств и планшетов.
источник
Перезаписать bootstrap.js этим скриптом.
источник
Вот моя техника, которая добавляет небольшую задержку перед закрытием меню после того, как вы перестанете зависать над меню или кнопкой переключения. То,
<button>
что вы обычно нажимаете для отображения меню навигации#nav_dropdown
.источник
Чтобы улучшить ответ Судхаршана , я обертываю его в медиазапрос, чтобы предотвратить зависание при ширине экрана XS ...
Кроме того, каретка в разметке не требуется, просто выпадающий класс для li .
источник
Это работает для WordPress Bootstrap:
источник
Итак, у вас есть этот код:
Обычно он работает с событием щелчка, и вы хотите, чтобы он работал с событием наведения мыши. Это очень просто, просто используйте этот код JavaScript / jQuery:
Это работает очень хорошо, и вот объяснение: у нас есть кнопка и меню. При наведении курсора на кнопку мы отображаем меню, а когда мы нажимаем кнопку мыши, мы скрываем меню через 100 мс. Если вы удивляетесь, почему я это использую, вам нужно время, чтобы перетащить курсор с кнопки над меню. Когда вы находитесь в меню, время сбрасывается, и вы можете оставаться там столько раз, сколько хотите. Когда вы выйдете из меню, мы сразу же скроем меню без перерыва.
Я использовал этот код во многих проектах, если у вас возникнут какие-либо проблемы с его использованием, не стесняйтесь задавать мне вопросы.
источник