Last active
August 1, 2023 21:28
-
-
Save elvism16/f72127086960775a06a6bad36f61ab23 to your computer and use it in GitHub Desktop.
sass-function to convert px to rem or em / extracted from the foundation-framework
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is the default html and body font-size for the base rem value. | |
$rem-base: 16px !default; | |
// STRIP UNIT | |
// It strips the unit of measure and returns it | |
@function strip-unit($num) { | |
@return $num / ($num * 0 + 1); | |
} | |
// CONVERT TO REM | |
@function convert-to-rem($value, $base-value: $rem-base) { | |
$value: strip-unit($value) / strip-unit($base-value) * 1rem; | |
@if ($value == 0rem) { $value: 0; } // Turn 0rem into 0 | |
@return $value; | |
} | |
// REM CALC | |
// New Syntax, allows to optionally calculate on a different base value to counter compounding effect of rem's. | |
// Call with 1, 2, 3 or 4 parameters, 'px' is not required but supported: | |
// | |
// rem-calc(10 20 30px 40); | |
// | |
// Space delimited, if you want to delimit using comma's, wrap it in another pair of brackets | |
// | |
// rem-calc((10, 20, 30, 40px)); | |
// | |
// Optionally call with a different base (eg: 8px) to calculate rem. | |
// | |
// rem-calc(16px 32px 48px, 8px); | |
// | |
// If you require to comma separate your list | |
// | |
// rem-calc((16px, 32px, 48), 8px); | |
// | |
// Example: | |
// | |
// font-size: rem-calc(24); | |
@function rem-calc($values, $base-value: $rem-base) { | |
$max: length($values); | |
@if $max == 1 { @return convert-to-rem(nth($values, 1), $base-value); } | |
$remValues: (); | |
@for $i from 1 through $max { | |
$remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value)); | |
} | |
@return $remValues; | |
} | |
@function em-calc($values) { | |
$remValues: rem-calc($values); | |
$max: length($remValues); | |
@if $max == 1 { @return strip-unit(nth($remValues, 1)) * 1em; } | |
$emValues: (); | |
@for $i from 1 through $max { | |
$emValues: append($emValues, strip-unit(nth($remValues, $i)) * 1em); | |
} | |
@return $emValues; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment