自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么我喜歡在 CSS 中使用 RegEx

開發(fā) 前端
在 CSS 中,也能用到與正則類似的選擇器特性,為我們的樣式管理帶來諸多便利。別懷疑,以下就是如何在 CSS 里“以正則之名”提升效率的真實案例。

說到正則(RegEx),我們第一反應(yīng)往往是“在編程中用來匹配或驗證字符串”,比如做表單驗證。但其實在 CSS 中,也能用到與正則類似的選擇器特性,為我們的樣式管理帶來諸多便利。別懷疑,以下就是如何在 CSS 里“以正則之名”提升效率的真實案例。

當類名越來越多時

舉個例子:你在做一個商品列表頁面,每個商品都有可能是:

  • 新品(new)
  • 暢銷(best-seller)
  • 暫時缺貨(out-of-stock)
  • 甚至多種狀態(tài)疊加

如果你為這些狀態(tài)分別寫不同的類,比如 .new、.bestseller、.out-of-stock,然后在 HTML 里瘋狂堆疊類名,就會發(fā)現(xiàn) CSS 變得十分臃腫、不易維護。

CSS + “正則” = 雙贏

好消息是,CSS 提供了三種與正則思路類似的特殊屬性選擇器,讓我們可以更靈活地篩選類名。

(^) 插入符:匹配以某字符串開頭的類名。

  • 例:div[class^="card"] 匹配所有類名以 card 開頭的元素。

(*) 星號:匹配在任意位置出現(xiàn)的子串。

  • 例:div[class*="new"] 匹配類名里含有 new 的所有元素。

($) 美元符:匹配以特定字符串結(jié)尾的類名。

  • 例:div[class$="prioritize"] 匹配類名以 prioritize 結(jié)尾的元素。

有了它們,我們就能用更加簡潔的方式來管理各種狀態(tài),而無需定義一堆獨立類。

實踐例子:從混亂到優(yōu)雅

假設(shè)我們想給“新品”商品加一個“新”角標或標志,以往的做法是:

<div class="card new"></div>

然后在 CSS 里用 .new 做對應(yīng)樣式。但如果改用“正則”選擇器,我們可以只寫一個帶有 new 的類名,如:card-new。

1. 給新品加標識

div[class*="new"] {
    content: url('new-icon.png');
}

只要類名里包含“new”,就會自動加載新品圖標。比如:

<div class="card-new"> ... </div>

即可匹配到這個規(guī)則。

2. 為暢銷商品加特殊背景

類似地,如果類名里含有 seller,可以這樣寫:

div[class*="seller"] {
    background-color: gold;
}

那么像 card-seller 或 card-new-seller 都會觸發(fā)該樣式。這樣一來,如果有一個商品既是新品又是暢銷,只要設(shè)置類名為 card-new-seller,同時包含 new 和 seller,就能疊加兩種效果,無需再為多重狀態(tài)編寫額外 CSS 規(guī)則。

處理缺貨商品 (out-of-stock)

對缺貨商品,可以在類名中包含 out,例如:card-out。在 CSS 中只需寫:

div[class*="out"] {
    filter: grayscale(80%);
    opacity: 0.5;
}

結(jié)果就是所有帶 out 關(guān)鍵字的商品,都統(tǒng)一呈現(xiàn)“灰階 + 半透明”的視覺效果。而如果商品既是新品,又缺貨,又是暢銷,只要類名是 card-new-seller-out,就能自動應(yīng)用所有相應(yīng)的樣式規(guī)則。

按優(yōu)先級排序

假設(shè)我們想讓有些商品在列表中排在最前面,可以用 prioritize 字樣。

div[class*="prioritize"] {
    order: -1; /* 在 flex 或 grid 容器中可以讓它排在前面 */
}

如果你希望把它放在末尾,可以改成:

div[class$="prioritize"] {
    order: 999;
}

另外,如果想排除缺貨的優(yōu)先級高商品,可以在選擇器加上 :not(),比如:

div[class*="prioritize"]:not([class*="out"]) {
    order: -1;
}

這樣就不會把“既優(yōu)先又缺貨”的商品也放到最前。

正則式選擇器小結(jié)

  • **^=**:定位以某字符串開頭的類名
  • ***=**:搜索類名任意位置
  • **$=**:匹配以某字符串結(jié)尾的類名

這三種方式讓我們可以“巧妙地”給不同類名加上相同前綴或后綴,不同子字符串,就能輕松管理多重狀態(tài)。相比傳統(tǒng)的“一堆獨立類再手動組合”,這種寫法更緊湊,維護起來也更輕松。

結(jié)語

“在 CSS 中用正則”聽上去可能有點稀奇,但只要掌握了 ^, *, $ 這三個巧妙的小技巧,就能大幅簡化對多狀態(tài)類名的管理,讓你的 CSS 文件告別混亂。此外,與團隊成員約定好“關(guān)鍵字”用法,還能讓協(xié)作更高效、風(fēng)格更統(tǒng)一。

如果覺得這篇分享對你有幫助,可以點個贊或告訴同事們——畢竟,靈活運用這些選擇器,絕對能讓你的項目在維護性和可讀性方面更勝一籌。祝編碼愉快,玩轉(zhuǎn) CSS!

責任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2012-04-04 22:07:12

Android

2019-10-23 15:53:16

JavaScript可選鏈對象

2009-06-04 17:33:08

EJB 3.1EJB 3.0

2019-08-28 10:53:35

JavaScriptOptional Ch代碼

2012-05-24 09:13:20

2023-09-14 08:00:00

基于主干的開發(fā)分支模型

2015-10-26 09:58:53

程序員主流

2017-11-30 15:25:04

EclipseGo項目

2017-09-11 19:58:06

PostgreSQLMySQL數(shù)據(jù)庫

2020-07-28 10:45:51

數(shù)據(jù)庫三范式MySQL

2023-07-04 16:28:23

2022-02-14 08:21:48

Linux元字符

2020-02-25 15:14:13

程序員人生第一份工作睡眠

2018-01-09 18:46:44

數(shù)據(jù)庫架構(gòu)讀寫分離

2018-01-15 05:54:45

數(shù)據(jù)庫讀寫分離互聯(lián)網(wǎng)

2022-02-07 23:05:11

tailwindcsCSS框架

2021-05-17 11:30:08

Linuxls命令

2021-06-03 08:45:44

Linuxls命令

2022-03-03 23:30:27

TypeScrip開發(fā)前端

2021-10-13 14:06:46

MySQLUtf8符號
點贊
收藏

51CTO技術(shù)棧公眾號