使用LESSCS的用户定义函数?

使用LESSCS的用户定义函数?,less,Less,我最近刚进入LessCSS,我觉得这是一个主要的限制,我想知道是否有办法做到这一点??我想说,我在某个地方读到,Sass允许用户定义函数,但是lesscs也会这样做吗 我想做的是: @fs: 16; // either return the value .s(@t,@s,@u) { // return @t/@s*@u; } #elem { margin-top: .s(30,@fs,1em); width: .s(900,@fs,1em); .child {

我最近刚进入LessCSS,我觉得这是一个主要的限制,我想知道是否有办法做到这一点??我想说,我在某个地方读到,Sass允许用户定义函数,但是lesscs也会这样做吗

我想做的是:

@fs: 16;

// either return the value
.s(@t,@s,@u) {
    // return @t/@s*@u;
}
#elem {
    margin-top: .s(30,@fs,1em);
    width: .s(900,@fs,1em);
    .child {
        width: .s(100,900,100%);
    }
}

// or have a property argument
.s(@t,@s,@u,@p) {
    @{p}: @t/@s*@u;
}
#elem {
    .s(30,@fs,1em,margin-top);
    .s(900,@fs,1em,width);
    .child {
        .s(100,900,100%,width);
    }
}
我唯一能弄明白的方法是,但它非常有限,因为我必须有多个混音:

.s(@t,@s,@u,@p) when (@p = margin-top) { margin-top: @t/@s*@u; }
// margin[-top|-right|-bottom|-left]
// padding[-top|-right|-bottom|-left]
.s(@t,@s,@u,@p) when (@p = width) { width: @t/@s*@u; }
.s(@t,@s,@u,@p) when (@p = height) { height: @t/@s*@u; }

我知道我总是可以修改less.js文件来添加一个间隔函数,比如内置的
round()
ceil()
函数。但是,这扼杀了使用lesshp、Crunch和SimpLess编译用于生产的.less文件的选项。

据我所知,没有属性参数:您必须将其写下来

也就是说,函数将返回计算值或指令(属性和计算值)

CSS中没有数千个属性,它不是一个包含数百个类和函数的CMS,所以你的列表不会像你想象的那么长。如果您想做这样复杂的事情,您应该使用其他CSS预处理器或后端语言来生成CSS。或者最好保持简单。
也就是说:

LESPHP有一个简单的扩展接口,您可以在其中实现用户函数,这些函数将在编译期间以较少的代码公开。不过,它们可能有点棘手,因为您需要使用LESSHPP类型的系统


请注意,您还可以轻松地向默认的Less编译器添加自定义函数,这使您能够使用客户端
Less.js
编译器进行测试,并使用命令行
lessc
编译器进行生产

小于1.x

  • 从github下载并解压缩源代码,网址为:
  • 运行
    npm安装
  • 打开
    lib/functions.js
    文件
  • 树中添加自定义函数(
    returncenter()
    ),函数对象,例如:

    tree.functions = {
    returncenter: function() {
    return new(tree.Anonymous)('center');
    },
    //original function below
    }
    
  • 运行
    grunt dist

  • 在前面的步骤之后,您可以在HTML中包含dist/less-1.x.x/js,或者使用
    dist/lessc
    编译器编译less代码

    小于2.x时

  • 从github下载并解压缩源代码,网址为:
  • 运行
    npm安装
  • 创建一个文件caleld
    lib/less/functions/custom.js
    ,并将以下内容写入其中:

    var Anonymous = require("../tree/anonymous"),
        functionRegistry = require("./function-registry");
    
    functionRegistry.addMultiple({
    returncenter: function() {
    return new(Anonymous)('center');
    }
    });
    
  • 打开
    lib/less/function/index.js文件并追加
    require(“./custom”)
    到寄存器函数列表,就在
    返回函数之前

  • 运行
    grunt dist

  • 现在,您可以使用以下更少的代码:

    selector {
    property: returncenter();    
    }
    
    前面的Less代码将编译为以下CSS代码:

    selector {
    property: center;    
    }
    

    谢谢你的回复。我不必依赖LESSHPP,而是决定只制作
    维度。减少
    并导入它。该文件包含
    .width()
    .padding()
    等。修改原始库是一场噩梦,因为其他人必须使用相同的修改过的代码才能工作。