首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将属性名作为参数传递给less中的mixin

如何将属性名作为参数传递给less中的mixin
EN

Stack Overflow用户
提问于 2012-05-22 00:41:22
回答 4查看 3.6K关注 0票数 4

我想做一个函数/混合,它会使颜色变暗,如果它已经是暗的,但当它是亮的时候更亮(规格化/极致?)

是否可以通过传递属性名称(颜色、背景颜色、右边框颜色等)来完成此操作?

代码语言:javascript
复制
.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);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-22 12:08:03

这目前是less.js github上的功能请求。因此,请注意less.js 1.4中的它。在那之前,你可以像这样破解它...

代码语言:javascript
复制
.mixin(@prop, @value) {
    Ignore: ~"a;@{prop}:@{value}";
}

不是很好,你会得到一个额外的属性,但这是目前唯一的方法。

票数 11
EN

Stack Overflow用户

发布于 2012-05-22 01:59:50

受保护的Mixins应该是您正在寻找的,但是您不能使用变量来定义属性,只能使用它们的值。所以你可以这样做:

代码语言:javascript
复制
.normalize(@color, @amount) when (lightness(@color) >= 50%)
{
    color:lighten(@color, @amount);
}

.normalize(@color, @amount) when (lightness(@color) < 50%)
{
   color:darken(@color, @amount);
}

所以这就是:

代码语言:javascript
复制
.class1 {
    .normalize(#ddd, 10%);
}

将输出以下内容:

代码语言:javascript
复制
.class1 {
  color: #f7f7f7;
}

但您实际上不能将属性名作为变量传递。这是一个不太不幸的限制,虽然我已经看到了像边距方向这样的方法来绕过它,但没有一种方法可以使用变量传递任何ol‘属性。

票数 2
EN

Stack Overflow用户

发布于 2014-08-07 16:06:59

在Less‘GitHub上的相应issue中,cloudhaed建议了一种解决方法:

代码语言:javascript
复制
.blah ()      { color: black }                 // All blahs
.blah(right)  { padding-right: 20px }          // Right blahs
.blah(left)   { padding-left: 20px }           // Left blahs

@side: left;
.class { .blah(@side) }

输出

代码语言:javascript
复制
.class { color: black; padding-left: 20px;}

也许这样就行了?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10689152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档