问题描述
在 Bootstrap 中,最新的 platform-friendly 方法是创建一个导航栏,左侧有徽标 A,中间的菜单项和右侧的徽标 B?
这是我迄今为止所尝试的,最终对齐,以便徽标 A 位于左侧,左侧徽标旁边的菜单项和右侧的徽标 B 。
<div class="navbar navbar-fixed-top navbar-custom ">
<div class="container" >
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#"><span class="navbar-logo">Logo_A</span></a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">Menu Item 1</a></li>
<li><a href="#contact">Menu Item 2</a></li>
<li><a href="#about">Menu Item 3</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><img src="images/Logo_B.png" class="img-responsive"></a></li>
</ul>
</div>
</div>
</div>
最佳解决方案
引导 3
选项 1 – 品牌中心,左/右导航链接:
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<a class="navbar-brand" href="#">Brand</a>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-left">
<li><a href="#">Left</a></li>
<li><a href="#about">Left</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#about">Right</a></li>
<li><a href="#contact">Right</a></li>
</ul>
</div>
</nav>
.navbar-brand
{
position: absolute;
width: 100%;
left: 0;
text-align: center;
margin:0 auto;
}
.navbar-toggle {
z-index:3;
}
选项 2 – 左,中,右导航链接:
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="#">Left</a></li>
</ul>
<ul class="nav navbar-nav navbar-center">
<li><a href="#">Center</a></li>
<li><a href="#">Center</a></li>
<li><a href="#">Center</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Right</a></li>
</ul>
</div>
</nav>
@media (min-width: 768px) {
.navbar-nav.navbar-center {
position: absolute;
left: 50%;
transform: translatex(-50%);
}
}
http://www.bootply.com/SGYC6BWeBK
选项 3 – 中心品牌和链接
.navbar .navbar-header,
.navbar-collapse {
float:none;
display:inline-block;
vertical-align: top;
}
@media (max-width: 768px) {
.navbar-collapse {
display: block;
}
}
http://www.codeply.com/go/1lrdvNH9GI
对于 3.x 还可以看到 nav-justified:Bootstrap center navbar
2017 更新
Bootstrap 4
现在 BS 4 有 flexbox,比较容易一些。这里是 updated examples for left, right and center in the Bootstrap 4 Navbar 。阅读 Bootstrap 4 Navbar 上的文档
次佳解决方案
我需要类似的东西 (左,中,右对齐的项目),但能够将居中的项目标记为活动。对我有用的是:
http://www.bootply.com/CSI2KcCoEM
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="navbar-left"><a href="#">Left 1</a></li>
<li class="navbar-left"><a href="#">Left 2</a></li>
<li class="active"><a href="#">Center 1</a></li>
<li><a href="#">Center 2</a></li>
<li><a href="#">Center 3</a></li>
<li class="navbar-right"><a href="#">Right 1</a></li>
<li class="navbar-right"><a href="#">Right 2</a></li>
</ul>
</div>
</nav>
CSS:
@media (min-width: 768px) {
.navbar-nav {
width: 100%;
text-align: center;
}
.navbar-nav > li {
float: none;
display: inline-block;
}
.navbar-nav > li.navbar-right {
float: right !important;
}
}
第三种解决方案
打扫我的头,只是重读了我的答案,并意识到 OP 是要求两个标志的左边一个在右边的中央菜单,而不是相反的方式。
这可以通过使用 Bootstrap 的”navbar-right” 和”navbar-left” 作为徽标,然后使用”nav-justified” 而不是用于 UL 的”navbar-nav” 来严格执行 HTML 。不需要附加的 CSS(除非你想将 navbar-collapse 切换到 xs 视口的中心位置,那么你需要重写一些,但是会让你离开) 。
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-brand navbar-left"><a href="#"><img src="http://placehold.it/150x30"></a></div>
</div>
<div class="navbar-brand navbar-right"><a href="#"><img src="http://placehold.it/150x30"></a></div>
<div class="navbar-collapse collapse">
<ul class="nav nav-justified">
<li><a href="#">home</a></li>
<li><a href="#about">about</a></li>
</ul>
</div>
</nav>
Bootply:http://www.bootply.com/W6uB8YfKxm
对于那些想到这里的人来说,”brand” 在这里是我的老答案:
我知道这个线程有点老了,但是只是在这个工作时发布我的发现。自从 tomaszbak 在 collaspe 的休息之后,我决定将我的解决方案作为 skelly 的答案。首先我创建了我的”navbar-center”,并关闭了我的 CSS 中的普通导航栏的浮点数:
.navbar-center
{
position: absolute;
width: 100%;
left: 0;
text-align: center;
margin: auto;
}
.navbar-brand{
float:none;
}
然而,Skelly 的答案是,如果你有一个很长的品牌名称 (或者你想为自己的品牌使用一个图像),那么一旦你进入了 sm 的视口,由于绝对的位置和评论者有说,一旦你到达 xs 视口,切换开关就会断开 (除非你使用 Z 定位,但我真的不想担心) 。
所以我做的是利用引导 responsive utilities 创建品牌块的多个版本:
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-brand visible-xs"><a href="#">Brand That is Really Long</a></div>
</div>
<div class="navbar-brand visible-sm text-center"><a href="#">Brand That is Really Long</a></div>
<div class="navbar-brand navbar-center hidden-xs hidden-sm"><a href="#">Brand That is Really Long</a></div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-left">
<li><a href="#">Left</a></li>
<li><a href="#about">Left</a></li>
<li><a href="#">Left</a></li>
<li><a href="#about">Left</a></li>
<li><a href="#">Left</a></li>
<li><a href="#about">Left</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="#about">Right</a></li>
<li><a href="#contact">Right</a></li>
<li><a href="#about">Right</a></li>
<li><a href="#contact">Right</a></li>
<li><a href="#about">Right</a></li>
<li><a href="#contact">Right</a></li>
</ul>
</div>
所以现在,lg 和 md 视口的品牌以左边和右边的链接为中心,一旦你到达 sm 的视口,你的链接就会放到下一行,这样你就不会与你的品牌重叠,最后在 xs 查看 collaspe 踢入,您可以使用切换。您可以进一步了解并修改 navbar-right 和 navbar-left 与 navbar-brand 一起使用的媒体查询,以便在 sm 视口中链接都居中,但没有时间进行检验。
您可以在这里检查我的旧主板:www.bootply.com/n3PXXropP3
我想有 3 个品牌可能和”z” 一样麻烦,但是我觉得在响应式设计的这个世界里,这个解决方案更适合我的风格。
第四种方案
Bootstrap 4(从 alpha 6 开始)
Navbars are built with flexbox! Instead of floats, you』ll need flexbox and margin utilities.
对于正确使用 justify-content-end
在 collapse
div 上:
<div class="collapse navbar-collapse justify-content-end">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home</a>
</li>
</ul>
</div>
完整的例子在这里:https://jsbin.com/kemawa/edit?output
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。