iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS怎么实现自动补全字符串
  • 132
分享到

CSS怎么实现自动补全字符串

2024-04-02 19:04:59 132人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“CSS怎么实现自动补全字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS怎么实现自动补全字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。很多

本文小编为大家详细介绍“CSS怎么实现自动补全字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS怎么实现自动补全字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

CSS怎么实现自动补全字符串

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

2021-12-31
2022-03-03

通常的做法是

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

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

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

其实呢,在 CSS 中也是可以实现这样的效果的,并且有多种方案,下面一起看看吧,相信能有不一样的体会。

一、flex-end 对齐

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

<span>2</span>
-
<span>28</span>

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

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

CSS怎么实现自动补全字符串

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

span::before{
  content: '0'
}

CSS怎么实现自动补全字符串

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

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

CSS怎么实现自动补全字符串

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

CSS怎么实现自动补全字符串

完整代码如下

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

二、CSS 变量动态计算

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

<span style="--num:2">2</span>
-
<span style="--num:12">28</span>

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

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

span::before{
  content: '0'
}

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

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

效果如下

CSS怎么实现自动补全字符串

具体的逻辑就是

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

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

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

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

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

CSS怎么实现自动补全字符串

如何消除这个位置呢?方法有很多,这里采用 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

这样就比较完美了

CSS怎么实现自动补全字符串

完整代码如下

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);
}

CSS怎么实现自动补全字符串

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

list-style-type: lower-latin;

CSS怎么实现自动补全字符串

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

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

CSS怎么实现自动补全字符串

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

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

效果如下

CSS怎么实现自动补全字符串

四、计数器的扩展

上面的计数器只适用于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规则详细介绍,这里简单介绍一下用法,假设定义一个计数器叫做pad-num,实现如下

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

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

然后运用到计数器中:

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

读到这里,这篇“CSS怎么实现自动补全字符串”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网JavaScript频道。

--结束END--

本文标题: CSS怎么实现自动补全字符串

本文链接: https://www.lsjlt.com/news/95992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS怎么实现自动补全字符串
    本文小编为大家详细介绍“CSS怎么实现自动补全字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS怎么实现自动补全字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。很多...
    99+
    2022-10-19
  • Qt QCompleter自动补全怎么实现
    这篇“Qt QCompleter自动补全怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt QC...
    99+
    2023-06-30
  • Linux怎么实现自动补全命令
    这篇文章主要介绍“Linux怎么实现自动补全命令”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux怎么实现自动补全命令”文章能帮助大家解决问题。linux命令自动补全centos7下执行yum...
    99+
    2023-06-28
  • java字符串全排列怎么实现
    可以使用递归的方法来实现字符串的全排列。 具体步骤如下: 定义一个递归函数,传入一个字符串和两个索引参数,分别表示当前排列的起始位...
    99+
    2023-10-21
    java
  • php怎么实现字符串长度不够前面补0
    在php中,可以使用str_pad()函数实现字符串不够前面补0。该函数可以使用指定字符将字符串填充为指定长度,只需要将第三个参数设置为“0”,第四个参数设置为“STR_PAD_LEFT”即可实现字符串长度不够在前面用0补位,语法“语法“s...
    99+
    2022-08-16
    php php字符串
  • C#怎么实现字符串包含字符串
    本文小编为大家详细介绍“C#怎么实现字符串包含字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么实现字符串包含字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实例using System...
    99+
    2023-06-17
  • 使用ajax怎么自动补全表单字段
    这期内容当中小编将会给大家带来有关使用ajax怎么自动补全表单字段,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。源代码:脚本一:<!DOCTYPE htm...
    99+
    2022-10-19
  • ubuntu自动补齐怎么实现
    这篇文章主要介绍“ubuntu自动补齐怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ubuntu自动补齐怎么实现”文章能帮助大家解决问题。ubuntu实现自动补齐的方法:以root权限利用v...
    99+
    2023-07-04
  • 怎么从json字符串自动生成C#类
    这篇文章主要讲解了“怎么从json字符串自动生成C#类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从json字符串自动生成C#类”吧!json转类对象自从.net 4.0开始,微软提供...
    99+
    2023-06-17
  • php怎么实现数字转字符串
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现数字转字符串strval() 函数用于获取变量的字符串值。语法string strval ( mixed $var )参数说明:$var: 可以是任何标量类...
    99+
    2020-01-26
    php 数字 字符串
  • python字符串转数字怎么实现
    要将字符串转换为数字,可以使用int()或float()函数来实现。具体的实现方式如下: 使用int()函数将字符串转换为整数: ...
    99+
    2023-10-23
    python
  • 利用eclipse怎么实现一个自动补全功能
    这期内容当中小编将会给大家带来有关利用eclipse怎么实现一个自动补全功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。解决代码的自动提示问题:打开 Eclipse -> Window ->...
    99+
    2023-05-31
    eclipse 全功能
  • c++字符串替换指定字符怎么实现
    在C++中,可以使用std::string类来表示字符串,可以使用std::replace函数来替换字符串中的指定字符。下面是一个示...
    99+
    2023-10-19
    c++
  • css中怎么实现字符串截断并加省略号
    本篇文章给大家分享的是有关css中怎么实现字符串截断并加省略号,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。<html> <...
    99+
    2022-10-19
  • 怎么在php中使用phpstorm实现自动补全代码
    怎么在php中使用phpstorm实现自动补全代码?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费...
    99+
    2023-06-14
  • vue中怎么实现一个自动补全的输入框
    本篇文章给大家分享的是有关vue中怎么实现一个自动补全的输入框,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。显示div将内容撑开,改变其他组件...
    99+
    2022-10-19
  • JAVA字符串替换怎么实现
    这篇文章主要讲解了“JAVA字符串替换怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA字符串替换怎么实现”吧!最近在java开发的过程中用到了字符串的替换,本来觉得挺简单的问题...
    99+
    2023-06-17
  • swift字符串替换怎么实现
    在Swift中,可以使用replacingOccurrences(of:with:)方法来实现字符串的替换。该方法接受两个参数,第一...
    99+
    2023-10-19
    swift
  • python字符串拼接怎么实现
    在Python中,字符串拼接可以通过以下几种方式实现: 使用"+"操作符: str1 = "Hello" str2 = "Wor...
    99+
    2023-10-27
    python
  • python怎么实现反转字符串
    这篇文章将为大家详细讲解有关python怎么实现反转字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。反转字符串python有哪些常用库python常用的库:1.req...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作