有序列表能否使用CSS生成看起来像1.1、1.2、1.3(而不只是1,2,3,...)的结果?到目前为止,使用list-style-type:decimal
仅产生了1、2、3,而不是1.1、1.2、1.3。
有序列表能否使用CSS生成看起来像1.1、1.2、1.3(而不只是1,2,3,...)的结果?到目前为止,使用list-style-type:decimal
仅产生了1、2、3,而不是1.1、1.2、1.3。
Answers:
您可以使用计数器来这样做:
以下样式表编号嵌套列表项,如“ 1”,“ 1.1”,“ 1.1.1”等。
OL { counter-reset: item } LI { display: block } LI:before { content: counters(item, ".") " "; counter-increment: item }
例
ol { counter-reset: item }
li{ display: block }
li:before { content: counters(item, ".") " "; counter-increment: item }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
有关更多信息,请参见嵌套计数器和作用域。
li:before
:content: counters(item, ".")". ";
此页面上的解决方案均不能在所有级别和长(包装)段落中正确且普遍地使用。由于标记的大小可变(1,。,1.2、1.10、1.10.5等),实现一致的缩进确实很棘手;它不能只是“伪造”的,甚至不能为每个可能的压痕级别使用预先计算的边距/填充。
我终于想通了,解决实际工作,不需要任何JavaScript。
已在Firefox 32,Chromium 37,IE 9和Android浏览器上进行了测试。在IE 7及更高版本上不起作用。
CSS:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ". ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") " ";
}
选择的答案是一个很好的开始,但是从本质list-style-position: inside;
上讲,它会强制在列表项上设置样式,使包裹的文本难以阅读。这是一个简单的解决方法,它还可以控制数字和文本之间的边距,并根据默认行为将数字右对齐。
ol {
counter-reset: item;
}
ol li {
display: block;
position: relative;
}
ol li:before {
content: counters(item, ".")".";
counter-increment: item;
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
JSFiddle: http : //jsfiddle.net/3J4Bu/
ol
行为,它仅在每个数字的末尾添加一个句点。可以通过"."
从content
属性中删除最后一个来轻松删除它,但这对我来说有点奇怪。
此处发布的解决方案对我而言效果不佳,因此我将这个问题和以下问题进行了混合:是否可以在HTML中创建多级有序列表?
/* Numbered lists like 1, 1.1, 2.2.1... */
ol li {display:block;} /* hide original list counter */
ol > li:first-child {counter-reset: item;} /* reset counter */
ol > li {counter-increment: item; position: relative;} /* increment counter */
ol > li:before {content:counters(item, ".") ". "; position: absolute; margin-right: 100%; right: 10px;} /* print counter */
结果:
注意:如果您希望查看源代码或此帖子中的内容,请截图:http : //estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
注意:使用CSS 在现代浏览器中创建嵌套编号。请参阅已接受的答案。以下内容仅出于历史目的。counters
如果浏览器支持content
和counter
,
.foo {
counter-reset: foo;
}
.foo li {
list-style-type: none;
}
.foo li::before {
counter-increment: foo;
content: "1." counter(foo) " ";
}
<ol class="foo">
<li>uno</li>
<li>dos</li>
<li>tres</li>
<li>cuatro</li>
</ol>
.foo > ol > li
。
counters()
上面示例中的counter()
函数代替函数。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Sandro Alvares - KingRider">
</head>
<body>
<style type="text/css">
li.title {
font-size: 20px;
font-weight: lighter;
padding: 15px;
counter-increment: ordem;
}
.foo {
counter-reset: foo;
padding-left: 15px;
}
.foo li {
list-style-type: none;
}
.foo li:before {
counter-increment: foo;
content: counter(ordem) "." counter(foo) " ";
}
</style>
<ol>
<li class="title">TITLE ONE</li>
<ol class="foo">
<li>text 1 one</li>
<li>text 1 two</li>
<li>text 1 three</li>
<li>text 1 four</li>
</ol>
<li class="title">TITLE TWO</li>
<ol class="foo">
<li>text 2 one</li>
<li>text 2 two</li>
<li>text 2 three</li>
<li>text 2 four</li>
</ol>
<li class="title">TITLE THREE</li>
<ol class="foo">
<li>text 3 one</li>
<li>text 3 two</li>
<li>text 3 three</li>
<li>text 3 four</li>
</ol>
</ol>
</body>
</html>
当有两个列表,第二个列表位于DIV中时,我遇到了一些问题。第二个列表应从1开始,而不是2.1。
<ol>
<li>lorem</li>
<li>lorem ipsum</li>
</ol>
<div>
<ol>
<li>lorem (should be 1.)</li>
<li>lorem ipsum ( should be 2.)</li>
</ol>
</div>
http://jsfiddle.net/3J4Bu/364/
编辑: 我通过此http://jsfiddle.net/hy5f6161/解决了问题
在不久的将来,您也许可以使用::marker
psuedo元素在仅一行代码中获得与其他解决方案相同的结果。
请记住检查浏览器兼容性表,因为这仍然是一项实验性技术。目前,仅从版本68开始编写Firefox和Firefox for Android(支持Firefox)。
这是一个片段,如果在兼容的浏览器中尝试过,它将可以正确呈现:
::marker { content: counters(list-item,'.') ':' }
li { padding-left: 0.5em }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
以下为我工作:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ") ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") ") ";
}
查看:http : //jsfiddle.net/rLebz84u/2/
或这个http://jsfiddle.net/rLebz84u/3/ 并附有更多合理的文字
如果要先调整其他CSS的大小,这是正确的代码。
<style>
li.title {
font-size: 20px;
counter-increment: ordem;
color:#0080B0;
}
.my_ol_class {
counter-reset: my_ol_class;
padding-left: 30px !important;
}
.my_ol_class li {
display: block;
position: relative;
}
.my_ol_class li:before {
counter-increment: my_ol_class;
content: counter(ordem) "." counter(my_ol_class) " ";
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
li.title ol li{
font-size: 15px;
color:#5E5E5E;
}
</style>
在html文件中。
<ol>
<li class="title"> <p class="page-header list_title">Acceptance of Terms. </p>
<ol class="my_ol_class">
<li>
<p>
my text 1.
</p>
</li>
<li>
<p>
my text 2.
</p>
</li>
</ol>
</li>
</ol>