You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已有CSS样式派生新样式以消除代码冗余?

消除CSS样式冗余的方案

当然可以消除这两处重复定义,下面是两种实用的解决思路:

方法一:利用CSS类的层叠(原生CSS即可实现)

把公共样式抽离到基础类.open_in_new中,再单独定义一个只修改颜色的类,HTML中同时添加两个类名:

// 公共基础样式
.open_in_new {
  font-size: 18px;
  margin-top: 5px;
  color: mat-color($teal, 500);
}

// 仅覆盖颜色的禁用样式
.open_in_new.disabled {
  color: mat-color($grey, 500);
}

HTML使用方式:

<!-- 正常状态 -->
<mat-icon class="open_in_new">open_in_new</mat-icon>

<!-- 禁用状态 -->
<mat-icon class="open_in_new disabled">open_in_new</mat-icon>

这种方式不需要预处理器,完全依赖CSS的层叠优先级,简单直观。

方法二:使用Sass的@extend继承(适合预处理器场景)

因为你用到了mat-color这类Sass变量,直接用Sass的继承特性,让.open_in_new_disabled继承基础类的所有样式,仅重写颜色:

.open_in_new {
  font-size: 18px;
  margin-top: 5px;
  color: mat-color($teal, 500);
}

.open_in_new_disabled {
  @extend .open_in_new; // 继承基础类所有样式
  color: mat-color($grey, 500); // 仅修改颜色
}

HTML可以保持原来的写法不变:

<mat-icon class="open_in_new_disabled">open_in_new</mat-icon>

编译后的CSS会自动合并选择器,避免代码重复,同时不用改动已有的HTML结构。

内容的提问来源于stack exchange,提问作者gnitsuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:22:33