我写了一个非常简单的Sass mixin,用于将像素值转换为rem值(参见Jonathan Snook的article on the benefits of using rems)。这是代码:
// Mixin Code
$base_font_size: 10; // 10px
@mixin rem($key,$px) {
#{$key}: #{$px}px;
#{$key}: #{$px/$base_font_size}rem;
}
// Include syntax
p {
@include rem(font-size,14);
}
// Rendered CSS
p {
font-size: 14px;
font-size: 1.4rem;
}
这个mixin工作得很好,但是我对它的include语法有点不满意。看,我宁愿将像素值传递给include语句而不是简单的数字。这是一个小细节,但它会将语义含义添加到当前不存在的include语句中。这是我尝试将像素值传递给include语句时得到的结果:
// Include syntax
p {
@include rem(font-size,14px);
}
// Rendered CSS
p {
font-size: 14pxpx;
font-size: 1.4pxrem;
}
一旦Sass看到一个像素值被传递到一个等式中,它就会输出'px'。 我想删除那个度量单位就好像我在JavaScript中使用parseFloat或parseInt一样。如何在Sass mixin中这样做?
答案 0 :(得分:8)
这是您可以使用的功能。基于Foundation全局辅助函数。
@function strip-unit($num) {
@return $num / ($num * 0 + 1);
}
样品使用:
... Removed for brevity ...
@mixin rem( $key: font-size, $val ) {
#{$key}: strip-unit( $val ) * 1px;
#{$key}: ( strip-unit( $val ) / $base-font-size ) * 1rem;
}
答案 1 :(得分:7)
从数字中删除单位是通过除法完成的,就像在代数中一样。
$base-font-size: 10px;
$rem-ratio: $base-font-size / 1rem;
@mixin rem($key,$px) {
#{$key}: $px;
#{$key}: $px/$rem-ratio;
}
// Include syntax
p {
@include rem(font-size,14px);
}
// Rendered CSS
p {
font-size: 14px;
font-size: 1.4rem;
}
Sass中的单位可以被视为真实的数学,所以px / px / rem只能用于rem。享受吧!