Less 有没有可能用更少的css构建对象?

Less 有没有可能用更少的css构建对象?,less,less-mixins,css-preprocessor,Less,Less Mixins,Css Preprocessor,目前,我试图以更少的成本构建mixin,但对我来说,它似乎比我首先考虑的更复杂。例如,我尝试构建一个if条件,我的标题如下所示: .ifClauses( @checkParam, @conditions:{ isnumber(@checkParam), ispercentage(@checkParam), ispixel(@checkParam) }, @thens:{ .first(){height:@checkParam * 1px;}

目前,我试图以更少的成本构建mixin,但对我来说,它似乎比我首先考虑的更复杂。例如,我尝试构建一个if条件,我的标题如下所示:

.ifClauses(
   @checkParam,
   @conditions:{
    isnumber(@checkParam),
    ispercentage(@checkParam),
    ispixel(@checkParam)
   },
   @thens:{
    .first(){height:@checkParam * 1px;},
    .second(){height:@checkParam;},
    .third(){height:@checkParam;}
   }
)
我知道数组的定义如下:

@array: first,second,third;


也许我可以用它作为一个对象,也就是说,当参数被逗号分开时,我如何将数组写入mixins参数?

现在我这样解决它:

.height(@param: @_tablet_slider_-height){

      @active : false;

      & when(isnumber(@param)){
        height: @param * 1px;
        @active: true;
      }
      & when(isunit(@param)){
        height: @param;
        @active: true;
      }

      & when(ispixel(@param)){
        height: @param;
        @active: true;
      }

      & when(isem(@param)){
        height: @param;
        @active: true;
      }
      & when(ispercentage(@param)){
        height: @param;
        @active: true;
      }

      & when(@active = false){

        &:before{
          content:"Error in parsing less"
        }

      }  
}

我希望你们中的一些人可以使用它,或者其他人有更好的解决方案:)

我不确定我是否完全理解你的意思,但是你可以使用
extract(@array,1)
从逗号分隔的字符串中提取第一个值。这取决于你如何使用这个“objects”。一般情况下,mixin/规则集(包括分离)都可以解释为某种OOP类型和对象(在一定程度上)。然而,对于您特定的情况(模拟
if
语句?),严格的“类对象”抽象并不是最适合的。有关此类
if
仿真的示例,请参见:,等等。其余部分取决于所有这些
1st、2nd、3rd etc
的含义。换句话说,提供关于实际用例的更多细节可能是明智的,否则陷入XY问题的几率太高。->->(由于Less不是一种脚本语言,当人们试图使用来自脚本语言(如JavaScript)的非不友好设计模式时,这是一个非常常见的陷阱,因此必须模拟类似脚本的行为,从而将各种各样的乱七八糟和变通方法堆叠在一起,以解决一个问题,否则就会出现问题(不总是但经常)更容易通过本机Less(或者在一般情况下是“任何声明性的”)设计模式解决。)当然,我知道less不是一种脚本语言。我只是希望有一个选项可以使用params中的数组构建mixin,或者如果这不起作用,则可以使用less获得更简单的if条件。在我看来,在您的有用评论之后,我认识到没有其他更优雅的解决方案。谢谢:)实际上,代码有一个bug。规则集(包括
&{}
)不会将其内容公开给外部范围。。。因此,您使用
&{}
设置的
@active
变量不会对最后一个变量产生任何影响(因此它总是
false
)。。。你将不得不使用mixin来代替。。。尽管考虑到还有其他方法可以简化整个过程:您根本不需要任何
@active
。更多信息:对于这个特定的代码片段,我想知道您是否需要所有这些条件;)请注意,
1*1px
将始终导致
1px
1anythingelse*1px
也将始终导致
1anythingelse
(如果其中一个乘法操作数不是数字,则会自动抛出错误)。换句话说,“更好的解决方案”简单到:
高度:@whatever*1px
;根本不需要条件或混合!(现在你可以猜到为什么我每次都抱怨XY问题:)(Less中也有很多复杂条件的用例——但上面的一个肯定不是其中之一)。谢谢:))有没有可能用Less构建自己的插件??我想我最好问你:D@seven-谢谢