javascript — Выпадающее меню при наведении на вышестоящее меню

Вопрос задан

Изменён 1 год 9 месяцев назад

Просмотрен 109 раз

Есть код

<div>
        <div>
            <ul>
                <div>
                <div>
                    <span>
                    <span>
                    <button data-toggle="dropdown" data-target="#menu" type="button">
                        <span></span>
                        <span></span>
                        <span></span>
                    </button>
                    </span>
                    <span><div>КАТАЛОГ ТОВАРОВ</div></span>
                    </span> 
            
                </div>
                      <li><a href="#">Главная</a></li>
                      <li><a href="#">Новости</a></li>
                      <li><a href="#">Прайс</a></li>
                      <li><a href="#">Услуги</a>
                        <ul>
                          <li><a href="#">Услуга 1</a></li>
                          <li><a href="#">Услуга 2</a></li>
                          <li><a href="#">Услуга 3</a>
                            <ul>
                              <li><a href="#">Услуга 1</a></li>
                              <li><a href="#">Услуга 2</a></li>
                              <li><a href="#">Услуга 3</a></li>
                              <li><a href="#">Услуга 4</a></li>
                              <li><a href="#">Услуга 5</a></li>
                            </ul>
                          </li>
                          <li><a href="#">Услуга 4</a></li>
                          <li><a href="#">Услуга 5</a></li>
                        </ul>
                      </li>
                      <li><a href="#">Контакты</a></li>
                </div>
            </ul>
            
            </div>
        </div>

В результате подменю

отображается сразу при загрузке, а не при наведении на вышестоящий пункт меню — Услуги. Как добиться отображение подменю при наведении на вышестоящий пункт меню?

  • javascript
  • html
  • css

В первом приближении так, но у вас, судя по классам, все это дело должен делать скрипт из коробки! Бутстрап (CSS+JS) подключен? И кнопка-бутерброд обычно ВНЕ списка, вомзожно у вас ошибка в верстке.

.left-menu ul ul {display:none}
.left-menu ul li:hover > ul{display:block}
<div>
        <div>
            <ul>
                <div>
                <div>
                    <span>
                    <span>
                    <button data-toggle="dropdown" data-target="#menu" type="button">
                        <span></span>
                        <span></span>
                        <span></span>
                    </button>
                    </span>
                    <span><div>КАТАЛОГ ТОВАРОВ</div></span>
                    </span> 
            
                </div>
                      <li><a href="#">Главная</a></li>
                      <li><a href="#">Новости</a></li>
                      <li><a href="#">Прайс</a></li>
                      <li><a href="#">Услуги</a>
                        <ul>
                          <li><a href="#">Услуга 1</a></li>
                          <li><a href="#">Услуга 2</a></li>
                          <li><a href="#">Услуга 3</a>
                            <ul>
                              <li><a href="#">Услуга 1</a></li>
                              <li><a href="#">Услуга 2</a></li>
                              <li><a href="#">Услуга 3</a></li>
                              <li><a href="#">Услуга 4</a></li>
                              <li><a href="#">Услуга 5</a></li>
                            </ul>
                          </li>
                          <li><a href="#">Услуга 4</a></li>
                          <li><a href="#">Услуга 5</a></li>
                        </ul>
                      </li>
                      <li><a href="#">Контакты</a></li>
                </div>
            </ul>
            
            </div>
        </div>

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Выпадающее меню на Bootstrap 4 при наведении (событие hover)

    org/BreadcrumbList»>
  • Рубрики
  • WEB статьи
  • Bootstrap
Информация о материале
Bootstrap

Как известно, стандартный dropdown список раскрывается только при нажатии на главный пункт меню. По умолчанию выпадающий список имеет свойство «

display: none;», и переходит в «display: block;», когда срабатывает событие click и на оборот — чтобы скрыть, нужно опять нажать на меню.

На примере меню из документации Bootstrap 4:



<nav>

  <button type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span></span>
  </button>

  <div>
    <ul>

      <li>
        <a href="#">Главная</a>
      </li>

      <li>
        <a href="#">Один</a>
      </li>

      <li>
        <a href="#">Два</a>
      </li>

      <li>
        <a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Три</a>
        <div aria-labelledby="navbarDropdownMenuLink">
          <a href="#">Три один</a>
          <a href="#">Три два</a>
          <a href="#">Три три</a>

        </div>
      </li>

    </ul>
  </div>

</nav>

В данном варианте, если вы просто поместите это меню на сайте, подключите все необходимые библиотеки, меню будет работать по клику.

Чтобы меню раскрывалось и скрывалось при наведении (событие hover), достаточно чуть подправить css файл bootstrap 4 или прописать это в своем файле стилей:



nav.navbar .dropdown:hover > .dropdown-menu {
 display: block; 

Теперь при наведении, нашему списку будет присваиваться свойство «block» и он раскроется. Вот так легко это делается, не правда ли?

Чтобы это работало только на ПК версиях экранов, и не работало на мобильных устройствах, так как там просто отсутствует нормальная работа события hover. Я рекомендую прописать ниже еще вот такой код:



@media only screen and (max-device-width: 992px){
    nav.navbar .dropdown:hover .dropdown-menu{
        display: none;
    }
}

Учтите, что этим вы не отменяете событие click – раскрытие меню по клику. Оно будет так же работать наравне и с наведением.

Как отключить событие click и оставить только событие hover, вы можете прочитать в этой статье:

Переход по ссылке главного (верхнего) меню раскрывающегося списка в Bootstrap 4

 

Всем удачи!

 

Добавить комментарий

html — Как создать раскрывающееся меню при наведении, в котором есть пробел между элементом при наведении и раскрывающимися элементами без отключения эффекта наведения?

У меня есть элемент на панели навигации с эффектом наведения, однако между элементами, появляющимися при наведении, и наведенным элементом должно быть расстояние. Но если я добавлю интервал, эффект наведения будет отключен в пустом пространстве, поэтому ссылки в раскрывающемся содержимом нельзя будет щелкнуть. Как я могу это исправить, чтобы пробел между ними сохранял эффект наведения?

Вот HTML:

 
<дел>

Контент 1

Контент 3

Контент 3

Содержание 2 Содержание 3 Содержание 4 Содержание 5 Содержание 6

и вот мой CSS/SCSS:

 .nav-header {
  дисплей: гибкий;
  выравнивание содержимого: пробел между;
  выравнивание элементов: по центру;
  ширина: 100%;
  высота: 130 пикселей;
  отступ слева: 100px;
  отступ справа: 100 пикселей;
  .navbar-текст {
    цвет: #9f9f9f;
    курсор: указатель;
    текстовое оформление: нет;
  }
  .icon-контейнер {
    дисплей: гибкий;
    выравнивание содержимого: по центру;
    выравнивание элементов: по центру;
  }
}
.dropdown-nav {
  положение: родственник;
  отображение: встроенный блок;
}
.dropdown-nav-контент {
  flex-направление: столбец;
  дисплей: нет;
  положение: абсолютное;
  цвет фона: белый;
  ширина: 240 пикселей;
  z-индекс: 1;
  верх: 85 пикселей;
}
. dropdown-nav: hover .dropdown-nav-content {
  дисплей: гибкий;
}
 

Содержимое выпадающего списка расположено сверху: 85 пикселей, чтобы дать ему расстояние между наведенным элементом, однако пустое пространство между ними не удалит его. Если я попытаюсь добавить нижний отступ к «Содержимому 1», он сместит элемент из выравнивания.

  • HTML
  • CSS
  • раскрывающееся меню
  • наведение

6

Добавьте это в свой файл css.

 .dropdown-nav-content::before {
  дисплей:блок;
  содержание:'';
  высота: 20 пикселей;
}
 

::before добавляется вашим браузером «перед» элементом: в данном случае перед каждым элементом с классом .dropdown-nav-content .

Имейте в виду, что вы должны определить атрибут содержимого , чтобы ваш браузер мог его создать. Установите содержимое на '' , чтобы сделать его пустым.

Установите высоту на ту, которая вам нужна.

Надеюсь на помощь 😉

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Подменю навигации – как лучше всего? Выпадающий список, наведения, клики или сохранение плоского? – Леон Патерностер

Я согласен с этим постом Марка Рут-Вили, который утверждает, что выпадающие навигационные меню лучше всего активируются, когда пользователь нажимает на ссылку (или, правильно говоря, на кнопку), а не наводит на нее курсор. Адриан Роселли также очень хорошо пишет о том, как легко реализовать этот шаблон пользовательского интерфейса.

Элемент меню навигации Адриана Роселли четко оформлен как кнопка, которую следует нажимать, с анимированным курсором.

Это недавно всплыло на работе, когда шаблон наведения был реализован в экстрасети. Я предсказываю, что это вызовет проблемы по обычным причинам — доступность, ловкость и раздражение — особенно с учетом возраста аудитории, использующей веб-сайт. Любое тестирование или даже ваш собственный повседневный опыт продемонстрируют, насколько неприятно наводить курсор на ссылку, чтобы открыть подменю, а затем избежать случайного срабатывания раскрывающихся списков.

Но независимо от того, используете ли вы шаблон щелчка или наведения, вы все равно создаете новый набор проблем всякий раз, когда реализуете любое раскрывающееся меню. то есть для чего нужен текст ссылки/кнопки верхнего уровня?

Возьмите меню Адриана. Он задает два вопроса:

  • Могу ли я щелкнуть текст «Блог»? Это ссылка на что-то еще или просто метка кнопки?
  • Если она служит ссылкой на страницу, что должно появиться на этой странице, если все подстраницы перечислены при нажатии кнопки?

Адриан решает сделать его ссылкой на домашнюю страницу веб-сайта, что, как мне кажется, сбивает с толку, поскольку оно помечено как «Блог», даже если сайт Адриана это блог. Это также довольно сложный набор элементов управления для согласования — ссылка/ярлык рядом с виджетом раскрытия информации.

Это побудило меня последовать совету Хейдона Пикеринга по доступным системам меню, когда мы разрабатывали рабочий сайт в прошлом году:

Там, где на сайте много контента, тщательно выстроенная информационная архитектура, выражающаяся в либеральном использовании таблиц содержания «меню», гораздо предпочтительнее ненадежной и громоздкой выпадающей системы. Его не только легче сделать адаптивным, и для этого требуется меньше кода, но он делает вещи более ясными: там, где выпадающие системы скрывают структуру, таблицы содержания обнажают ее.

Меню верхнего уровня абсолютно плоское. Чтобы не прятать контент за виджетами раскрытия информации, вы также увидите столько элементов навигации, сколько позволяет ширина экрана:

Никаких раскрывающихся списков и гамбургеров. Обратите внимание, что основной контент состоит из меню общих задач.

Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *