当前位置: 首页 > article >正文

为什么我喜欢在 CSS 中使用 RegEx

说到正则(RegEx),我们第一反应往往是“在编程中用来匹配或验证字符串”,比如做表单验证。但其实在 CSS 中,也能用到与正则类似的选择器特性,为我们的样式管理带来诸多便利。别怀疑,以下就是如何在 CSS 里“以正则之名”提升效率的真实案例。


当类名越来越多时

举个例子:你在做一个商品列表页面,每个商品都有可能是:

  1. 新品(new)

  2. 畅销(best-seller)

  3. 暂时缺货(out-of-stock)

  4. 甚至多种状态叠加

如果你为这些状态分别写不同的类,比如 .new.bestseller.out-of-stock,然后在 HTML 里疯狂堆叠类名,就会发现 CSS 变得十分臃肿、不易维护。


CSS + “正则” = 双赢

好消息是,CSS 提供了三种与正则思路类似的特殊属性选择器,让我们可以更灵活地筛选类名。

  1. (^) 插入符:匹配以某字符串开头的类名

  • 例:div[class^="card"] 匹配所有类名以 card 开头的元素

(*) 星号:匹配在任意位置出现的子串

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

($) 美元符:匹配以特定字符串结尾的类名

  • 例:div[class$="prioritize"] 匹配类名以 prioritize 结尾的元素

有了它们,我们就能用更加简洁的方式来管理各种状态,而无需定义一堆独立类。


实践例子:从混乱到优雅

假设我们想给“新品”商品加一个“新”角标或标志,以往的做法是:

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

然后在 CSS 里用 .new 做对应样式。但如果改用“正则”选择器,我们可以只写一个带有 new 的类名,如:card-new

1. 给新品加标识

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

只要类名里包含“new”,就会自动加载新品图标。比如:

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

即可匹配到这个规则。

2. 为畅销商品加特殊背景

类似地,如果类名里含有 seller,可以这样写:

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

那么像 card-sellercard-new-seller 都会触发该样式。这样一来,如果有一个商品既是新品又是畅销,只要设置类名为 card-new-seller,同时包含 newseller,就能叠加两种效果,无需再为多重状态编写额外 CSS 规则。


处理缺货商品 (out-of-stock)

对缺货商品,可以在类名中包含 out,例如:card-out。在 CSS 中只需写:

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

结果就是所有带 out 关键字的商品,都统一呈现“灰阶 + 半透明”的视觉效果。而如果商品既是新品,又缺货,又是畅销,只要类名是 card-new-seller-out,就能自动应用所有相应的样式规则。


按优先级排序

假设我们想让有些商品在列表中排在最前面,可以用 prioritize 字样。

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

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

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

另外,如果想排除缺货的优先级高商品,可以在选择器加上 :not(),比如:

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

这样就不会把“既优先又缺货”的商品也放到最前。


正则式选择器小结

  1. **^=**:定位以某字符串开头的类名

  2. ***=**:搜索类名任意位置

  3. **$=**:匹配以某字符串结尾的类名

这三种方式让我们可以“巧妙地”给不同类名加上相同前缀或后缀,不同子字符串,就能轻松管理多重状态。相比传统的“一堆独立类再手动组合”,这种写法更紧凑,维护起来也更轻松。


结语

“在 CSS 中用正则”听上去可能有点稀奇,但只要掌握了 ^, *, $ 这三个巧妙的小技巧,就能大幅简化对多状态类名的管理,让你的 CSS 文件告别混乱。此外,与团队成员约定好“关键字”用法,还能让协作更高效、风格更统一。

如果觉得这篇分享对你有帮助,可以点个赞或告诉同事们——毕竟,灵活运用这些选择器,绝对能让你的项目在维护性和可读性方面更胜一筹。祝编码愉快,玩转 CSS!

最后:

React Hook 深入浅出

CSS技巧与案例详解

vue2与vue3技巧合集

VueUse源码解读


http://www.kler.cn/a/506754.html

相关文章:

  • JWT在线解密/解码 - 加菲工具
  • salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products
  • 软件设计大致步骤
  • 用css和html制作太极图
  • Android BottomNavigationView不加icon使text垂直居中,完美解决。
  • 【GIS操作】使用ArcGIS Pro进行海图的地理配准(附:墨卡托投影对比解析)
  • npm发布组件(vue3+webpack)
  • Vue学习之旅:从生命周期到工程化开发与组件实践(生命周期+工程化开发)
  • @Query(org.springframework.data.jpa.repository.Query)
  • HTTP 到 HTTPS – 以下是操作步骤
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • 海太长江隧道:科技防水筑就跨江新通道
  • 卷积神经04-TensorFlow环境安装
  • Dexie.js 的批量操作与索引优化
  • 《深度学习神经网络训练:数据集下载资源列表》
  • 使用Eclipse将Springboot项目打jar包
  • GPU算力平台|在GPU算力平台部署轻量级中文OCR项目(chineseocr_lite)
  • 机器学习-学习算法
  • java实现word转html(支持docx及doc文件)
  • 常见的安全测试漏洞详解
  • VLANIF配置之区别(Differences in VLANIF Configuration)
  • 高德地图自定义点聚合样式
  • 数据结构-顺序表及链表结构分析
  • 【odbc】odbc连接kerberos认证的 hive和spark thriftserver
  • 矩阵Strassen 算法
  • C#异步编程:掌握上下文捕获,有效避免死锁