HTML/CSS多级嵌套列表编号

10

是否有一种使用纯HTML和CSS列表(<ul><ol>)实现以下编号的方法?

1. Link 1
2. Link 2
3. Link 3
    3.1. Link 3.1
    3.2. Link 3.2
    3.3. Link 3.3
4. Link 4
    4.1. Link 4.1
        4.1.1 Link 4.1.1
        4.1.2 Link 4.1.2
5. Link 5

提前致谢!


http://www.w3schools.com/cssref/tryit.asp?filename=trycss_gen_counter-reset - Bart
2个回答

21

你可以使用CSS 计数器

ol {
    counter-reset: section;
    list-style-type: none;
}

li:before {
    counter-increment: section;
    content: counters(section, ".") ". Link " counters(section, ".") " ";
}

工作演示 (也可在 JSBin 上查看):

ol {
  counter-reset: section;
  list-style-type: none;
}

li:before {
  counter-increment: section;
  content: counters(section, ".") ". Link " counters(section, ".") " ";
}
<ol>
  <li></li>
  <li></li>
  <li>
    <ol>
      <li></li>
      <li></li>
      <li></li>
    </ol>
  </li>
  <li>
    <ol>
      <li>    
        <ol>
        <li></li>
        <li></li>
        </ol>
      </li>
    </ol>
  </li>
  <li></li>
</ol>


1
我应该指出,:before:after 是伪元素,应该使用双冒号 (::before),尽管在 IE8 中无法工作。 - Bart
2
太好了!非常感谢你! - MrUpsidown
@Bart CSS计数器CSS2.1的一部分,也适用于IE8。但是关于伪元素:早期版本的Web浏览器(IE8,Opera4-7)使用单个冒号表示伪元素伪类,因此我们习惯于使用单个冒号来支持旧版浏览器。 - Hashem Qolami
这种解决方案似乎存在问题 - 数字与后面的文本合并在一起。这看起来不太好。 - Ivan
@Ivan,你可以通过将ol的位置设置为relative,li:before的位置设置为absolute,并根据需要进行定位来创建解决方法。 - Tauri28

0
<style>
OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, ".") " "; counter-increment: item }
</style>
<html>
<body>

<ol>
  <li>Link 1</li>
  <li>Link 2</li>
  <li>Link 3
<ol >
  <li>Link 3.1</li>
  <li>Link 3.2</li>
  <li>Link 3.3
<ol >
  <li>Link 3.3.1</li>
  <li>Link 3.3.2</li>
  <li>Link 3.3.3</li>
</ol>
</li>
</ol>
</li>
</ol>

</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接