栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > Html/CSS > CSS教程

CSS黑魔法之计数器counter的使用技巧

CSS教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计数器(counter),“老一辈”程序员估计对这个东西印象深刻,早期的网站页面上经常会有这个东西,如今这种特征都变成了笑话。CSS里自己实现了一种计数器,很简单,很直接。使用CSS计数器,你可以实现简单的纯CSS的计数功能,并能将其显示到页面上。下面我们简单的看一下CSS计数器是如何使用的!

初始化CSS计数器

为了好理解,我们使用

  1. 元素来做演示。首先我们要重置计数器,让它归零,并给它指定一个名称:

    CSS Code复制内容到剪贴板
    1. ol.slides {   
    2.  countercounter-reset: slideNum;   
    3. }  

    这个计数器叫slideNum,下面的例子都都要使用它。

    CSS计数器的自增

    为了是计数器能够自增,我们需要使用counter-increment,并把计数器的名称跟到后面:

    CSS Code复制内容到剪贴板
    1. ol.slides > li {   
    2.  countercounter-increment: slideNum;   
    3. }  

    这样,在CSS选择器下,每遇到一个符合条件li元素,counter-increment就会被调用一次,计数就是增加1。需要注意的是,这里的CSS选择器里使用了>符号,这样是为了滤掉有可能多重嵌套的li元素。否者你的计数值就会不是你想要的。

    使用计数值

    如果只计数而无法显示,那这个计数器也没多大用处,所以就有了counter()命令来输出计数器里的值,可以用在content属性里:

    CSS Code复制内容到剪贴板
    1. ol.slides li:after {   
    2.  content: "[" counter(slideNum) "]";   
    3. }  

    有趣的是,这个counter()命令还可以接受第二个参数,当作同时计算多个元素时数据的分隔符:

    假设有这样的HTML:

    XML/HTML Code复制内容到剪贴板
    1.   
    2.  
    3. Intro
    4.   
    5.  
    6. Topic   
    7.   
          
      1.    
      2. Subtopic
      3.   
      4.    
      5. Subtopic
      6.   
      7.    
      8. Subtopic
      9.   
      10.   
        
    8.  
    9.   
    10.  
    11. Topic   
    12.   
          
      1.    
      2. Subtopic
      3.   
      4.    
      5. Subtopic
      6.   
      7.    
      8. Subtopic
      9.   
      10.   
        
    13.  
    14.   
    15.  
    16. Closing
    17.      
      

我们这样来写:

CSS Code复制内容到剪贴板
  1. ol.toc, ol.toc ol {   
  2.  countercounter-reset: toc;   
  3. }   
  4. ol li {   
  5.  countercounter-increment: toc;   
  6. }   
  7. .toc li:before {   
  8.  content: "(Item " counters(toc, ".") ")";   
  9. }  

会输出下面的结果

XML/HTML Code复制内容到剪贴板
  1.   
  2.  
  3. (Item 1)Intro
  4.   
  5.  
  6. (Item 2)Topic   
  7.   
        
    1.    
    2. (Item 2.1)Subtopic
    3.   
    4.    
    5. (Item 2.2)Subtopic
    6.   
    7.    
    8. (Item 2.3)Subtopic
    9.   
    10.   
      
  8.  
  9.   
  10.  
  11. (Item 3)Topic   
  12.   
        
    1.    
    2. (Item 3.1)Subtopic
    3.   
    4.    
    5. (Item 3.2)Subtopic
    6.   
    7.    
    8. (Item 3.3)Subtopic
    9.   
    10.   
      
  13.  
  14.   
  15.  
  16. (Item 4)Closing
  17.      
  

你可以发现,当需要显示这种联级嵌套序号时,这种技术是非常的有用的。很像微软WORD里面文档的多重序号。

在 counter-reset 属性中,定义了一个随机 ID,其默认值是0。你可以在 counter-increment 属性中定义另外一个数字,作为计数的步长。

例如:counter-increment: i 2 将值显示偶数。

大多时候,CSS计数器都是配合:after和:before伪元素使用,我曾看到过有人在幻灯片、视频页面和文档里用过CSS计数器。相信你会找到其它可以使用它的地方。

CSS 计数器进阶
利用 CSS 计数器,能统计被用户选择的复选框个数:

CSS Code复制内容到剪贴板
  1. "languages">     
  2.   C   
  3.   C++   
  4.   C#   
  5.   Java   
  6.   Javascript   
  7.   PHP   
  8.   Python   
  9.   Ruby   
  10.      
  11.      
  12.   Total selected:   
  13.      
  14. .languages {   
  15.   countercounter-reset: characters;   
  16. }   
  17. input:checked {     
  18.   countercounter-increment: characters;   
  19. }   
  20. .total:after {   
  21.   content: counter(characters);   
  22. }   

在这个示例中,我们会增加 input:checked 的数量并打印出来。
2016227115748797.gif (617×149)

你还能创建一个小型计算器:

CSS Code复制内容到剪贴板
  1. "numbers">     
  2.   1   
  3.   2   
  4.   3   
  5.   4   
  6.   5   
  7.   100   
  8.      
  9.      
  10.   Sum    
  11.     
  12. .numbers {   
  13.   countercounter-reset: sum;   
  14. }   
  15.   
  16. #one:checked { countercounter-increment: sum 1; }   
  17. #two:checked { countercounter-increment: sum 2; }   
  18. #three:checked { countercounter-increment: sum 3; }   
  19. #four:checked { countercounter-increment: sum 4; }   
  20. #five:checked { countercounter-increment: sum 5; }   
  21. #one-hundred:checked { countercounter-increment: sum 100; }   
  22.   
  23. .sum::after {   
  24.   content: '= ' counter(sum);   
  25. }   

2016227115849334.gif (384×149)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/216067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号