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;
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 花了這兩天上班的空閑時間把mixins的大部分的相關內容寫完了,但是還有兩小塊內容還沒寫,預計放在下一篇當中,下一...
    程愷閱讀 2,429評論 0 1
  • Less作為 CSS 的一種擴展,不僅完全兼容 CSS 語法,而且連新增的特性也是使用 CSS 語法,你可以在任何...
    zhangivon閱讀 584評論 0 1
  • CSS Preprocess Different 在前端界,有三大 CSS 預處理器,分別是 SASS(SCSS)...
    XGHeaven閱讀 13,892評論 2 13
  • 今天上完正面管教課堂,在PHP上家長幫助家長的環節,我勇敢的走在了眾人的面前,坦誠了我這幾天因為家事上面的煩...
    小萍_3188閱讀 332評論 0 0
  • 又是陰雨天,感覺好久沒有見過太陽了,到處都是濕濕的感覺,讓人覺得都快發霉了,奈何秋雨總是這般纏綿悱惻。 ...
    曉曉_9736閱讀 268評論 0 1