Skip to content

Sass: Numeric Operators

How Sass handles arithmetic operations (+, -, *, %) with numbers and units, including unit conversion, unary operators, and division using math.div() for CSS calculations.

Sass supports the standard set of mathematical operators for numbers. They automatically convert between compatible units.

  • <expression> + <expression> adds the first expression's value to the second's.
  • <expression> - <expression> subtracts the first expression's value from the second's.
  • <expression> * <expression> multiplies the first expression's value by the second's.
  • <expression> % <expression> returns the remainder of the first expression's value divided by the second's. This is known as the modulo operator.
@debug 10s + 15s;  // 25s
@debug 1in - 10px; // 0.8958333333in
@debug 5px * 3px;  // 15px*px
@debug 1in % 9px;  // 0.0625in

Unit-less numbers can be used with numbers of any unit.

@debug 100px + 50; // 150px
@debug 4s * 10;    // 40s

Numbers with incompatible units can't be used with addition, subtraction, or modulo.

@debug 100px + 10s;
//     ^^^^^^^^^^^
// Error: Incompatible units px and s.

Unary Operators

You can also write + and - as unary operators, which take only one value:

  • +<expression> returns the expression's value without changing it.
  • -<expression> returns the negative version of the expression's value.
@debug +(5s + 7s);     // 12s
@debug -(50px + 30px); // -80px
@debug -(10px - 15px); // 5px

Division Operation

In Sass, division is done with the math.div() function because the symbol /, used in many programming languages, in CSS is used as a separator.

Units

Sass has powerful support for manipulating units based on how real-world unit calculations work. When two numbers are multiplied, their units are multiplied as well. When one number is divided by another, the result takes its numerator units from the first number and its denominator units from the second. A number can have any number of units in the numerator and/or denominator.

Example:

@debug 4px * 6px; // 24px*px (read "square pixels")
@debug math.div(5px, 2s); // 2.5px/s (read "pixels per second")

// 3.125px*deg/s*em (read "pixel-degrees per second-em")
@debug 5px * math.div(math.div(30deg, 2s), 24em); 

$degrees-per-second: math.div(20deg, 1s);
@debug $degrees-per-second; // 20deg/s
@debug math.div(1, $degrees-per-second); // 0.05s/deg

Sass will automatically convert between compatible units, although which unit it will choose for the result depends on which implementation of Sass you're using.If you try to combine incompatible units, like 1in + 1em, Sass will throw an error.

// CSS defines one inch as 96 pixels.
@debug 1in + 6px; // 102px or 1.0625in

@debug 1in + 1s;
//     ^^^^^^^^
// Error: Incompatible units s and in.
Navigation