📜  什么是 SASS 中的 @extend 指令?

📅  最后修改于: 2022-05-13 01:56:30.625000             🧑  作者: Mango

什么是 SASS 中的 @extend 指令?

Sass 是 Syntactically Awesome Style Sheet 的缩写。它是级联样式表 (CSS) 的升级版,是可用于编写 CSS 的流行预处理器之一。

@extend 是 Sass 中的一个关键字,它允许从一个选择器到另一个选择器共享一组 CSS 属性。这对于重用样式和使样式表更加模块化很有用。它存在于所有三个可用于 CSS 的预处理器中。

@extend 指令的工作

Sass 在扩展选择器时使用智能统一。以下是规则:

  • 如果它们在各个方面都匹配,它将两个选择器组合在一起。
  • 它修剪和减少冗余的选择器,同时仍确保它们的特异性保持大于或等于扩展器的特异性。
  • 它知道如何处理组合器、通用选择器和包含选择器的伪类。
  • 它还尝试混合复杂的选择器,以便它们独立于 HTML 元素的嵌套顺序继续工作。
  • 它确保不会生成不可能针对任何元素的选择器。

@extend 和 Mixin 的区别

这是每个从 Sass 开始的人都会遇到的普遍问题。根据文档,可以使用以下几点来消除混淆:

  • 当您必须表达相关类(也称为语义类)之间的关系时,建议使用@extend。
  • 当样式集合之间没有关系时,建议使用 mixins。通过这种方式,您可以通过接受参数使其可定制。这使得它易于配置并且也可用于不同的情况。

扩展范围和占位符选择器

  • 扩展范围: Sass 可以说有上游流。这使其规则可预测且易于理解。当一个样式表扩展一个选择器时,效果只会在上游模块上看到,并且使用 @use 或 @forward 规则加载,并且以上游方式类似。这也称为扩展范围。

  • 占位符选择器:占位符选择器,顾名思义,用作样式的占位符。当您在 CSS 输出中想要它的扩展版本但不想要样式本身时,它们就会发挥作用。用作占位符选择器的选择器以百分比 (%) 开头,而不像一般选择器以点 (.) 开头。

以下示例演示了 @extend 指令。

示例 1:假设您有两个类,背景图像和 ProfileImage,它们都需要一些共同的样式。如本例所示,可以使用@extend 指令。

.backgroundImage{
    border-radius:50%;
    height:100px;
    width:100px;
}

.profileImage{
    @extend .backgroundImage;
    border:none;
}

输出:这将使编译器生成以下 CSS 示例。

.backgroundImage, .profileImage {
  border-radius: 50%;
  height: 100px;
  width: 100px;
}

.profileImage {
  border: none;
}

示例 2:对于本示例,我们将使用 @extend 指令扩展多个类。

.backgroundImage{
    border-radius:50%;
    height:100px;
    width:100px;
}

.profileImage{
    @extend .backgroundImage;
    border:none;
    filter: grayscale(100%);
}
.finalImage{
    @extend .profileImage;
}

输出:这被转换为以下 CSS。

.backgroundImage, .profileImage, .finalImage {
  border-radius: 50%;
  height: 100px;
  width: 100px;
}

.profileImage, .finalImage {
  border: none;
  filter: grayscale(100%);
}