Only Dart Sass currently supports loading built-in modules with @use. Users of other implementations must call functions using their global names instead.
meta.load-css($url, $with: null)
Only Dart Sass currently supports this mixin.
Loads the module at $url and includes its CSS as though it were written as the contents of this mixin. The $with parameter provides configuration for the modules; if it’s passed, it must be a map from variable names (without $) to the values of those variables to use in the loaded module.
If $url is relative, it’s interpreted as relative to the file in which meta.load-css() is included.
Like the @use rule:
This will only evaluate the given module once, even if it’s loaded multiple times in different ways.
This cannot provide configuration to a module that’s already been loaded, whether or not it was already loaded with configuration.
Unlike the @use rule:
This doesn’t make any members from the loaded module available in the current module.
This can be used anywhere in a stylesheet. It can even be nested within style rules to create nested styles!
The module URL being loaded can come from a variable and include interpolation.
The $url parameter should be a string containing a URL like you’d pass to the @use rule. It shouldn’t be a CSS url()!
// dark-theme/_code.scss
$border-contrast: false !default;
code {
background-color: #6b717f;
color: #d2e1dd;
@if $border-contrast {
border-color: #dadbdf;
}
}
// style.scss
@use "sass:meta";
body.dark {
@include meta.load-css("dark-theme/code",
$with: ("border-contrast": true));
}
// dark-theme/_code.sass
$border-contrast: false !default
code
background-color: #6b717f
color: #d2e1dd
@if $border-contrast
border-color: #dadbdf
// style.sass
@use "sass:meta"
body.dark
$configuration: ("border-contrast": true)
@include meta.load-css("dark-theme/code", $with: $configuration)
body.dark code {
background-color: #6b717f;
color: #d2e1dd;
border-color: #dadbdf;
}meta.calc-args($calc) //=> list
Returns the arguments for the given calculation.
If an argument is a number or a nested calculation, it’s returned as that type. Otherwise, it’s returned as an unquoted string.
@debug meta.calc-args(calc(100px + 10%)); // unquote("100px + 10%")
@debug meta.calc-args(clamp(50px, var(--width), 1000px)); // 50px, unquote("var(--width)"), 1000px@debug meta.calc-args(calc(100px + 10%)) // unquote("100px + 10%")
@debug meta.calc-args(clamp(50px, var(--width), 1000px)) // 50px, unquote("var(--width)"), 1000pxmeta.calc-name($calc) //=> quoted string
Returns the name of the given calculation.
meta.call($function, $args...) call($function, $args...)
In older versions of LibSass and Ruby Sass, the call() function took a string representing a function’s name. This was changed to take a function value instead in preparation for a new module system where functions are no longer global and so a given name may not always refer to the same function.
Passing a string to call() still works in all implementations, but it’s deprecated and will be disallowed in future versions.
Invokes $function with $args and returns the result.
The $function should be a function returned by meta.get-function().
@use "sass:list";
@use "sass:meta";
@use "sass:string";
/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@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"));
}@use "sass:list"
@use "sass:meta"
@use "sass:string"
/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@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")).content {
font-family: Tahoma, Geneva, Arial, sans-serif;
}meta.content-exists() content-exists() //=> boolean
Returns whether the current mixin was passed a @content block.
Throws an error if called outside of a mixin.
@mixin debug-content-exists {
@debug meta.content-exists();
@content;
}
@include debug-content-exists; // false
@include debug-content-exists { // true
// Content!
}@mixin debug-content-exists @debug meta.content-exists() @content @include debug-content-exists // false @include debug-content-exists // true // Content!
meta.feature-exists($feature) feature-exists($feature) //=> boolean
Returns whether the current Sass implementation supports $feature.
The $feature must be a string. The currently recognized features are:
global-variable-shadowing, which means that a local variable will shadow a global variable unless it has the !global flag.extend-selector-pseudoclass, which means that the @extend rule will affect selectors nested in pseudo-classes like :not().units-level3, which means that unit arithmetic supports units defined in CSS Values and Units Level 3.at-error, which means that the @error rule is supported.custom-property, which means that custom property declaration values don’t support any expressions other than interpolation.Returns false for any unrecognized $feature.
meta.function-exists($name, $module: null) function-exists($name) //=> boolean
Returns whether a function named $name is defined, either as a built-in function or a user-defined function.
If $module is passed, this also checks the module named $module for the function definition. $module must be a string matching the namespace of a [@use rule][] in the current file.
@use "sass:math";
@debug meta.function-exists("div", "math"); // true
@debug meta.function-exists("scale-color"); // true
@debug meta.function-exists("add"); // false
@function add($num1, $num2) {
@return $num1 + $num2;
}
@debug meta.function-exists("add"); // true@use "sass:math"
@debug meta.function-exists("div", "math") // true
@debug meta.function-exists("scale-color") // true
@debug meta.function-exists("add") // false
@function add($num1, $num2)
@return $num1 + $num2
@debug meta.function-exists("add") // truemeta.get-function($name, $css: false, $module: null) get-function($name, $css: false, $module: null) //=> function
Returns the function named $name.
If $module is null, this returns the function named $name without a namespace (including global built-in functions). Otherwise, $module must be a string matching the namespace of a @use rule in the current file, in which case this returns the function in that module named $name.
By default, this throws an error if $name doesn’t refer to Sass function. However, if $css is true, it instead returns a plain CSS function.
The returned function can be called using meta.call().
@use "sass:list";
@use "sass:meta";
@use "sass:string";
/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@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"));
}@use "sass:list"
@use "sass:meta"
@use "sass:string"
/// Return a copy of $list with all elements for which $condition returns `true`
/// removed.
@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")).content {
font-family: Tahoma, Geneva, Arial, sans-serif;
}meta.global-variable-exists($name, $module: null) global-variable-exists($name, $module: null) //=> boolean
Returns whether a global variable named $name (without the $) exists.
If $module is null, this returns whether a variable named $name without a namespace exists. Otherwise, $module must be a string matching the namespace of a @use rule in the current file, in which case this returns whether that module has a variable named $name.
See also meta.variable-exists().
@debug meta.global-variable-exists("var1"); // false
$var1: value;
@debug meta.global-variable-exists("var1"); // true
h1 {
// $var2 is local.
$var2: value;
@debug meta.global-variable-exists("var2"); // false
}@debug meta.global-variable-exists("var1") // false
$var1: value
@debug meta.global-variable-exists("var1") // true
h1
// $var2 is local.
$var2: value
@debug meta.global-variable-exists("var2") // falsemeta.inspect($value) inspect($value) //=> unquoted string
Returns a string representation of $value.
Returns a representation of any Sass value, not just those that can be represented in CSS. As such, its return value is not guaranteed to be valid CSS.
This function is intended for debugging; its output format is not guaranteed to be consistent across Sass versions or implementations.
@debug meta.inspect(10px 20px 30px); // unquote("10px 20px 30px")
@debug meta.inspect(("width": 200px)); // unquote('("width": 200px)')
@debug meta.inspect(null); // unquote("null")
@debug meta.inspect("Helvetica"); // unquote('"Helvetica"')@debug meta.inspect(10px 20px 30px) // unquote("10px 20px 30px")
@debug meta.inspect(("width": 200px)) // unquote('("width": 200px)')
@debug meta.inspect(null) // unquote("null")
@debug meta.inspect("Helvetica") // unquote('"Helvetica"')meta.keywords($args) keywords($args) //=> map
Returns the keywords passed to a mixin or function that takes arbitrary arguments. The $args argument must be an argument list.
The keywords are returned as a map from argument names as unquoted strings (not including $) to the values of those arguments.
@use "sass:meta";
@mixin syntax-colors($args...) {
@debug meta.keywords($args);
// (string: #080, comment: #800, variable: #60b)
@each $name, $color in meta.keywords($args) {
pre span.stx-#{$name} {
color: $color;
}
}
}
@include syntax-colors(
$string: #080,
$comment: #800,
$variable: #60b,
)@use "sass:meta"
@mixin syntax-colors($args...)
@debug meta.keywords($args)
// (string: #080, comment: #800, variable: #60b)
@each $name, $color in meta.keywords($args)
pre span.stx-#{$name}
color: $color
@include syntax-colors($string: #080, $comment: #800, $variable: #60b)pre span.stx-string {
color: #080;
}
pre span.stx-comment {
color: #800;
}
pre span.stx-variable {
color: #60b;
}meta.mixin-exists($name, $module: null) mixin-exists($name, $module: null) //=> boolean
Returns whether a mixin named $name exists.
If $module is null, this returns whether a mixin named $name without a namespace exists. Otherwise, $module must be a string matching the namespace of a @use rule in the current file, in which case this returns whether that module has a mixin named $name.
meta.module-functions($module) //=> map
Only Dart Sass currently supports this function.
Returns all the functions defined in a module, as a map from function names to function values.
The $module parameter must be a string matching the namespace of a @use rule in the current file.
// _functions.scss
@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"); // ("pow": get-function("pow"))
@debug meta.call(map.get(meta.module-variables("functions"), "pow"), 3, 4); // 16
// _functions.sass
@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") // ("pow": get-function("pow"))
@debug meta.call(map.get(meta.module-variables("functions"), "pow"), 3, 4) // 16
meta.module-variables($module) //=> map
Only Dart Sass currently supports this function.
Returns all the variables defined in a module, as a map from variable names (without $) to the values of those variables.
The $module parameter must be a string matching the namespace of a @use rule in the current file.
// _variables.scss $hopbush: #c69; $midnight-blue: #036; $wafer: #e1d7d2;
@use "sass:meta";
@use "variables";
@debug meta.module-variables("variables");
// (
// "hopbush": #c69,
// "midnight-blue": #036,
// "wafer": #e1d7d2
// )
// _variables.sass $hopbush: #c69 $midnight-blue: #036 $wafer: #e1d7d2
@use "sass:meta"
@use "variables"
@debug meta.module-variables("variables")
// (
// "hopbush": #c69,
// "midnight-blue": #036,
// "wafer": #e1d7d2
// )
meta.type-of($value) type-of($value) //=> unquoted string
Returns the type of $value.
This can return the following values:
New possible values may be added in the future. It may return either list or map for (), depending on whether or not it was returned by a map function.
meta.variable-exists($name) variable-exists($name) //=> boolean
Returns whether a variable named $name (without the $) exists in the current scope.
See also meta.global-variable-exists().
@debug meta.variable-exists("var1"); // false
$var1: value;
@debug meta.variable-exists("var1"); // true
h1 {
// $var2 is local.
$var2: value;
@debug meta.variable-exists("var2"); // true
}@debug meta.variable-exists("var1") // false
$var1: value
@debug meta.variable-exists("var1") // true
h1
// $var2 is local.
$var2: value
@debug meta.variable-exists("var2") // true
© 2006–2022 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/modules/meta