前端○萌妹 2017-09-12 08:34 采纳率: 0%
浏览 640

less的问题,不明白下面这个代码,麻烦哪位大神解释一下

不明白下面这个代码,麻烦哪位大神解释一下

 .mixin (@a) when (lightness(@a) >= 50%) {
   font-size: 14px;
}
.mixin (@a) when (lightness(@a) < 50%) {
   font-size: 16px;
}
.mixin (@a) {
   color: @a;
}
.class1 {
   .mixin(#FF0000)
}
.class2 {
   .mixin(#555)
}
  • 写回答

1条回答

  • /*----无忧----*/ 2017-09-12 12:36
    关注

    这是less里面的带参数混合中的模式匹配,
    在这里mixin被当做一个参数,下面class1和class2去调用mixin的时候就会把mixin里面所有的样式继承到class1和class2当中,那么首先,class1和class2
    里面就会有这样一个结果

     .class1{
         color:#ff0000
     }
     .class2{
         color:#555
     }
    

    这里之所以class1和class2得到的颜色不一样是因为两个class在调用的时候传进去的参数不一样所导致的

    首先这里没问题了,这时候再看最上面的两个函数,名字同样叫做mixin 但是要匹配这两个函数是有条件的,在这里只有满足了when里面的条件才会匹配成功对应的函数,如果说你在when里面写一个判断语句,然后当你调用mixin的时候满足了这个判断,这时候就会匹配当前这个mixin里面缩写的样式

    比如在这里,when里面的条件是 lightness(@a) >= 50%
    在这里 lightness(@a)是一个less的色彩函数,这个函数会把传进去的颜色化成 HSL 色彩空间,得到的值就是百分比。比如lightness(#FF0000)得到的值就是50%

    然后lightness(#555得到的就是33.33%) 然后回过头来看class1里面调用mixin函数的时候,传入的颜色是ff0000 这时候lightness(#FF0000)得到的是正好是50%,那么满足第一个mixin函数中,when里面的条件,所以匹配了第一个mixin, 这时候class1里面就会得到第一个mxin里面的代码,也就是font-size:14px;再往后class2也是一次类推

    最后class1和class2得到的完整的代码就是

     .class1 {
      font-size: 14px;
      color: #FF0000;
    }
    .class2 {
      font-size: 16px;
      color: #555;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?