Parametric Mixins

In Less, mixins can take in parameters and behave like functions.
Mixins with the same name can be defined multiple times. When applying such a mixin, all applicable mixins will be substituted.
.m(@color) {
   color: @color;
}
.m(@color; @padding: 2px) {
  background: @color;
  padding: @padding * 2;
}
.m(@color; @padding; @margin: 2px) {
  border: 1px @color solid;
  margin: @margin (@margin+@padding) @margin (@margin+@padding);
}
div {
   .m(green);
}
span {
   .m(@padding:3px; @color:red; @margin:5px)
}

div {
  color: #008000;
  background: #008000;
  padding: 4px;
}
span {
  border: 1px #ff0000 solid;
  margin: 5px 8px 5px 8px;
}
@arguments matches the entire arguments list. @rest matches the remaining arguments list.
.m (@a; @b; @c:5px; @d:10px){
   margin: @arguments;
}
div {
   .m(1px,2px);
}

.n (@a; @rest...){
   margin: @a @rest;
}
span {
   .n(1px, 2px, 3px, 4px);
}

div {
  margin: 1px 2px 5px 10px;
}
span {
  margin: 1px 2px 3px 4px;
}