# 1、基本定义 Sass 提供了许多内置模块,其中包含有用的函数 (以及偶尔的 mixin )。这些模块可以像任何用户定义的样式表一样用 @use 规则加载,它们的函数可以像任何其他模块成员一样被调用。所有内置模块 url 都以 sass: 开头,以表明它们是 sass 本身的一部分。 在引入 Sass 模块系统之前,所有 Sass 功能在任何时候都是全局可用的。许多函数仍然有全局别名 (这些在它们的文档中列出)。Sass 团队不鼓励使用它们,并最终会弃用它们,但现在它们仍然可用,以兼容旧的 Sass 版本和 LibSass (它还不支持模块系统)。 即使在新的模块系统中,一些函数也只能全局可用,要么是因为它们具有特殊的求值行为 (if ()),要么是因为它们在内置的 CSS 函数之上添加了额外的行为
Sass 提供以下内置模块:
math 模块提供了对数字进行操作的函数。 string 模块可以很容易地组合、搜索或拆分字符串。 color 模块基于现有的颜色生成新的颜色,使构建颜色主题变得容易。 list 模块允许您访问和修改列表中的值。 map 模块可以在映射中查找与键相关的值,以及更多。 selector 模块提供了对 sass 强大的选择器引擎的访问。 meta 模块公开了 sass 内部工作的细节。 SassScript 定义了多种函数,有些甚至可以通过普通的 CSS 语句调用:
p { color : hsl ( 0, 100%, 50%) ; } p { color : #ff0000; }
# 2、内置函数 - math 模块截取可能有用的几个
# math.$pi@use 'sass:math' ; @debug math.$pi ;
# math.ceil(入)、math.floor(舍)、math.round(四舍五入)@use 'sass:math' ; @debug math.ceil ( 4) ; @debug math.ceil ( 4.2) ; @debug math.ceil ( 4.9) ; @debug math.floor ( 4) ; @debug math.floor ( 4.2) ; @debug math.floor ( 4.9) ; @debug math.round ( 4) ; @debug math.round ( 4.2) ; @debug math.round ( 4.9) ;
# math.clamp将n u m b e r 限制在 number限制在 n u m b e r 限 制 在 min 和m a x 之间。如果 max之间。如果 m a x 之 间 。 如 果 number 小于m i n ,则返回 min,则返回 m i n , 则 返 回 min,如果大于m a x ,则返回 max,则返回 m a x , 则 返 回 max。 $min, n u m b e r 和 number和 n u m b e r 和 max 必须有兼容的单位,或者都是无单位的。
@use 'sass:math' ; @debug math.clamp ( -1, 0, 1) ; @debug math.clamp ( 1px, -1px, 10px) ; @debug math.clamp ( -1in, 1cm, 10mm) ;
# math.max、math.min 取最大值、最小值@use 'sass:math' ; @debug math.max ( 1px, 4px) ; $widths : 50px, 30px, 100px; @debug math.max ( $widths ...) ;
各种计算角度的值,用的时候再细研究吧
# math.div返回n u m b e r 1 除以 number1除以 n u m b e r 1 除 以 number2 的结果。 两个数共有的单位就消掉了。n u m b e r 1 中没有出现在 number1中没有出现在 n u m b e r 1 中 没 有 出 现 在 number2 中的单位最终会出现在返回值的分子中,而n u m b e r 2 中没有出现在 number2中没有出现在 n u m b e r 2 中 没 有 出 现 在 number1 中的单位最终会出现在其分母中。
@use 'sass:math' ; @debug math.div ( 1, 2) ; @debug math.div ( 100px, 5px) ; @debug math.div ( 100px, 5) ; @debug math.div ( 100px, 5s) ;
# math.percentage@use 'sass:math' ; @debug math.percentage ( 0.2) ; @debug math.percentage ( math.div ( 100px, 50px) ) ;
# math.random如果l i m i t 为空,则返回 0 到 1 之间的随机十进制数。如果 limit为空,则返回0到1之间的随机十进制数。如果 l i m i t 为 空 , 则 返 回 0 到 1 之 间 的 随 机 十 进 制 数 。 如 果 limit 是大于或等于 1 的数字,则返回 1 和 $limit 之间的随机整数。
@use 'sass:math' ; @debug math.random ( ) ; @debug math.random ( ) ; @debug math.random ( 100px) ;
# 3、内置函数 - string 模块# string.quote 加引号@use "sass:string" ; @debug string.quote ( Helvetica) ; @debug string.quote ( "Helvetica" ) ;
# string.index 取索引值@debug string.index ( "Helvetica Neue" , "Helvetica" ) ; @debug string.index ( "Helvetica Neue" , "Neue" ) ;
# string.insert 插入值@debug string.insert ( "Roboto Bold" , " Mono" , 7) ; @debug string.insert ( "Roboto Bold" , " Mono" , -6) ; @debug string.insert ( "Roboto" , " Bold" , 100) ; @debug string.insert ( "Bold" , "Roboto " , -100) ;
# string.length 获取长度@debug string.length ( "Helvetica Neue" ) ; @debug string.length ( bold) ; @debug string.length ( "" ) ;
# string.slice 截取@debug string.slice ( "Helvetica Neue" , 11) ; @debug string.slice ( "Helvetica Neue" , 1, 3) ; @debug string.slice ( "Helvetica Neue" , 1, -6) ;
# string.split 分割返回s t r i n g 的子字符串列表,这些子字符串由 string的子字符串列表,这些子字符串由 s t r i n g 的 子 字 符 串 列 表 , 这 些 子 字 符 串 由 separator 分隔。这些子字符串中不包括分隔符。如果 分隔符。 如果 分 隔 符 。 如 果 limit 是 1 或更大的数字,则该函数最多分割两个分隔符 ( 因此最多返回 分隔符(因此最多返回 分 隔 符 ( 因 此 最 多 返 回 limit + 1 个字符串)。最后一个子字符串包含字符串的其余部分,包括所有剩余的 $ 分隔符。
@debug string.split ( "Segoe UI Emoji" , " " ) ; @debug string.split ( "Segoe UI Emoji" , " " , $limit : 1) ;
# string.to-upper-case、to-lower-case 转大小写@debug string.to-upper-case ( "Bold" ) ; @debug string.to-upper-case ( sans-serif) ; @debug string.to-lower-case ( "Bold" ) ; @debug string.to-lower-case ( SANS-SERIF) ;
# 4、内置函数 - color 模块(略)# 5、内置函数 - list 模块# list.append在 Sass 中,每个映射都是一个包含每个键 / 值对的双元素列表的列表。例如,(1:2,3:4) 计数为 (1 2,3 4)。所以所有这些函数也适用于映射! 单个值也算作列表。所有这些函数都将 1px 视为包含值 1px 的列表。 返回l i s t 的副本,并在末尾添加 list的副本,并在末尾添加 l i s t 的 副 本 , 并 在 末 尾 添 加 val。 当s e p a r a t o r 为“逗号”、“空格”或“斜杠”时,返回的列表分别以“逗号”、“空格”或“斜杠”分隔。如果它是 a u t o ( 默认值 ) ,返回的列表将使用与 separator为“逗号”、“空格”或“斜杠”时,返回的列表分别以“逗号”、“空格”或“斜杠”分隔。如果它是auto(默认值),返回的列表将使用与 s e p a r a t o r 为 “ 逗 号 ” 、 “ 空 格 ” 或 “ 斜 杠 ” 时 , 返 回 的 列 表 分 别 以 “ 逗 号 ” 、 “ 空 格 ” 或 “ 斜 杠 ” 分 隔 。 如 果 它 是 a u t o ( 默 认 值 ) , 返 回 的 列 表 将 使 用 与 list 相同的分隔符 (如果l i s t 没有分隔符,则使用空格 ) 。其他值是不允许的。注意,与 l i s t . j o i n ( ) 不同,如果 list没有分隔符,则使用空格)。其他值是不允许的。 注意,与list.join()不同,如果 l i s t 没 有 分 隔 符 , 则 使 用 空 格 ) 。 其 他 值 是 不 允 许 的 。 注 意 , 与 l i s t . j o i n ( ) 不 同 , 如 果 val 是一个列表,它将嵌套在返回的列表中,而不是将其所有元素添加到返回的列表中。
list.append ( $list , $val , $separator : auto) @use 'sass:list' ; @debug list.append ( 10px 20px, 30px) ; @debug list.append ( ( blue, red) , green) ; @debug list.append ( 10px 20px, 30px 40px) ; @debug list.append ( 10px, 20px, $separator : comma) ; @debug list.append ( ( blue, red) , green, $separator : space) ;
# 其他(目前想不到他们的用途)index ( $list , $value ) @use 'sass:list' ; @debug list.index ( 1px solid red, 1px) ; @debug list.index ( 1px solid red, solid) ; @debug list.index ( 1px solid red, dashed) ; list. is-bracketed ( $list ) @debug list.is-bracketed ( 1px 2px 3px) ; @debug list.is-bracketed ( [1px, 2px, 3px]) ; list.join ( $list1 , $list2 , $separator : auto, $bracketed : auto) @debug list.join ( 10px 20px, 30px 40px) ; @debug list.join ( ( blue, red) , ( #abc, #def) ) ; @debug list.join ( 10px, 20px) ; @debug list.join ( 10px, 20px, $separator : comma) ; @debug list.join ( ( blue, red) , ( #abc, #def) , $separator : space) ; @debug list.join ( [10px], 20px) ; @debug list.join ( 10px, 20px, $bracketed : true ) ; list.length ( $list ) @debug list.length ( 10px) ; @debug list.length ( 10px 20px 30px) ; @debug list.length ( ( width : 10px, height : 20px) ) ; list.separator ( $list ) @debug list.separator ( 1px 2px 3px) ; @debug list.separator ( ( 1px, 2px, 3px) ) ; @debug list.separator ( 'Helvetica' ) ; @debug list.separator ( ( ) ) ; list.set-nth ( $list , $n , $value ) @debug list.set-nth ( 10px 20px 30px, 1, 2em) ; @debug list.set-nth ( 10px 20px 30px, -1, 8em) ; @debug list.set-nth ( ( Helvetica, Arial, sans-serif) , 3, Roboto) ; list.slash ( $elements ...) @debug list.slash ( 1px, 50px, 100px) ; 将 $lists 中的每个列表合并为一个由子列表组成的列表。 返回列表中的每个元素包含 $lists 中该位置的所有元素。返回的列表与 $lists 中最短的列表一样长。 返回的列表总是以逗号分隔,子列表总是以空格分隔。 */ list.zip ( $lists ...) @debug list.zip ( 10px 50px 100px, short mid long) ; @debug list.zip ( 10px 50px 100px, short mid) ;
# 6、内置函数 - map 模块# map.deep-merge与 map.merge () 相同,只是嵌套的映射值也会递归合并。实用指数 ★
map.deep-merge ( $map1 , $map2 ) $helvetica-light : ( "weights" : ( "lightest" : 100, "light" : 300 ) ) ; $helvetica-heavy : ( "weights" : ( "medium" : 500, "bold" : 700 ) ) ; @debug map.deep-merge ( $helvetica-light , $helvetica-heavy ) ; @debug map.merge ( $helvetica-light , $helvetica-heavy ) ;
# 其他map.get ( $map , $key , $keys ...) @use "sass:map" $config : ( a : ( b : ( c : d) ) ) @debug map.get ( $config , a, b, c) $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.get ( $font-weights , "medium" ) ; @debug map.get ( $font-weights , "extra-bold" ) ; 返回目标映射中与 $keys 中最后一个键相关联的值。如果映射没有与键相关联的值,或者映射中缺少 $keys 中的任何键或引用的值不是映射,则返回 null。*/ $fonts : ( "Helvetica" : ( "weights" : ( "regular" : 400, "medium" : 500, "bold" : 700 ) ) ) ; @debug map.get ( $fonts , "Helvetica" , "weights" , "regular" ) ; @debug map.get ( $fonts , "Helvetica" , "colors" ) ; map.deep-remove ( $map , $key , $keys ...) $fonts : ( "Helvetica" : ( "weights" : ( "regular" : 400, "medium" : 500, "bold" : 700 ) ) ) ; @debug map.deep-remove ( $fonts , "Helvetica" , "weights" , "regular" ) ; map.has-key ( $map , $key , $keys ...) $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.has-key ( $font-weights , "regular" ) ; @debug map.has-key ( $font-weights , "bolder" ) ; @debug map.has-key ( $fonts , "Helvetica" , "weights" , "regular" ) ; @debug map.has-key ( $fonts , "Helvetica" , "colors" ) ; $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.keys ( $font-weights ) ; 在实践中,要映射的实际参数 map.merge ($map1, $keys..., $map2) 作为 map.merge ($map1, $args…) 传递。它们在这里被描述为 $map1, $keys…, $map2 仅作说明之用。 如果没有传递 $keys,则返回一个包含 $map1 和 $map2 中所有键和值的新映射。 如果 $map1 和 $map2 具有相同的键,则 $map2 的值优先。 返回的映射中出现在 $map1 中的所有键的顺序与 $map1 中的顺序相同。来自 $map2 的新键出现在映射的末尾。 */ $light-weights : ( "lightest" : 100, "light" : 300) ; $heavy-weights : ( "medium" : 500, "bold" : 700) ; @debug map.merge ( $light-weights , $heavy-weights ) ; 如果 $keys 不为空,则跟随 $keys 查找要合并的嵌套映射。如果 $keys 中的任何键在映射中缺失或引用了一个非映射的值,则将该键处的值设置为空映射。 返回 $map1 的副本,其中目标映射被一个包含目标映射和 $map2 中所有键和值的新映射所替换。 */ $fonts : ( "Helvetica" : ( "weights" : ( "lightest" : 100, "light" : 300 ) ) ) ; $heavy-weights : ( "medium" : 500, "bold" : 700) ; @debug map.merge ( $fonts , "Helvetica" , "weights" , $heavy-weights ) ; $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.remove ( $font-weights , "regular" ) ; @debug map.remove ( $font-weights , "regular" , "bold" ) ; @debug map.remove ( $font-weights , "bolder" ) ; 在实践中,要映射的实际参数 map.set ($map, $keys..., $key, $value) 作为 map.set ($map, $args...) 传递。它们在这里被描述为 $map, $keys..., $key, $value 仅作说明之用。 如果没有传递 $keys,则返回 $map 的副本,其中 $key 处的值设置为 $value。 */ map.set ( $map , $key , $value ) map.set ( $map , $keys ..., $key , $value ) $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.set ( $font-weights , "regular" , 300) ; $fonts : ( "Helvetica" : ( "weights" : ( "regular" : 400, "medium" : 500, "bold" : 700 ) ) ) ; @debug map.set ( $fonts , "Helvetica" , "weights" , "regular" , 300) ; map.values ( $map ) map-values ( $map ) $font-weights : ( "regular" : 400, "medium" : 500, "bold" : 700) ; @debug map.values ( $font-weights ) ;
# 7、内置函数 - selector 模块这个模块中的函数检查和操作选择器。无论何时返回一个选择器,它总是一个逗号分隔的列表 (选择器列表),其中包含空格分隔的列表 (复杂选择器),其中包含未加引号的字符串 (复合选择器)。例如,选择器。 main aside:hover, .sidebar p 将被返回为:
@debug ( ( unquote ( ".main" ) unquote ( "aside:hover" ) ) , ( unquote ( ".sidebar" ) unquote ( "p" ) ) ) ;
这些函数的选择器参数可以采用相同的格式,但它们也可以只是普通字符串 (加引号或不加引号),或者是组合。例如, .main aside:hover, .sidebar p 是一个有效的选择器参数。
返回选择器 $super 是否匹配选择器s u b 匹配的所有元素。即使 ‘ sub匹配的所有元素。 即使` s u b 匹 配 的 所 有 元 素 。 即 使 ‘ super 匹配的元素多于 s u b ‘ ,仍然返回 t r u e 。 sub`,仍然返回true。 s u b ‘ , 仍 然 返 回 t r u e 。 super 和 $sub 选择器可以包含占位符选择器,但不能包含父选择器。
selector.is-superselector ( $super , $sub ) is-superselector ( $super , $sub ) @use "sass:selector" ; @debug selector.is-superselector ( "a" , "a.disabled" ) ; @debug selector.is-superselector ( "a.disabled" , "a" ) ; @debug selector.is-superselector ( "a" , "sidebar a" ) ; @debug selector.is-superselector ( "sidebar a" , "a" ) ; @debug selector.is-superselector ( "a" , "a" ) ;
组合没有后代组合符的选择符——也就是说,它们之间没有空格。如果 ‘ 选择符——也就是说,它们之间没有空格。 如果` 选 择 符 — — 也 就 是 说 , 它 们 之 间 没 有 空 格 。 如 果 ‘ selectors 中的任何选择器是一个选择器列表,则每个复杂选择器将单独组合。 $selectors 可以包含占位符选择符,但不能包含父选择符。 参见 selector.nest ()`。
selector.append ( $selectors ...) selector-append ( $selectors ...) @debug selector.append ( "a" , ".disabled" ) ; @debug selector.append ( ".accordion" , "__copy" ) ; @debug selector.append ( ".accordion" , "__copy, __image" ) ;
像 @extend 规则一样扩展 $selector 。 返回一个使用以下 @extend 规则修改过的 $selector 的副本: 换句话说,将 $selector 中的所有 $extendee 实例替换为 $extendee , $extender 。如果 $selector 不包含 $extendee ,则按原样返回。$selector 、 $extendee 和 $extender 选择符可以包含占位符选择符,但不包含父选择符。 参见 selector.replace() 。
selector.extend ( $selector , $extendee , $extender ) selector-extend ( $selector , $extendee , $extender ) #{$extender} { @extend #{$extendee} ; } @debug selector.extend ( "a.disabled" , "a" , ".link" ) ; @debug selector.extend ( "a.disabled" , "h1" , "h2" ) ; @debug selector.extend ( ".guide .info" , ".info" , ".content nav.sidebar" ) ;
嵌套 $selectors ,就像它们在样式表中彼此嵌套一样。$selectors 可以包含占位符选择符。与其他选择器函数不同的是,除了第一个选择器之外,它们都可以包含父选择器。
selector.nest ( $selectors ...) selector-nest ( $selectors ...) @debug selector.nest ( "ul" , "li" ) ; @debug selector.nest ( ".alert, .warning" , "p" ) ; @debug selector.nest ( ".alert" , "&:hover" ) ; @debug selector.nest ( ".accordion" , "&__copy" ) ;
以选择器值格式返回 $selector。
@debug selector.parse ( ".main aside:hover, .sidebar p" ) ;
返回s e l e c t o r 的副本,其中 selector的副本,其中 s e l e c t o r 的 副 本 , 其 中 original 的所有实例都替换为 $replacement 。 它使用 @extend 规则的智能统一来确保r e p l a c e m e n t 被无缝地集成到 ‘ replacement被无缝地集成到` r e p l a c e m e n t 被 无 缝 地 集 成 到 ‘ selector 中。如果 s e l e c t o r ‘ 不包含 ‘ selector`不包含` s e l e c t o r ‘ 不 包 含 ‘ original ,则按原样返回。 s e l e c t o r ‘ 、 ‘ selector`、` s e l e c t o r ‘ 、 ‘ original 和 $replacement 选择符可以包含占位符选择符,但不包含父选择符。 另请参见 selector.extend ()`。
selector.replace ( $selector , $original , $replacement ) selector-replace ( $selector , $original , $replacement ) @debug selector.replace ( "a.disabled" , "a" , ".link" ) ; @debug selector.replace ( "a.disabled" , "h1" , "h2" ) ; @debug selector.replace ( ".guide .info" , ".info" , ".content nav.sidebar" ) ;
返回一个选择器,它只匹配与s e l e c t o r 1 和 selector1和 s e l e c t o r 1 和 selector2 同时匹配的元素。 如果s e l e c t o r 1 和 selector1和 s e l e c t o r 1 和 selector2 不匹配任何相同的元素,或者没有选择器可以表示它们的重叠,则返回 null。 与 @extend 规则生成的选择器一样,如果s e l e c t o r 1 和 selector1和 s e l e c t o r 1 和 selector2 都是复杂选择器,则返回的选择器不能保证匹配它们所匹配的所有元素。
@debug selector.unify ( "a" , ".disabled" ) ; @debug selector.unify ( "a.disabled" , "a.outgoing" ) ; @debug selector.unify ( "a" , "h1" ) ; @debug selector.unify ( ".warning a" , "main a" ) ;
返回s e l e c t o r 中的简单选择器列表。 selector中的简单选择器列表。 s e l e c t o r 中 的 简 单 选 择 器 列 表 。 selector 必须是一个包含复合选择器的字符串。这意味着它不能包含组合符 (包括空格) 或逗号。 返回的列表以逗号分隔,简单的选择器是未加引号的字符串。
selector.simple-selectors ( $selector ) simple-selectors ( $selector ) @debug selector.simple-selectors ( "a.disabled" ) ; @debug selector.simple-selectors ( "main.blog:after" ) ;
# Mixins 实用指数 ★★包含带有a r g s 的 args的 a r g s 的 mixin。如果传递给它一个 @content 块,它会被转发到m i x i n 。 mixin。 m i x i n 。 mixin 必须是一个 mixin 值,比如 meta.get-mixin() 返回的值。
meta.apply ( $mixin , $args ...) @use "sass:meta" ; @use "sass:string" ; @mixin apply-to-all ( $mixin , $list ) { @each $element in $list { @include meta.apply ( $mixin , $element ) ; } } @mixin font-class ( $size ) { .font-#{$size} { font-size : $size ; } } $sizes : [8px, 12px, 2rem]; @include apply-to-all ( meta.get-mixin ( "font-class" ) , $sizes ) ;
在u r l 处加载模块,并包括它的 C S S ,就像它是作为这个 m i x i n 的内容编写的一样。 url处加载模块,并包括它的CSS,就像它是作为这个mixin的内容编写的一样。 u r l 处 加 载 模 块 , 并 包 括 它 的 C S S , 就 像 它 是 作 为 这 个 m i x i n 的 内 容 编 写 的 一 样 。 with 参数为模块提供配置;如果它被传递,它必须是一个从变量名 (不带) 到要在加载模块中使用的变量值的映射。如果 )到要在加载模块中使用的变量值的映射。 如果 ) 到 要 在 加 载 模 块 中 使 用 的 变 量 值 的 映 射 。 如 果 url 是相对的,它被解释为相对于包含 meta.load-css () 的文件。 比如 @use 规则: 这将只计算给定模块一次,即使它以不同的方式加载了多次。 这不能为已经加载的模块提供配置 $url 参数应该是一个包含 url 的字符串,就像您传递给 @use 规则一样。它不应该是一个 CSS url ()!
meta.load-css ( $url , $with : null ) $border-contrast : false !default ; code { background-color : #6b717f; color : #d2e1dd; @if $border-contrast { border-color : #dadbdf; } } @use "sass:meta" ; body.dark { @include meta.load-css ( "dark-theme/code" , $with : ( "border-contrast" : true ) ) ; }
# Functions# meta.accepts-content返回给定的 mixin 值是否可以接受 @content 块。 如果 mixin 可以接受 @content 块,则返回 true,即使它并不总是这样做。
meta.calc-args ( $calc ) @debug meta.calc-args ( calc ( 100px + 10%) ) ; @debug meta.calc-args ( clamp ( 50px, var ( --width) , 1000px) ) ;
使用a r g s 调用 args调用 a r g s 调 用 function 并返回结果。 $function 必须是一个函数值,例如 meta.get-function() 返回的值。
meta.call ( $function , $args ...) call ( $function , $args ...) @use "sass:list" ; @use "sass:meta" ; @use "sass:string" ; @function remove-where ( $list , $condition ) { $new-list : ( ) ; $separator : list.separator ( $list ) ; @each $element in $list { @if not meta.call ( $condition , $element ) { $new-list : list.append ( $new-list , $element , $separator : $separator ) ; } } @return $new-list ; } $fonts : Tahoma, Geneva, "Helvetica Neue" , Helvetica, Arial, sans-serif; .content { @function contains-helvetica ( $string ) { @return string.index ( $string , "Helvetica" ) ; } font-family : remove-where ( $fonts , meta.get-function ( "contains-helvetica" ) ) ; }
# meta.content-exists返回当前 mixin 是否被传递了 @content 块。 如果在 mixin 外部调用,则抛出错误。
meta.content-exists ( ) content-exists ( ) @use 'sass:meta' ; @mixin debug-content-exists { @debug meta.content-exists ( ) ; @content ; } @include debug-content-exists; @include debug-content-exists {
返回当前 Sass 实现是否支持f e a t u r e 。 feature。 f e a t u r e 。 feature 必须是一个字符串。目前公认的特征有: 全局变量遮蔽,这意味着局部变量将遮蔽全局变量,除非它带有!global 标志。 Extend-selector-pseudoclass,这意味着 @extend 规则将影响嵌套在伪类中的选择器,如:not ()。 units-level3,这意味着单位算法支持 CSS Values 和 units Level 3 中定义的单位。 At-error,这意味着支持 @error 规则。 custom-property,这意味着自定义属性声明值不支持除插值之外的任何表达式。 对于任何无法识别的 $ 特性返回 false。
@use "sass:meta" ; @debug meta.feature-exists ( "at-error" ) ; @debug meta.feature-exists ( "unrecognized" ) ;
返回一个名为n a m e 的函数是否被定义为内置函数或用户定义函数。如果传递了 name的函数是否被定义为内置函数或用户定义函数。 如果传递了 n a m e 的 函 数 是 否 被 定 义 为 内 置 函 数 或 用 户 定 义 函 数 。 如 果 传 递 了 module,这也会检查名为m o d u l e 的模块是否有函数定义。 module的模块是否有函数定义。 m o d u l e 的 模 块 是 否 有 函 数 定 义 。 module 必须是与当前文件中 @use 规则的命名空间匹配的字符串。
meta.function-exists ( $name , $module : null ) function-exists ( $name ) @use "sass:meta" ; @use "sass:math" ; @debug meta.function-exists ( "div" , "math" ) ; @debug meta.function-exists ( "scale-color" ) ; @debug meta.function-exists ( "add" ) ; @function add ( $num1 , $num2 ) { @return $num1 + $num2 ; } @debug meta.function-exists ( "add" ) ;
返回名为n a m e 的函数值。如果 name的函数值。 如果 n a m e 的 函 数 值 。 如 果 module 为空,这将返回名为n a m e 的函数,但没有命名空间 ( 包括全局内置函数 ) 。否则, name的函数,但没有命名空间(包括全局内置函数)。否则, n a m e 的 函 数 , 但 没 有 命 名 空 间 ( 包 括 全 局 内 置 函 数 ) 。 否 则 , module 必须是与当前文件中 @use 规则的命名空间匹配的字符串,在这种情况下,它返回模块中名为n a m e 的函数。默认情况下,如果 name的函数。 默认情况下,如果 n a m e 的 函 数 。 默 认 情 况 下 , 如 果 name 没有引用 Sass 函数,就会抛出错误。但是,如果 $css 为 true,它将返回一个普通的 css 函数。 返回的 mixin 可以使用 meta.apply () 包含。
@use "sass:meta" ; @use "sass:string" ; @mixin apply-to-all ( $mixin , $list ) { @each $element in $list { @include meta.apply ( $mixin , $element ) ; } } @mixin font-class ( $size ) { .font-#{$size} { font-size : $size ; } } $sizes : [8px, 12px, 2rem]; @include apply-to-all ( meta.get-mixin ( "font-class" ) , $sizes ) ;
如果m o d u l e 为 n u l l ,则返回当前模块中定义的名为 module为null,则返回当前模块中定义的名为 m o d u l e 为 n u l l , 则 返 回 当 前 模 块 中 定 义 的 名 为 name 的 mixin。否则,m o d u l e 必须是与当前文件中 @ u s e 规则的命名空间匹配的字符串,在这种情况下,它返回名为 module必须是与当前文件中@use规则的命名空间匹配的字符串,在这种情况下,它返回名为 m o d u l e 必 须 是 与 当 前 文 件 中 @ u s e 规 则 的 命 名 空 间 匹 配 的 字 符 串 , 在 这 种 情 况 下 , 它 返 回 名 为 name 的模块中的 mixin。 默认情况下,如果n a m e 没有引用 m i x i n ,就会抛出错误。但是,如果 name没有引用mixin,就会抛出错误。但是,如果 n a m e 没 有 引 用 m i x i n , 就 会 抛 出 错 误 。 但 是 , 如 果 css 为 true,它将返回一个普通的 css 函数。 可以使用 meta.call () 调用返回的函数。
SCSS SYNTAX @use "sass:list" ; @use "sass:meta" ; @use "sass:string" ; @function remove-where ( $list , $condition ) { $new-list : ( ) ; $separator : list.separator ( $list ) ; @each $element in $list { @if not meta.call ( $condition , $element ) { $new-list : list.append ( $new-list , $element , $separator : $separator ) ; } } @return $new-list ; } $fonts : Tahoma, Geneva, "Helvetica Neue" , Helvetica, Arial, sans-serif; .content { @function contains-helvetica ( $string ) { @return string.index ( $string , "Helvetica" ) ; } font-family : remove-where ( $fonts , meta.get-function ( "contains-helvetica" ) ) ; }
返回全局变量 name (不带) 是否存在。 如果 m o d u l e 为 n u l l ,则返回一个名为 name 的变量是否存在,但没有命名空间。否则,m o d u l e 必须是与当前文件中 @ u s e 规则的命名空间匹配的字符串,在这种情况下,它返回该模块是否有一个名为 name 的变量。 参见 meta.variable-exists ()。
meta.global-variable-exists ( $name , $module : null ) global-variable-exists ( $name , $module : null ) @use "sass:meta" ; @debug meta.global-variable-exists ( "var1" ) ; $var1 : value; @debug meta.global-variable-exists ( "var1" ) ; h1 { $var2 : value; @debug meta.global-variable-exists ( "var2" ) ; }
返回 $value 的字符串表示形式。 返回任何 Sass 值的表示形式,而不仅仅是那些可以在 CSS 中表示的值。因此,它的返回值不能保证是有效的 CSS。 此函数用于调试;它的输出格式不能保证跨 Sass 版本或实现保持一致。
meta.inspect ( $value ) inspect ( $value ) @use "sass:meta" ; @debug meta.inspect ( 10px 20px 30px) ; @debug meta.inspect ( ( "width" : 200px) ) ; @debug meta.inspect ( null ) ; @debug meta.inspect ( "Helvetica" ) ;
返回传递给 mixin 或接受任意参数的函数的关键字。a r g s 参数必须是一个参数列表。关键字作为一个映射返回,从参数名作为未引号字符串 ( 不包括 args 参数必须是一个参数列表。 关键字作为一个映射返回,从参数名作为未引号字符串 (不包括 ar g**s 参数必须是一个参数列表。关键字作为一个映射返回,从参数名作为未引号字符串 (不包括) 到这些参数的值。
meta.keywords ( $args ) keywords ( $args ) @use "sass:meta" ; @mixin syntax-colors ( $args ...) { @debug meta.keywords ( $args ) ; @each $name , $color in meta.keywords ( $args ) { pre span.stx-#{$name} { color : $color ; } } } @include syntax-colors ( $string : #080, $comment : #800, $variable : #60b, )
返回一个名为 n a m e 的 m i x i n 是否存在。如果 name 的 mixin 是否存在。 如果 nam**e 的 mix in 是否存在。如果 module 为 null,则返回是否存在一个名为 n a m e 但没有命名空间的 m i x i n 。否则, name 但没有命名空间的 mixin。否则,nam**e 但没有命名空间的 mix in 。否则,module 必须是与当前文件中 @use 规则的命名空间匹配的字符串,在这种情况下,它返回该模块是否有一个名为 $name 的 mixin。
@use "sass:meta" ; @debug meta.mixin-exists ( "shadow-none" ) ; @mixin shadow-none { box-shadow : none; } @debug meta.mixin-exists ( "shadow-none" ) ;
返回模块中定义的所有函数,作为从函数名到函数值的映射。 $module 参数必须是与当前文件中 @use 规则的命名空间匹配的字符串。
@function pow ( $base , $exponent ) { $result : 1; @for $_ from 1 through $exponent { $result : $result * $base ; } @return $result ; } @use "sass:map" ; @use "sass:meta" ; @use "functions" ; @debug meta.module-functions ( "functions" ) ; @debug meta.call ( map.get ( meta.module-functions ( "functions" ) , "pow" ) , 3, 4) ;
返回模块中定义的所有 mixin,作为从 mixin 名称到 mixin 值的映射。 $module 参数必须是与当前文件中 @use 规则的命名空间匹配的字符串。
@mixin stretch ( ) { align-items : stretch; display : flex; flex-direction : row; } @use "sass:map" ; @use "sass:meta" ; @use "mixins" ; @debug meta.module-mixins ( "mixins" ) ; .header { @include meta.apply ( map.get ( meta.module-mixins ( "mixins" ) , "stretch" ) ) ; }
返回模块中定义的所有变量,作为从变量名 (不带) 到这些变量值的映射。 )到这些变量值的映射。 ) 到 这 些 变 量 值 的 映 射 。 module 参数必须是与当前文件中 @use 规则的命名空间匹配的字符串。
$hopbush : #c69; $midnight-blue : #036; $wafer : #e1d7d2; @use "sass:meta" ; @use "variables" ; @debug meta.module-variables ( "variables" ) ;
返回 $value 的类型。 它可以返回以下值: 数字字符串颜色列表映射计算 bool 空函数 arglist 将来可能会添加新的可能值。它可以返回 list 或 map for (),这取决于它是否是由 map 函数返回的。
meta.type-of ( $value ) type-of ( $value ) @use 'sass:meta' ; @debug meta.type-of ( 10px) ; @debug meta.type-of ( 10px 20px 30px) ; @debug meta.type-of ( ( ) ) ;
meta.variable-exists ( $name ) variable-exists ( $name ) @use "sass:meta" ; @debug meta.variable-exists ( "var1" ) ; $var1 : value; @debug meta.variable-exists ( "var1" ) ; h1 { $var2 : value; @debug meta.variable-exists ( "var2" ) ; }