css before after用法_CSS 伪元素基础知识:content 与counter 实用技巧(二)

9033526f9fb22f07e9b02b03a0732d6a.png

在CSS 伪元素基础知识:before 与after (一),笔者已经介绍过 CSS 里的::before 和::after 这两个伪元素,以及content 相关的用法,这篇将针对content 搭配counter (计数器) 进行一些有趣的应用,相信熟练之后搞不好能做出很好玩的内容。

counter 基本用法

在CSS里头,counter是个很有意思的功能,最常见得就是如果我们使用list清单,样式选择decimal十进制,当清单内容变多的时候数字也会随着递增,底层貌似就是使用counter的原理,也因为counter 所产生的数值并不实际存在于网页的元素内,所以如果我们要在清单元素之外使用,就必须透过::before 或::after的content来实现。

counter最的基本用法一定要有一个父元素和子元素(类似list的原理,比如使用ul包着li ),所以页面布局会类似下面这段html:

钢铁侠 美国队长 雷神索尔

在CSS里头,先针对div父元素使用counter-reset:num;进行计数器初始化的设置,里面num是计数器累以数值计算的设置,接着可以在span::before里面看到counter-increment:num;这一段,这段的作用是把num累加上去,预设数值为加1,接着就通过content这个属性显示出来。

计数器预设的显示语法为:counter(计数器名称, list-style-type)

div{ counter-reset:num;}span{ display:block;}span::before{ counter-increment:num;  content:counter(num) '. ';}
1fb38f86b799cbad47f1447c6a733f77.png

通过指定一开始counter-reset 的起始计数值,还有counter-increment累加的递增数值(步长),还可以指定从某个数值开始计数。

div{ counter-reset:num 3;}span{ display:block;}span::before{ counter-increment:num 2;  content:counter(num) '. ';}
460f78f49c2141f6443f6afa1dbcc81e.png

如果要更换数字的样式,也可以透过计数器的第二个设定值list-style-type来更改,下面的例子就是将样式更改为georgian。

div{ counter-reset:num;}span{ display:block;}span::before{ counter-increment:num;  content:counter(num, georgian) '. ';}
030e4c393d934def4d539c13fa481e2d.png

counter 进阶用法

除了指定单一个变数外,counter 也可以同时指定多个变数,例如下面这段HTML,有三个类别在里面,我分别用span、i 和b 来分类。

钢铁侠 美国队长 雷神索尔 神盾局 神鬼局 神经局 九头蛇 九头牛 九头猪

CSS一开始counter-reset可以指定多个计数器,通过一个空白字符进行分隔,如果空白字符后面跟着数字则是起始值,没有数字预设为1,当这样设定之后,就可以看到不同类别的数字代号就不同。

div{ counter-reset:num numi 2 numb 5;}span, i, b{ display:block;}span::before{ counter-increment:num;  content:counter(num) '. ';}i::before{ counter-increment:numi 2;  content:counter(numi) '. ';}b::before{ counter-increment:numb 5;  content:counter(numb) '. ';}
8169aededa98025ff788658303266b3e.png

如果遇到了层级结构(目录结构),需要一层层的展开( 例如:1 > 1.1 > 1.1.1 ),采用上述的作法可能就会复杂许多,好在counter 还提供了另外一个counters 的功能,目的就是来解决层级结构的麻烦事,在开始前可以先看看通过ul和li组合的清单布局结构:

  • 第一层
    • 第二层
      • 第三层
      • 第三层
      • 第三层
    • 第二层
    • 第二层
  • 第一层
    • 第二层
    • 第二层

传统的清单如果将list-style设为decimal,同样可以具备数字连续的功能,但相对来说要做一些特殊变化就办不到了。

li{ list-style:decimal;}
084c062abb7c76a89deffb5963877a2e.png

通过content 和counters 的搭配,我们就可以告别预设值的困扰,甚至可以在不使用清单ul 和li 的状况下,实现和清单一模一样的效果,举例来说,我们纯粹通过div 模拟一个清单的布局( 仍然必须是有父元素和子元素的概念),里面的样式b 就等于是ul,样式a 就等于是li:

第一层
第二层
第三层
第三层
第三层
第二层
第二层
第一层
第二层
第二层

由于b的外层没有东西,所以一开始要把body 和b 都进行counter reset 的动作,接着通过counters 的使用,让计数器的数值可以一个接着一个放进去,如此一来就可以做到原本清单不容易实现的效果了。

counters 使用语法:counters(计数器名称, 分隔符, list-style-type)

body, .b{ counter-reset:c;}.a::before{ content:counters(c, ".") ":"; counter-increment:c; }div{ margin-left:10px;}
1d460bf2a99052a2dc7ca4c5f0705bc3.png

了解原理之后,通过::before 和::after 的交互应用,就可以做出颇具特色的清单效果。

body, .b{ counter-reset:c;}.a{ box-sizing:border-box; position:relative; line-height:40px;}.a .a{ padding-left:30px;}.a::after{ content:''; box-sizing:border-box; display:inline-block; position:absolute; z-index:-1; top:0; left:0; width:100%; height:40px; margin-left:30px; box-shadow:inset 0 2px #666; background:#eee;}.a::before{ content:counter(c, upper-roman); counter-increment:c; display:inline-block; width:30px; height:40px; background:#666; color:#fff; text-align:center; margin-right:5px;}
fbbc51a79577bdc4a1402b3e9d4c2d4a.png

文章来源:https://www.oxxostudio.tw/articles/201706/pseudo-element-2.html

原文作者:oxxostudio

由于网页为繁体内容,术语描述和话术与我们有差异的问题,笔者在保证不改变原意的基础上做了调整,并在此基础上进行了错误校正,如发现问题,欢迎你的指正

小结

dee53627ac3a1f265edec4fcce2311d5.png

原本网页里面使用的清单列表展示,如果要进行样式的修改、或是一些编号的设置,往往都要通过JavaScript来实现,如果熟练了counter的用法,搞不好纯粹使用CSS 就能取代掉大部分JavaScript也说不定呢,更多的惊喜有待你的发现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

在C语言程序开发中,动态内存分配是不可避免的,而调用 malloc()/free() 库函数实现这一过程是方便的,事实上,在很多C语言程序中,malloc/free 库函数的使用相当频繁,它俩的C语言函数原型如下,请看…

mysql datetime最小值_MySQL的5种时间类型的比较

日期时间类型占用空间日期格式最小值最大值零值表示DATETIME8 bytesYYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00TIMESTAMP4 bytesYYYY-MM-DD HH:MM:SS197001010800012038 年的某个时刻00000000000000DATE4 bytesYYYY-MM-DD1000-01-019999-1…

Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。数据备份与还原第一篇分享给大家,具体内容如下基础概念:备份,将…

mysql数据库云读取_云数据库 MySQL版

{"moduleinfo":{"banner_bigTit":"云数据库 MySQL版读写分离上线","banner_subTit":"自动扩展读写分离,性能提升不止一点","banner_link":"https://rdsnew.console.aliyun.com/console/index#/rd…

mysql查询并设置高亮_慢查询分析调优工具~mysqldumpslow

在日常的业务开发中,MySQL出现慢查询是很常见的,要么说明你家产品的增长性很好,要么就是你的SQL写的太烂了。所以对慢查询SQL进行分析和优化很重要,其中mysqldumpslow是MySQL服务自带的一款很好的分析调优工具。MySQL慢查询日志My…

非法的表达式开始_轮回、开始还是结束?

上节课说到&#xff0c;要打印0-9这十个数字&#xff0c;除了一个一个的 document.write 还有什么办法?下面介绍一个for语法for (var 变量 初始值; 结束判断表达式; 变量递增/递减) { 循环体&#xff0c;用于处理变量;}我们来实操一下for (var c0;c<9;cc1) { do…

sql 统计记录条数后 打印出所有记录_用SQL完成购买行为分析(下篇II)

&#xff08;接《用SQL完成购买行为分析&#xff08;下篇I&#xff09;》内容&#xff09;12&#xff09;查询首条记录为fav&#xff0c;总记录条数为14的记录。将前面getNum(3)红框处替换为12&#xff0c;运行getNum(14)得到第2条记录的数量&#xff1a;替换为11&#xff0c;得…

library的英语怎么读音_library怎么读声音

library的英式读音和美式读音均为&#xff1a;[ˈlaɪbrəri]。library可作名词&#xff0c;其作名词时&#xff0c;中文意思有&#xff1a;图书馆&#xff1b;藏书楼&#xff1b;图书室&#xff1b;资料室&#xff1b;(书、激光唱片等的)个人收藏等含义。一、library 读音英式…

sift线特征提取代码_车道线检测LaneNet

LanNetSegmentation branch完成语义分割,即判断出像素属于车道or背景Embedding branch完成像素的向量表示,用于后续聚类,以完成实例分割H-NetSegmentation branch解决样本分布不均衡车道线像素远小于背景像素.loss函数的设计对不同像素赋给不同权重,降低背景权重.该分支的输出为…

mysql ehcache_MyBatis使用Ehcache作为二级缓存

特别说明&#xff1a;由于二级缓存是基于Mapper的&#xff0c;当你在不同的mapper中查询了相同的数据&#xff0c;例如不同的Mapper中有多表查询时结果中有相同的数据&#xff0c;当其中一个Mapper进行插入更新缓存时&#xff0c;另一个并没有插入更新&#xff0c;那么使用两个…

yii3正式版什么时候发布_华为mate50pro什么时候发布

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。 …

shiro如何保证session不失效_请问在不加锁的情况下如何保证线程安全?

概念compare and swap&#xff0c;解决多线程并行情况下使用锁造成性能损耗的一种机制&#xff0c;CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配&#xff0c;那么处理器会自动将该位置值更新为新值。否则&#xff0c;处理器…

externalreferences 命令在 sdi 模式下不可用_一个适合新手交互式Git命令学习项目

前言在我们日常工作开发中&#xff0c;Git是必不可少的版本控制软件&#xff0c;很多时候我们都用Git来管理我们的项目。比较常用的有Github&#xff0c;Gitlab&#xff0c;Stash等。因此对于Git命令的掌握是我们工作必备的能力。今天分享一个Git命令学习项目&#xff1a;learn…

sqlyong 删除数据能否撤回_数据结构知识点总结

some quoted by Fundebug&#xff1a;代码面试需要知道的8种数据结构(附面试题及答案链接)​zhuanlan.zhihu.comadded with other sources8 种常用数据结构数组栈队列链表图树哈希表priorityqueue1. 数组数组(Array)大概是最简单&#xff0c;也是最常用的数据结构了。其他数据结…

matlab 点云特征_基于点云的3D障碍物检测

击上方“新机器视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达基于点云的3D障碍物检测主要有以下步骤&#xff1a;点云数据的处理基于点云的障碍物分割障碍物边框构建点云到图像平面的投影点云数据的处理KITTI数据集KITTI数据集有四个相…

重定义 不同的基类型_镍及铁镍基耐蚀合金高温合金哈氏合金镍基合金之第一篇概述...

纯镍是一种重要的应用于工业的原材料&#xff0c;它除具有良好 的强度、塑韧性外&#xff0c;在卤族元素及其氢化物活泼性气体、苛 性介质、不含氧和氧化剂的还原性酸介质中还具有良好的耐 蚀性&#xff0c;因此纯镍作为耐蚀金属材料得到广泛应用。此外&#xff0c;由 于提高耐…

cad统计面积长度插件vlx_用了它,画cad施工图再也不加班了!

文尾左下角阅读原文看视频教程好课推荐&#xff1a;1、CAD2014&#xff1a;点击查看 2、室内CAD&#xff1a;点击查看 3、CAD2019&#xff1a;点击查看4、CAD2018&#xff1a;点击查看5、Bim教程&#xff1a;点击查看6、室内手绘&#xff1a;点击查看7、CAD三维&#xff1a;点击…

mysql 视图 查询速度慢_mysql 视图查询速度慢

场景&#xff1a;表 stockpooldata_flashCREATE TABLE stockpooldata_flash (id bigint(15) NOT NULL AUTO_INCREMENT,formula_id int(8) DEFAULT NULL,period_type tinyint(3) DEFAULT NULL,gpMarket int(4) DEFAULT NULL,gpcode varchar(20) DEFAULT NULL,ymd int(11) DEFAUL…

局部页面切换url为什么不变_python爬虫 - 翻页url不变网页的爬虫探究

python爬虫-翻页url不变网页的爬虫探究url随着翻页改变的爬虫已经有非常多教程啦&#xff0c;这里主要记录一下我对翻页url不变网页的探究过程。学术菜鸡第一次写CSDN&#xff0c;请大家多多包容&#xff5e; 如果对你有一点点帮助&#xff0c;请帮我点个赞吧&#xff01;翻页u…

python波峰波谷算法_波动均分算法

波动均分算法by leeenx on 2018-01-11「波动」和「均分」大部分读者朋友是知道的&#xff0c;但看到「波动均分」应该是一头雾水的。其实&#xff0c;这个名词是笔者拼凑出来的。什么是「波动均分」&#xff1f;把指定的数值 A&#xff0c;分成 N 份&#xff0c;此时每份的数值…