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

所属分类: 网页制作 / CSS 阅读数: 1513
收藏 0 赞 0 分享

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

初始化CSS计数器

为了好理解,我们使用<OL> 和 <LI> 元素来做演示。首先我们要重置计数器,让它归零,并给它指定一个名称:

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. <ol class="toc">  
  2.  <li>Intro</li>  
  3.  <li>Topic   
  4.   <ol>  
  5.    <li>Subtopic</li>  
  6.    <li>Subtopic</li>  
  7.    <li>Subtopic</li>  
  8.   </ol>  
  9.  </li>  
  10.  <li>Topic   
  11.   <ol>  
  12.    <li>Subtopic</li>  
  13.    <li>Subtopic</li>  
  14.    <li>Subtopic</li>  
  15.   </ol>  
  16.  </li>  
  17.  <li>Closing</li>     
  18. </ol>  

我们这样来写:

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. <ol class="toc">  
  2.  <li>(Item 1)Intro</li>  
  3.  <li>(Item 2)Topic   
  4.   <ol>  
  5.    <li>(Item 2.1)Subtopic</li>  
  6.    <li>(Item 2.2)Subtopic</li>  
  7.    <li>(Item 2.3)Subtopic</li>  
  8.   </ol>  
  9.  </li>  
  10.  <li>(Item 3)Topic   
  11.   <ol>  
  12.    <li>(Item 3.1)Subtopic</li>  
  13.    <li>(Item 3.2)Subtopic</li>  
  14.    <li>(Item 3.3)Subtopic</li>  
  15.   </ol>  
  16.  </li>  
  17.  <li>(Item 4)Closing</li>     
  18. </ol>  

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

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

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

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

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

CSS Code复制内容到剪贴板
  1. <div class="languages">     
  2.   <input id="c" type="checkbox"><label for="c">C</label>   
  3.   <input id="C++" type="checkbox"><label for="C++">C++</label>   
  4.   <input id="C#" type="checkbox"><label for="C#">C#</label>   
  5.   <input id="Java" type="checkbox"><label for="Java">Java</label>   
  6.   <input id="JavaScript" type="checkbox"><label for="JavaScript">JavaScript</label>   
  7.   <input id="PHP" type="checkbox"><label for="PHP">PHP</label>   
  8.   <input id="Python" type="checkbox"><label for="Python">Python</label>   
  9.   <input id="Ruby" type="checkbox"><label for="Ruby">Ruby</label>   
  10. </div>     
  11. <p class="total">     
  12.   Total selected:   
  13. </p>     
  14. .languages {   
  15.   countercounter-reset: characters;   
  16. }   
  17. input:checked {     
  18.   countercounter-increment: characters;   
  19. }   
  20. .total:after {   
  21.   contentcounter(characters);   
  22. }   

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

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

CSS Code复制内容到剪贴板
  1. <div class="numbers">     
  2.   <input id="one" type="checkbox"><label for="one">1</label>   
  3.   <input id="two" type="checkbox"><label for="two">2</label>   
  4.   <input id="three" type="checkbox"><label for="three">3</label>   
  5.   <input id="four" type="checkbox"><label for="four">4</label>   
  6.   <input id="five" type="checkbox"><label for="five">5</label>   
  7.   <input id="one-hundred" type="checkbox"><label for="one-hundred">100</label>   
  8. </div>     
  9. <p class="sum">     
  10.   Sum    
  11. </p>    
  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)

更多精彩内容其他人还在看

CSS配合JavaScript做酷的动态页面效果

  利用CSS配合JavaScript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下CSS配合JS的应用。首先,要搞清楚事件和动作的概念。在客户端脚本中,JavaScript 通过对事件进行响应来获得与用户的交互。例如,当用户单击一个按钮或者在某段文字上移动鼠标
收藏 0 赞 0 分享

WEB标准,Web前端开发工程师必备技术列表

  想要打造并拥有一流的Web产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的"网页套接"是完全不够的。我结合自己的团队配备,特此罗列了Web前端产品工程师所涉及的技能列表如下:   通过许多实际项目,
收藏 0 赞 0 分享

用CSS制作Alpha滤镜测试板

alpha滤镜给制作网页特效提供了较大的创作空间,但由于它控制参数较多,在实际应用时,为了确定一组合适的参数值,不得不反复调整修改,在编辑窗口和预览窗口来回倒腾,甚是麻烦,本文介绍了一种简单的方法。制作一个“Alpha滤镜参数测试板”,在测试板上输入参数
收藏 0 赞 0 分享

非常流行的所谓的气泡窗口

普通的Alt无法自定义风格,而Sweet Titles通过JS脚本与CSS的集合.自定义了这种伪Alt风格. 前一段时间非常流行的,就所谓的气泡窗口(鼠标移到链接处出现的). 我们这里实现的用的是Sweet Titles的插件.显示效果完全由CSS控制.. 先下载Sweet Ti
收藏 0 赞 0 分享

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/
收藏 0 赞 0 分享

CSS教程:CSS中的定位(position)

  使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。   其实,要想控制好层的绝对定位,只要理解CSS中关于定位
收藏 0 赞 0 分享

CSS教程:盒模型(BOX Model)

  如果想熟练掌握DIV和CSS的布局方法,首先要对盒模型有足够的了解。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin),如图1所示。
收藏 0 赞 0 分享

无延迟翻滚的图形与CSS混合风格按钮

  在一个具有图形背景的按钮中添加CSS风格的文本,这种建立按钮的方法结合了具有CSS翻滚(CSS rollover)标记的开发速度和效率,从而有效地提高按钮外表图像的三维效果。   相比于常规的图形按钮,这些图形/CSS混合按钮可易于建立和载入,因为你只需要为空白按钮外面
收藏 0 赞 0 分享

css里expression实现界面对象的批量控制

用过css样式我们就知道, 可以定义一批对象的class属性来指定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的src变成是**_over.jpg?
收藏 0 赞 0 分享

CSS教程:水平对齐(text-align)

  水平对齐(text-align),用以设定元素内文本的水平对齐方式。   1.语法   text-align具体参数如下: 语法:text-align:left|right|center|justify 说明:设定元素内文本的水平对齐方式。 参数:left:左
收藏 0 赞 0 分享
查看更多