Bootstrap如何将导航栏项目右对齐

478

如何将导航栏项目向右对齐?

我想将登录和注册放在右侧。 但是我尝试的所有方法似乎都不起作用。

Picture of Navbar

我尝试过的方法:

  • <ul>外添加带有属性style="float: right"<div>
  • <ul>外添加带有属性style="text-align: right"<div>
  • <li>标签上尝试这两种方法
  • 在所有这些方法后面加上!important
  • <li>中的nav-item更改为nav-right
  • <li>中添加一个pull-sm-right
  • <li>中添加一个align-content-end

这是我的代码:

<div id="app" class="container">
  <nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricingg</a>
      </li>
    </ul>
    <ul class="navbar-nav " >
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/login') }}">Login</a>
      </li>
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/register') }}">Register</a>
      </li>
    </ul>
  </nav>
  @yield('content')
</div>

1
导航栏从Alpha 6版本开始使用flexbox构建。 - max
2
是的,那么我该怎么做才能使它右对齐呢? 我已经尝试了一些 flexbox 的方法,但都没有成功。 :/ - Luuk Wuijster
24个回答

791

Bootstrap 5 (更新于2021年)。

在 Bootstrap 5 中 (见此问题),ml-auto 被替换为 ms-auto,表示 start 而不是 left。由于 Navbar 仍基于 flexbox,因此仍然使用自动 marginflexbox 实用类来对齐 Navbar 内容。

例如,使用 me-auto...

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container-fluid">
        <a class="navbar-brand" href="#">Brand</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <a class="nav-link active" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Link</a>
                </li>
            </ul>
            <ul class="navbar-nav">
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Menu </a>
                    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                        <li><a class="dropdown-item" href="#">Action</a></li>
                        <li><a class="dropdown-item" href="#">Another action</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>

Bootstrap 5 右对齐导航栏内容


Bootstrap 4(原始回答)

Bootstrap有许多不同的方式来对齐导航栏项目float-right不起作用,因为现在的导航栏是flexbox

您可以在第一个(左侧)navbar-nav上使用mr-auto以获得自动右边距。 或者,在第二个(右侧)navbar-nav上使用ml-auto,或者如果您只有一个navbar-nav

<nav class="navbar navbar-expand-md navbar-light bg-light">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Features</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Pricing</a>
            </li>
        </ul>
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" href="#">Login</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Register</a>
            </li>
        </ul>
    </div>
</nav>

https://codeply.com/go/P0G393rzfm

此外还有弹性盒子实用工具。例如,在折叠菜单上使用justify-content-end

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Brand</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse justify-content-end" id="navbarNav">
      <ul class="navbar-nav">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Contact</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Pricing</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Download</a>
        </li>
      </ul>
    </div>
  </div>
</nav>

如果你有两个 navbar-nav,那么在 navbar-collapse 中使用 justify-content-between 将有助于使 navbar-nav 之间的空间平均分配:

 <div class="navbar-collapse collapse justify-content-between">
     <ul class="navbar-nav mr-auto">
               ..
     </ul>
     <ul class="navbar-nav">
           ..
     </ul>
 </div>

Bootstrap 4.0及以上版本的更新

从Bootstrap 4 beta开始,ml-auto仍然可以往右推送项目。只需注意navbar-toggleable-类已更改为navbar-expand-*

更新的Bootstrap 4导航栏右对齐


另一个常见的Bootstrap 4导航栏右对齐场景包括一个位于右侧的按钮,在移动折叠导航之外保持可见性,以便在所有宽度上始终显示。

右对齐按钮始终可见

输入图像描述信息

输入图像描述信息

相关问题:左、中、右对齐项目的Bootstrap导航栏


4
如果最右边的项目是下拉菜单,则 mr-auto 无法正常工作。下拉菜单项会溢出页面的右侧边缘。 - Ege Ersoz
7
它有效:https://www.codeply.com/go/P0G393rzfm - 问题不在于 mr-auto,因为问题是关于右对齐的排列,这个正常工作。如果您对下拉菜单有疑虑,请发布一个新的问题,但您很可能是在参考此问题:https://dev59.com/vVcP5IYBdhLWcg3wxMs5#43868074 - Carol Skelly
2
您还可以在导航栏中的右对齐下拉菜单中添加.dropdown-menu-right。不这样做可能会在某些宽度上截断下拉菜单。 - rybo111
如果您想要两个导航栏,一个靠左,一个靠右,那么使用 justify-content-between 对我来说效果很好。 - Greg
不错!只需在您的第一个ul上添加“ml-auto”@SantoshKumar - Rbbn
显示剩余4条评论

176

在我的情况下,我只想要一个导航按钮/选项集合,而我发现这个方法可行:

<div class="collapse navbar-collapse justify-content-end" id="navbarCollapse">
  <ul class="navbar-nav">
    <li class="nav-item">
      <a class="nav-link" href="#">Sign Out</a>
    </li>
  </ul>
</div>
所以,您将向该div添加justify-content-end,并在列表上省略mr-auto
这是一个可工作示例

3
在OP的例子中,他在导航栏中使用了两个元素,将一个左对齐,另一个右对齐;而我只使用了一个元素,并将其右对齐。这不是正确答案,但作为对问题略微变化的回答很有帮助 ;) - Craig van Tonder
这适用于单个navbar-nav,但是在Bootstrap文档中使用了mr-auto方法。 - Carol Skelly
mr-auto在文档中被使用,但不是用于将项目向左对齐。正如在这篇文章中所提到的,这个答案在语义上是正确的:http://blog.getbootstrap.com/2017/01/06/bootstrap-4-alpha-6/ - qwaz
问题是你是在尝试对齐两个链接列表还是一个。如果只有一个,你的答案有效并且对我非常有帮助。谢谢! - barefootsanders
它对我起作用了,但我不知道为什么在这个答案上面的那个不起作用。 - Suhail Akhtar
float-right的工作方式与justify-content-end相同,只要删除mr-auto即可。 - desoga

78

对于那些在BS4中仍然遇到这个问题的人,只需尝试以下代码-

<ul class="navbar-nav ml-auto">

7
不行 - 那会把所有内容都靠右对齐。问题说他只想把单个项目对齐到右边。 - NickG
2
请查看关于m*-auto的官方文档,它会根据您放置类的位置将内容向左或向右推。 - Pierre de LESPINAY
@PierredeLESPINAY,是的,ml-auto确实可以将内容推到最右边的位置,但我想知道为什么mr-0不能完成这项工作? - avocado
@NickG 如果你想让一些项目左对齐,另一些项目右对齐,你可以使用多个<ul>元素,每个元素都带有适当的m*-auto - Addison Klinke

52

关于Bootstrap 4

如果您想将品牌对齐到左侧,而将导航栏中的所有项目对齐到右侧,请将默认值mr-auto更改为ml-auto

<ul class="navbar-nav ml-auto">

有任何例子吗? - e-info128

36

Bootsrap 4.0.0-beta.2 上,这里列出的所有答案都对我没用。最后,Bootstrap 的网站通过其页面源代码而不是文档提供了解决方案...

Getbootstrap.com 使用以下类帮助将他们的右侧 navbar-nav 对齐到右侧:ml-md-auto


1
对我来说运行得非常好,没有其他的能够比得上。 - Maria Campbell
1
尝试了您的建议,查看Bootstrap网页源代码本身,截至撰写本文(2021年1月16日),它是ms-md-auto。至少在我的情况下有效。 - navneethc

19

使用此代码将项目移动到右侧。

<div class="collapse navbar-collapse justify-content-end">

1
这不适用于当您有一个折叠的菜单时,然而,使用 ml-auto 仍将起作用,因为当菜单折叠时,<li> 项目仍然占据100%的宽度,因此不会应用任何边距。 - Ryan S
1
对我来说,只有这个解决方案有效,我正在使用Bootstrap 4版本。 - Zain Ul Abidin

14

应用 navjustify-content-end 属性后,使用ml-auto 代替 mr-auto 来对 ul进行布局


12

只需在 ul 中添加 mr-auto 类:

<ul class="nav navbar-nav mr-auto">

如果你的菜单列表同时出现在两侧,你可以像这样操作:

<ul class="navbar-nav mr-auto">
  <li class="nav-item active">
    <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled" href="#">Disabled</a>
  </li>
</ul>
<ul class="navbar-nav ml-auto">
  <li class="nav-item active">
    <a class="nav-link" href="#">left 1</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">left 2</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled" href="#">left disable</a>
  </li>
</ul>

8
在bootstrap v4.3中,只需在<ul class="navbar-nav">中添加ml-auto即可。 例如:<ul class="navbar-nav ml-auto">

8
如果您希望将“主页”、“特性”和“价格”显示在导航标志后面的左侧,并将登录和注册显示在右侧,则可以将这两个列表封装在<div>中,并使用.justify-content-between类。
<div class="collapse navbar-collapse justify-content-between">
<ul>....</ul>
<ul>...</ul>
</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接