1. 程式人生 > >關於Less裡的css一些規則,瞭解入門less

關於Less裡的css一些規則,瞭解入門less

3、在引入less.js前先要把樣式檔案引入 :
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>


4、混合:混合可以將一個定義好的class A輕鬆的引入到另一個class B中,從而簡單實現class B繼承class A中的所有屬性。我們還可以帶引數地呼叫,就像使用函式一樣。
// LESS


.rounded-corners (@radius: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
}


#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}
/* 生成的 CSS */


#header {
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
}
#footer {
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
}


5、巢狀規則:我們可以在一個選擇器中巢狀另一個選擇器來實現繼承,這樣很大程度減少了程式碼量,並且程式碼看起來更加的清晰。
// LESS


#header {
  h1 {
    font-size: 26px;
    font-weight: bold;
  }
  p { font-size: 12px;
    a { text-decoration: none;
      &:hover { border-width: 1px }
    }
  }
}
/* 生成的 CSS */


#header h1 {
  font-size: 26px;
  font-weight: bold;
}
#header p {
  font-size: 12px;
}
#header p a {
  text-decoration: none;
}
#header p a:hover {
  border-width: 1px;
}


6、函式 & 運算
運算提供了加,減,乘,除操作;可以做屬性值和顏色的運算,
這樣就可以實現屬性值之間的複雜關係。LESS中的函式一一映射了JavaScript程式碼,可以操作屬性值。
// LESS


@the-border: 1px;
@base-color: #111;
@red:        #842210;


#header {
  color: @base-color * 3;
  border-left: @the-border;
  border-right: @the-border * 2;
}
#footer { 
  color: @base-color + #003300;
  border-color: desaturate(@red, 10%);
}
/* 生成的 CSS */


#header {
  color: #333;
  border-left: 1px;
  border-right: 2px;
}
#footer { 
  color: #114411;
  border-color: #7d2717;
}


7.在客戶端使用
引入你的 .less 樣式檔案的時候要設定 rel 屬性值為 “stylesheet/less”:
<link rel="stylesheet/less" type="text/css" href="styles.less">
然後點選頁面頂部download按鈕下載 less.js, 在<head> 中引入:
<script src="less.js" type="text/javascript"></script>
注意你的less樣式檔案一定要在引入less.js前先引入。
備註:請在伺服器環境下使用!本地直接開啟可能會報錯!
監視模式
監視模式是客戶端的一個功能,這個功能允許你當你改變樣式的時候,客戶端將自動重新整理。
要使用它,只要在URL後面加上'#!watch',然後重新整理頁面就可以了。另外,也可以通過在終端執行less.watch()來啟動監視模式。


8、用變數名定義為變數
@fnord: "I am fnord.";
@var: 'fnord';
content: @@var;
輸出:
 content: "I am fnord.";


9 定義不帶引數屬性集合,如果你想隱藏這個屬性集合,
不讓它暴露到CSS中去,但是你還想在其他的屬性集合中引用,
你會發現這個方法非常的好用:
.wrap () {
  text-wrap: wrap;
  white-space: pre-wrap;
  white-space: -moz-pre-wrap;
  word-wrap: break-word;
}


pre { .wrap }
輸出:


pre {
  text-wrap: wrap;
  white-space: pre-wrap;
  white-space: -moz-pre-wrap;
  word-wrap: break-word;
}
10 @arguments 變數包含了所有傳遞進來的引數. 如果你不想單獨處理每一個引數的話就可以像這樣寫:
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
  box-shadow: @arguments;
  -moz-box-shadow: @arguments;
  -webkit-box-shadow: @arguments;
}
.box-shadow(2px, 5px);
將會輸出:


  box-shadow: 2px 5px 1px #000;
  -moz-box-shadow: 2px 5px 1px #000;
  -webkit-box-shadow: 2px 5px 1px #000;


11 模式匹配和導引表示式
有些情況下,我們想根據傳入的引數來改變混合的預設呈現,比如下面這個例子:
.mixin (@s, @color) { ... }
.class {
  .mixin(@switch, #888);
}
如果想讓.mixin根據不同的@switch值而表現各異,如下這般設定:
.mixin (dark, @color) {
  color: darken(@color, 10%);
}
.mixin (light, @color) {
  color: lighten(@color, 10%);
}
.mixin (@_, @color) {
  display: block;
}
現在,如果執行:
@switch: light;
.class {
  .mixin(@switch, #888);
}
就會得到下列CSS:
.class {
  color: #a2a2a2;
  display: block;
}
如上,.mixin就會得到傳入顏色的淺色。如果@switch設為dark,就會得到深色。
具體實現如下:
第一個混合定義並未被匹配,因為它只接受dark做為首參
第二個混合定義被成功匹配,因為它只接受light
第三個混合定義被成功匹配,因為它接受任意值
只有被匹配的混合才會被使用。變數可以匹配任意的傳入值,而變數以外的固定值就僅僅匹配與其相等的傳入值。
我們也可以匹配多個引數:
.mixin (@a) {
  color: @a;
}
.mixin (@a, @b) {
  color: fade(@a, @b);
}
Now if we call .mixin with a single argument, we will get the output of the first definition, 
but if we call it with two arguments, we will get the second definition, namely @a faded to @b.


引導
當我們想根據表示式進行匹配,而非根據值和引數匹配時,導引就顯得非常有用。如果你對函數語言程式設計非常熟悉,那麼你很可能已經使用過導引。
為了儘可能地保留CSS的可宣告性,LESS通過導引混合而非if/else語句來實現條件判斷,因為前者已在@media query特性中被定義。
以此例做為開始:
.mixin (@a) when (lightness(@a) >= 50%) {
  background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
  background-color: white;
}
.mixin (@a) {
  color: @a;
}
when關鍵字用以定義一個導引序列(此例只有一個導引)。接下來我們執行下列程式碼:
.class1 { .mixin(#ddd) }
.class2 { .mixin(#555) }
就會得到:
.class1 {
  background-color: black;
  color: #ddd;
}
.class2 {
  background-color: white;
  color: #555;
}
導引中可用的全部比較運算有: > >= = =< <。此外,關鍵字true只表示布林真值,下面兩個混合是相同的:
.truth (@a) when (@a) { ... }
.truth (@a) when (@a = true) { ... }
除去關鍵字true以外的值都被視示布林假:
.class {
  .truth(40); // Will not match any of the above definitions.
}
導引序列使用逗號‘,’—分割,當且僅當所有條件都符合時,才會被視為匹配成功。
.mixin (@a) when (@a > 10), (@a < -10) { ... }
導引可以無引數,也可以對引數進行比較運算:
@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 }
最後,如果想基於值的型別進行匹配,我們就可以使用is*函式:
.mixin (@a, @b: 0) when (isnumber(@b)) { ... }
.mixin (@a, @b: black) when (iscolor(@b)) { ... }
下面就是常見的檢測函式:
iscolor
isnumber
isstring
iskeyword
isurl
如果你想判斷一個值是純數字,還是某個單位量,可以使用下列函式:
ispixel
ispercentage
isem
最後再補充一點,在導引序列中可以使用and關鍵字實現與條件:
.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }
使用not關鍵字實現或條件
.mixin (@b) when not (@b > 0) { ... }