CSS 计数器

CSS 计数器的值通过使用 counter-reset 和 counter-increment 操作,在 content 上应用 counter() 或 counters()函数来显示在页面上。
counter-reset:使用CSS计数器之前,必须重置一个值,默认是0(任意整数,若不是整数则默认为:0)(这里的0是指计数器的初始值,而不是指阿拉伯
数字0,如计数器计算的是字母,那么0就代表 a/A,如计数器计算的是中文的数字,那么0就代表 一/壹,如计算罗马数字则代表 i/
I,以此类推)
counter-increment:计数器每次增加/减少的差值(任意整数)(如初始值为:a,差值为:3,那么下一个值就为:d)
counter()/counters():计数器函数(通过调用计数器函数来实现值的增加/减少)
counter(计数器名称 [,风格类型]),函数计数器不会嵌套,counters(计数器名称 ,嵌套时候的拼接字符串 [,风格类型]),函数计数器会嵌套),计数器会嵌套
本质上CSS计数器是由CSS维护的变量,这些变量可能根据CSS规则增加以跟踪使用次数。CSS 计数器有两个计数器函数: counter() 和 counters()。
下面通过例子说明:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>CSS Counter/Counters</title>
  <style type="text/css">
    /*Counter*/
    /*使用CSS计数器之前,必须重置一个值,默认是0(任意整数,若不是整数则默认为:0)。使用counter()/counters()函数来给元素增加计数器。 */
    /*为每个 .counter 下的 ol创建计数器实例 countA*/
    .counter ol{      
      /*计数器初始值为默认为起始值:0(任意整数,若不是整数则默认为:0)*/
      counter-reset: countA 0;/*下面设置计数器 countB增加的差值为:1 ,0+1=1,因此第一个值与初始值的差值为:1 */
      
      /*列表默认风格类型是阿拉伯数字*/
      /* list-style-type: none;       */
      /* list-style-type: disc;       */
    }

    /*增加计数器的当前实例的值 countA*/
    .counter ol li{
      color: red;
      /*计数器每次增加的差值为 1(如:1-->2,a-->b,I-->II等) 负数则递减*/
      counter-increment: countA 1;
    }

    /*添加并显示计数器,使用 counter()函数,不嵌套*/
    .counter ol li::before{
      color: black;

      /*counter(计数器名称 [,风格类型])*/
      content: counter(countA) " ~ ";/*默认数字*/
      content: counter(countA,lower-alpha) " ~ ";/*小写字母*/
      content: counter(countA,upper-roman) " ~ ";/*大写罗马数字*/      
    }

    /*Counters*/
    /*使用CSS计数器之前,必须重置一个值,默认是0(任意整数,若不是整数则默认为:0)。使用counter()/counters()函数来给元素增加计数器。 */
    /*为每个 .counters 下的 ol创建计数器实例 countB*/
    .counters ol{
      /*计数器初始值为默认为起始值:0(任意整数,若不是整数则默认为:0*/      
      counter-reset: countB -1;/*下面设置计数器 countB增加的差值为:2 ,-1+2=1,因此第一个值与初始值的差值为:1 */

      list-style-type: cjk-heavenly-stem;
    }
    .counters ol li::first-letter{
      color: black;
    }

    /*增加计数器的当前实例的值 countB*/
    .counters ol li{
      color: red;

      /*计数器每次增加的差值为 2(如:1-->3,a-->c,I-->III等) 负数则递减*/
      counter-increment: countB 2;
    }

    /*添加并显示计数器,使用 counters()函数,会嵌套,当前计数器的值会嵌套在它的上一级计数器的值的后面*/    
    .counters ol li::before{
      color: black;

      /*counters(计数器名称 ,嵌套时候的拼接字符串 [,风格类型])*/
      content: counters(countB,"+  ",upper-alpha) " ";
    }



  </style>
</head>
  <em>counter() 没有嵌套,按设置的值依次增加</em>
  <div class="counter">
    <ol>
      <li>ouuter li 1 ,这一级的计数器为:I (因为: .counters ol{ counter-reset: countB 0; })
        <ol>
          <li>middle li 1 ,这一级的计数器为:I (因为: .counters ol{ counter-reset: countB 0; })</li>
          <li>middle li 2</li>
          <li>middle li 3
            <ol>
              <li>inner li 1 ,这一级的计数器为:I (因为: .counters ol{ counter-reset: countB 0; })</li>
              <li>inner li 2</li>
              <li>inner li 3</li>
            </ol>
          </li>          
        </ol>
      </li>

      <li>ouuter li 2</li>
      <li>ouuter li 3</li>
    </ol>
  </div>

  <em>counters() 会嵌套,当前计数器的值会嵌套在它的上一级计数器的值的后面</em>
  <div class="counters">
      <ol>
        <li>ouuter li 1
          <ol>
            <li>middle li 1 ,上一级的计数器为: A ,这一级的计数器为:A (因为: .counters ol{ counter-reset: countB 0; }) ,嵌套连接符号为:+ ,得到:A+ A</li>
            <li>middle li 2</li>
            <li>middle li 3
              <ol>
                <li>inner li 1 ,上一级的计数器为: A+ E ,这一级的计数器为:A (因为: .counters ol{ counter-reset: countB 0; }) ,嵌套连接符号为:+ ,得到:A+ E+ A</li>
                <li>inner li 2</li>
                <li>inner li 3
                  <ol>
                    <li>hi 1 ,上一级的计数器为: A+ E+ E ,这一级的计数器为:A (因为: .counters ol{ counter-reset: countB 0; }) ,嵌套连接符号为:+ ,得到:A+ E+ E+ A</li>
                    <li>hi 2</li>
                    <li>hi 3</li>
                  </ol>
                </li>
              </ol>
            </li>          
          </ol>
        </li>
  
        <li>ouuter li 2</li>
        <li>ouuter li 3</li>
      </ol>
    </div>

</html>
运行结果:





posted @ 2018-11-26 11:00  ノ→_→(←_←  阅读(288)  评论(0编辑  收藏  举报