/
ensure-unit.scss
47 lines (45 loc) · 1.27 KB
/
ensure-unit.scss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@use "sass:math";
@use "sass:meta";
@use "rem2px" as *;
@use "em2rem" as *;
@use "rem2em" as *;
@use "rem2px" as *;
@use "px2em" as *;
@use "px2rem" as *;
@use "num-to-length" as *;
@use "strip-unit" as *;
/// Convert a number to another unit
/// @param {Number} $num - Size value
/// @param {String} $unit - The required unit
/// @param {Number} $default [null] - Set a default font size (fallback to global variable $font-size)
/// @return {Number}
@function ensure-unit($num, $unit: px, $default: null) {
$num-unit: math.unit($num);
@if $num-unit == $unit {
@return $num;
}
$default: if(
$default,
$default,
if(meta.global-variable-exists("font-size"), $font-size, 16px)
);
@if $num-unit == em and $unit == px {
@return rem2px($num, $default);
}
@if $num-unit == em and $unit == rem {
@return em2rem($num);
}
@if $num-unit == rem and $unit == em {
@return rem2em($num);
}
@if $num-unit == rem and $unit == px {
@return rem2px($num, $default);
}
@if $num-unit == px and $unit == em {
@return px2em($num, $default);
}
@if $num-unit == px and $unit == rem {
@return px2rem($num, $default);
}
@return num-to-length(strip-unit($num), $unit);
}