如何在不使用任何图像或span标签的情况下通过CSS在UL/LI html列表中设置Bullet颜色

Sam*_*Sam 503 css layout colors css3 html-lists

想象一下包含一些<li>项目的简单未排序列表.现在,我已经将子弹定义为方形通过list-style:square;但是,如果我设置了<li>项目的颜色,color: #F00;那么一切都变成了红色!

虽然我只想设置方形子弹的颜色.是否有一种优雅的方式来定义CSS中子弹的颜色......

...不使用任何精灵图像也不使用span标签!

HTML

<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<ul>
Run Code Online (Sandbox Code Playgroud)

CSS

li{
   list-style:square;
}
Run Code Online (Sandbox Code Playgroud)

Lea*_*rou 1013

最常见的方法是这样做:

ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

li {
  padding-left: 1em; 
  text-indent: -.7em;
}

li::before {
  content: "• ";
  color: red; /* or whatever color you prefer */
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>Foo</li>
  <li>Bar</li>
  <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

JSFiddle:http://jsfiddle.net/leaverou/ytH5P/

将适用于所有浏览器,包括版本8及更高版本的IE.

  • @Sam"font-family:"Webdings";" 是一个可怕的主意; 你不能假设每个用户都会在他们的系统上安装该字体(我没有,我很确定它并不常见,特别是在移动设备上). (118认同)
  • "!"的另一种选择``是``\ 002022"` (106认同)
  • 作为一个傻瓜,我会删除"!"`==>`"•"`中的额外空格并在它下面添加这一行:`padding-right:7px;`更多控制在那里:)其余的很棒,无处不在.PS:'之前'是什么意思/做什么? (74认同)
  • 而不是""•"也可能:`内容:"4"; font-family:"Webdings";`这将导致一个很好的`>`或一个很好的■`内容:"■"; font-family:"Arial Black";` (21认同)
  • 哦,至于`:before`是什么:它允许你在元素内动态插入(表示)内容,**之前**是它的"真实"内容.更多:http://www.w3.org/TR/CSS21/generate.html#before-after-content(我粘贴了CSS2规范,告诉你它甚至不是CSS3) (10认同)
  • @LeaVerou这个解决方案否定了`list-style-position:outside;`的效果,而且多行`li`看起来不太好.要解决它,只需使用`margin-left:-15px;/*或任何适合你的价值*/` (6认同)
  • 建议添加"font-weight:bold;" 甚至更好的"font-weight:900"到li:在Lea的解决方案中放大光盘之前.另外,如果我从这里直接复制到Chrome的控制台,那么krish的答案看起来很棒.但是我的html编辑器不知道"内容:"●""并将其变成问号(?) (6认同)
  • 嗯,你可以为`li:before`设置`display:inline-block`和`width:0.7em`,只为`li`设置`text-indent:-0.7em`.这样,即使在多行列表项中,文本的左边缘也将精确对齐. (5认同)
  • 使用**内容:"●"**对于光盘完全出现在list-style-type:disc中 (3认同)
  • @Sam#1::) @Sam#2:你对这个空间是对的,我只是懒惰:$更好在ems中设置填充,否则它会在字体大小改变时中断(因为你改变了) CSS或因为最终用户对它进行了调整)@Sam#3:我不相信网页中的dingbat字体,过去一些浏览器曾经扼杀过(最近没有尝试过).最好只使用unicode字符. (2认同)
  • 你也可以使用几乎所有的unicode字符,如★✱✿♥✎✔☞等.如果CSS文件具有UTF-8编码,这些字符可以只是粘贴在那里,没有任何转义. (2认同)
  • @MennoGouw这是2014年,这个解决方案在Chrome中完美运行. (2认同)
  • 很高兴阅读"包括IE". (2认同)
  • 为了放大圆圈,我将以下内容添加到`li:before {font-size:200%; line-height:50%; vertical-align:sub;} (2认同)
  • 最好以unicode形式提供,如"\ 2022".从理论上讲,它是"\ 002022",但你可以省略领先的0.另请参考:[在CSS内容值中放置Unicode字符](http://stackoverflow.com/a/10393517/235415) (2认同)

Fac*_*ier 88

浏览前一段时间,发现这个网站,你试过这个替代方案吗?

li{
    list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAE0lEQVQIW2NkYGD4D8RwwEi6AACaVAQBULo4sgAAAABJRU5ErkJggg==");
}
Run Code Online (Sandbox Code Playgroud)

听起来很难,但你可以在这里制作自己的png图像/模式,然后复制/粘贴你的代码并自定义你的子弹=)仍然优雅?

编辑:

按照@ lea-verou关于另一个答案的想法并应用这种外部源代码增强的理念,我来到另一个解决方案:

  1. 将Webfont图标库的样式表嵌入您的脑海中,在本例中为Font Awesome:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">

  1. 从FontAwesome cheatsheet(或任何其他webfont图标)获取代码.
i.e.:
fa-angle-right [&#xf105;]
Run Code Online (Sandbox Code Playgroud)

并使用f的最后一部分...后跟一个这样的数字,font-family同样:

li:before {
    content: "\f105";
    font-family: FontAwesome;
    color: red; /* or whatever color you prefer */
    margin-right: 4px;
}
Run Code Online (Sandbox Code Playgroud)

就是这样!现在你也有自定义项目符号提示=)

小提琴

  • 螺丝IE7.这是一个非常古老的浏览器.这解决方案摇滚!无论如何,如果你真的想支持IE7,你可以将Base64代码复制并粘贴到现代浏览器地址栏中,然后使用Ctrl + S(或Mac中的Cmd + S)将图像保存为PNG文件,并使用实际的PNG文件而不是Base64编码的字符串 (5认同)
  • 这非常有效! (4认同)
  • 我需要ie7的解决方案(当然,不支持:before选择器). (3认同)
  • 很遗憾地说,base64图像在IE7中也不起作用......否则它将是最好的解决方案...... (3认同)

mdt*_*thh 47

我只是像这样解决这个问题,它应该适用于所有浏览器:

HTML:

<ul>
  <li><span>Foo</span></li>
  <li><span>Bar</span></li>
  <li><span>Bat</span></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

CSS:

ul li{
    color: red
}

ul li span{
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

  • 他还想要另一种颜色的项目符号,而不是文本。 (3认同)
  • 哎呀,对不起.在没有跨度的情况下重读那个答案:-( (2认同)
  • 这里唯一的非自行车解决方案 (2认同)

Ale*_*lex 45

CSS 3 Lists模块的当前规范确实指定了::marker 伪元素,它将完全符合您的要求; FF经过测试不支持::marker,我怀疑Safari或Opera是否拥有它.IE当然不支持它.

所以现在,唯一的方法是使用图像list-style-image.

我想你可以li用a 包装一个内容,span然后你可以设置每个的颜色,但这对我来说似乎有些晦涩.

  • +1为此:`"IE,当然,不支持它."`:) (43认同)
  • 截至2016年12月15日,没有主流浏览器支持:标记,请参阅http://caniuse.com/#feat=css-marker-pseudo (7认同)
  • 这个答案有点过时了。[`::marker`](https://developer.mozilla.org/en-US/docs/Web/CSS/::marker#Browser_compatibility) 现在在除 Opera 之外的所有现代浏览器中都受支持。 (7认同)
  • Firefox 和 Safari 现在支持 `::marker` 伪元素。 (2认同)

Rah*_*sai 42

一种方法是使用li:beforewith content: ""并将其设计为inline-block元素.

这是一个有效的代码片段:

ul {
  list-style-type: none; /* no default bullets */
}

ul li { 
  font-family: Arial;
  font-size: 18px;
}

ul li:before { /* the custom styled bullets */
  background-color: #14CCBB;
  border-radius: 50%;
  content: "";
  display: inline-block;
  margin-right: 10px;
  margin-bottom: 2px;
  height: 10px;
  width: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>Swollen joints</li>
  <li>Pain in hands and knees</li>
  <li>Redness around joints</li>
  <li>Constant fatigue</li>
  <li>Morning stiffness in joints</li>
  <li>High fevers</li>
  <li>Rheumatoid nodules, which develop around joints</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 最好的方法!谢谢 (8认同)

Jos*_*tos 24

然而,另一种解决方案是使用带有的:before伪元素border-radius: 50%.这适用于所有浏览器,包括IE 8及更高版本.

使用该em单元可以响应字体大小的变化.您可以通过调整jsFiddle窗口的大小来测试它.

ul {
    list-style: none;
    line-height: 1em;
    font-size: 3vw;
}

ul li:before {
    content: "";
    line-height: 1em;
    width: .5em;
    height: .5em;
    background-color: red;
    float: left;
    margin: .25em .25em 0;
    border-radius: 50%;
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

您甚至可以使用它box-shadow来创建一些漂亮的阴影,这些content: "• "解决方案看起来不太好看.


小智 18

我试过这个,事情对我来说很奇怪.(CSS停止工作后,:after {content: "";}本教程中,我发现,你可以通过只使用彩色子弹的一部分,color:#ddd;li项目本身.

这是一个例子.

li{
    color:#ff0000;    
    list-style:square;                
}
a {
    text-decoration: none;
    color:#00ff00;
}

a:hover {
    background-color: #ddd;
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上@oarfish不是,li中的文本用另一个标签包装,以防我使用span. (5认同)
  • 这是最好的答案 (2认同)
  • 它不是.这显然也会使`li`中的文字变色. (2认同)
  • 这太棒了,比其他大多数答案都要少得多 (2认同)

小智 17

我使用jQuery:

jQuery('li').wrapInner('<span class="li_content" />');
Run Code Online (Sandbox Code Playgroud)

&与一些CSS:

li { color: red; }
li span.li_content { color: black; }
Run Code Online (Sandbox Code Playgroud)

也许是矫枉过正,但如果您正在为CMS编码而且您不想让您的编辑在每个列表项中添加额外的跨度,那么就会很方便.

  • 我认为需要更精确地定义"最佳".:P当然,在几乎任何特定情况下,它取决于你的需求是什么是"最好的".例如,这不适合我的. (11认同)
  • 电子邮件兼容jQuery? (10认同)
  • 这是最好的答案. (3认同)

Phi*_*ger 10

我建议给LIa background-imagepadding-left.该list-style-image属性在跨浏览器环境中很复杂,并且添加额外的元素(例如span)是不必要的.所以你的代码最终会看起来像这样:

li {
  background:url(../images/bullet.png) 0 0 no-repeat;
  list-style:none;
  padding-left:10px;
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*zak 9

您可以做的最简单的事情就是将内容包装<li>在一个<span>或等效的内容中,然后您可以单独设置颜色.

或者,您可以使用所需的子弹颜色制作图像,并使用list-style-image属性进行设置.

  • 如果您想在OL粗体上创建数字,也可以使用. (2认同)
  • 这对兼容性来说毫无疑问. (2认同)

Dav*_*vid 8

Lea Verou解决方案的变体与多行条目中的完美缩进可能是这样的:

ul{
    list-style: none;
    position: relative;
    padding: 0;
    margin: 0;
}

li{
    padding-left: 1.5em; 
}

li:before {
    position: absolute;
    content: "•";
    color: red;
    left: 0;
}
Run Code Online (Sandbox Code Playgroud)


Kov*_*ovo 6

我正在为这个问题添加我的解决方案.

我不想使用图像和验证器会惩罚你在CSS中使用负值,所以我这样做:

ul          { list-style:none; padding:0; margin:0; }

li          { padding-left:0.75em; position:relative; }

li:before       { content:"•"; color:#e60000; position:absolute; left:0em; }
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这篇文章有点迟到,但供参考......

CSS

ul {
    color: red;
}

li {
    color: black;
}
Run Code Online (Sandbox Code Playgroud)

子弹颜色在ul标签上定义,然后我们将li颜色切换回来.

  • 在Chrome中无效.可悲的是. (3认同)
  • 适用于Firefox 25和最新版本的Chrome (2认同)