在我开发的这些年里,这一直是同事们的争议。在水平菜单(或标题导航栏)中,向菜单项添加分隔符的最佳方式是什么?考虑所有因素:浏览器兼容性、可维护性、美观性、菜单空间及其对响应大小的影响等。(底部附有COPE PEN)
HTML
<!-- MENU 1 -->
<div class="container">
<p class="inline"> Using CSS border</p>
<div class="navbar">
<ul class="menu">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
</div>
<div>
<!-- MENU 2 -->
<div class="container">
<p class="inline"> Using Font Awesome in HTML</p>
<div class="navbar">
<ul class="menu2">
<li><a href="#">Item 1 <i class="fa fa-minus"></i></a></li>
<li><a href="#">Item 2 <i class="fa fa-minus"></i></a></li>
<li><a href="#">Item 3 <i class="fa fa-minus"></i></a></li>
<li><a href="#">Item 4 <i class="fa fa-minus"></i></a></li>
<li><a href="#">Item 5 </a></li>
</ul>
</div>
<div>
<!-- MENU 3 -->
<div class="container">
<p class="inline"> Using Font Awesome in CSS</p>
<div class="navbar">
<ul class="menu3">
<li><a href="#">Item 1 </a></li>
<li><a href="#">Item 2 </a></li>
<li><a href="#">Item 3 </a></li>
<li><a href="#">Item 4 </a></li>
<li><a href="#">Item 5 </a></li>
</ul>
</div>
</div>
<!-- MENU 4 -->
<div class="container">
<p class="inline"> Using Font character | in CSS</p>
<div class="navbar">
<ul class="menu4">
<li><a href="#">Item 1 </a></li>
<li><a href="#">Item 2 </a></li>
<li><a href="#">Item 3 </a></li>
<li><a href="#">Item 4 </a></li>
<li><a href="#">Item 5 </a></li>
</ul>
</div>
</div>
每个变体的相应CSS如下。
body{
width:100%;
}
.inline{
width: 25%;
float:left;
text-align:right;
}
.navbar{
width:800px;
margin:10px auto;
background:#0067A5;
height: 40px;
}
.menu{
text-align: center;
width: 100%;
padding: 0;
}
.menu li{
list-style-type: none;
display: inline-block;
padding: 10px;
}
.menu li a{
color:#fff;
text-transform: uppercase;
text-decoration:none;
border-right: 1px solid #fff;
padding: 0px 20px 0px 0px;
}
.menu li:last-child a{
border:none;
}
/***** MENU 2 ********/
.menu2{
text-align: center;
width: 100%;
padding: 0;
}
.menu2 li{
list-style-type: none;
display: inline-block;
padding: 10px;
}
.menu2 li a{
color:#fff;
text-transform: uppercase;
text-decoration:none;
}
.menu2 .fa-minus {
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
margin: 0px -10px 0 5px;
}
/***** MENU 3 ********/
.menu3{
text-align: center;
width: 100%;
padding: 0;
}
.menu3 li{
list-style-type: none;
display: inline-block;
padding: 10px;
position:relative;
}
.menu3 li a{
color:#fff;
text-transform: uppercase;
text-decoration:none;
}
.menu3 li a:after{
position:absolute;
font-family: FontAwesome;
top:10px;
left:66px;
content: "f068";
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
}
.menu3 li:last-child a:after{
content:"";
}
/***** MENU 4 ********/
.menu4{
text-align: center;
width: 100%;
padding: 0;
}
.menu4 li{
list-style-type: none;
display: inline-block;
padding: 10px;
position:relative;
}
.menu4 li a{
color:#fff;
text-transform: uppercase;
text-decoration:none;
}
.menu4 li a:after{
position:absolute;
font-family: Roboto;
top:6px;
left:72px;
content: "|";
}
.menu4 li:last-child a:after{
content:"";
}
如果你还有其他想法,我愿意接受。在我看来,这些都不是"错误的",它们都是有效的。然而,还有什么更实用呢?优点和缺点是什么(特别是缺点)。在我看来,整个分隔器的概念是非常早期的网页设计时代(2000年代),但一些客户仍然更喜欢它
此处工作副本
我肯定会尽可能使用字形(选项4)。我会使用:before
而不是:after
。你用它赢得了一个IE(7或8)版本。始终确保使用unicode版本的字形,就像在选项3中所做的那样。如果您只是使用一个键盘字符,您应该意识到它可能无法被其他键盘布局(代码页)识别。
查阅unicode表示法,我发现csstricks非常有用。如果不能使用字形,可以创建自定义字体。弄清楚所有内容需要一些时间,但一旦弄清楚了,就可以重新使用unicode中的css内容了。因此,imho你有所有的字形选项(阴影,边框,字体大小,颜色,额外的背景,响应能力,…)
交易破坏者:
- 选项1:锚文本/填充不居中,这可能会在以后引入响应问题。此外,您很可能需要
:first-child
和/或:last-child
选择器,以再次添加部分浏览器支持 - 选项2:需要额外的语义来限制HTML
- 选项3:类似于我的备份计划,如果我不能使用字形。基本支持可以追溯到IE8。通过一些特殊处理,您可以将其用于IE7
不幸的是,竖线/竖线没有列在csstricks上。另一个消息来源告诉我是content: ' 0007C'
。
一开始,使用边界似乎是个好主意,如果只有一个级别的元素,那么它们就是好主意,但一旦你开始用锚和图像之类的东西嵌套多个级别,并具有悬停/背景之类的效果。。。你开始得到不想要的结果。正因为如此,我发现自己使用:after
作为分频器。