[SOLVED] How do you strip the unit from any number in SASS?

Issue

I know you can strip units from numbers in SASS when you know the unit before-hand like this:

$number: 16px;
$without-unit: 16px / 1px;
@warn $without-unit; // 16

But is it possible to strip the unit from a number without knowing what the unit is first?

@function strip-unit($number) {
  // magic code here...
}

@warn strip-unit(16px); // 16

Solution

UPDATE: You should never actually need to use this function. Sass math is very smart about units, and I have never seen a use-case in which stripping units was a better option than simply using correct math to get what you need. See the Sass issue thread where this has been discussed at length.

It’s a clever function, but if you ever feel like using it, there’s probably a problem with your math. Don’t fall back on this function. Fix your math instead.

You need to divide by 1 of the same unit. If you use unit(), you get a string instead of a number, but if you multiply by zero and add 1, you have what you need:

@function strip-units($number) {
  @return $number / ($number * 0 + 1);
}

UPDATE: In the latest versions of Sass, that becomes:

@use 'sass:math';

@function strip-units($number) {
  @return math.div($number, ($number * 0 + 1));
}

That works. strip-units(13.48cm) will return 13.48.

Answered By – Miriam Suzanne

Answer Checked By – Terry (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.