📜  Sass @extend 规则

📅  最后修改于: 2021-08-30 12:47:38             🧑  作者: Mango

当一个类需要具有另一个类的样式以及它自己的特定样式时,可以使用 Sass @extend规则。这条规则告诉 Sass 一个选择器应该从另一个选择器继承类。

句法:

@extend 

例子:

SASS
.gfg
  border: 1px green
  background-color: black
  font-family: sans-serif
  
  &--geeks
    @extend .gfg
    border-width: 4px


SASS
.gfg:hover
  border: 1px green
  background-color: black
  font-family: sans-serif
  
.gfg--geeks
  @extend .gfg
  border-width: 4px


css
.content nav.sidebar
  @extend .gfg
   
/* This won't be extended, because 
  `p` is incompatible with `nav` */
p.gfg
  background-color: green
  color: white
   
/* There is no way to know whether
  `
` will be inside    or outside `
`,    so Sass generates both to be safe */ .geeks .gfg   border: 1px solid black   border-radius: 4px     /* Sass knows that every element     matching "main.content" also     matches ".content" and avoids    generating unnecessary     interleaved selectors */ main.content .gfg   font-size: 2px   font-family: sans-serif


输出:

.gfg, .gfg--geeks {
  border: 1px green;
  background-color: black;
  font-family: sans-serif;
}
.gfg--geeks {
  border-width: 4px;
}

当一个类扩展另一个类时,Sass 样式是匹配扩展器的元素,就好像它们也匹配被扩展的类。选择器不仅仅在样式规则中单独使用。 Sass 知道在使用选择器的任何地方进行扩展。这确保元素的样式与扩展选择器完全匹配。

例子:

SASS

.gfg:hover
  border: 1px green
  background-color: black
  font-family: sans-serif
  
.gfg--geeks
  @extend .gfg
  border-width: 4px

输出:

.gfg:hover, .gfg--geeks:hover {
  border: 1px green;
  background-color: black;
  font-family: sans-serif;
}
.gfg--geeks {
  border-width: 4px;
}

规则的工作: @extend规则更新包含扩展选择器的样式规则,使其包含扩展选择器。在扩展选择器时,Sass 通过从不生成像#main#footer这样不可能匹配任何元素的选择器来实现智能统一。它还确保复杂的选择器是交错的,这样无论 HTML 元素嵌套在哪个顺序,它们都可以工作。

智能统一也是通过尽可能修剪冗余选择器来完成的,同时仍然确保特异性大于或等于扩展器的特异性。简而言之,它可以智能地处理组合器、通用选择器和包含选择器的伪类。

例子:

css

.content nav.sidebar
  @extend .gfg
   
/* This won't be extended, because 
  `p` is incompatible with `nav` */
p.gfg
  background-color: green
  color: white
   
/* There is no way to know whether
  `
` will be inside    or outside `
`,    so Sass generates both to be safe */ .geeks .gfg   border: 1px solid black   border-radius: 4px     /* Sass knows that every element     matching "main.content" also     matches ".content" and avoids    generating unnecessary     interleaved selectors */ main.content .gfg   font-size: 2px   font-family: sans-serif

输出:

p.gfg {
  background-color: green;
  color: white;
}

.geeks .gfg, .geeks .content nav.sidebar, 
.content .geeks nav.sidebar {
  border: 1px solid black;
  border-radius: 4px;
}

main.content .gfg, main.content nav.sidebar {
  font-size: 2px;
  font-family: sans-serif;
}

使用选择器函数可以直接访问 Sass 的智能统一。 selector.unify()函数返回一个匹配两个选择器的交集的选择器,而 selector.extend()函数的工作方式就像@extend ,但在单个选择器上。