神奇的CSS,实现自动补全字符串!

本篇文章给大家介绍使用css的实用小技巧,了解一下css自动补全字符串的几种方法,希望对大家有所帮助!

神奇的CSS,实现自动补全字符串!

很多时候都会碰到字符串补全的需求,典型的例子就时间或者日期中的补零操作,例如

2021-12-312022-03-03

通常的做法是

if (num < 10) {  num = '0' + num}

后来,JS 中出现了原生的补全方法padStart()padEnd(),如下

立即学习“前端免费学习笔记(深入)”;

'3'.padStart(2, '0')// 结果是 ’03‘'12'.padStart(2, '0')// 结果是 ’12‘

其实呢,在 CSS 中也是可以实现这样的效果的,并且有多种方案,下面一起看看吧,相信能有不一样的体会。【推荐学习:css视频教程】

一、flex-end 对齐

先介绍一个比较容易理解的方案,也非常简单,假设 HTML 是这样的

2-28

一般情况下,还会设置等宽字体,看起来更加协调、美观

span{  font-family: Consolas, Monaco, monospace;}

1.png

我们需要在数字前用伪元素生成一个“0”

span::before{  content: '0'}

2.png

接下来,给元素设置一个固定宽度,这里由于是等宽字体,所以可以直接设置为2ch,注意这个ch单位,它表示字符0的宽度(有兴趣的可以参考这篇文章:等宽字体在web布局中应用以及CSS3 ch单位嘿嘿),然后设置右对齐就行了

span{  /**/  display: inline-flex;  width: 2ch;  justify-content: flex-end;}

3.png

原理很简单,在 2 个字符宽度的空间里放置 3 个字符,以右对齐的方式,是不是就自动把最左边的 0 给挤出去了?然后超出隐藏就可以了

4.png

完整代码如下

span::before{  content: '0'}span{  display: inline-flex;  width: 2ch;  justify-content: flex-end;  overflow: hidden;}

二、CSS 变量动态计算

由于 CSS 无法获取标签的文本内容,所以这里需要构建一个 CSS 变量传递下去,如下

2-28

通过 var(--num)拿到变量以后,就可以进行一系列的逻辑判断了,那么,如何在小于 10 的情况下自动补零呢?

同样我们需要在数字前用伪元素生成一个“0”

span::before{  content: '0'}

然后,只需要根据 CSS 变量动态隐藏这个伪元素就行了,先设置透明度,如下

span::before{  /**/  opacity: calc(10 - var(--num));}

效果如下

5.png

具体的逻辑就是

--num等于 10 时,透明度的计算值就是 0,直接按照 0 来渲染

--num大于 10 时,透明度的计算值就是负数值,会按照 0 来渲染

--num小于 10 时,透明度的计算值就是大于等于1的值,会按照 1 来渲染

所以,最终的表现就是当大于等于10时不可见,小于10的时候可见

但是,这样还是有点问题的,透明度不会影响元素的位置,如下

6.png

如何消除这个位置呢?方法有很多,这里采用 margin-left 的方式,如下

span::before{  /**/  margin-left: clamp(-1ch, calc((9 - var(--num)) * 1ch),0ch);}

这里用到了clamp,你可以理解为一个区间,有 3 个值 [Min, Val, Max],前后分别是最小、最大值,中间是可变值(注意这里是和 9 比较),所以这里的逻辑就是

--num大于等于 10 时,假设为 15,中间 calc 值计算为 -5ch,clamp 取值为最小值 -1ch--num小于 10 时,假设为 5,中间 calc 值计算为 5ch,clamp 取值为最大值 0ch

所以,最终的表现就是当大于等于10时margin-left为-1ch,小于10的时候margin-left为0

这样就比较完美了

7.png

完整代码如下

span::before{  content: '0';  opacity: calc(10 - var(--num));  margin-left: clamp(-1ch, calc((9 - var(--num)) * 1ch),0ch);}

三、定义计数器样式

利用计数器也能实现这一效果,首先看默认的计数器效果,我们需要隐藏原有的文字,利用计数器让 CSS 变量通过伪元素展示出来,关于这个技巧,可以参考这篇文章:小tips: 如何借助content属性显示CSS var变量值,如下

span::before{  counter-reset: num var(--num);  content: counter(num);}

8.png

接下来需要用到 counter的第 2 个参数 ,计数器样式。这是干什么的呢?相信大家都用过一个属性 list-style-type,就是和这个相通的,可以定义序列的样式,比如按照小写英文字母的顺序

list-style-type: lower-latin;

9.png

这里我们需要一个 10 以内自动补零的计数器,刚好有个现成的,叫做 decimal-leading-zero,翻译过来就是,十进制前置零

list-style-type: decimal-leading-zero;

10.png

回到这里,需要做的就很简单了,补上这个参数就行了,完整代码如下

span::before{  counter-reset: num var(--num);  content: counter(num, decimal-leading-zero);}

效果如下

11.gif

四、计数器的扩展

上面的计数器只适用于2位数的,如果需要 3 位数的怎么办呢? 例如

001、002、...、010、012、...、098、099、100

JS 中的 padStart 可以指定填充后的位数

'1'.padStart(3, '0')// 结果是 ’001‘'99'.padStart(3, '0')// 结果是 ’099‘'101'.padStart(3, '0')// 结果是 ’101‘

其实,CSS 中也是有这样的能力的,叫做@counter-style/pad,严格来说,这才是官方的补全方案,语法也非常类似

pad: 3 "0";

但是,这个需要用在自定义计数器上,也就是@counter-style,有兴趣的可以参考张老师的这篇文章:CSS @counter-style规则详细介绍,这里简单介绍一下用法,假设定义一个计数器叫做@counter-style/pad,实现如下

@counter-style pad-num {    system: extends numeric;    pad: 3 "0";}

语法是这样的:这里的pad-num表示“系统”,就是内置的一些计数器,比如这里用到了system,后面的extends numeric表示数字技术系统,前面的numeric表示扩展,以这个为基础,然后extends就和 JS 的意义一样了,表示不足 3 位的地方补“0”

然后运用到计数器中:

span::before{  counter-reset: num var(--num);  content: counter(num, pad-num);}

效果如下:

12.gif

当然,这个兼容性略差,根据实际需求即可

以上完整代码可以访问:https://codepen.io/xboxyan/pen/YzEdbwj

13.png

五、总结一下

以上介绍了3种 CSS 字符串补全方法,是不是又学到了几个小技巧呢?这几个方法各有千秋,比较一下各自优缺点:

第一种方案非常容易理解,也容易扩展,如果需要补全 3 位,只需要改变整体宽度即可,不足之处在于依赖等宽字体。

第二种方案比较符合 JS 逻辑,比较灵活,不足在于计算比较啰嗦,而且还要考虑 CSS 取值的容错性。

第三种方案是我比较推荐的了,无需计算,也不依赖布局,可能知道的同学不多,而且如果要自定义计数器,兼容性有点差。

关于 CSS 实现的优点,有很多,比如更容易维护、几乎不会报错、代码更加简洁等等,如果你学会了,赶紧在项目中用起来吧。

(学习视频分享:web前端)

以上就是神奇的CSS,实现自动补全字符串!的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1624028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:27:09
下一篇 2025年12月24日 08:27:25

相关推荐

  • 聊聊怎么使用CSS滤镜实现内凹平滑圆角效果

    怎么利用css实现内凹平滑圆角效果?下面本篇文章带大家了解一下怎么巧用css滤镜实现内凹平滑圆角效果,希望对大家有所帮助! 某日,群友们在群里抛出这样一个问题,如何使用 CSS 实现如下的布局: 在 CSS 世界中,如果只是下述这种效果,还是非常容易实现的: 立即学习“前端免费学习笔记(深入)”; …

    2025年12月24日 好文分享
    000
  • 一文了解CSS3中的新特性@layer

    本篇文章带大家一起深入了解一下css3中的新特性@layer,希望对大家有所帮助! 步入 2022,CSS 的新特性层出不穷,而最近在 CSS 圈最受瞩目的新特性,非 CSS @layer 莫属。 本文,将用最简洁的语言,快速让读者们搞懂,到底什么是 CSS @layer 新规范。 过往 CSS 优…

    2025年12月24日 好文分享
    000
  • css3包含C语言程序设计吗

    css3不包含C语言程序设计。css3是一种用来表现HTML或XML等文件样式的计算机语言,而C语言程序设计是一种通用的程序设计语言,二者之间不存在包含与被包含的关系。 本教程操作环境:windows10系统、CSS3&&HTML5版、Dell G3电脑。 css3包含C语言程序设计…

    2025年12月24日
    000
  • css3链接怎么设置为没有手的样式

    在css中,可以利用cursor属性设置链接上没有小手的样式,该属性用于定义了鼠标指针放在一个元素边界范围内时所用的光标形状,当属性值设置为default时,鼠标样式为普通箭头样式,语法为“cursor:default;”。 本教程操作环境:windows10系统、CSS3&&HTM…

    2025年12月24日
    000
  • 分享10个纯 CSS 实现的 Loading 效果

    我们遇到加载,要么是ui框架中自带,要么就是百度,然后cv到项目中?但是,自己实现的时候,又会没有思路。下面本篇文章就来给大家分享10个纯 css 实现的 loading 效果,希望对大家有所帮助! 在推特上面看到 T. Afif 介绍的十个 Loading 效果。如上图。 Yeah,很赞哦,挺实用…

    2025年12月24日 好文分享
    000
  • 聊聊使用CSS怎么实现毛玻璃特效(兼容方案探究)

    使用css怎么实现毛玻璃特效?下面本篇文章给大家介绍一下使用css实现毛玻璃特效(兼容方案探究)的方法,希望对大家有所帮助! 前一段时间在某项目中用到了“高斯模糊”的滤镜效果,过程中尝试了多种方案,这里总结一种方式,希望可以帮助到有需要的道友~ UI 小姐姐非要让我在 Android 系统自定义的 …

    2025年12月24日 好文分享
    000
  • 浅析CSS中怎么实现线性渐变(linear-gradient)

    css中怎么实现线性渐变?下面本篇文章给大家介绍一下css线性渐变函数linear-gradient()的使用方法,并聊聊线性渐变的多种应用,希望对大家有所帮助! linear-gradient 1. 语法 linear-gradient([[to |],]? , [, …]?)的使用 二者表现…

    2025年12月24日 好文分享
    000
  • 如何利用CSS制作一个聚光灯效果(附代码)

    如何利用css制作一个聚光灯效果?下面本篇文章给大家分析一下实现原理,分享一下css聚光灯效果的实现代码,希望对大家有所帮助! CSS聚光灯效果的实现原理很简单: 将两个文字完全重叠,内层是深灰色,外层是有渐变颜色的。【推荐学习:css视频教程】在将外层的文字套用圆形遮罩。最后加上 CSS Anim…

    2025年12月24日
    000
  • 纯CSS实现水波纹的电池充电动画特效

    本篇文章给大家介绍一下巧用 css实现水波纹的电池充电动画特效的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 我们知道构成前端的三大语言有:html、css和js,其中最为神秘的便是css,为什么这么说呢?自从动画、过度等属性的出现,可以说只有你想不到,就没有做不到~ 上一…

    2025年12月24日 好文分享
    000
  • 聊聊如何用CSS box-shadow创建像素创意动画

    利用css也能创建像素创意动画!下面本篇文章给大家介绍一下用css box-shadow创建像素创意动画的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 本期我们要使用css3中的box-shadow属性来作画,相信大家也对box-shadow属性并不陌生,它主要用于在元素的…

    2025年12月24日 好文分享
    000
  • 关于 CSS 变量的一些你可能不了解的事!

    本篇文章带大家了解一下css 变量,介绍下没人告诉你关于 css 变量的那些事。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 CSS 变量很不错哦,但是你知道它们的详情?【推荐学习:css视频教程】 1. 小心 !important 与 CSS 变量一起使用 !important…

    2025年12月24日 好文分享
    000
  • 详细介绍CSS渐变、阴影和滤镜

    本篇文章给大家带来了关于css中渐变、阴影和滤镜的相关知识,其中包括了线性渐变、径向渐变、圆锥渐变等等相关问题,希望对大家有帮助。 推荐学习:css视频教程 一、初识 CSS 渐变 CSS 渐变是image类型的一种特殊类型用gradient表示,由两种或多种颜色之间的渐进过渡组成。 三种渐变类型:…

    2025年12月24日 好文分享
    000
  • 你必须了解Selenium使用CSS定位总结

    本篇文章给大家带来了关于selenium使用css定位总结的相关知识,css定位也有它的价值,css定位更快,语法更简洁,希望对大家有帮助。 大部分人在使用selenium定位元素时,用的是xpath定位,css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁 一、CSS …

    2025年12月24日
    000
  • 快看!10个值得收藏的CSS实用小技巧

    本篇文章给大家分享10个很棒的css使用技巧,让前端开发更轻松,快来收藏吧,希望对大家有所帮助! 我会为你带来 10 个很棒的 CSS 技巧,它们会让你作为开发人员更轻松,特别是如果你是初学者。(推荐学习:css视频教程) 1.如何在CSS中修复网页上的水平滚动 如果你在设置网页样式并且在底部看到水…

    2025年12月24日 好文分享
    000
  • 带你通过10个例子,了解FlexBox模型的所有属性

    本篇文章带大家深入了解一下flexbox(弹性盒子)模型,通过10个demo示例,来详细介绍弹性盒子模型的所有属性,希望对大家有所帮助! FlexBox(弹性盒子)模型,也就是我们常说的flex布局,现在flex布局已经是前端的主流布局方案,早就是前端必会的内容了,接下来我们一起来看一下弹性盒子模型…

    2025年12月24日 好文分享
    000
  • 总结分享CSS设计模式知识点

    本篇文章给大家带来了关于css设计模式的相关知识,其中包括oocss、bem、smacss、itcss以及acss的相关问题,希望对大家有帮助。 前言 传统的CSS书写风格是随意命名,堆叠样式,造成了混乱不堪的结果,你是否遇到庞大复杂的项目里,CSS代码难以维护的情况,你是否想要除了能够还原实物原型…

    2025年12月24日 好文分享
    000
  • 深入浅析Tailwind CSS(总结分享)

    本篇文章给大家带来了关于tailwind css的相关知识,tailwindcss 是一个css框架,和bootstrap、element ui、antd、bulma一样将一些css样式封装好,用来加速我们开发的一个工具,希望对大家有帮助。 (学习视频分享:css视频教程) 和其他的CSS框架有什么…

    2025年12月24日 好文分享
    000
  • 分享12个实用的 CSS 小技巧(快来收藏)

    本篇文章给大家分享12个有趣且实用的 css 小技巧,让前端开发更轻松,快来收藏吧,希望对大家有所帮助! (推荐学习:css视频教程) 1. 打字效果 代码实现: 有趣且实用的 CSS 小技巧 .wrapper { height: 100vh; display: flex; align-items:…

    2025年12月24日 好文分享
    000
  • 2022年你值得了解的几个CSS新特性(收藏学习)

    本篇文章给大家分享几个2022年值得期待的、不应该错过的 css 新功能,一起收藏学习吧! 对于CSS来说,2022年是非常值得期待的一年,大量的新功能即将出现,有些已经开始登录浏览器,有些可能会在2022年获得浏览器的广泛支持。下面就来看看2022年有哪些值得期待的 CSS 新功能吧!(推荐学习:…

    2025年12月24日
    000
  • 深入了解CSS动画新特性:@scroll-timeline

    在之前的文章《2022年你值得了解的几个css新特性(收藏学习)》中带大家简单介绍了几个css新特性,今天带大家深入了解其中的一个新特性(动画杀手锏):@scroll-timeline,希望对大家有所帮助! 在 CSS 规范 Scroll-linked Animations 中,推出了一个划时代的 …

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信