【问题标题】:How to center nav-items in Bootstrap? [duplicate]如何在 Bootstrap 中居中导航项? [复制]
【发布时间】:2017-09-29 23:42:30
【问题描述】:

如果我想根据 Bootstrap 4 中的浏览器窗口大小将导航栏上的导航项(链接)居中怎么办。看看代码:

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
        <div class="navbar-nav">
            <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
            <a class="nav-item nav-link" href="#">Features</a>
            <a class="nav-item nav-link" href="#">Pricing</a>
            <a class="nav-item nav-link disabled" href="#">Disabled</a>
        </div>
    </div>
</nav>

现在我想根据浏览器宽度将 div“navbar-nav”居中。我尝试过的一件事是给它 mr-auto 和 ml-auto 似乎确实居中但不完全正确。它实际上做了什么,它根据宽度 "browser window width - logo width" 居中。我希望它正好位于屏幕中间。

我也尝试过将位置更改为绝对位置,但在折叠模式下同样会弄乱布局。

【问题讨论】:

标签: html css twitter-bootstrap bootstrap-4


【解决方案1】:

.navbar-nav .nav-link,
.navbar-brand {
  text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
  <a class="navbar-brand" href="#">Navbar</a>
  <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
    <div class="navbar-nav">
      <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
      <a class="nav-item nav-link" href="#">Features</a>
      <a class="nav-item nav-link" href="#">Pricing</a>
      <a class="nav-item nav-link disabled" href="#">Disabled</a>
    </div>
  </div>
</nav>

【讨论】:

  • 实际上你做的恰恰相反。您的代码在折叠时使徽标和导航链接居中。我只希望导航项在未折叠时居中。我希望它根据浏览器宽度居中。
【解决方案2】:

响应式地使用弹性框和边距工具...

Bootstrap 4 alpha 6 http://codeply.com/go/YvzHvQQRAs(中心品牌和链接)

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="d-md-flex d-block flex-row mx-md-auto mx-0">
        <a class="navbar-brand" href="#">Navbar</a>
        <div class="collapse navbar-collapse mr-auto" id="navbarNavAltMarkup">
            <div class="navbar-nav">
                <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
                <a class="nav-item nav-link" href="#">Features</a>
                <a class="nav-item nav-link" href="#">Pricing</a>
                <a class="nav-item nav-link disabled" href="#">Disabled</a>
            </div>
        </div>
    </div>
</nav>

引导 4.1 https://www.codeply.com/go/sTJUthyswN(中心品牌,移动端左对齐)

编辑..

答案还是基本一样。使用mx-auto 居中。

http://codeply.com/go/mycC5z8lpJ(中间链接,品牌左侧)

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
        <div class="navbar-nav mx-auto">
            <a class="nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
            <a class="nav-link" href="#">Features</a>
            <a class="nav-link" href="#">Pricing</a>
            <a class="nav-link disabled" href="#">Disabled</a>
        </div>
    </div>
</nav>

如果您希望链接完全在视口中居中,请参阅此处的第二个示例:http://www.codeply.com/go/RCBftzZCD8

Other Bootstrap 4 Navbar alignment examples

另见...

Center an element in Bootstrap 4 Navbar
Center Navbar links without brand pushing it to the right in Bootstrap 4?
How to center navbar in Bootstrap 4 using Flexbox
How to position navbar contents in Bootstrap 4
Bootstrap 4 Navbar align logo center and toggle icon on the left

【讨论】:

  • 实际上,您的代码还将我不想要的徽标居中。正如我所说,我想将导航项居中,而不是在不处于折叠形式时将徽标居中。我想根据浏览器宽度将它们居中,但边距工具通过应用徽标左侧的边距将它们居中。
  • 您的链接提供了很好的解决方案。非常感谢。
  • @Zim 你的链接都坏了。
  • @dmcoding .. 他们是怎么坏的?相关代码也在答案中。
【解决方案3】:

你可以使用这个 CSS:

#navbarNavAltMarkup {
  position: absolute;
  text-align: center;
}
#navbarNavAltMarkup > div {
  display: inline-block;
  width: 100%;
}
#navbarNavAltMarkup > div > a {
  display: inline;
}

它使菜单的容器独立于其父级,赋予它全宽并将其中的元素居中对齐。

https://codepen.io/anon/pen/XRggYY

【讨论】:

  • 工作得非常好,直到我注意到折叠后,单击切换器时导航栏没有打开。此外,您的笔似乎还有一些额外的宽度。
猜你喜欢
  • 2015-11-01
  • 2013-09-03
  • 1970-01-01
  • 2019-05-25
  • 2019-02-15
  • 2012-06-11
  • 2023-03-20
相关资源
最近更新 更多