Unicode字符作为CSS中列表项的项目符号

Ant*_*nAL 103 html css html-lists

例如,我需要使用星号(★)作为列表项的子弹.

我已经阅读了CSS3模块:列表,描述了如何使用自定义文本作为项目符号,但它对我不起作用.我认为,浏览器根本不支持::marker伪元素.

如何在不使用图像的情况下进行操作?

小智 102

使用文本作为项目符号

使用li:before与十六进制转义HTML实体(或纯文本).


我的示例将生成带有复选标记的列表作为项目符号.

CSS:

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

ul li:before
{
    content: '\2713';
    margin: 0 1em;    /* any design */
}
Run Code Online (Sandbox Code Playgroud)

浏览器兼容性

没有测试过自己,但从IE8开始应该支持它.至少那就是quirksmodecss-tricks所说的.

您可以使用条件注释来应用较旧/较慢的解决方案,如图像或脚本.更好的是,同时使用<noscript>图像.

HTML:

<!--[if lt IE 8]>
    *SCRIPT SOLUTION*
    <noscript>
        *IMAGE SOLUTION*
    </noscript>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

关于背景图片

背景图片确实很容易处理,但......

  1. 浏览器支持background-size实际上只是IE9的支持.
  2. HTML文字颜色和特殊(疯狂)字体可以做很多事情,减少HTTP请求.
  3. 脚本解决方案可以只注入HTML实体,让相同的CSS完成工作.
  4. 一个好的重置CSS代码可能会使list-style(更合乎逻辑的选择)更容易.

请享用.

  • 如果 `li` 元素的内容包含在多行中,这将无法正常工作;那些包裹的行不会被正确缩进。 (21认同)
  • `float:left; margin-left:-12px;`on:在关注之前,@ RichardEverett (5认同)

agb*_*gbb 70

编辑

我可能不会再推荐使用图像了.我坚持使用Unicode字符的方法,如下所示:

li:before {
  content: "\2605";
}
Run Code Online (Sandbox Code Playgroud)

老答复

我可能会选择图像背景,它们更加高效,多功能,跨浏览器友好.

这是一个例子:

<style type="text/css">
  ul {list-style:none;} /* you should use a css reset too... ;) */
  ul li {background:url(images/icon_star.gif) no-repeat 0 5px;}
</style>

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

  • 那"效率更高"怎么样?您正在发送一个额外的HTTP请求来获取图像,并且当您加载图像时,总文件会增加,这可以通过使用单个Unicode字符来完成. (47认同)
  • 调整图像大小并不是很好,但是角色在各种尺寸上都是完美的,所以我认为角色更通用:P我认为后缀兼容或者具有最广泛的浏览器支持这个词...... (3认同)
  • 你是对的,可能"高效"不是我应该用的词,如果你正在寻找性能,但使用图像背景肯定比使用文本更通用. (2认同)

小智 35

你可以构建它:

#modal-select-your-position li {
/* handle multiline */
    overflow: visible;
    padding-left: 17px;
    position: relative;
}

#modal-select-your-position li:before {
/* your own marker in content */
   content: "—";
   left: 0;
   position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一项很棒的技巧,因为如果你没有对角色进行绝对定位,那么你最终会将"Bullet"与列表项的其余部分内联.这是非常不像子弹的行为.因此,使用此修复程序,您可以将"子弹"放在列表项左侧,就像使用普通项目符号一样. (4认同)

PHP*_*Pst 18

这是W3C解决方案.你可以在3012年使用它!

ul { list-style-type: "?"; }
/* Sets the marker to a "star" character */
Run Code Online (Sandbox Code Playgroud)

https://drafts.c​​sswg.org/css-lists/#text-markers

  • 我听说在3012年,Internet Explorer终于有效了! (12认同)
  • 大声笑,我觉得在3012年,我们可以做很棒的事情! (2认同)
  • 这适用于Firefox 48,但不适用于Chromium 51或手机/平板电脑.必须使用`li:before`解决方案. (2认同)
  • 作品。女士们、先生们,欢迎来到未来。 (2认同)
  • 感谢未来的回答,但在 2020 年,这适用于 Chrome、Firefox 和 Edge,但不适用于 Safari。 (2认同)

Nic*_*ier 12

不建议使用图像,因为它们在某些设备(带有Retina显示屏的Apple设备)上或放大时可能会出现像素图.使用字符时,您的列表每次都会显得很棒.

这是迄今为止我发现的最佳解决方案.它运行良好,它是跨浏览器(IE 8+).

ul {
    list-style: none;
    padding-left: 1.2em;
    text-indent: -1.2em;
}

li:before {
    content: "?";
    display: block;
    float: left;
    width: 1.2em;
    color: #ff0000;
}
Run Code Online (Sandbox Code Playgroud)

重要的是将字符放在具有固定宽度的浮动块中,以便如果文本太长而无法放在单行上,则文本保持对齐. 1.2em是您想要角色的宽度,根据您的需要进行更改.不要忘记重置ul和li元素的填充和边距.

编辑:请注意,如果您在ul和li中使用不同的字体,"1.2em"大小可能会有所不同:之前.使用像素更安全.


PMO*_*948 8

今天,有一个::marker选择。所以,

li::marker {
  content: "\2605";
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案值得投赞成票,而对其他所有答案都投反对票;)截至二月。2021 年,伪元素 `::marker` 的浏览器覆盖率为 86.58% https://caniuse.com/?search=li%3A%3Amarker (2认同)

小智 6

要添加星号,请使用Unicode字符22C6.

我添加了一个空间,以便li在星星和星星之间留下一点空隙.空间代码是A0.

li:before {
    content: '\22C6\A0';
}
Run Code Online (Sandbox Code Playgroud)