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计数器。
多个计数器
用不同的名字你就可以有多个计数器。这个例子有两个计数范围重叠的计数器,sections和boxes:
相关的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计数器是精心设计的,但生产环境中我不会原封不动地使用它们。
CSS计数器的趣味时光
CSS计数器的趣味时光的更多相关文章
-
转载:CSS计数器的趣味时光之css计算数据
CSS计数器是“啊太好了,竟不知道CSS可以做这啊”这类非常有趣的众多特性之一.简言之,用CSS使你持续某增加某个量,而无需JavaScript. 简单计数器 我们从这个简单的分页示例开始: 你见到的 ...
-
css计数器详解
什么是css计数器 体验更佳排版请戳原文链接:http://blog.liuxianan.com/css-counters.html 就是采用css给一些html元素自动生成编号,比如类似1.3.2这 ...
-
CSS计数器
使用CSS计数器就像使用变量一样. 它有以下几个属性: counter-reset 创建或重置计数器 counter-increment 增长计数器 content 生成内容 counter() 将计 ...
-
排行榜妙用——CSS计数器
碰到的坑 小伙伴你们是否有碰到以下的情况,排行榜前3名的样式不一样,你们是怎么处理的么?
-
CSS计数器妙用
做web的经常会遇到类似排行榜的需求, 特别是要求前n名的样式和后面人不一样. 通常大多数人对于这个需求的做法都是在后端处理好排名名次, 在前端填入内容, 然后针对前n名做特殊的样式处理. 但是这样有 ...
-
CSS计数器(序列数字字符自动递增)详解———张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=4303 一.挖坟不可耻 ...
-
css计数器 及 鼠标经过从中间扩散一个矩形(正方形长方形均可)
<!DOCTYPE html> <html> <head> <title>css计数器--兼容IE8</title> <meta ch ...
-
CSS计数器:counter
最近的需求,明星字体销售排行榜中,需要对字体的销售情况进行排序. 在早期,只有ol和ul可以对子元素li进行排序:如果不使用这两个标签,就由前台开发去手动填写序号. 当然,在这个需求中,数据不是实时更 ...
-
CSS 计数器详解
在前端开发中总少不了列表项,对于列表项序号,射鸡师一般会列出个1,2,3...序号.在不了解css计数器属性之前,我一般会用精灵图,用类名来区分序列号图片.这样做尽管可以达到目的,但是很不方便,开发过 ...
随机推荐
-
JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上
众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...
-
65279 !!!BOM
java.lang.NumberFormatException: For input string: "1".莫名其妙的String的第一个字符,是个空格样的东西,但绝对不是空格, ...
-
使用XmlInclude解决WebService调用时无法识别子类的异常
一.定义抽象类及子类,WebMethod实际返回子类参数 //使用XmlInclude解决WebService调用时无法识别子类的异常 [System.Xml.Serialization.XmlInc ...
-
ASP.NET MVC3 系列教程 - Razor视图引擎基础语法
http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...
-
(大数据工程师学习路径)第二步 Vim编辑器----查找替换
一.字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换 ...
-
Actor模型及原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
-
树莓派 无屏幕 安装Ubuntu系统 无头安装 无显示器 用网线
能看到此篇博客的人说明都尝试失败了,会发现内存卡刷入Ubuntu后,无法通过ssh操作树莓派.是因为官方的ubuntu系统在初次运行时需要设定一些东西,类似windows第一次启动也需要设置那样,如果 ...
-
firefox(火狐)和Chrome(google)浏览器清空缓存操作的方法指引
摘要说明: 1.系统做升级更新,更新了css和js 2.系统更新有,因为缓存问题,有客户反馈新增功能不能使用 3.所以要清空缓存,提供火狐和谷歌浏览器清空缓存的操作指引 4.附:代码层面的清空缓存方案 ...
-
spring依赖注入之手工装配
2010-09-05 在spring中手工装配依赖对象,可以有两种方式: 1,在spring配置文件中,通过bean节点下配置,比如: <bean id="service" ...
-
浅谈 iOS 与 H5 的交互- JavaScriptCore 框架
前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCo ...