Answers:
只需将分隔图片用作背景图片即可li
。
要使其仅出现在列表项之间,请将图像放置在的左侧li
,而不要放置在第一个图像的左侧。
例如:
#nav li + li {
background:url('seperator.gif') no-repeat top left;
padding-left: 10px
}
此CSS会将图像添加到另一个列表项之后的每个列表项-换句话说,除了第一个列表项之外的所有列表项。
注意 请注意,相邻选择器(li + li)在IE6中不起作用,因此您仅需将背景图像添加到常规li中(使用条件样式表),并可能对其中一个边缘应用负边距。
:before
伪选择器可防止它出现在最后一个元素之后。
border-left
在项目之间绘制垂直线。
如果没有迫切需要使用图像作为分隔符,则可以使用纯CSS来实现。
nav li + li:before{
content: " | ";
padding: 0 10px;
}
就像在原始问题中描述的图像一样,这在每个列表项之间放置了一个横条。但是,由于我们使用的是相邻的选择器,因此不会将竖线放在第一个元素之前。而且由于我们使用的是:before
伪选择器,所以不会在最后放置一个。
您可以li
在要添加分隔线的位置添加一个元素
<ul>
<li> your content </li>
<li class="divider-vertical-second-menu"></li>
<li> NExt content </li>
<li class="divider-vertical-second-menu"></li>
<li> last item </li>
</ul>
在CSS中,您可以添加以下代码。
.divider-vertical-second-menu{
height: 40px;
width: 1px;
margin: 0 5px;
overflow: hidden;
background-color: #DDD;
border-right: 2px solid #FFF;
}
这将提高执行速度,因为它不会加载任何图像。只是测试一下.. :)
将分隔符添加到li
背景中,并确保链接不会扩展以覆盖分隔符,这意味着分隔符将不可单击。
@mixin addSeparator($element, $separator, $padding) {
#{$element+'+'+$element}:before {
content: $separator;
padding: 0 $padding;
}
}
例:
@include addSeparator('li', '|', 1em);
这会给你这个:
li+li:before {
content: "|";
padding: 0 1em;
}
将其作为背景放置在list元素上:
<ul id="nav">
<li><a><img /></a></li>
...
<li><a><img /></a></li>
</ul>
#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;}
/* left padding creates a gap between links */
接下来,我建议使用其他标记来实现可访问性:
与其内嵌图像,而不是将文本作为文本放入,将每个文本都用跨距包围,将图像作为,作为背景,然后使用display:none隐藏文本。提供更多的样式灵活性,并允许您使用1px宽bg图像进行平铺,节省带宽,还可以将其嵌入CSS Sprite中,从而节省HTTP调用:
HTML:
<ul id="nav">
<li><a><span>link text</span></a></li>
...
<li><a><span>link text</span></a></li>
</ul
CSS:
#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;}
#nav a{background: url(/images/nav-bg.gif) repeat-x;}
#nav a span{display:none;}
UPDATE OK,我看到其他人在我之前得到了类似的答案-并且我注意到John还提供了一种使用li + li选择器来防止分隔符出现在第一个元素之前的方法-这意味着任何li都在另一个之后。