在不使用跨度的情况下更改HTML列表的项目符号颜色


88

我想知道是否有办法更改列表中项目符号的颜色。

我有一个这样的清单:

<ul>
   <li>House</li>
   <li>Car</li>
   <li>Garden</li>
</ul>

对我来说,不可能在li中插入任何内容,例如“ span”或“ p”。那么,我可以以某种巧妙的方式更改项目符号的颜色,而不更改文本的颜色吗?

Answers:


34

如果可以使用图像,则可以执行此操作。如果没有图像,您将只能更改项目符号的颜色,而不能更改文本的颜色。

使用图像

li { list-style-image: url(images/yourimage.jpg); }

看到

列表样式图像

不使用图像

然后,您必须编辑HTML标记,并在列表中包括一个跨度,并为li和跨度涂上不同的颜色。


1
捷豹这可能行得通。但是实际上我决定使用背景图像,然后使用列表样式类型:none; 这给了我比列表样式图像更多的自由定位“项目符号”。但是仍然可以得到1+正确的答案。
金·安徒生

6
以及data-uri svgs也可以使用:list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><circle fill="red" cx="5" cy="5" r="2"/></svg>');
Jon Surrell 2015年

使用@JonSurrell方法,我可以实现非常令人满意的结果。不幸的是,这不是建议的答案之一。该解决方案是用于IE8后的跨浏览器,并且可以轻松修改以创建有趣的自定义形状。
KoldBane15年

@KoldBane看到我的新答案:)
Jon Surrell 2015年

@DimitryK请查看我编写的完整答案,并在此处提出任何评论。在FF43中效果很好。
乔恩·苏雷尔

186

我在不添加标记的情况下进行了管理,而是使用li:before。显然,这具有所有限制:before(不支持旧版IE),但是经过一些非常有限的测试后,它似乎可以与IE8,Firefox和Chrome一起使用。项目符号样式也受Unicode中的限制。

li {
  list-style: none;
}
li:before {
  /* For a round bullet */
  content: '\2022';
  /* For a square bullet */
  /*content:'\25A0';*/
  display: block;
  position: relative;
  max-width: 0;
  max-height: 0;
  left: -10px;
  top: 0;
  color: green;
  font-size: 20px;
}
<ul>
  <li>foo</li>
  <li>bar</li>
</ul>


5
此外,这里是你会如何做同样的事情为有序列表:jsfiddle.net/uZRGN
Nightfirecat

3
优秀的。在如此广泛的IE8 +用法下,我认为这应该是现在的答案。(请注意,我以前常常font-size:1em会得到比例更高的子弹!)
EvilDr

我不喜欢这种方法,因为当有人尝试使用列表样式类型设置为无的ul渲染时会发生什么?这意味着您必须将这些样式的作用域限定在某个类下,例如ul.greenDisc
ctb

19

我们可以list-style-imagesvgs 结合,我们可以在内联css!这种方法对“子弹”提供了难以置信的控制,“子弹”可以变成任何东西。

要获得红色圆圈,只需使用以下CSS:

ul {
  list-style-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><circle fill="red" cx="5" cy="5" r="2"/></svg>');
}

但这仅仅是开始。这使我们可以用这些子弹做任何我们想做的疯狂事情。圆形或矩形很容易,但是任何可以绘制的东西都svg可以贴在里面!查看下面的靶心示例:

宽度/高度属性

某些浏览器要求widthheight属性,要对设置<svg>,或者什么都不显示。在撰写本文时,最新版本的Firefox出现了此问题。我已经在示例中设置了这两个属性。

编码方式

最近的评论使我想起了data-uri的编码。最近这对我来说是一个痛点,我可以分享一些我研究过的信息。

引用URI规范data-uri规范表示svg应该根据URI规范进行编码。这意味着应该对各种字符进行编码,例如变为。<%3C

一些消息来源建议使用base64编码,该编码应该可以解决编码问题,但是不必要地会增加SVG的大小,而URI编码则不会。我建议使用URI编码。

更多信息:

浏览器支持:> ie8

SVG上的CSS技巧

svgs上的mdn


1
到目前为止,这是最好的答案,它甚至可以与演示转换器(例如Cleaver)一起使用。
华丽的

1
我真的很喜欢这种方法,因为样式不会弄乱ul的不规则使用,即,当list-style-type设置为none时,也因为它不依赖于将li的内容包装在其他内容中元件。但是,它在IE11或Edge中对我不起作用...?
ctb

@ctb我没有专门测试过这些浏览器,但是您是否阅读了编码说明?您可能无法复制/粘贴“漂亮” <svg>代码,请先尝试通过uri编码器运行它。
乔恩·瑟雷尔

1
@JonSurrell是的,一旦我编码了svg代码,就可以工作。太好了。
ctb

1
我喜欢这个答案,因为它也支持相对大小,例如r =“ 1.5em”
plexoos

16

建立在@Marc的解决方案基础上-由于项目符号字符使用不同的字体和浏览器进行了不同的渲染,因此我将以下css3技术与border-radius结合使用,制成了我可以更好地控制的项目符号:

li:before {
    content: '';
    background-color: #898989;
    display: inline-block;
    position: relative;
    height: 12px;
    width: 12px;
    border-radius: 6px;
    -webkit-border-radius: 6px;
    -moz-border-radius: 6px;
    -moz-background-clip: padding;
    -webkit-background-clip: padding-box;
    background-clip: padding-box;
    margin-right: 4px;
    top: 2px;
}

1
@ddilsaver,您是对的,我在另一项特定于每个订单项的规则中设置了背景颜色(客户希望在每个规则上使用不同的颜色)。我已经更新了。
jessica

2
非常好的解决方案。我建议将边界半径更改为50%,以使其在高度/宽度发生变化时更加灵活。
蒂姆

10

我知道这是一个非常非常老的问题,但我一直在处理这个问题,并提出了一种我从未看到过的方法。给列表指定颜色,然后使用::first-line选择器覆盖文本颜色。我不是专家,所以也许我缺少这种方法的问题,但似乎可行。

li {
  color: blue;
}

li::first-line {
  color: black;
}
<ul>
  <li>House</li>
  <li>Car</li>
  <li>Garden</li>
</ul>


单行列表的简单解决方案
planetClaire

6

同时构建@Marc和@jessica解决方案-这是我使用的解决方案:

li { 
   position:relative;
}
li:before {
      content:'';
      display: block;
      position: absolute;
      width: 6px;
      height:6px;
      border-radius:6px;
      left: -20px;
      top: .5em;
      background-color: #000;
}

我使用em的字体大小,所以如果你设置你的top价值是.5em它总是被放置在中点文本的第一行。我用过,left:-20px因为那是项目符号在浏览器中的默认位置:父级 padding/2


2

我也真的很喜欢Marc的答案-我需要一组不同颜色的UL,显然,使用一门课程会更容易。例如,这是我用于橙色的内容:

ul.orange {
    list-style: none;
    padding: 0px;
}
ul.orange > li:before {
    content: '\25CF ';
    font-size: 15px;
    color: #F00;
    margin-right: 10px;
    padding: 0px;
    line-height: 15px;
}

另外,我发现我用于“ content:”的十六进制代码与Marc的十六进制代码不同(十六进制的圆圈看起来有点过高)。我用过的那个似乎正好位于中间。我还发现了其他几个形状(正方形,三角形,圆形等)就在这里


1

对我来说,最好的选择是使用CSS伪元素,因此对于disc项目符号样式,它看起来像这样:

ul {
  list-style-type: none;
}

li {
  position: relative;
}

li:before {
  content: '';
  display: block;
  position: absolute;
  width: 5px; /* adjust to suit your needs */
  height: 5px; /* adjust to suit your needs */
  border-radius: 50%;
  left: -15px; /* adjust to suit your needs */
  top: 0.5em;
  background: #f00; /* adjust to suit your needs */
}
<ul>
  <li>first</li>
  <li>second</li>
  <li>third</li>
</ul>

笔记:

  • width并且height应该具有相等的值以使指针四舍五入
  • border-radius如果要square列出项目符号,可以将其设置为零

要获得更多的项目符号样式,您可以使用其他CSS形状https://css-tricks.com/examples/ShapesOfCSS/(选择不需要伪元素即可工作的形状,例如三角形)


1

::标记

您可以使用::markerCSS伪元素来选择列表项的标记框(即项目符号或数字)。

ul li::marker {
  color: red;
}

注意:在发布此答案时,这被认为是实验技术,仅在Firefox和Safari中实现(到目前为止)。


经过测试,可在当前的Firefox和Safari中使用。查看其他浏览器的支持https://caniuse.com
丹尼尔斯(Daniels)

0

建立在@ddilsaver的答案上。我希望能够将子弹用于子弹。这似乎起作用:

li {
  list-style: none;
  position: relative;
}

li:before {
  content:'';
  display: block;
  position: absolute;
  width: 20px;
  height: 20px;
  left: -30px;
  top: 5px;
  background-image: url(i20.png); 
  background-position: 0px -40px; /* or whatever offset you want */
}

0

我今天尝试了此操作并输入了以下内容:
我需要在列表中显示颜色标记(项目符号和数字)。我碰到了这个技巧,并在样式表中编写了属性相互化的信息:

ul,
ol {
  list-style: none;
  padding: 0;
  margin: 0 0 0 15px;
}
ul {}
ol {
  counter-reset: li;
}
li {
  padding-left: 1em; 
}
ul li {}
ul li::before,
ol li::before {
  color: #91be3c;
  display: inline-block;
  width: 1em;
}
ul li::before {
  content: "\25CF";
  margin: 0 0.1em 0 -1.1em;
}
ol li {
  counter-increment: li;
}
ol li::before {
  content: counter(li);
  margin: 0 0 0 -1em;
}

我选择了另一个角色来显示子弹,在这里观看它。我需要相应地调整边距,也许这些值不适用于您选择的字体(数字使用您的网络字体)。



0

嵌入式版本,适用于Outlook Desktop:

<ul style="list-style:square;">
  <li style="color:red;"><span style="color:black;">Lorem.</span></li>
  <li style="color:red;"><span style="color:black;">Lorem.</span></li>
</ul>

JSFiddle

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.