使用LESSCS的用户定义函数?
我最近刚进入LessCSS,我觉得这是一个主要的限制,我想知道是否有办法做到这一点??我想说,我在某个地方读到,Sass允许用户定义函数,但是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 {
@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
npm安装
lib/functions.js
文件树中添加自定义函数(returncenter()
),函数对象,例如:
tree.functions = {
returncenter: function() {
return new(tree.Anonymous)('center');
},
//original function below
}
grunt dist
dist/lessc
编译器编译less代码
小于2.x时
npm安装
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()
等。修改原始库是一场噩梦,因为其他人必须使用相同的修改过的代码才能工作。