css怎样让导航词语间隔,css - 导航分隔符

css - 导航分隔符

我需要在导航元素之间添加分隔符。 分隔符是图像。

8tYXQ.jpg

我的HTML结构如下:ol> li> a> img。

在这里,我得出两个可能的解决方案

要添加更多li标签进行分离(嘘!),

在每个元素的图像中包含分隔符(这是更好的,但它使用户可以点击,例如,“主页”,但是到“服务”,因为它们是一个在另一个之后,用户可能会意外地点击分隔符 属于“服务”);

该怎么办?

9个解决方案

126 votes

如果没有迫切需要将图像用于分隔符,则可以使用纯CSS执行此操作。

nav li + li:before{

content: " | ";

padding: 0 10px;

}

这会在每个列表项之间添加一个条,就像所描述的原始问题中的图像一样。 但由于我们使用的是相邻的选择器,因此它不会将条形放在第一个元素之前。 由于我们使用的是:before伪选择器,因此它不会在最后放置一个伪选择器。

jrue answered 2019-07-11T07:20:51Z

63 votes

只需在li上使用分隔符图像作为背景图像即可。

要使其仅显示在列表项之间,请将图像放在li的左侧,但不要放在第一个图像的左侧。

例如:

#nav li + li {

background:url('seperator.gif') no-repeat top left;

padding-left: 10px

}

此CSS将图像添加到跟随另一个列表项的每个列表项 - 换句话说,所有这些列表项除了第一个列表项之外。

NB。 请注意,相邻选择器(li + li)在IE6中不起作用,因此您只需将背景图像添加到常规li(使用条件样式表),并可能对其中一个边应用负边距。

ajcw answered 2019-07-11T07:20:17Z

3 votes

另一个解决方案是正常的,但是如果使用:之后或者在开始时使用:之前,则无需在最后添加分隔符。

所以:

案例:之后

.link:after {

content: '|';

padding: 0 1rem;

}

.link:last-child:after {

content: '';

}

案例:之前

.link:before {

content: '|';

padding: 0 1rem;

}

.link:first-child:before {

content: '';

}

T04435 answered 2019-07-11T07:21:45Z

3 votes

要使分隔符相对于菜单文本垂直居中,

.menustyle li + li:before

{

content: " | ";

padding: 0;

position: relative;

top: -2px;

}

user7149870 answered 2019-07-11T07:22:14Z

2 votes

将分隔符添加到li背景,并确保链接不会展开以覆盖分隔符,这意味着分隔符将无法单击。

Soufiane Hassou answered 2019-07-11T07:22:40Z

2 votes

您可以在要添加分隔符的位置添加一个li元素

  • your content
  • NExt content
  • last item

在CSS中,您可以添加以下代码。

.divider-vertical-second-menu{

height: 40px;

width: 1px;

margin: 0 5px;

overflow: hidden;

background-color: #DDD;

border-right: 2px solid #FFF;

}

这将提高您的执行速度,因为它不会加载任何图像。 试试吧.. :)

Rajiv Pingale answered 2019-07-11T07:23:24Z

2 votes

对于那些使用Sass的人,我为此目的编写了一个mixin:

@mixin addSeparator($element, $separator, $padding) {

#{$element+'+'+$element}:before {

content: $separator;

padding: 0 $padding;

}

}

例:

@include addSeparator('li', '|', 1em);

哪个会给你这个:

li+li:before {

content: "|";

padding: 0 1em;

}

d4nyll answered 2019-07-11T07:23:54Z

1 votes

将其作为list元素的背景:

...

#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精灵中,这样可以节省HTTP调用:

HTML:

  • link text

...

link text

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好吧,我看到其他人在我之前得到了类似的答案 - 我注意到约翰还包括一种方法,可以通过使用li + li选择器来保持分隔符出现在第一个元素之前 - 这意味着任何li都会在另一个li之后出现。

Faust answered 2019-07-11T07:24:50Z

1 votes

我认为最好的解决方案是我使用的,这是一个自然的CSS边界:

border-right:1px solid;

您可能需要像以下一样处理填充:

padding-left: 5px;

padding-right: 5px;

最后,如果你不想让最后一个li有这个独立的边框,那么在“border-right”中给它的最后一个孩子“none”,如下所示:

li:last-child{

border-right:none;

}

祝好运 :)

Avi answered 2019-07-11T07:25:34Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值