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

如何在SCSS中复用重复的选择器样式代码?

问题

现有如下SCSS代码,其中存在重复的样式定义:

#id1 .class1 {
  input {
    padding: 4px;
    border: 0px none;
    &:disabled {
      color: red;
    }
  }
}

// .... other scss settings

.class2 #id2 .class3 {
  input {
    padding: 4px;
    border: 0px none;
    &:disabled {
      color: red;
    }
  }
}

希望能通过类似以下伪代码的方式实现样式复用:

$var1: input {
          padding: 4px;
          border: 0px none;
          &:disabled {
            color: red;
          }
        }

#id1 .class1 {
  $var1
}

// .... other scss settings

.class2 #id2 .class3 {
  $var1
}

请问是否可以实现这样的需求?

回答

可以实现,不过SCSS里没法直接把代码块赋值给变量,但可以用混合宏(Mixin)或者占位符选择器来达成你要的复用效果,这两种都是SCSS专门用来解决样式复用的特性:

方法1:使用@mixin和@include

定义一个混合宏存放需要复用的代码,之后在需要的地方用@include引入即可:

@mixin input-styles {
  input {
    padding: 4px;
    border: 0 none;
    &:disabled {
      color: red;
    }
  }
}

#id1 .class1 {
  @include input-styles;
}

// .... other scss settings

.class2 #id2 .class3 {
  @include input-styles;
}

编译后的CSS和你原本的代码完全一致,完美实现样式复用。如果后续需要调整这段样式,只需要修改混合宏里的内容就行。

方法2:使用占位符选择器(%)和@extend

如果这段样式不需要传递参数,也可以用占位符选择器配合@extend来复用,这种方式会把相同的样式规则合并,输出更精简的CSS:

%input-styles {
  input {
    padding: 4px;
    border: 0 none;
    &:disabled {
      color: red;
    }
  }
}

#id1 .class1 {
  @extend %input-styles;
}

// .... other scss settings

.class2 #id2 .class3 {
  @extend %input-styles;
}

两种方法都能满足你的需求,其中Mixin更灵活,支持传递参数(比如后续要给不同场景的input设置不同padding值),占位符则更适合纯静态样式的复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:20