less学习笔记6-语言特性(Guards)

本来说好上周末要出的这一篇结果拖到了现在,公司上需要做一个h5的游戏,最近这一周都在做这个游戏的单机demo,完全没时间来写这个文章。昨天算是把demo的大体完成了,今天可以抽出一点时间来整理这一部分。


Mixin Guards(mixin 监控)

带条件的mixins

当你想要匹配一个表达式的时候,guards是非常有用的。如果你熟悉函数式编程的话,那你很可能已经见过了。
为了尽可能的接近css的声明性性质,less选择实现条件化执行的方式,如:在media查询特性规范的结构中,使用 guards mixins代替if/else语句。

.mixin (@a) when (lightness(@a) >= 50%) {
  background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
  background-color: white;
}
.mixin (@a) {
  color: @a;
}

关键在when这个关键词上,when这个关键词定义了监控原则(这里只有一个监控)。如果我们运行以下代码:

.class1 { .mixin(#ddd) }
.class2 { .mixin(#555) }

编译为:
.class1 {
  background-color: black;
  color: #ddd;
}
.class2 {
  background-color: white;
  color: #555;
}

guard中比较运算符

在guards中可用的运算符为: > , >= , = , =< , < 。此外,关键词true是唯一的真值,下面两个mixins相等:

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

除了关键词true以外,任何值都是假的:

.class {
  .truth(40); //不会匹配上面声明的语句
}

你也可以进行参数之间的比较,或者参数和非参数之间进行比较:

@media: mobile;

.mixin (@a) when (@media = mobile) { ... }
.mixin (@a) when (@media = desktop) { ... }

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

guard中的逻辑运算符

你可以在guards中使用逻辑运算符,语法是基于css的媒体查询。
使用关键词 and 去连接guards:

.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }

你可以模仿 or运算符通过使用逗号将guards进行分隔。如果任何guards被判断为真,会被进行匹配:

.mixin (@a) when (@a > 10), (@a < -10) { ... }

使用关键词 not 与条件取反

.mixin (@b) when not (@b > 0) { ... }

类型检查函数(Type Checking Functions)

最后,如果你想要基于类型来匹配mixins的话,你可以使用is函数:

.mixin (@a; @b: 0) when (isnumber(@b)) { ... }
.mixin (@a; @b: black) when (iscolor(@b)) { ... }

下面是基本的类型检查函数:

  • iscolor
  • isnumber
  • isstring
  • iskeyword
  • isurl
    如果你想要检查一个值是否在一个特定的单元中(不是当做数字),你可以使用:
  • ispixel
  • ispercentage
  • isem
  • isunit

有条件的mixins

另外,default函数可以根据其他mixin匹配来进行mixin匹配,您可以使用它创建类似于else或默认语句(分别是if和case结构)的“条件mixin”:

.mixin (@a) when (@a > 0) { ...  }
.mixin (@a) when (default()) { ... } // 只有第一个mixin不匹配时才会匹配这个

CSS Guards(css监控)

发布于v1.5.0
guards也可以用在css选择器上,这是一种语法糖,用于声明mixin,然后立即调用它。
在1.5.0之前你可能需要这样做:

.my-optional-style() when (@my-option = true) {
  button {
    color: white;
  }
}
.my-optional-style();

现在你可以直接在样式中使用guard

button when (@my-option = true) {
  color: white;
}

你也可以通过结合这个和&特性,从而实现一个if类型语句,允许组合多个guards:

& when (@my-option = true) {
  button {
    color: white;
  }
  a {
    color: blue;
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 花了这两天上班的空闲时间把mixins的大部分的相关内容写完了,但是还有两小块内容还没写,预计放在下一篇当中,下一...
    程恺阅读 2,396评论 0 1
  • Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何...
    zhangivon阅读 565评论 0 1
  • CSS Preprocess Different 在前端界,有三大 CSS 预处理器,分别是 SASS(SCSS)...
    XGHeaven阅读 13,748评论 2 13
  • 今天上完正面管教课堂,在PHP上家长帮助家长的环节,我勇敢的走在了众人的面前,坦诚了我这几天因为家事上面的烦...
    小萍_3188阅读 327评论 0 0
  • 又是阴雨天,感觉好久没有见过太阳了,到处都是湿湿的感觉,让人觉得都快发霉了,奈何秋雨总是这般缠绵悱恻。 ...
    晓晓_9736阅读 262评论 0 1