sass:selector

兼容性
Dart Sass
自 1.23.0 起
LibSass
Ruby Sass

目前只有 Dart Sass 支持使用 @use 加载内置模块。其他实现的使用者必须使用全局名称调用函数。

选择器值选择器值永久链接

此模块中的函数检查和操作选择器。无论它们何时返回选择器,它始终是逗号分隔的列表(选择器列表),其中包含空格分隔的列表(复杂选择器),其中包含未引用的字符串(复合选择器)。例如,选择器 .main aside:hover, .sidebar p 将以以下方式返回:

@debug ((unquote(".main") unquote("aside:hover")),
        (unquote(".sidebar") unquote("p")));
// .main aside:hover, .sidebar p

这些函数的选择器参数可以采用相同的格式,但它们也可以只是普通的字符串(引用的或未引用的),或它们的组合。例如,".main aside:hover, .sidebar p" 是一个有效的选择器参数。

selector.is-superselector($super, $sub)
is-superselector($super, $sub) //=> boolean

返回选择器 $super 是否匹配选择器 $sub 匹配的所有元素。

即使 $super 匹配的元素多于 $sub,也仍然返回 true。

$super$sub 选择器可能包含占位符选择器,但不包含父选择器。

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.is-superselector("a", "a.disabled"); // true
@debug selector.is-superselector("a.disabled", "a"); // false
@debug selector.is-superselector("a", "sidebar a"); // true
@debug selector.is-superselector("sidebar a", "a"); // false
@debug selector.is-superselector("a", "a"); // true
游乐场

Sass 语法

@use "sass:selector"

@debug selector.is-superselector("a", "a.disabled")  // true
@debug selector.is-superselector("a.disabled", "a")  // false
@debug selector.is-superselector("a", "sidebar a")  // true
@debug selector.is-superselector("sidebar a", "a")  // false
@debug selector.is-superselector("a", "a")  // true
selector.append($selectors...)
selector-append($selectors...) //=> selector

$selectors 合并,但不使用后代组合器(即选择器之间没有空格)。

如果 $selectors 中的任何选择器是选择器列表,则每个复杂选择器将单独合并。

$selectors 可能包含占位符选择器,但不包含父选择器。

另请参阅 selector.nest()

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.append("a", ".disabled"); // a.disabled
@debug selector.append(".accordion", "__copy"); // .accordion__copy
@debug selector.append(".accordion", "__copy, __image");
// .accordion__copy, .accordion__image
游乐场

Sass 语法

@use "sass:selector"

@debug selector.append("a", ".disabled")  // a.disabled
@debug selector.append(".accordion", "__copy")  // .accordion__copy
@debug selector.append(".accordion", "__copy, __image")
// .accordion__copy, .accordion__image
selector.extend($selector, $extendee, $extender)
selector-extend($selector, $extendee, $extender) //=> selector

扩展 $selector,就像使用 @extend 规则一样。

返回 $selector 的副本,使用以下 @extend 规则进行修改

#{$extender} {
  @extend #{$extendee};
}

换句话说,将 $selector 中的所有 $extendee 实例替换为 $extendee, $extender。如果 $selector 不包含 $extendee,则按原样返回。

$selector$extendee$extender 选择器可能包含占位符选择器,但不包含父选择器。

另请参阅 selector.replace()

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.extend("a.disabled", "a", ".link"); // a.disabled, .link.disabled
@debug selector.extend("a.disabled", "h1", "h2"); // a.disabled
@debug selector.extend(".guide .info", ".info", ".content nav.sidebar");
// .guide .info, .guide .content nav.sidebar, .content .guide nav.sidebar
游乐场

Sass 语法

@use "sass:selector"

@debug selector.extend("a.disabled", "a", ".link")  // a.disabled, .link.disabled
@debug selector.extend("a.disabled", "h1", "h2")  // a.disabled
@debug selector.extend(".guide .info", ".info", ".content nav.sidebar")
// .guide .info, .guide .content nav.sidebar, .content .guide nav.sidebar
selector.nest($selectors...)
selector-nest($selectors...) //=> selector

$selectors 合并,就像它们在样式表中相互嵌套一样。

$selectors 可能包含占位符选择器。与其他选择器函数不同,除了第一个函数之外,所有函数都可能包含父选择器。

另请参阅 selector.append()

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.nest("ul", "li"); // ul li
@debug selector.nest(".alert, .warning", "p"); // .alert p, .warning p
@debug selector.nest(".alert", "&:hover"); // .alert:hover
@debug selector.nest(".accordion", "&__copy"); // .accordion__copy
游乐场

Sass 语法

@use "sass:selector"

@debug selector.nest("ul", "li")  // ul li
@debug selector.nest(".alert, .warning", "p")  // .alert p, .warning p
@debug selector.nest(".alert", "&:hover")  // .alert:hover
@debug selector.nest(".accordion", "&__copy")  // .accordion__copy
selector.parse($selector)
selector-parse($selector) //=> selector

以选择器值格式返回 $selector

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.parse(".main aside:hover, .sidebar p");
// ((unquote(".main") unquote("aside:hover")),
//  (unquote(".sidebar") unquote("p")))
游乐场

Sass 语法

@use "sass:selector"

@debug selector.parse(".main aside:hover, .sidebar p")
// ((unquote(".main") unquote("aside:hover")),
//  (unquote(".sidebar") unquote("p")))
selector.replace($selector, $original, $replacement)
selector-replace($selector, $original, $replacement) //=> selector

返回 $selector 的副本,其中所有 $original 实例都被 $replacement 替换。

这使用 @extend 规则的智能统一来确保 $replacement 无缝集成到 $selector 中。如果 $selector 不包含 $original,则按原样返回。

$selector$original$replacement 选择器可能包含占位符选择器,但不包含父选择器。

另请参阅 selector.extend()

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.replace("a.disabled", "a", ".link"); // .link.disabled
@debug selector.replace("a.disabled", "h1", "h2"); // a.disabled
@debug selector.replace(".guide .info", ".info", ".content nav.sidebar");
// .guide .content nav.sidebar, .content .guide nav.sidebar
游乐场

Sass 语法

@use "sass:selector"

@debug selector.replace("a.disabled", "a", ".link")  // .link.disabled
@debug selector.replace("a.disabled", "h1", "h2")  // a.disabled
@debug selector.replace(".guide .info", ".info", ".content nav.sidebar")
// .guide .content nav.sidebar, .content .guide nav.sidebar
selector.unify($selector1, $selector2)
selector-unify($selector1, $selector2) //=> selector | null

返回一个选择器,该选择器只匹配 $selector1$selector2 都匹配的元素。

如果 $selector1$selector2 不匹配任何相同的元素,或者没有选择器可以表达它们的重叠,则返回 null

@extend 规则生成的选择器类似,如果 $selector1$selector2 都是复杂选择器,则返回的选择器不能保证匹配 $selector1$selector2 都匹配的所有 元素。

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.unify("a", ".disabled"); // a.disabled
@debug selector.unify("a.disabled", "a.outgoing"); // a.disabled.outgoing
@debug selector.unify("a", "h1"); // null
@debug selector.unify(".warning a", "main a"); // .warning main a, main .warning a
游乐场

Sass 语法

@use "sass:selector"

@debug selector.unify("a", ".disabled")  // a.disabled
@debug selector.unify("a.disabled", "a.outgoing")  // a.disabled.outgoing
@debug selector.unify("a", "h1")  // null
@debug selector.unify(".warning a", "main a")  // .warning main a, main .warning a
selector.simple-selectors($selector)
simple-selectors($selector) //=> list

返回 $selector 中的简单选择器列表。

$selector 必须是包含复合选择器的单个字符串。这意味着它可能不包含组合器(包括空格)或逗号。

返回的列表是逗号分隔的,简单选择器是未引用的字符串。

游乐场

SCSS 语法

@use "sass:selector";

@debug selector.simple-selectors("a.disabled"); // a, .disabled
@debug selector.simple-selectors("main.blog:after"); // main, .blog, :after
游乐场

Sass 语法

@use "sass:selector"

@debug selector.simple-selectors("a.disabled")  // a, .disabled
@debug selector.simple-selectors("main.blog:after")  // main, .blog, :after