css魔法:伪元素content内容竟然可以用css函数!

news2024/11/23 10:28:00

🌻 前言

CSS 伪元素用于设置元素指定部分的样式。伪元素中 ::before::after 是最常用的,它们分别用于在dom元素前/后插入内容,本文内容就是关于 ::before 和 ::after 的 content 内容的一些冷门用法展开的。

一般我们在使用伪元素时,content属性只设置过字符串,但是你知道在 content 中可以写css函数吗?但也不是所有css函数都可以使用,这里总结了几种可以用的 css函数: [counter()attr()var()]

tips:可以注意到,可以使用的css函数其实都是返回了字符串,所以像linear-gradient()渐变色这种也是能使用的,只不过这种没有什么意义,没有应用场景。并且在使用 counter()、attr() 函数设置content时,是可以拼接字符串的,是不是很nice✨

话不多说,我们来看看伪元素的 content 究竟可以做些什么?🔍

🎨 案例

1. css文本序号

在写一些文本内容的时候,如果需要在每一段内容前面加上序号。很多小伙伴的常规做法是在 html 里根据index索引设置序号,又或者用:nth-of-type(n)选择器分别从 1 到 n 设置 before 伪元素的content

image.png

其实根本不必这么麻烦,如果你了解css函数 -counter()计数器,就知道加序号是多么简单~

counter() 函数以字符串形式返回当前计数器的值。
counter()函数需要与 counter-increment 和 counter-reset 这两个css属性一起配合使用。counter-increment 用来增加一个计数器,counter-reset 用来重置/初始化计数器的值。

一般我们可以在伪元素的 content 上应用 counter() 函数来显示在页面上,形成序号的效果
关于兼容性:所有主流浏览器现在都支持counter()函数

counter() 函数有以下两个参数:

 counter(countername, counterstyle)
  • countername:指定计数器名称(与 counter-reset 和 counter-increment 属性使用的名称相同);
  • counterstyle:设置计数器样式(可以是 CSS list-style-type 属性值,例如counter(xxx, upper-roman) 是设置序号为大写罗马字母:I, II, III, IV, V, 等)

需要注意的是,可以使用 @counter-style 自定义有序符号规则,同样可以当作counterstyle参数设置为计数器样式。具体使用方法自行查阅 【@counter-style规则传送门】

jcode

2. 纯css实现倒计时

纯css实现倒计时有两种思路:

方案一:使用 steps() 逐帧动画显示content

实现倒计时无非就是使 content 的值从 n 递减到 1 ,那么只需要使用 n秒 的 steps(n,end)逐帧动画即可实现 content 内容每秒变化一次,是不是很简单,关键代码如下:

animation: count 5s steps(5,end) forwards;
 
@keyframes count {
  0%{
    content: "5";
  }
  20%{
    content: "4";
  }
  40%{
    content: "3";
  }
  60%{
    content: "2";
  }
  80%{
    content: "1";
  }
  to{
    content: "Go!";
  }
}

点击运行查看效果 ⬇️ ⬇️ ⬇️

jcode

思考🤔: 很明显,这么做有个缺点,就是你需要几秒到倒计时,就得写几个关键帧修改content,这时候聪明的小伙伴就想到了,为什么不用var()变量设置content内容呢?这样只需要在动画 100% 时设置 变量为0 即可。你实践之后就会发现,var()变量设置content是不会有补间动画的,这时候聪明的小伙伴又想到了,是不是可以用@property规则自定义这个变量实现动画过程,但你查阅@property规则可定义的类型后发现,没有可以使用的类型(content内容必须是个字符串)。
这时候方案二它来了!!!

方案二:使用 counter() 计数器显示content

既然不能用@property自定义一个字符串,那我们可以自定义一个数字,然后用counter-reset把数字转换为字符串,怎么样,是不是十分巧妙😆

实现原理为: 使用@property规则自定义一个变量类型,我这里是 “–time”,然后content值设置为counter()计数器,并使用“–time”这个变量重置计数器值,即实现了 content 显示我们的变量内容,这样只需要写一个n秒的动画,100%关键帧设置变量--time为0即可实现倒计时效果。另外为了在倒计时结束后能够出现 “Go!” 的提示效果,可以使用@counter-style关键字自定义一个symbols符号,在变量变化到0的时候这个计时器样式就生效,强行显示成我们设置的 “Go!” 字符。

点击运行查看效果 ⬇️ ⬇️ ⬇️

jcode

3. 自制输入框

dom元素在设置 contenteditable:true 属性后就会呈现可编辑内容的效果,那么输入框的 placeholder 效果怎么实现呢?

最好的方式就是利用伪元素的 content 作为 placeholder,因为伪元素是作为一个特殊节点插入到dom流中的,他不会以标签形式展现在网页中,而且配合 :empty 选择器可以很轻松做到只有在未输入内容时才显示 placeholder。

jcode

4. 空内容提示

与上一点的原理相同,同样是 :empty 选择器配合伪元素 content 实现列表页为空时的占位提示文字。

image.png

5. 文字提示 Tooltip

content里也可以使用 attr() 函数,没错,就是获取节点 attribute 属性,例如在
链接后自动拼接链接地址。

当然,它还有个更实用的用法,就是制作文字提示 Tooltip 效果。想必现在还是有很多小伙伴在做 tooltip 组件时使用的是普通的dom元素,鼠标hover时让其显示,其实完全可以用伪元素实现,更方便快捷,还更有逼格~

截屏2023-06-09 下午3.27.31.png

jcode

6. 前后加引号

content: open-quote 为设置前引号,content: close-quote 为设置后引号。它是css属性quote在 content 中的应用。虽然没什么应用场景,我能想到的比如设置富文本中某个标签包裹的内容,统一都加上引号,用css就可以快速实现,不然的话还需要在html里一个一个改。

🎁 最后

我是喜欢归纳总结前端相关知识的前端阿彬,尽力持续输出原创优质文章,欢迎点赞关注😘

表情包2.webp

往期文章
# 玩转css逐帧动画,纯css让哥哥动起来💃
# 🕸2023 前端 SEO 无死角解读
# 我给自己搭建的前端导航网站,你们都别用🤪
# 2023 最新最细 vite+vue3+ts 多页面项目架构,建议收藏备用!
# 浅谈 强制缓存/协商缓存 怎么用?
# 2023 前端性能优化清单

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

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

相关文章

基于Java+jsp+servlet的养老院管理系统设计和实现《收藏版》

基于Javajspservlet的养老院管理系统设计和实现《收藏版》 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方…

大麦生成链接 大麦生成订单截图 抢票成功截图

一键生成购票链接 一键生成订单截图 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

微服务工程搭建过程中的注意点

1、父工程pom.xml文件 1:父工程的maven坐标; 2:packaging使用pom; 原因:在Spring Cloud微服务工程中,通常会采用多模块的方式进行开发,父工程的pom文件中的packaging标签设置为pom,是…

操作系统 | 知识梳理 | 复习(上)

目录 📚操作系统概述 🐇操作系统中的抽象概念 📚准备知识 🐇中断输入输出 🐇软件中断 🐇处理器特权级 🐇操作系统的结构 📚程序的结构 🐇运行时视图简介 &…

SQL语句中EXISTS的详细用法大全

SQL语句中EXISTS的详细用法大全 前言一、建表1.在MySQL数据库建表语句2.在ORACLE数据库建表语句 二、在SELECT语句中使用EXISTS1.在SQL中使用EXISTS2.在SQL中使用NOT EXISTS3.在SQL中使用多个NOT EXISTS4.在SQL中使用多个EXISTS5.在SQL中使用NOT EXISTS和EXISTS 三、在DELETE语…

jmeter非gui运行,jtl生成了,但是html报告没有生成

jmeter非gui运行,jtl生成了,但是html报告没有生成,查看log,内容如下: 22:45:00,913 ERROR o.a.j.JMeter: Error generating dashboard: org.apache.jmeter.report.dashboard.GenerationException: Error while proces…

谷歌的passkey是什么?

谷歌的passkey是什么? 谷歌正在研发一种名为“Passkey”的新技术,它将用于用户身份验证。Passkey不同于传统的密码,它采用了硬件加密密钥(如安全密钥或生物识别方式)以及双因素身份验证等技术,可以更好地保…

微信:把元宇宙装进小程序

作为月活13.09亿的国民级应用,微信的每次小升级都很容易形成现象级。2023开年,微信放大招,试图把元宇宙装进小程序。 微信小程序 XR-FRAME 不久前,微信官方在开放社区贴出了“XR-FRAME”开发指南,这是一套为小程序定制…

RocketMQ 快速入门教程,手把手教教你干代码

目录 RocketMQ定义为什么要用消息中间件?应用解耦流量削峰数据分发 RocketMQ各部分角色介绍NameServer主机(Broker)生产者(Producer)消费者(Consumer)消息(Message) 使用RocketMQ的核心概念主题(Topic)消息队列(Message Queue)分组(Group)标签(Tag)偏移量(Offset) 普…

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录 零、学习目标一、Spring MVC 自动配置(一)自动配置概述(二)Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现(一)创建Spring Boot项目 - SpringMvcDemo2021&#xff…

老胡的周刊(第094期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 qrbtf[2] 艺术二维码生成器: qrb…

某学院校园网站的设计与实现(论文+源码)_kaic

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次…

ajax--XML、AJAX简介、express框架使用、AJAX操作的基本步骤

一、XML(可扩展标记语言) XML与HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。 比如有一个学生数据:name“孙悟空”;age18;gender“男”&a…

数字图像处理期末复习习题 SCUEC part3 形态学图像处理专项

1.关于膨胀,腐蚀,开操作,闭操作的证明题 2.腐蚀和膨胀的定义 3.开操作与闭操作的定义 4.击中击不中变换

ubuntu驱动重装

卸载 进入命令行模式 sudo NVIDIA-Linux-x86_64-495.46.run --uninstall安装 进入命令行模式 sudo ./NVIDIA-Linux-x86_64-460.67.run –no-opengl-files –no-x-check –no-nouveau-check选continue installation。 ② 选 NO。 选NO。

源氏木语获得多少个奖项?答案 2023年天猫618淘宝大赢家今日答案与618天猫超级红包怎么领取?

2023年6月12日天猫618淘宝大赢家今日答案 问题:源氏木语获得多少个奖项? 答案:15 2023年淘宝天猫618超级红包怎么领取? 从2023年5月29日开始持续到6月20日,每天都可以打开手机淘宝或天猫,在首页搜索框内…

Open Inventor 2023.1.1 Crack 2022-06-08

Open Inventor 是一组高性能的三维软件开发包(SDK),用于医学、计算机辅助设计与工程、石油、天然气和采矿业这些领域中的专业应用。 其面向对象的应用程序编程接口、可拓展架构以及一整套先进庞大的组件为软件开发者提供一个完美的高级平台&…

教育系统和功能设计

慧享教育系统和功能设计 要求: 1. 在需求分析的基础上,确定项目详细功能; 2. 确定每个功能模块的子功能及详细内容并描述; 3. 完成事务设计和应用设计。 操作步骤: 1.系统结构设计及子系统划分 划分系…

基于html+css的图展示123

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【软考程序员学习笔记】——计算机组成与体系结构

目录 🍊一、进制之间的转换 🍊二、原码、反码、补码和移码 原码 反码 补码 移码 🍊三、浮点数表示法 (1)浮点数表示 (2)两浮点数进行运算的过程 🍊四、校验码 &#xff08…