CSS计数器是“啊太好了,竟不知道CSS可以做这啊”这类非常有趣的众多特性之一。简言之,用CSS使你持续某增加某个量,而无需JavaScript。

简单计数器

我们从这个简单的分页示例开始:

你见到的这些数字不是硬编码在HTML中,它们是以下CSS生成的:

1
2
3
4
5
6
7
8
9
10
11
body {
    counter-reset: pages; // initialize counter
}
 
a {
    counter-increment: pages; // increment counter
}
 
a::before {
    content: counter(pages); // display counter
}

计数属性遵循“文档出现顺序”的规则。首先遇到 Body 元素,初始化一个叫pages的计数器。然后遇到一个 a 元素就增加并显示pages计数器。

多个计数器

用不同的名字你就可以有多个计数器。这个例子有两个计数范围重叠的计数器,sectionsboxes

相关的CSS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
body {
    counter-reset: sections boxes;
}
 
section {
    counter-increment: sections;
}
 
section::before {
    content: 'Section ' counter(sections);
}
 
.box {
    counter-increment: boxes;
}
 
.box::before {
    content: counter(boxes, upper-roman);
}

这里你可以看到用于立即初始化多个计数器的语法(第2行)。别致一点,boxes计数器显示为 upper-roman(译者注:大写罗马数字) (第18行)。 display 的所有参数选项和 list-style-type 属性是一样的,这里是文档

统计用户选择

现在我们做些有趣的事情。计数属性可以被置于像 :checked 的伪类选择器中(译者注:原文为pseudo-selectors,但一般写作pseudo-classes selectors,故照例译为伪类选择器)。这使得计数器可以通过复选框反映用户的选择。下例是统计用户选了多少项。

CSS只是少许修改前面例子中的。唯一的区别是我们在伪类选择器 (input:checked) 中自增并仅在专门的 .total 元素中显示。

1
2
3
4
5
6
7
8
9
10
11
body {
    counter-reset: characters;
}
 
input:checked {
    counter-increment: characters;
}
 
.total::after {
    content: counter(characters);
}

控制增量

并非必须以1为量自增。可以按你增加任何的量。它们甚至可以负增长。以前面的例子为基础,这个例子为每个选择器设置了特殊的增量。

语法足够简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
body {
    counter-reset: sum;
}
 
#a:checked { counter-increment: sum 64; }
#b:checked { counter-increment: sum 16; }
#c:checked { counter-increment: sum -32; }
#d:checked { counter-increment: sum 128; }
#e:checked { counter-increment: sum 4; }
#f:checked { counter-increment: sum -8; }
 
.sum::before {
    content: '= ' counter(sum);
}

回到正题,你也可以控制计数器的初始值。

1
2
3
body {
    counter-reset: kittens 41; // starting out with 41 kittens
}

Potential Gotcha

display:none 的元素不会触发计数。如果你想隐藏一个元素但仍然触发计数,你必须用另一种方式隐藏。这是一种方式:

1
2
3
4
input {
    position: absolute;
    left: -9999px;
}

可能你已经注意到了,这正是我在最后两个例子中所做的。为了演示效果,我隐藏了当前的复选框,但仍然需要它们被选时而计数。

结束语

太好了,浏览器支持CSS计数。普大喜奔~

CSS计数器神奇,但也别忘了我们的老朋友<ol>和<li>。在基本列表中标序它们还是不错的。CSS计数器是取巧的方式,特别是因为它们在任何元素上都起作用,让你在语法和语义上更灵活。

更新:我应该提及无障碍阅读。CSS计数依赖于伪类元素中生成的内容。某些屏幕的读者会阅读到,某些则不会。因此,那些关键的内容最好不要依赖伪类元素。尽管示例教学的CSS计数器是精心设计的,但生产环境中我不会原封不动地使用它们。

来源:http://www.cnblogs.com/ranzige/archive/2015/06/10/4565123.html

转载:CSS计数器的趣味时光之css计算数据的更多相关文章

  1. CSS计数器的趣味时光

    CSS计数器是“啊太好了,竟不知道CSS可以做这啊”这类非常有趣的众多特性之一.简言之,用CSS使你持续某增加某个量,而无需JavaScript. 简单计数器 我们从这个简单的分页示例开始: 你见到的 ...

  2. CSS计数器(序列数字字符自动递增)详解———张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=4303 一.挖坟不可耻 ...

  3. css计数器详解

    什么是css计数器 体验更佳排版请戳原文链接:http://blog.liuxianan.com/css-counters.html 就是采用css给一些html元素自动生成编号,比如类似1.3.2这 ...

  4. CSS 计数器详解

    在前端开发中总少不了列表项,对于列表项序号,射鸡师一般会列出个1,2,3...序号.在不了解css计数器属性之前,我一般会用精灵图,用类名来区分序列号图片.这样做尽管可以达到目的,但是很不方便,开发过 ...

  5. 使用CSS计数器美化数字有序列表

    在web设计中,使用一种井井有条的方法来展示数据是十分重要的,这样用户就可以很清晰的理解网站所展示的数据结构和内容,使用有序列表就是实现数据有组织的展示的一种简单方法. 如果你需要更加深入地控制有序列 ...

  6. CSS计数器

    使用CSS计数器就像使用变量一样. 它有以下几个属性: counter-reset 创建或重置计数器 counter-increment 增长计数器 content 生成内容 counter() 将计 ...

  7. 排行榜妙用——CSS计数器

    碰到的坑 小伙伴你们是否有碰到以下的情况,排行榜前3名的样式不一样,你们是怎么处理的么?

  8. CSS计数器妙用

    做web的经常会遇到类似排行榜的需求, 特别是要求前n名的样式和后面人不一样. 通常大多数人对于这个需求的做法都是在后端处理好排名名次, 在前端填入内容, 然后针对前n名做特殊的样式处理. 但是这样有 ...

  9. 一款纯css实现的垂直时间线效果

    今天给大家分享一款纯css实现的垂直时间线效果.垂直时间线适合放在类似任务时间安排的网页上.该实现采用了蓝色作为主题色,界面效果还不错.一起看下效果图: 实现的代码. html代码: ... 阅读原文 ...

随机推荐

  1. phpcms 标签

    都说pc标签{pc:content参数名="参数值"参数名="参数值"参数名="参数值"} 但是 参数名对应的具体参数值有那些,菜鸟就不知道 ...

  2. 理解Java中的引用传递和值传递

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...

  3. BlueTooth: 蓝牙基础知识进阶——链路控制操作

    转自:http://blog.csdn.net/augusdi/article/details/25887395 七链路控制操作 链路控制操作就是用来描述一个设备是如何加入piconet又是如何从一个 ...

  4. PHP获取远程图片并调整图像大小(转)

    <?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整 ...

  5. Jquery 自定义弹窗等待

    (function ($) { $.extend({ //弹窗蒙层 ShowLoadDialog : function () { ) { var cusrtxt = $("<div i ...

  6. Python科学计算发行版—Anaconda

    Python是一种强大的编程语言,其提供了很多用于科学计算的模块,常见的包括numpy.scipy和matplotlib.要利用Python进行科学计算,就需要一一安装所需的模块,而这些模块可能又依赖 ...

  7. 网站通用登录模块代码 分类: ASP.NET 2014-12-06 10:49 615人阅读 评论(0) 收藏

    1.HTML部分:     <form id="form1" runat="server">     <script src=".. ...

  8. 网络模拟器WANem使用配置图文教程

    转自:http://blog.csdn.net/zm_21/article/details/25810263 WANem简介 由于公司在一些场合需要模拟真实的网络环境,如时延,丢包,抖动等,虽然使用L ...

  9. CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想

    http://codeforces.com/problemset/problem/735/D 题意是..一个数n的贡献是它的最大的因子,这个因子不能等于它本身 然后呢..现在我们可以将n拆成任意个数的 ...

  10. zookeeper源码分析二FASTLEADER选举算法

    如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是"electionAlg",其中1 ...