将像素转换为 rems 的 LESS mixin 递归错误
LESS mixin recursion error to convert pixels to rems
我正在尝试制作一个 mixin 以 属性 将像素转换为相对 ems。我希望它足够灵活,允许任何 属性 与任意数量的像素值一起使用。
关于如何将多个值添加到单个 属性 而没有我在 for 循环中创建的递归错误的任何想法?
所需的用法示例 1:
.pixels-to-rems(font-size; 10);
期望的输出:
font-size: 10px;
font-size: 1rem;
所需的用法示例 2:
.pixels-to-rems(padding; 10,0,20,10);
期望的输出:
padding: 10px, 0px, 20px, 10px;
padding: 1rem, 0px, 2rem, 1rem;
这是 mixin 的原样。
@baseFontSize: 10px;
.pixels-to-rems(@property, @pxvals) {
@pxValue: null;
@remValue: null;
.for(@pxvals); .-each(@pxval) {
@pxValue: @pxValue @pxval;
@remValue: @remValue (@pxval / @baseFontSize);
}
@{property}: ~"@{pxValue}px";
@{property}: ~"@{remValue}rem";
}
.for() 发现混入 here
参见 Merge 功能。唯一的技巧是合并语句会将值连接到 same 属性 规则中,因此您必须隔离 px
和 rem
规则通过一些黑客攻击。例如像这样:
usage {
.pixels-to-rems(padding, 10 0 20 10);
.pixels-to-rems(font-size, 50);
}
// impl.:
@base-font-size: 10px;
.pixels-to-rems(@p, @vs) {
.for(@vs); .-each(@v) {
@{p}+_: 1px * @v;
@{p}@{-}+_: 1rem * @v / @base-font-size;
}
@-: ~" ";
}
// .for-each impl. (stripped from the snipped linked in the question)
.for(@array) {.for-impl_(length(@array))}
.for-impl_(@i) when (@i > 1) {.for-impl_((@i - 1))}
.for-impl_(@i) when (@i > 0) {.-each(extract(@array, @i))}
Demo.
我正在尝试制作一个 mixin 以 属性 将像素转换为相对 ems。我希望它足够灵活,允许任何 属性 与任意数量的像素值一起使用。
关于如何将多个值添加到单个 属性 而没有我在 for 循环中创建的递归错误的任何想法?
所需的用法示例 1:
.pixels-to-rems(font-size; 10);
期望的输出:
font-size: 10px;
font-size: 1rem;
所需的用法示例 2:
.pixels-to-rems(padding; 10,0,20,10);
期望的输出:
padding: 10px, 0px, 20px, 10px;
padding: 1rem, 0px, 2rem, 1rem;
这是 mixin 的原样。
@baseFontSize: 10px;
.pixels-to-rems(@property, @pxvals) {
@pxValue: null;
@remValue: null;
.for(@pxvals); .-each(@pxval) {
@pxValue: @pxValue @pxval;
@remValue: @remValue (@pxval / @baseFontSize);
}
@{property}: ~"@{pxValue}px";
@{property}: ~"@{remValue}rem";
}
.for() 发现混入 here
参见 Merge 功能。唯一的技巧是合并语句会将值连接到 same 属性 规则中,因此您必须隔离 px
和 rem
规则通过一些黑客攻击。例如像这样:
usage {
.pixels-to-rems(padding, 10 0 20 10);
.pixels-to-rems(font-size, 50);
}
// impl.:
@base-font-size: 10px;
.pixels-to-rems(@p, @vs) {
.for(@vs); .-each(@v) {
@{p}+_: 1px * @v;
@{p}@{-}+_: 1rem * @v / @base-font-size;
}
@-: ~" ";
}
// .for-each impl. (stripped from the snipped linked in the question)
.for(@array) {.for-impl_(length(@array))}
.for-impl_(@i) when (@i > 1) {.for-impl_((@i - 1))}
.for-impl_(@i) when (@i > 0) {.-each(extract(@array, @i))}
Demo.