当需要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得非常有用。如果你熟悉函数式编程的话,对条件表达式也不会陌生。

为了尽可能地接近CSS的语言结构,Less使用关键字 when 而不是 if/else来实现条件判断,因为 when 已经在CSS的 @media query 特性中被定义。

表达式中可以使用比较运算符、逻辑运算符、或检查函数来进行条件判断。

1、比较运算符

Less包含五个比较运算符:<、>、<=、>=、=,可以使用比较运算符(=)来比较数字,字符串、标识符等,而其余的运算符只能与数字一起使用。如,以下Less代码:

  1. .mixin (@a) when (@a = 20px){
  2.     color:red;
  3. }
  4. .mixin (@a) when (@a < 20px){
  5.     color:blue;
  6. }
  7. .mixin (@a) {
  8.     font-size: @a;
  9. }
  10. h2 {
  11.     .mixin(20px)
  12. }

编译后的CSS代码为:

  1. h2 {
  2.   color: red;
  3.   font-size: 20px;
  4. }

此外,还可以使用关键字true,它表示布尔真,以下两个mixin是相同的:

  1. .truth (@a) when (@a) { ... }
  2. .truth (@a) when (@a = true) { ... }

在Less中,只有 true 表示布尔真,关键字true以外的任何值,都被视为布尔假。如:

  1. .class {
  2.   .truth(40);  // 不会匹配以上任何定义
  3. }

Less中,Guards可以是多个表达式,多个表达式之间,使用逗号‘,’分隔。如果其中任意一个表达式的结果为 true,则匹配成功,这就相当于“或”的关系。如:

  1. .mixin (@a) when (@a < -10), (@a > 10) {
  2.     width: 100px;
  3. }

上述Guards就表示: [-10,10] 之间的值将匹配失败,其余均匹配成功。比如以下调用,.class1 和 .class3 会匹配成功,.class2 将匹配失败:

  1. .class1 {
  2.    .mixin(-20);
  3. }
  4. .class2 {
  5.    .mixin(0);
  6. }
  7. .class3 {
  8.    .mixin(20);
  9. }

编译后的CSS代码为:

  1. .class1 {
  2.   width: 100px;
  3. }
  4. .class3 {
  5.   width: 100px;
  6. }

2、逻辑运算符

Less中,Guards也可以使用 and 和 not 来进行逻辑运算。如,以下Less代码:

  1. .mixin (@a) when (@a > 50%) and (@a > 5px){
  2.     font-size: 14px;
  3. }
  4. .mixin (@a) when not (@a < 50%) and not (@a < 5px){
  5.     font-size: 20px;
  6. }
  7. .mixin (@a) {
  8.     color: @a;
  9. }
  10. .class1 {
  11.     .mixin(#FF0000)
  12.  }
  13. .class2 {
  14.     .mixin(#555)
  15. }

编译后的CSS代码为:

  1. .class1 {
  2.   color: #ff0000;
  3. }
  4. .class2 {
  5.   color: #555555;
  6. }

3、检查函数

如果想基于值的类型、或特定的单位进行匹配,就可以使用 is* 函数。如:

  1. .mixin (@a, @b: 0) when (isnumber(@a)) { ... }
  2. .mixin (@a, @b: black) when (iscolor(@b) and (@a > 0)) { ... }

以下是常见的类型检查函数:

  • Iscolor:是否为颜色值。
  • Isnumber:是否为数值。
  • Isstring:是否为字符串。
  • Iskeyword:是否为关键字。
  • Isurl:是否为URL字符串。
  • 以下是常见的单位检查函数:
  • Ispixel:是否为像素单位。
  • ispercentage:是否为百分比。
  • isem:是否为em单位。
  • isunit:是否为单位。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

Less的条件表达式Guards相关推荐

  1. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式

    条件表达式 条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行对应的操作.scala条件表达式的语法和Java一样. 有返回值的if 与Java不一样的是 ...

  2. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)

    系列博客 1. 改善代码设计 -- 优化函数的构成(Composing Methods) 2. 改善代码设计 -- 优化物件之间的特性(Moving Features Between Objects) ...

  3. JAVA条件表达式的陷阱

    Map<String, Integer> map = new HashMap<String, Integer>();  map.put("count", n ...

  4. django 1.8 官方文档翻译:2-5-9 条件表达式

    条件表达式 New in Django 1.8. 条件表达式允许你在过滤器.注解.聚合和更新操作中使用 if ... elif ... else的逻辑.条件表达式为表中的每一行计算一系列的条件,并且返 ...

  5. shell中的条件表达式

    条件表达式返回的结果都为布尔型 真为1,假为0 条件测试的表达式 [expression] [[expression]] test expression 这三种条件表达式的效果是一样的 比较符 整数比 ...

  6. 【C语言探索之旅】 第一部分第六课:条件表达式

    内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  7. python 条件表达式换行_Python基础语法 - LongKing-Xu的个人空间 - OSCHINA - 中文开源技术交流社区...

    python基础语法 一.标识符 在Python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. 在Python中的标识符是区分大小写的. 在Python中以下划线开头的标识符是有 ...

  8. python条件表达式有哪几个_python条件表达式:多项分支,双向分支

    # ### 多项分支 ''' if 条件表达式1: code1 code2 elif 条件表达式2: code3 code4 elif 条件表达式3: code5 code6 else: code7 ...

  9. 重构——39以多态取代条件表达式(Replace Conditional with Polymorphism)

    以多态取代条件表达式(Replace Conditional with Polymorphism) 你手上有个条件表达式,它根据对象类型的不同而选择不同的行为:将这个条件表达式的每个分支放进一个子类内 ...

最新文章

  1. php与Ajax实例
  2. 图文解读助你理解和使用正则表达式
  3. 类WebOS(添加了主界面,及相关功能代码)
  4. CSP认证201503-2 数字排序[C++题解]:哈希表、排序、结构体
  5. java cookie p3p_P3P解决cookie存取的跨域问题
  6. 开课提醒 | 听顶会大佬透析前沿算法,解密人脸识别技术
  7. 使用IShellView接口函数CreateViewWindow
  8. python time localtimeq获取准确时间_python的内置模块time和datetime的方法详解以及使用(python内的time和datetime时间格式)...
  9. 迷茫的时候看看乔布斯是怎么做的
  10. MFC开发IM---MFC实现http协议传输图片和文本
  11. Java Servlet web xml 配置详解
  12. Ubuntu 12.04下安装搜狗拼音 + 安装搜狗皮肤-转
  13. index函数c语言,C语言数据结构中定位函数Index的使用方法
  14. 2021年安全生产模拟考试(全国特种作业操作证高处作业-高处安装维护拆除模拟考试题库二)安考星
  15. 瑞萨can入门书学习三
  16. 【COPOD】Suppressing Poisoning Attacks on Federated Learning for Medical Imaging
  17. 计算机网络云怎么连接网络设置方法,华为云电脑如何连网,华为云电脑使用教程...
  18. 网络聊天程序的设计与实现
  19. SaaS Metrics 2.0 – A Guide to Measuring and Improving what Matters
  20. LTE关键技术之一:OFDM

热门文章

  1. NetSuite二次开发服务改变中小企业发展困境!
  2. ubuntu下唤醒或休眠远程计算机
  3. UVa-10382 Watering Grass **
  4. 关于extern C
  5. 在windows上搭建redis集群(Redis-Sentinel)
  6. RocketMQ学习第一步之源码构建
  7. Remainders Game (中国剩余定理)
  8. zabbix_appliace 3.4安装部署
  9. preg_match_all中的标记
  10. MailBee.NET Objects接收电子邮件(POP3)教程一:接收简单的电子邮件