Bootstrap:下拉菜单相对于navbar项的位置

时间:2013-07-28 03:59:42

标签: css twitter-bootstrap drop-down-menu

我有以下下拉列表

<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>

下拉列表的左上角位于文本的左下角(Action),但我希望dropdwon右上角的位置位于文本的右下角。我怎么能这样做?

谢谢和问候。

9 个答案:

答案 0 :(得分:182)

这是我们试图实现的效果:

A right-aligned menu

需要应用的类随着Bootstrap 3.1.0的发布而改变,并随着Bootstrap 4的发布而改变。如果以下解决方案之一似乎无法正常工作请仔细检查版本号您正在导入的Bootstrap 并尝试使用其他的。

Bootstrap 3

在v3.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之后

  

从v3.1.0开始,我们在下拉菜单中弃用了.pull-right。至   右键对齐菜单,使用.dropdown-menu-right。右对齐导航   导航栏中的组件使用此类的mixin版本   自动对齐菜单。要覆盖它,请使用.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&gt;相同; 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/

答案 1 :(得分:48)

不确定其他人如何解决此问题或Bootstrap是否有任何配置。

我发现这个线程提供了一个解决方案:

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

其中一篇文章建议使用

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

我测试了它的确有效。

希望知道Bootstrap是否提供了执行此操作的配置,而不是通过上述css。

干杯。

答案 2 :(得分:19)

基于Bootstrap doc:

从v3.1.0开始,在下拉菜单中不推荐使用.pull-right。 使用.dropdown-menu-right

例如:

<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dLabel">

答案 3 :(得分:10)

如果要显示菜单,只需添加“dropup”类 如果存在于同一个div中,则删除“dropdown”类。

<div class="btn-group dropup">

enter image description here

答案 4 :(得分:1)

Bootstrap有一个名为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>

答案 5 :(得分:1)

即使是很晚,我也希望我能帮助别人。如果下拉菜单或子菜单在屏幕右侧,则在左侧打开;如果菜单或子菜单在左侧,则在右侧打开。

要检测垂直位置,您还可以添加

$(".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);
    }

});

https://jsfiddle.net/jd1100/rf9zvdhg/28/

答案 6 :(得分:0)

如果您想将下拉列表居中,这就是解决方案。

item[1]['index1']

答案 7 :(得分:0)

如何在屏幕的相对一侧(作为用户@JD11,他是回答底部)和块(div)的相对一侧进行操作?

例如在带有“card-body”类的 div 中:

Route::get('/login', function () {
    return view('login');
})->name('login');

答案 8 :(得分:-3)

使用此代码:

<ul class="dropdown-menu" role="menu">
  <li style="text-align: right;"><a href="#">ParsLearn[dot]ir</a></li>
</ul>