LI 元素的文本分隔符

Posted

技术标签:

【中文标题】LI 元素的文本分隔符【英文标题】:Text Separators for LI Elements 【发布时间】:2011-09-11 05:42:19 【问题描述】:

我想在我的 li 元素之间添加一个正斜杠 ('/'),​​但我不确定在语义上执行此操作的最佳方法。现在,我只是在 li 标记中包含正斜杠并使用不间断空格添加间距,如下所示:

<ul id="footer_menu">
    <li>Customer Support&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Shipping Info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Size Charts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Privacy Policy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Contact</li>
</ul>

你怎么看?谢谢。

【问题讨论】:

你需要支持IE7吗? caniuse.com/css-gencontent Separators For Navigation的可能重复 【参考方案1】:

您可以使用伪元素在元素之后包含文本,也可以使用 CSS3 选择器从最后一个元素中删除尾部斜杠。

#footer_menu li:after 
    content: "/";

#footer_menu li:last-child:after 
    content: "";

编辑:

使用更好的 CSS3 可以在一行中完成所有事情。

#footer_menu li:nth-child(n+2):before 
    content: "/";

编辑:编辑:

比这更容易。

#footer_menu li + li:before 
    content: "/";

【讨论】:

我是唯一需要使用n+2 才能使其工作的人吗? 不,你不是,你是唯一一个测试过它的人。我现在正在改变它。【参考方案2】:

这是我用 | 分隔的 LI 元素的解决方案(管道):

li + li:before 
    content: " | ";

邻接组合符(加号,+)在这种情况下非常方便。如果一个元素直接位于另一个指定元素之前,它允许您设置该元素的样式。由于第一个 li 之前没有另一个 li,因此它不会在其前面添加内容。这比打字少得多:

li:before 
  content: " | ";


li:first-child:before 
  content: "";

【讨论】:

很好的例子。如果先前的元素被隐藏(例如在使用 Bootstrap hide-* 时),您是否知道如何做到这一点?【参考方案3】:

你可以把 li 的内容放在一个 span 中,然后使用 CSS:

ul#footer_menu li span:after  content:"/"; padding:0 5px; 

或类似的东西。

编辑 啊就像Kyle说的那样,但是last_child规则的添加更完整。

【讨论】:

【参考方案4】:

对于那些使用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;

【讨论】:

【参考方案5】:

如果你想做类似的事情 客户支持 / 运输信息 / 尺码表 / 隐私政策 / 联系方式 你可以用一些 CSS 来做到这一点

您需要将“first”类添加到集合中的第一个 li,如下所示

<ul id="footer_menu">
    <li class="first">Customer Support&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Shipping Info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Size Charts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Privacy Policy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/</li>
    <li>Contact</li>
</ul>

然后是下面的 CSS

 #footer_menu ul   
    float: left; 
    padding: 10px;
    list-style: none outside none;


#footer_menu li 
    border-left: 2px solid #000000;
    float: left;
    padding: 0 10px;


#footer_menu li.first 
    border: none;

这会将所有 li 元素彼此相邻并给你一个边框。结果将类似于

客户支持 |运输信息 |尺码表 |隐私政策 |联系方式

【讨论】:

这并不是这家伙想要的。 / != | 注意到了,但是这个解决方案是跨浏览器兼容的,无需添加额外的 CSS 规则或黑客,只要你能克服结果分隔符有轻微角度变化的事实。

以上是关于LI 元素的文本分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何在中间的android中放置带有文本的元素之间的分隔线?

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数获取所有列表中指定位置的元素内容

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数获取所有列表中最后一个位置元素内容

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数获取所有列表中最后一个位置元素内容

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数获取所有列表中第一个位置的元素内容

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数获取所有列表中第一个位置的元素内容