lessless-mixins

How to pass a property name as an argument to a mixin in less


I want to make a function/mixin that will make a color darker if it is already dark but lighter when it is light (normalize/extremeize?)

Is it possible to do this by passing a property name (color, background-color, border-right-color, etc)?

.normalize(@color, @amount, @prop: "color") when (lightness(@color) >= 50%)
{
    @prop:lighten(@color, @amount);
}
.normalize(@color, @amount, @prop: "color") when (lightness(@color) < 50%)
{
    @prop:darken(@color, @amount);
}

Solution

  • This is currently a feature request on less.js github. So look out for it in less.js 1.4.. until then you can hack it like so...

    .mixin(@prop, @value) {
        Ignore: ~"a;@{prop}:@{value}";
    }
    

    Not very nice and you get an extra property but its the only way at the moment.