sass:meta
- Dart Sass
- since 1.23.0
- LibSass
- ✗
- Ruby Sass
- ✗
Only Dart Sass currently supports loading built-in modules with @use. Users of other implementations must call functions using their global names instead.
Mixins
meta.apply($mixin, $args...)
- Dart Sass
- since 1.69.0
- LibSass
- ✗
- Ruby Sass
- ✗
Includes $mixin with $args. If this is passed a @content block, it’s forwarded to $mixin.
The $mixin must be a mixin value, such as one returned by meta.get-mixin().
@use "sass:meta";
@use "sass:string";
/// Passes each element of $list to a separate invocation of $mixin.
@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);// SASS
@use "sass:meta"
@use "sass:string"
/// Passes each element of $list to a separate invocation of $mixin.
@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)/* CSS */
.font-8px {
font-size: 8px;
}
.font-12px {
font-size: 12px;
}
.font-2rem {
font-size: 2rem;
}meta.load-css($url, $with: null)
- Dart Sass
- since 1.23.0
- LibSass
- ✗
- Ruby Sass
- ✗
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));
}
// SASS
// dark-theme/_code.sass
$border-contrast: false !default
code
background-color: #6b717f
color: #d2e1dd
@if $border-contrast
border-color: #dadbdf
// SASS
// style.sass
@use "sass:meta"
body.dark
$configuration: ("border-contrast": true)
@include meta.load-css("dark-theme/code", $with: $configuration)
/* CSS */
body.dark code {
background-color: #6b717f;
color: #d2e1dd;
border-color: #dadbdf;
}Functions
meta.accepts-content($mixin) //=> boolean
- Dart Sass
- since 1.69.0
- LibSass
- ✗
- Ruby Sass
- ✗
Returns whether the given mixin value can accept a @content block.
This returns true if it’s possible for the mixin to accept a @content block, even if it doesn’t always do so.
meta.calc-args($calc) //=> list
- Dart Sass
- since 1.40.0
- LibSass
- ✗
- Ruby Sass
- ✗
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.
@use 'sass:meta';
@debug meta.calc-args(calc(100px + 10%)); // unquote("100px + 10%")
@debug meta.calc-args(clamp(50px, var(--width), 1000px)); // 50px, unquote("var(--width)"), 1000px// SASS
@use 'sass:meta'
@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
- Dart Sass
- since 1.40.0
- LibSass
- ✗
- Ruby Sass
- ✗
Returns the name of the given calculation.
@use 'sass:meta'; @debug meta.calc-name(calc(100px + 10%)); // "calc" @debug meta.calc-name(clamp(50px, var(--width), 1000px)); // "clamp"
// SASS @use 'sass:meta' @debug meta.calc-name(calc(100px + 10%)) // "calc" @debug meta.calc-name(clamp(50px, var(--width), 1000px)) // "clamp"
meta.call($function, $args...) call($function, $args...)
- Dart Sass
- ✓
- LibSass
- since 3.5.0
- Ruby Sass
- since 3.5.0
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 must be a function value, such as one 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"));
}// SASS
@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"))/* CSS */
.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.
@use 'sass:meta';
@mixin debug-content-exists {
@debug meta.content-exists();
@content;
}
@include debug-content-exists; // false
@include debug-content-exists { // true
// Content!
}// SASS @use 'sass:meta' @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!globalflag. -
extend-selector-pseudoclass, which means that the@extendrule 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@errorrule 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.
This function is deprecated and should be avoided. See the breaking change page for details.
@use "sass:meta";
@debug meta.feature-exists("at-error"); // true
@debug meta.feature-exists("unrecognized"); // false// SASS
@use "sass:meta"
@debug meta.feature-exists("at-error") // true
@debug meta.feature-exists("unrecognized") // falsemeta.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:meta";
@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// SASS
@use "sass:meta"
@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 value 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"));
}// SASS
@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"))/* CSS */
.content {
font-family: Tahoma, Geneva, Arial, sans-serif;
}meta.get-mixin($name, $module: null) //=> function
- Dart Sass
- since 1.69.0
- LibSass
- ✗
- Ruby Sass
- ✗
Returns the mixin value named $name.
If $module is null, this returns the mixin named $name defined in the current module. Otherwise, $module must be a string matching the namespace of a @use rule in the current file, in which case this returns the mixin in that module named $name.
By default, this throws an error if $name doesn’t refer to a mixin.
The returned mixin can be included using meta.apply().
@use "sass:meta";
@use "sass:string";
/// Passes each element of $list to a separate invocation of $mixin.
@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);// SASS
@use "sass:meta"
@use "sass:string"
/// Passes each element of $list to a separate invocation of $mixin.
@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)/* CSS */
.font-8px {
font-size: 8px;
}
.font-12px {
font-size: 12px;
}
.font-2rem {
font-size: 2rem;
}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().
@use "sass:meta";
@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
}// SASS
@use "sass:meta"
@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.
@use "sass:meta";
@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"')// SASS
@use "sass:meta"
@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,
)// SASS
@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)/* CSS */
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.
@use "sass:meta";
@debug meta.mixin-exists("shadow-none"); // false
@mixin shadow-none {
box-shadow: none;
}
@debug meta.mixin-exists("shadow-none"); // true// SASS
@use "sass:meta"
@debug meta.mixin-exists("shadow-none") // false
@mixin shadow-none
box-shadow: none
@debug meta.mixin-exists("shadow-none") // truemeta.module-functions($module) //=> map
- Dart Sass
- since 1.23.0
- LibSass
- ✗
- Ruby Sass
- ✗
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-functions("functions"), "pow"), 3, 4); // 81
// SASS
// _functions.sass
@function pow($base, $exponent)
$result: 1
@for $_ from 1 through $exponent
$result: $result * $base
@return $result
// SASS
@use "sass:map"
@use "sass:meta"
@use "functions"
@debug meta.module-functions("functions") // ("pow": get-function("pow"))
@debug meta.call(map.get(meta.module-functions("functions"), "pow"), 3, 4) // 81
meta.module-mixins($module) //=> map
- Dart Sass
- since 1.69.0
- LibSass
- ✗
- Ruby Sass
- ✗
Returns all the mixins defined in a module, as a map from mixin names to mixin values.
The $module parameter must be a string matching the namespace of a @use rule in the current file.
// _mixins.scss
@mixin stretch() {
align-items: stretch;
display: flex;
flex-direction: row;
}
@use "sass:map";
@use "sass:meta";
@use "mixins";
@debug meta.module-mixins("mixins"); // => ("stretch": get-mixin("stretch"))
.header {
@include meta.apply(map.get(meta.module-mixins("mixins"), "stretch"));
}
// SASS // _mixins.scss @mixin stretch() align-items: stretch display: flex flex-direction: row
// SASS
@use "sass:map"
@use "sass:meta"
@use "mixins"
@debug meta.module-mixins("mixins") // => ("stretch": get-mixin("stretch"))
.header
@include meta.apply(map.get(meta.module-mixins("mixins"), "stretch"))
/* CSS */
.header {
align-items: stretch;
display: flex;
flex-direction: row;
}meta.module-variables($module) //=> map
- Dart Sass
- since 1.23.0
- LibSass
- ✗
- Ruby Sass
- ✗
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
// )
// SASS // _variables.sass $hopbush: #c69 $midnight-blue: #036 $wafer: #e1d7d2
// SASS
@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.
@use 'sass:meta'; @debug meta.type-of(10px); // number @debug meta.type-of(10px 20px 30px); // list @debug meta.type-of(()); // list
// SASS @use 'sass:meta' @debug meta.type-of(10px) // number @debug meta.type-of(10px 20px 30px) // list @debug meta.type-of(()) // list
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().
@use "sass:meta";
@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
}// SASS
@use "sass:meta"
@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–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/modules/meta