返回介绍

混合守卫(Mixin Guards)

发布于 2020-06-05 22:50:58 字数 3531 浏览 1521 评论 0 收藏 0

前面的章节中我们已经学习了 mixin 的各种用法,可以说 mixin 是 Less 中的一等公民。为什么这么说哪?因为在 Less 中有关逻辑判断几乎都是通过 mixin 去实现的。例如我们这个章节学习的条件判断就是与 mixin 结合所实现的,让我们一块来了解一下。

1. 语法定义

Conditional mixins——官方定义

慕课解释:根据条件进行判断。

2. 语法详情

在 Mixins 的使用条件需要匹配一个值或算法时,我们可以使用 Less 的条件判断。

与 Java 、Python 等函数式编程语言的条件判断一样,不过语法形式略有差异。

为了与 CSS 原生语言语法形式保持一致,在 Less 中是通过守卫函数的形式而不是 if/else ,与 @media 的用法类似。我们先来看一段包含条件判断的 Mixins :

.bg (@color; @width) when (@width >= 50%) {
  background-color: black;
}

.bg (@color; @width) {
  color: @color;
}

when 关键字引入了守卫机制(条件判断),下面让我们来调用定义好的 Mixins :

.container1 {
  .bg(red; 40%);
}

.container2 {
  .bg(red; 60%);
}

输出代码如下:

.container1 {
  color: red;
}

.container2 {
  background-color: black;
  color: red;
}

3. 使用场景

混合守卫适用于 mixins 需要匹配值、运算式、范围的场景,避免 mixin 出现调用错误。

4. 条件判断运算符

条件判断的运算符包含以下几个:

  • >
  • >=
  • =
  • <
  • =<

此外,true 这个关键字是唯一代表条件为真的值。所以以下的两个 Mixins 是等价的:

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

其他的值代表条件都为假:

.a {
  .truth(10); // 10 与 true 不相等,所以不会有任何输出
}

我们也可以对两个变量进行比较:

.max (@a; @b) when (@a > @b) { width: @a }
.max (@a; @b) when (@a < @b) { width: @b }

5. 条件逻辑运算符

当 Mixins 的判断条件含有两个及两个以上时,我们可以使用逻辑运算符将条件进行关联。

使用 and 关键字对两个条件取并集:

.mixin1 (@color) when (iscolor(@color)) and (@color = red) { ... }

我们可以使用 , 运算符来模拟 or 运算符,只要有一个条件为真就可以匹配。

.mixin2 (@width) when (@width > 20%), (@width < 80%) { ... }

使用 not 关键字代表否定条件:

.mixin3 (@width) when not (@b > 10%) { ... }

6. 类型检查函数

我们可以使用 Less 提供的类型检查函数对变量进行判断:

.mixin1 (@color) when (iscolor(@color)) { ... }
.mixin2 (@url) when (isurl(@url)) { ... }

主要有以下几种基础的类型检查函数:

  • iscolor
  • isnumber
  • isstring
  • iskeyword
  • isurl

如果要检查某个值是否除作为数字外还包含在特定单位中,还可以使用:

  • ispixel
  • ispercentage
  • isem
  • isunit

7. default()函数

default() 函数可根据已创建的 Mixins 条件来形成该条件的补集。

.mixin (@width) when (@width > 10%) { ...  }
.mixin (@width) when (default()) { ... } // default()等价于 @width <= 10%

8. 小结

本章节介绍了混合守卫,在 Less 中我们可以使用混合守卫(即 when函数)代替 if , 如果需要使用 else 即需要使用到 default() 函数创建多个 mixins 进行匹配。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文