Bootstrap: Положение раскрывающегося меню относительно элемента панели навигации.

82

У меня есть следующий раскрывающийся список

<label class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#">
    Action <b class="caret"></b></label>
<ul class="dropdown-menu" role="menu" aria-labelledby="lang-selector" id="lang-selector">
    dropdown content goes here
</ul>

Верхний левый угол раскрывающегося списка находится в нижнем левом углу текста (действие), но я надеюсь, что положение верхнего правого угла капли должно находиться в правом нижнем углу текста, Как я могу это сделать?

Спасибо и приветствую.

Теги:
drop-down-menu

8 ответов

152
Лучший ответ

Это эффект, которого мы пытаемся достичь:

Изображение 2409

Классы, которые необходимо применить, изменились с выпуском Bootstrap 3.1.0 и снова с выпуском Bootstrap 4. Если кажется, что одно из приведенных ниже решений не работает, дважды проверьте номер версии Bootstrap, который вы импортируете и попробуйте другой.

Bootstrap 3

До версии 3.1.0

Вы можете использовать класс pull-right для выравнивания правой части меню с помощью каретки:

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu pull-right">
     <li>...</li>
  </ul>
</li>

Скрипка: http://jsfiddle.net/joeczucha/ewzafdju/

После v3.1.0

Начиная с версии 3.1.0, мы не рекомендуем .pull-right в выпадающих меню. Чтобы выровнять меню по правому краю, используйте .dropdown-menu-right. Выровненные по правому краю компоненты навигации в панели навигации используют смешанную версию этого класса для автоматического выравнивания меню. Чтобы переопределить это, используйте .dropdown-menu-left.

Вы можете использовать dropdown-right класс для выравнивания правой части меню с помощью каретки:

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu dropdown-menu-right">
     <li>...</li>
  </ul>
</li>

Скрипка: http://jsfiddle.net/joeczucha/1nrLafxc/

Bootstrap 4

Класс Bootstrap 4 такой же, как Bootstrap> 3.1.0, просто следите за тем, как остальная часть разметки немного изменилась:

<li class="nav-item dropdown">
  <a class="nav-link dropdown-toggle" href="#">
    Link
  </a>
  <div class="dropdown-menu dropdown-menu-right">
    <a class="dropdown-item" href="#">...</a>
  </div>
</li>

Скрипка: https://jsfiddle.net/joeczucha/f8h2tLoc/

  • 0
    Это работает для меня в B3 и кажется лучше. Я выбрал ваш в качестве ответа. Спасибо!!!
  • 1
    Я проверил pull-right и pull-left на веб-сайте RTL. Они работают отлично, но выпадающего меню справа и выпадающего меню слева нет.
Показать ещё 3 комментария
46

Не уверен, как другие люди решают эту проблему, или у Bootstrap есть какая-либо конфигурация для этого.

Я нашел этот поток, который предоставляет решение:

https://github.com/twbs/bootstrap/issues/1411

В одном из сообщений предлагается использовать

<ul class="dropdown-menu" style="right: 0; left: auto;">

Я тестировал и работает.

Надеюсь узнать, предоставляет ли Bootstrap конфигурацию для этого, а не через вышеприведенный css.

Приветствия.

  • 1
    Спасибо, это помогает легко работать.
  • 0
    Да! Спасибо @ curious1
Показать ещё 2 комментария
19

На основе документа Bootstrap:

Начиная с версии v.1.1.0, pull-right устаревает в выпадающих меню. использовать .dropdown-menu-right

например:

<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dLabel">
  • 1
    Я проверил pull-right и pull-left на веб-сайте RTL. Они работают отлично, но выпадающего меню справа и выпадающего меню слева нет.
8

Если вы хотите отобразить меню вверх, просто добавьте класс "выпадающий"
и удалите класс "выпадающий", если существует из того же div.

<div class="btn-group dropup">

Изображение 2410

  • 1
    «Я надеюсь, что позиция верхнего правого угла выпадающего меню находится в нижнем правом месте текста» - ОП
  • 0
    Я не могу понять ваш комментарий, извините !!
Показать ещё 1 комментарий
1

Boostrap имеет класс для класса navbar-right. Таким образом, ваш код будет выглядеть следующим образом:

<ul class="nav navbar-right">
    <li class="dropdown">
      <a class="dropdown-toggle" href="#" data-toggle="dropdown">Link</a>
      <ul class="dropdown-menu">
         <li>...</li>
      </ul>
    </li>
</ul>
  • 1
    Не вижу ОП, упоминающего навигационную панель ..
0

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

$(".dropdown-toggle").on("click", function(event){//"show.bs.dropdown"
    var liparent=$(this.parentElement);
    var ulChild=liparent.find('ul');
    var xOffset=liparent.offset().left;
    var alignRight=($(document).width()-xOffset)<xOffset;


    if (liparent.hasClass("dropdown-submenu"))
    {
        ulChild.css("left",alignRight?"-101%":"");
    }
    else
    {                
        ulChild.toggleClass("dropdown-menu-right",alignRight);
    }

});
  • 0
    это можно отрегулировать как сверху и снизу тоже? если выпадающая ссылка внизу, то я бы хотел открыть ее в верхнем направлении? Можем ли мы достичь этого?
  • 1
    Я обновил свой ответ, чтобы определить вертикальное положение?
0

Если вы хотите центрировать выпадающее меню, это решение.

<ul class="dropdown-menu" style="right:auto; left: auto;">
-4

используйте этот код:

<ul class="dropdown-menu" role="menu">
  <li style="text-align: right;"><a href="#">ParsLearn[dot]ir</a></li>
</ul>
  • 1
    Я не думаю, что это делает то, что он просит

Ещё вопросы

Сообщество Overcoder
Наверх
Меню