目錄
一、flex-end 對齊
二、CSS 變數動態計算
三、定义计数器样式
四、计数器的扩展
五、总结一下
首頁 web前端 css教學 神奇的CSS,實現自動補全字串!

神奇的CSS,實現自動補全字串!

Mar 24, 2022 am 10:55 AM
css

這篇文章跟大家介紹使用CSS的實用小技巧,了解一下CSS自動補全字串的幾種方法,希望對大家有幫助!

神奇的CSS,實現自動補全字串!

很多時候都會碰到字串補全的需求,典型的例子就時間或日期中的補零操作,例如

2021-12-31
2022-03-03
登入後複製

通常的做法是

if (num < 10) {
  num = &#39;0&#39; + num
}
登入後複製

後來,JS 中出現了原生的補全方法padStart()padEnd(),如下

&#39;3&#39;.padStart(2, &#39;0&#39;)
// 结果是 ’03‘
&#39;12&#39;.padStart(2, &#39;0&#39;)
// 结果是 ’12‘
登入後複製

其實呢,在CSS 中也是可以實現這樣的效果的,並且有多種方案,下面一起看看吧,相信能有不一樣的體會。 【建議學習:css影片教學

一、flex-end 對齊

先介紹一個比較容易理解的方案,也非常簡單,假設HTML 是這樣的

<span>2</span>
-
<span>28</span>
登入後複製

一般情況下,也會設定等寬字體,看起來更協調、美觀

span{
  font-family: Consolas, Monaco, monospace;
}
登入後複製

神奇的CSS,實現自動補全字串!

我們需要在數字前用偽元素產生一個「0」

span::before{
  content: &#39;0&#39;
}
登入後複製
登入後複製

神奇的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: &#39;0&#39;
}
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: &#39;0&#39;
}
登入後複製
登入後複製

然後,只需要根據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: &#39;0&#39;;
  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 可以指定填充后的位数

&#39;1&#39;.padStart(3, &#39;0&#39;)
// 结果是 ’001‘
&#39;99&#39;.padStart(3, &#39;0&#39;)
// 结果是 ’099‘
&#39;101&#39;.padStart(3, &#39;0&#39;)
// 结果是 ’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,實現自動補全字串!

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

以上完整代码可以访问:

https://codepen.io/xboxyan/pen/YzEdbwj

1神奇的CSS,實現自動補全字串!

五、总结一下

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

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

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

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

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

(学习视频分享:web前端

以上是神奇的CSS,實現自動補全字串!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼看日期 bootstrap怎麼看日期 Apr 07, 2025 pm 03:03 PM

答案:可以使用 Bootstrap 的日期選擇器組件在頁面中查看日期。步驟:引入 Bootstrap 框架。在 HTML 中創建日期選擇器輸入框。 Bootstrap 將自動為選擇器添加樣式。使用 JavaScript 獲取選定的日期。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

See all articles