I am trying to make a mixin to propery convert pixels to relative ems. I would like it to be flexible enough to allow any property to be used with any number of pixel values
See Merge feature. The only trick is that the merge statement will concatenate values into the same property rule, thus you'll have to isolate px
and rem
rules via some hack. For example like this:
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.