贝利信息

css 想减少重复 css 样式怎么办_使用 css sass 变量与 mixin 管理样式

日期:2026-01-18 00:00 / 作者:P粉602998670
Sass变量解决值复用,需在_variables.scss中语义化命名并集中管理;mixin解决规则块复用,应职责单一、支持参数;@extend慎用,优先选mixin。

$color-primary 这类变量统一颜色值,别再满处写 #3498db

硬编码颜色、字号、间距在多个选择器里重复出现,改一处漏三处。Sass 变量解决的是「值复用」问题,不是语法糖。

必须在 _variables.scss 里集中定义,且用语义化命名:

$color-primary: #3498db;
$color-success: #2ecc71;
$spacing-sm: 0.5rem;
$font-size-base: 1rem;

使用时直接插值:color: $color-primary;。注意两点:

@mixin button-base 抽离多处重复的按钮通用样式

.btn.submit-btn.action-link 都有 display: inline-flex + align-items: center + padding: 0.5rem 1rem 时,说明该上 mixin 了。

它解决的是「规则块复用」,比变量更进一步:

@mixin button-base {
  display: inline-flex;
  align-items: center;
  padding: 0.5rem 1rem;
  border: none;
  cursor: pointer;
}

.btn { @include button-base; background: $color-primary; }

.su

bmit-btn { @include button-base; background: $color-success; }

关键细节:

别把 @extend 当成救命稻草,它会让 CSS 输出失控

看到 .card-header.modal-title 都用 font-weight: bold; color: #2c3e50;,第一反应不是写 @extend .card-header,而是问:这真是同一语义?

@extend 表面省代码,实际埋三个雷:

真要复用视觉表现,优先选 mixin;只有完全同语义、同层级的组件才考虑 @extend,比如 .btn-primary 继承 .btn

变量和 mixin 的边界在哪?看修改频率和影响范围

一个值改了,是否牵扯 10+ 个组件?—— 用变量。
一组声明改了,是否要同步更新按钮、表单控件、弹窗标题?—— 用 mixin。

实战判断口诀:

最易被忽略的一点:Sass 变量不能动态计算,$width: 100% - $gutter 这种写法无效,得用 calc()@function。别等上线后发现栅格错位才回头查。