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

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

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

1) an item

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

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

有帮助吗?

解决方案

这是我在 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;
}
<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>

编辑: 包括 strager 的多行修复

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

参考 列表样式类型 CSS 属性。或者,当使用计数器时,第二个参数接受列表样式类型值。例如,以下内容将使用大写罗马字:

li::before {
  content: counter(item, upper-roman) ") ";
  counter-increment: item;
/* ... */

其他提示

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

li {
    list-style-type: decimal;
    list-style-position: inside;
}

然而,您所追求的特定布局可能只能通过深入研究布局的内部结构来实现,例如 (请注意,我还没有真正尝试过):

ol { counter-reset: item }
li { display: block }
li:before { content: counter(item) ") "; counter-increment: item }

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

<ol>
  <li seq="1">Item one</li>
  <li seq="20">Item twenty</li>
  <li seq="300">Item three hundred</li>
</ol>

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

ol {
  list-style: none;
}

ol > li:before {
  content: attr(seq) ". ";
}

CodePen 中的演示具有更多样式

从其他答案中窃取了很多内容,但这对我来说在 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>

我建议使用 :before 属性,看看可以用它实现什么。这意味着您的代码实际上仅限于漂亮的新浏览器,并且不包括仍在使用垃圾旧浏览器的市场(令人烦恼的大)部分,

像下面这样的东西,强制固定在项目上。是的,我知道自己选择宽度不太优雅,但是使用 CSS 进行布局就像卧底警察的工作:无论你的动机多么美好,事情总是会变得混乱。

li:before {
  content: counter(item) ") ";
  counter-increment: item;
  display: marker;
  width: 2em;
}

但你必须进行实验才能找到确切的解决方案。

如果通过设置在数字中添加前导零,数字会排列得更好 列表样式类型 到:

ol { list-style-type: decimal-leading-zero; }

借用并改进 马库斯·唐宁的回答. 。已在 Firefox 3 和 Opera 9 中测试并运行。也支持多行。

ol {
    counter-reset: item;
    margin-left: 0;
    padding-left: 0;
}

li {
    display: block;
    margin-left: 3.5em;          /* Change with margin-left on li:before.  Must be -li:before::margin-left + li:before::padding-right.  (Causes indention for other lines.) */
}

li:before {
    content: counter(item) ")";  /* Change 'item' to 'item, upper-roman' or 'item, lower-roman' for upper- and lower-case roman, respectively. */
    counter-increment: item;
    display: inline-block;
    text-align: right;
    width: 3em;                  /* Must be the maximum width of your list's numbers, including the ')', for compatability (in case you use a fixed-width font, for example).  Will have to beef up if using roman. */
    padding-right: 0.5em;
    margin-left: -3.5em;         /* See li comments. */
}

有的是 类型属性 它允许您更改编号样式,但是,您无法更改数字/字母后面的句号。

<ol type="a">
    <li>Turn left on Maple Street</li>
    <li>Turn right on Clover Court</li>
</ol>

文档说关于 list-style-position: outside

CSS1 没有指定标记框的精确位置,并且出于兼容性原因,CSS2 仍然同样不明确。为了更精确地控制标记框,请使用标记。

该页面的更上方是有关标记的内容。

一个例子是:

       LI:before { 
           display: marker;
           content: "(" counter(counter) ")";
           counter-increment: counter;
           width: 6em;
           text-align: center;
       }

没有...只需使用 DL:

dl { overflow:hidden; }
dt {
 float:left;
 clear: left;
 width:4em; /* adjust the width; make sure the total of both is 100% */
 text-align: right
}
dd {
 float:left;
 width:50%; /* adjust the width; make sure the total of both is 100% */
 margin: 0 0.5em;
}

我有。请尝试以下操作:

<html>
<head>
<style type='text/css'>

    ol { counter-reset: item; }

    li { display: block; }

    li:before { content: counter(item) ")"; counter-increment: item; 
        display: inline-block; width: 50px; }

</style>
</head>
<body>
<ol>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
</ol>
</body>

问题是这个 确实 不适用于较旧或不太兼容的浏览器: display: inline-block 是一个非常新的财产。

又快又脏 替代解决方案。您可以将制表字符与预格式化文本一起使用。这是一种可能性:

<style type="text/css">
ol {
    list-style-position: inside;
}
li:first-letter {
    white-space: pre;
}
</style>

和你的html:

<ol>
<li>    an item</li>
<li>    another item</li>
...
</ol>

请注意,之间的空间 li 标签和文本的开头是制表符(当您在记事本中按 Tab 键时得到的字符)。

如果您需要支持旧版浏览器,您可以这样做:

<style type="text/css">
ol {
    list-style-position: inside;
}
</style>

<ol>
    <li><pre>   </pre>an item</li>
    <li><pre>   </pre>another item</li>
    ...
</ol>

从概念的角度来看,其他答案更好。但是,您可以在数字左侧填充适当数量的“ ”以使它们对齐。

* 笔记:我一开始并没有意识到正在使用编号列表。我认为该列表是明确生成的。

我将在这里给出我通常不喜欢阅读的答案,但我认为,由于还有其他答案告诉您如何实现您想要的目标,因此重新思考您想要实现的目标是否真的是件好事,这可能会很好一个好主意。

首先,您应该考虑以非标准方式显示项目(使用与提供的分隔符不同的分隔符)是否是个好主意。

我不知道其中的原因,但我们假设你有充分的理由。

这里提出的实现方法包括将内容添加到标记中,主要是通过 CSS :before 伪类。此内容实际上是在修改您的 DOM 结构,向其中添加这些项目。

当您使用标准“ol”计数时,您将获得一个渲染内容,其中“li”文本可选择,但其前面的数字不可选择。也就是说,标准编号系统似乎更多的是“装饰”而不是真正的内容。如果您使用例如“:before”方法添加数字内容,则该内容将是可选的,因此,会执行不需要的复制/粘贴问题,或者屏幕阅读器的可访问性问题,该屏幕阅读器将另外读取此“新”内容到标准计数系统。

也许另一种方法是使用图像来设置数字的样式,尽管这种替代方案会带来自己的问题(禁用图像时不会显示数字,数字的文本大小不会改变,...)。

无论如何,这个答案的原因不仅仅是提出这种“图像”替代方案,而是让人们思考尝试改变有序列表的标准计数系统的后果。

此代码使编号样式与 li 内容的标题相同。

<style>
    h4 {font-size: 18px}
    ol.list-h4 {counter-reset: item; padding-left:27px}
    ol.list-h4 > li {display: block}
    ol.list-h4 > li::before {display: block; position:absolute;  left:16px;  top:auto; content: counter(item)"."; counter-increment: item; font-size: 18px}
    ol.list-h4 > li > h4 {padding-top:3px}
</style>

<ol class="list-h4">
    <li>
        <h4>...</h4>
        <p>...</p> 
    </li>
    <li>...</li>
</ol>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top