W3cubDocs

/Sass

sass:math

Compatibility:
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.

Variables

math.$e
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Equal to the value of the mathematical constant e.

@debug math.$e; // 2.7182818285
@debug math.$e // 2.7182818285
math.$pi
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Equal to the value of the mathematical constant π.

@debug math.$pi; // 3.1415926536
@debug math.$pi // 3.1415926536

Bounding Functions

math.ceil($number)
ceil($number) //=> number

Rounds $number up to the next highest whole number.

@debug math.ceil(4); // 4
@debug math.ceil(4.2); // 5
@debug math.ceil(4.9); // 5
@debug math.ceil(4)  // 4
@debug math.ceil(4.2)  // 5
@debug math.ceil(4.9)  // 5
math.clamp($min, $number, $max) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Restricts $number to the range between $min and $max. If $number is less than $min this returns $min, and if it’s greater than $max this returns $max.

$min, $number, and $max must have compatible units, or all be unitless.

@debug math.clamp(-1, 0, 1); // 0
@debug math.clamp(1px, -1px, 10px); // 1px
@debug math.clamp(-1in, 1cm, 10mm); // 10mm
@debug math.clamp(-1, 0, 1) // 0
@debug math.clamp(1px, -1px, 10px) // 1px
@debug math.clamp(-1in, 1cm, 10mm) // 10mm
math.floor($number)
floor($number) //=> number

Rounds $number down to the next lowest whole number.

@debug math.floor(4); // 4
@debug math.floor(4.2); // 4
@debug math.floor(4.9); // 4
@debug math.floor(4)  // 4
@debug math.floor(4.2)  // 4
@debug math.floor(4.9)  // 4
math.max($number...)
max($number...) //=> number

Returns the highest of one or more numbers.

@debug math.max(1px, 4px); // 4px

$widths: 50px, 30px, 100px;
@debug math.max($widths...); // 100px
@debug math.max(1px, 4px)  // 4px

$widths: 50px, 30px, 100px
@debug math.max($widths...)  // 100px
math.min($number...)
min($number...) //=> number

Returns the lowest of one or more numbers.

@debug math.min(1px, 4px); // 1px

$widths: 50px, 30px, 100px;
@debug math.min($widths...); // 30px
@debug math.min(1px, 4px)  // 1px

$widths: 50px, 30px, 100px
@debug math.min($widths...)  // 30px
math.round($number)
round($number) //=> number

Rounds $number to the nearest whole number.

@debug math.round(4); // 4
@debug math.round(4.2); // 4
@debug math.round(4.9); // 5
@debug math.round(4)  // 4
@debug math.round(4.2)  // 4
@debug math.round(4.9)  // 5

Distance Functions

math.abs($number)
abs($number) //=> number

Returns the absolute value of $number. If $number is negative, this returns -$number, and if $number is positive, it returns $number as-is.

@debug math.abs(10px); // 10px
@debug math.abs(-10px); // 10px
@debug math.abs(10px) // 10px
@debug math.abs(-10px) // 10px
math.hypot($number...) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the length of the n-dimensional vector that has components equal to each $number. For example, for three numbers a, b, and c, this returns the square root of a² + b² + c².

The numbers must either all have compatible units, or all be unitless. And since the numbers’ units may differ, the output takes the unit of the first number.

@debug math.hypot(3, 4); // 5

$lengths: 1in, 10cm, 50px;
@debug math.hypot($lengths...); // 4.0952775683in
@debug math.hypot(3, 4) // 5

$lengths: 1in, 10cm, 50px
@debug math.hypot($lengths...) // 4.0952775683in

Exponential Functions

math.log($number, $base: null) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the logarithm of $number with respect to $base. If $base is null, the natural log is calculated.

$number and $base must be unitless.

@debug math.log(10); // 2.302585093
@debug math.log(10, 10); // 1
@debug math.log(10) // 2.302585093
@debug math.log(10, 10) // 1
math.pow($base, $exponent) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Raises $base to the power of $exponent.

$base and $exponent must be unitless.

@debug math.pow(10, 2); // 100
@debug math.pow(100, math.div(1, 3)); // 4.6415888336
@debug math.pow(5, -2); // 0.04
@debug math.pow(10, 2) // 100
@debug math.pow(100, math.div(1, 3)) // 4.6415888336
@debug math.pow(5, -2) // 0.04
math.sqrt($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the square root of $number.

$number must be unitless.

@debug math.sqrt(100); // 10
@debug math.sqrt(math.div(1, 3)); // 0.5773502692
@debug math.sqrt(-1); // NaN
@debug math.sqrt(100) // 10
@debug math.sqrt(math.div(1, 3)) // 0.5773502692
@debug math.sqrt(-1) // NaN

Trigonometric Functions

math.cos($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the cosine of $number.

$number must be an angle (its units must be compatible with deg) or unitless. If $number has no units, it is assumed to be in rad.

@debug math.cos(100deg); // -0.1736481777
@debug math.cos(1rad); // 0.5403023059
@debug math.cos(1); // 0.5403023059
@debug math.cos(100deg) // -0.1736481777
@debug math.cos(1rad) // 0.5403023059
@debug math.cos(1) // 0.5403023059
math.sin($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the sine of $number.

$number must be an angle (its units must be compatible with deg) or unitless. If $number has no units, it is assumed to be in rad.

@debug math.sin(100deg); // 0.984807753
@debug math.sin(1rad); // 0.8414709848
@debug math.sin(1); // 0.8414709848
@debug math.sin(100deg) // 0.984807753
@debug math.sin(1rad) // 0.8414709848
@debug math.sin(1) // 0.8414709848
math.tan($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the tangent of $number.

$number must be an angle (its units must be compatible with deg) or unitless. If $number has no units, it is assumed to be in rad.

@debug math.tan(100deg); // -5.6712818196
@debug math.tan(1rad); // 1.5574077247
@debug math.tan(1); // 1.5574077247
@debug math.tan(100deg) // -5.6712818196
@debug math.tan(1rad) // 1.5574077247
@debug math.tan(1) // 1.5574077247
math.acos($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the arccosine of $number in deg.

$number must be unitless.

@debug math.acos(0.5); // 60deg
@debug math.acos(2); // NaNdeg
@debug math.acos(0.5) // 60deg
@debug math.acos(2) // NaNdeg
math.asin($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the arcsine of $number in deg.

$number must be unitless.

@debug math.asin(0.5); // 30deg
@debug math.asin(2); // NaNdeg
@debug math.asin(0.5) // 30deg
@debug math.asin(2) // NaNdeg
math.atan($number) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the arctangent of $number in deg.

$number must be unitless.

@debug math.atan(10); // 84.2894068625deg
@debug math.atan(10) // 84.2894068625deg
math.atan2($y, $x) //=> number
Compatibility:
Dart Sass
since 1.25.0
LibSass
Ruby Sass

Returns the 2-argument arctangent of $y and $x in deg.

$y and $x must have compatible units or be unitless.

💡 Fun fact:

math.atan2($y, $x) is distinct from atan(math.div($y, $x)) because it preserves the quadrant of the point in question. For example, math.atan2(1, -1) corresponds to the point (-1, 1) and returns 135deg. In contrast, math.atan(math.div(1, -1)) and math.atan(math.div(-1, 1)) resolve first to atan(-1), so both return -45deg.

@debug math.atan2(-1, 1); // 135deg
@debug math.atan2(-1, 1) // 135deg

Unit Functions

math.compatible($number1, $number2)
comparable($number1, $number2) //=> boolean

Returns whether $number1 and $number2 have compatible units.

If this returns true, $number1 and $number2 can safely be added, subtracted, and compared. Otherwise, doing so will produce errors.

⚠️ Heads up!

The global name of this function is comparable, but when it was added to the sass:math module the name was changed to compatible to more clearly convey what the function does.

@debug math.compatible(2px, 1px); // true
@debug math.compatible(100px, 3em); // false
@debug math.compatible(10cm, 3mm); // true
@debug math.compatible(2px, 1px)  // true
@debug math.compatible(100px, 3em)  // false
@debug math.compatible(10cm, 3mm)  // true
math.is-unitless($number)
unitless($number) //=> boolean

Returns whether $number has no units.

@debug math.is-unitless(100); // true
@debug math.is-unitless(100px); // false
@debug math.is-unitless(100)  // true
@debug math.is-unitless(100px)  // false
math.unit($number)
unit($number) //=> quoted string

Returns a string representation of $number‘s units.

⚠️ Heads up!

This function is intended for debugging; its output format is not guaranteed to be consistent across Sass versions or implementations.

@debug math.unit(100); // ""
@debug math.unit(100px); // "px"
@debug math.unit(5px * 10px); // "px*px"
@debug math.unit(math.div(5px, 1s)); // "px/s"
@debug math.unit(100)  // ""
@debug math.unit(100px)  // "px"
@debug math.unit(5px * 10px)  // "px*px"
@debug math.unit(math.div(5px, 1s))  // "px/s"

Other Functions

math.div($number1, $number2) //=> number
Compatibility:
Dart Sass
since 1.33.0
LibSass
Ruby Sass

Returns the result of dividing $number1 by $number2.

Any units shared by both numbers will be canceled out. Units in $number1 that aren’t in $number2 will end up in the return value’s numerator, and units in $number2 that aren’t in $number1 will end up in its denominator.

⚠️ Heads up!

For backwards-compatibility purposes, this returns the exact same result as the deprecated / operator, including concatenating two strings with a / character between them. However, this behavior will be removed eventually and shouldn’t be used in new stylesheets.

@debug math.div(1, 2); // 0.5
@debug math.div(100px, 5px); // 20
@debug math.div(100px, 5); // 20px
@debug math.div(100px, 5s); // 20px/s
@debug math.div(1, 2)  // 0.5
@debug math.div(100px, 5px)  // 20
@debug math.div(100px, 5)  // 20px
@debug math.div(100px, 5s)  // 20px/s
math.percentage($number)
percentage($number) //=> number

Converts a unitless $number (usually a decimal between 0 and 1) to a percentage.

💡 Fun fact:

This function is identical to $number * 100%.

@debug math.percentage(0.2); // 20%
@debug math.percentage(math.div(100px, 50px)); // 200%
@debug math.percentage(0.2)  // 20%
@debug math.percentage(math.div(100px, 50px))  // 200%
math.random($limit: null)
random($limit: null) //=> number

If $limit is null, returns a random decimal number between 0 and 1.

@debug math.random(); // 0.2821251858
@debug math.random(); // 0.6221325814
@debug math.random()  // 0.2821251858
@debug math.random()  // 0.6221325814

If $limit is a number greater than or equal to 1, returns a random whole number between 1 and $limit.

⚠️ Heads up!

random() ignores units in $limit. This behavior is deprecated and random($limit) will return a random integer with the same units as the $limit argument.

@debug math.random(100px); // 42
@debug math.random(100px)  // 42
@debug math.random(10); // 4
@debug math.random(10000); // 5373
@debug math.random(10)  // 4
@debug math.random(10000)  // 5373

© 2006–2022 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/modules/math