如何自定义有序列表中的数字?

gro*_*rom 99 html css html-lists roman-numerals

如何在有序列表中左对齐数字?

1.  an item
// skip some items for brevity 
9.  another item
10. notice the 1 is under the 9, and the item contents also line up
Run Code Online (Sandbox Code Playgroud)

更改有序列表中的数字后面的字符?

1) an item
Run Code Online (Sandbox Code Playgroud)

还有一个CSS解决方案,可以从数字更改为字母/罗马列表,而不是使用ol元素上的type属性.

我最感兴趣的是适用于Firefox 3的答案.

gro*_*rom 96

这是我在Firefox 3,Opera和Google Chrome中使用的解决方案.该列表仍显示在IE7中(但没有关闭括号和左对齐数字):

ol {
  counter-reset: item;
  margin-left: 0;
  padding-left: 0;
}
li {
  display: block;
  margin-bottom: .5em;
  margin-left: 2em;
}
li::before {
  display: inline-block;
  content: counter(item) ") ";
  counter-increment: item;
  width: 2em;
  margin-left: -2em;
}
Run Code Online (Sandbox Code Playgroud)
<ol>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
  <li>Six</li>
  <li>Seven</li>
  <li>Eight</li>
  <li>Nine<br>Items</li>
  <li>Ten<br>Items</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

编辑:由strager包含多行修复

还有一个CSS解决方案,可以从数字更改为字母/罗马列表,而不是使用ol元素上的type属性.

请参阅list-style-type CSS属性.或者在使用计数器时,第二个参数接受list-style-type值.例如,以下将使用上罗马:

li::before {
  content: counter(item, upper-roman) ") ";
  counter-increment: item;
/* ... */
Run Code Online (Sandbox Code Playgroud)


Mar*_*ing 27

样式列表的CSS在这里,但基本上是:

li {
    list-style-type: decimal;
    list-style-position: inside;
}
Run Code Online (Sandbox Code Playgroud)

但是,你可能只能通过钻研的东西,如布局的内部结构来实现后是具体布局这个(请注意,我还没有真正尝试过):

ol { counter-reset: item }
li { display: block }
li:before { content: counter(item) ") "; counter-increment: item }
Run Code Online (Sandbox Code Playgroud)

  • 这使得数字对齐,但文本内容却没有对齐。 (2认同)

Fli*_*imm 14

HTML5:使用value属性(不需要 CSS)

现代浏览器将解释该value属性并按您的预期显示它。请参阅MDN 文档

<ol>
  <li value="3">This is item three.</li>
  <li value="50">This is item fifty.</li>
  <li value="100">This is item one hundred.</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

另请查看MDN<ol>文章,尤其是startand 属性的文档。

  • 这需要更多的点赞,完美的解决方案,谢谢! (3认同)
  • 但是有什么方法可以设置数字的“字体系列”的样式吗? (2认同)

z0r*_*z0r 10

您还可以在HTML中指定自己的数字 - 例如,如果数字由数据库提供:

ol {
  list-style: none;
}

ol>li:before {
  content: attr(seq) ". ";
}
Run Code Online (Sandbox Code Playgroud)

seq使用类似于其他答案中给出的方法使该属性可见.但content: counter(foo)我们不使用,而是使用content: attr(seq):

<ol>
  <li seq="1">Item one</li>
  <li seq="20">Item twenty</li>
  <li seq="300">Item three hundred</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

CodePen中的演示具有更多样式

  • 如果只使用`<li>`上的`value`属性,可以简化这个.例如`<li value ="20">`.那你就不需要任何伪元素了.[演示](http://codepen.io/anon/pen/EPbZJM) (5认同)
  • `seq` 是在任何地方定义的标准属性吗?如果没有,使用 data-seq 不是更好吗? (3认同)
  • @GWB虽然这是有效的(也是一个很好的解决方案),但它仅限于数值,因为列表是有序的。因此,您不能执行类似 `value="4A"` 的操作,因为它不起作用。此外, value 属性可以与 `type` 属性一起使用,但 value 仍然必须是一个数字(因为它在有序集合中工作)。 (2认同)

Ste*_*rks 8

从其他答案中偷了很多这个,但这对我来说在FF3中有效.它有upper-roman均匀的凹痕,一个紧密的支架.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> new document </title>
<style type="text/css">
<!--
ol {
  counter-reset: item;
  margin-left: 0;
  padding-left: 0;
}
li {
  margin-bottom: .5em;
}
li:before {
  display: inline-block;
  content: counter(item, upper-roman) ")";
  counter-increment: item;
  width: 3em;
}
-->
</style>
</head>

<body>
<ol>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
  <li>Six</li>
  <li>Seven</li>
  <li>Eight</li>
  <li>Nine</li>
  <li>Ten</li>
</ol>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)


Mar*_*ing 5

我建议使用:before属性,看看你能用它实现的目标.这将意味着你的代码确实是有限的,以漂亮的新的浏览器,并排除市场仍然使用旧的垃圾浏览器(烦人大)部分,

类似下面的内容,强制固定在项目上.是的,我知道这是那么优雅有自己选择的宽度,但使用CSS布局就像是卧底警察的工作:但是好你的动机,它总是会混乱.

li:before {
  content: counter(item) ") ";
  counter-increment: item;
  display: marker;
  width: 2em;
}
Run Code Online (Sandbox Code Playgroud)

但是你将不得不尝试找到确切的解决方案.


Pet*_*ton 5

如果通过将list-style-type设置为:向数字添加前导零,则数字排列更好:

ol { list-style-type: decimal-leading-zero; }
Run Code Online (Sandbox Code Playgroud)