【css】動態css——less

來源:互聯網
上載者:User
文章目錄
  • 1、變數
  • 2、混合
  • 3、帶參數混合
  • 4、嵌套規則

Less 是一種樣式語言,它將 css 賦予了動態語言的特性,如變數、 繼承、 運算、 函數。less 既可以在用戶端上運行(支援IE 6+, Webkit, Firefox),也可以藉助 Node.js 或者 Rhino 在服務端運行。

Less 做為 css 的一種形式的擴充,它並沒有閹割 css 的功能,而是在現有的 css 文法上,添加了很多額外的功能,所以對於前端開發人員來所,學習 less 是一件輕而易舉事情。我們先看下用 less 寫的一段 css:

@base: #f938ab;.box-shadow(@style, @c) when (iscolor(@c)) {    box-shadow:         @style @c;    -webkit-box-shadow: @style @c;    -moz-box-shadow:    @style @c;}.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {    .box-shadow(@style, rgba(0, 0, 0, @alpha));}.box {     color: saturate(@base, 5%);    border-color: lighten(@base, 30%);    div { .box-shadow(0 0 5px, 30%) }}

在沒有學過 less 的情況下,我們並不知道這些代碼是做啥用的,怎麼產生我們所熟悉的 css 代碼,以上代碼經過 less 編譯後:

.box {    color: #fe33ac;    border-color: #fdcdea;}.box div {    box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);    -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);}

下面我們就一起來學習 less 吧。

我們知道如果要使用 jquery 就必須在頁面上引進 jquery 庫,同樣的在使用 less 編寫 css 代碼時,也要引進 less 庫——less.js。點擊這裡下載 less 庫。

下載好後只要在頁面中引入就可以了。

<link rel="stylesheet/less" type="text/css" href="style.less" media="all" /><script type="text/javascript" src="less.js"></script>

要注意外部引進樣式的方法有所改變,rel 屬性值為 stylesheet/less,樣式的尾碼變為 .less 同時 less 樣式檔案一定要在 less.js 前先引入。

引入了 less 之後,正式開始學習 less。

LESS 文法1、變數

Less 的變數充許你在樣式中對常用的屬性值進行定義,然後應用到樣式中,這樣只要改變變數的值就可以改變全域的效果。和 javascript 中的全域變數有點類似。

甚至可以用變數名定義為變數。

@color: red;@foot: 'color';.head{    color: @color;}.foot{    color: @@foot;}

輸出:

.head {  color: red;}.foot {  color: red;}

注意 less 中的變數為完全的“常量”,所以只能定義一次。

2、混合

混合就是定義一個 class,然後在其他 class 中調用這個 class。

.common{    color: red;}.nav{    background: #ccc;    .common;}

輸出:

.common {  color: red;}.nav {  background: #ccc;  color: red;}

Css 中的 class, id 或者元素屬性集都可以用同樣的方式引入。

3、帶參數混合

在 less 中,你可以把 class 當做是函數,而函數是可以帶參數的。

.border-radius (@radius) {    border-radius: @radius;    -moz-border-radius: @radius;    -webkit-border-radius: @radius;}#header {    .border-radius(4px);}.button {    .border-radius(6px);  }

最後輸出:

#header {    border-radius: 4px;    -moz-border-radius: 4px;    -webkit-border-radius: 4px;}.button {    border-radius: 6px;    -moz-border-radius: 6px;    -webkit-border-radius: 6px;}

我們還可以給參數設定預設值:

.border-radius (@radius: 5px) {    border-radius: @radius;    -moz-border-radius: @radius;    -webkit-border-radius: @radius;}#header {    .border-radius;  }

最後輸出:

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

也可以定義不帶參數屬性集合,如果想要隱藏這個屬性集合,不讓它暴露到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;}

混合還有個重要的變數@arguments。

@arguments 包含了所有傳遞進來的參數,當你不想處理個別的參數時,這個將很有用。

.border(@width:0,@style:solid,@color:red){    border:@arguments;}.demo{    .border(2px);}

輸出:

.demo {    border: 2px solid #ff0000;}

混合還有許多進階的應用,如模式比對等。在這裡就不介紹了,只講些基礎的東西。

4、嵌套規則

Less 可以讓我們用嵌套的方式來寫 css。下面是我們平時寫的 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;}

用 less 我們就可以這樣寫:

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

注意 & 符號的使用—如果你想寫串聯選取器,而不是寫後代選取器,就可以用到 & 了。這點對偽類尤其有用如 :hover。

5、運算

任何數字、顏色或者變數都可以參與運算。

.demo{    color: #888 / 4;}

輸出:

.demo {    color: #222222;}

Less 完全可以進行複雜四則運算,同樣的複合運算也沒有問題。

6、Color 函數

Less 提供了一系列的顏色運算函數。顏色會先被轉化成 HSL 色彩空間,然後在通道層級操作。

lighten(@color, 10%);     // return a color which is 10% *lighter* than @colordarken(@color, 10%);      // return a color which is 10% *darker* than @colorsaturate(@color, 10%);    // return a color 10% *more* saturated than @colordesaturate(@color, 10%);  // return a color 10% *less* saturated than @colorfadein(@color, 10%);      // return a color 10% *less* transparent than @colorfadeout(@color, 10%);     // return a color 10% *more* transparent than @colorfade(@color, 50%);        // return @color with 50% transparencyspin(@color, 10);         // return a color with a 10 degree larger in hue than @colorspin(@color, -10);        // return a color with a 10 degree smaller hue than @colormix(@color1, @color2);    // return a mix of @color1 and @color2

使用起來相當簡單:

@base: #f04615;.class {    color: saturate(@base, 5%);    background-color: lighten(spin(@base, 8), 25%);}

還可以提取顏色資訊:

hue(@color);        // returns the `hue` channel of @colorsaturation(@color); // returns the `saturation` channel of @colorlightness(@color);  // returns the 'lightness' channel of @color

例如:

@color: #f36;#header {    background-color: hsl(hue(@color),45%,90%);}

輸出:

#header {    background-color: #f1dae0;}
7、Math 函數

Less 提供了一組方便的數學函數,你可以使用它們處理一些數字類型的值。

round(1.67); // returns 2ceil(2.4);   // returns 3floor(2.6);  // returns 2

如果你想將一個值轉化為百分比,你可以使用 percentage 函數:

percentage(0.5); // returns 50%
8、命名空間

有時候,你可能為了更好組織 css 或者單純是為了更好的封裝,將一些變數或者混合模組打包起來,你可以像下面這樣在 #form 中定義一些屬性集之後可以重複使用:

#form {    .submit () {        display: block;        border: 1px solid black;        background: gray;        &:hover { background: green }    }    .register { ... }    .login { ... }}

你只需要在 #myform 中像這樣引入 .submit:

#myform {    color: orange;    #form > .submit;}
9、範圍

和其他程式設計語言類似,less 變數也有範圍。首先會從本地尋找變數或者混合模組,如果沒找到的話會去父級範圍中尋找,直到找到為止。

@var: red;#page {    @var: white;    #header {        color: @var; // white    }}#footer {    color: @var; // red  }
10、注釋

Css 形式的注釋在 less 中是依然保留的,同時 less 也支援雙斜線的注釋,但是編譯成 css 的時候自動過濾掉。

 

最後 less 還有一些其他的特性就不介紹了,大家可以去LESS官網看下。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.