我正在尝试构建一个类似Github的导航栏(不使用Bootstrap nav*
选择器 - 请参阅this jsfiddle
所以我有以下HTML:
<div class="container" style="margin-top: 20px;">
<div class="span9">
<ul class="unstyled main-tabs">
<li>
<a href="#">Link1</a>
</li>
<li>
<a href="#">Link2</a>
</li>
<li>
<a href="#">Link3</a>
</li>
</ul>
</div>
</div>
请注意我使用的span9
类强制导航栏仅占据屏幕的9/12。
以下CSS:
.main-tabs {
position: relative;
margin-bottom: 20px;
font-size: 12px;
font-weight: bold;
background-color: #eaeaea;
background-image: -moz-linear-gradient(#fafafa, #eaeaea);
background-image: -webkit-linear-gradient(#fafafa, #eaeaea);
background-image: linear-gradient(#fafafa, #eaeaea);
background-repeat: repeat-x;
border: 1px solid #eaeaea;
border-bottom-color: #cacaca;
border-radius: 3px;
}
.main-tabs a {
display: block;
text-align: center;
line-height: 35px;
font-size: 12px;
color: #777;
text-decoration: none;
text-shadow: 0 1px 0 white;
border-right: 1px solid #eee;
border-right-color: rgba(0,0,0,0.04);
border-left: 1px solid #fcfcfc;
border-left-color: rgba(255,255,255,0.7);
border-bottom: 2px solid #DADADA;
}
.main-tabs li {
list-style-type: none;
}
.main-tabs li .active {
border-bottom: 2px solid greenyellow;
}
结果是:
我将.main-tabs li
更改为:
.main-tabs li {
list-style-type: none;
float: left;
}
然后
.main-tabs li {
list-style-type: none;
display: block;
}
这仍然给出相同的结果:(
但这并没有真正帮助。
问题
如果不对li
或ul
元素的宽度进行硬编码(对于响应性问题),有没有办法获得与Github上相同的导航栏?
答案 0 :(得分:5)
一种久经考验的旧方法是使用表格布局:
.nav {
display: table;
width: 100%;
margin: 0;
padding: 0;
}
.nav li {
display: table-cell;
}
现代的方法是使用flexbox(IE 10+,可能需要很多前缀,因为标准有三个版本):
.nav-alt {
display: flex;
margin: 0;
padding: 0;
}
.nav-alt li {
flex: auto;
list-style-type: none;
}
两个版本的演示:http://jsfiddle.net/3qM5y/1/
答案 1 :(得分:2)
的 jsFiddle Demo
强> 的
的 demo with jQuery and a hover
强> 的
有几个问题需要解决。首先,如果没有专门确定每个菜单项的宽度,则必须使用推断宽度。一种常见的方法是使用用于计算表格单元格的内置算法。为此,您需要将容器设置为display:table
,将项目设置为display:table-cell
。
此外,ul
往往有一些默认填充,您应该使用容器上的padding-left: 0px;
删除初始填充。
最后,请确保您的锚元素的大小合适。这意味着使用display: inline-block;
和width:100%
设置它们。