CSS计数器的趣味时光
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计数器属性之前,我一般会用精灵图,用类名来区分序列号图片.这样做尽管可以达到目的,但是很不方便,开发过 ...
随机推荐
- 【Java学习笔记】HashMap子接口---LinkedHashMap
特点: 存入元素的顺序 与 取出元素的顺序相同(与LinkedHashSet类似) import java.util.HashMap; import java.util.Iterator; i ...
- ASP连接数据库登录按钮
(1)在配置文件中加上以下代码: <connectionStrings> <add name="accessconn" connectionString=&quo ...
- 图层的transform属性
Main.storyboard // // ViewController.m // 7A11.图层的transform属性 // // Created by huan on 16/2/4. // ...
- 利用Formdata实现form提交文件上传不跳转页面
作者:幻月九十链接:https://www.zhihu.com/question/19631256/answer/119911045来源:知乎著作权归作者所有,转载请联系作者获得授权. $('form ...
- PyCharm 4.5.4 环境配置
1.去掉“自动保存功能” pycharm默认是自动保存的,习惯自己按 ctrl + s 的可以进行如下设置: 菜单File -> Settings... -> Appearance &am ...
- C#设计模式——工厂方法
一.为什么需要工厂方法 工厂方法可以这么理解.你规定了一个规范,只要符合这个规范.那么就可以按照你的方式进行操作,这样你就无需知道具体操作的对象是什么,具有什么特性等等,可以进行统一化的操作 ...
- ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯
本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...
- JavaScript-冒泡排序
随机生成10个不重复的100以内的整数放入数组,并排序后进行打印<br /> 如: for(var i=0;i<9;i++) { for(var j=i+1;j<9;j++) ...
- 菜鸟学习WCF笔记-概念
背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神 ...
- Leetcode 83 Remove Duplicates from Sorted List 链表
就是将链表中的重复元素去除 我的方法很简单就是如果链表的前后元素相同的话,将后一个元素删除 /** * Definition for singly-linked list. * struct List ...