1. 程式人生 > 實用技巧 >less相關知識點總結

less相關知識點總結

Less和css的區別

html和css不屬於程式語言而是屬於標記語言,很難像js一樣定義變數、編寫方法、實現模組化開發等。
LESS是一門CSS預處理語言,它擴充套件了CSS語言,增加了變數、Mixin、函式等特性,使CSS更易維護和擴充套件。
使用LESS基本上按照這樣的步驟:編寫LESS程式碼,使用NODE、js或者是其他的工具把編寫的LESS程式碼編譯成我們平時看到的CSS程式碼(因為瀏覽器是無法解析LESS的語法的,所以編寫完成的LESS程式碼需要進行編譯)。

Less叫做預編譯css,寫好的less程式碼瀏覽器是不能直接渲染的,需要我們把它編譯成為能渲染的css才可以。

廣州vi設計http://www.maiqicn.com

辦公資源網站大全https://www.wode007.com

編譯Less

開發環境中
在開發環境下,我們一般都通過匯入less外掛來隨時編譯less程式碼。

//注意rel="stylesheet/less"中必須加上less
<link rel="stylesheet/less" href="./css/1.less">
<script src="./css/less-2.5.3.min.js"></script>
生產環境中

由於每一次載入頁面都需要匯入LESS外掛,並且把LESS檔案重新編譯為CSS,很消耗效能,導致頁面開啟速度變慢。所以在生產環境中,我們需要事前把LESS檔案編譯為正常的CSS後,在相應檔案中引入,以後使用者訪問的都是編譯好的CSS,為不是拿LESS現編譯的。

生產環境下,我們需要事先把LESS編譯成CSS方法:
1)使用Node編譯

這種方式是目前專案中最常用的方式,它是把我們的LESS檔案編譯成CSS檔案,我們專案中直接的引入CSS檔案即可.

(1) 安裝node

npm install less -g

(2) 把LESS模組安裝到全域性NODE環境中

(3) 使用命令進行編譯

//->把styles.less檔案編譯成styles.css檔案(如果沒有這個CSS檔案自己會建立)    
lessc styles.less styles.css      
//->編譯完成的CSS檔案是經過壓縮的     
lessc styles.less styles.min.css -x或者--compress 

如果你想要更牛X的壓縮,還可以自己單獨的設定,下面我們使用–clean-css。這個需要提前的安裝less-plugin-clean-css模組才可以。

//->安裝less-plugin-clean-css     
npm install -g less-plugin-clean-css
//->安裝成功後就可以使用它壓縮了     
lessc --clean-css styles.less styles.min.css 

2)使用編譯工具(less線上編譯)

目前常用的編譯工具有:Koala(據說目前最流行的)、線上編譯(http://tool.oschina.net/less)、SimpLESS等。

Less的基本語法

less中的變數
和JS中的變數一樣,只是LESS的變數定義不是使用var而是使用@。

//用變數儲存公用的屬性值
@shadowColor: #000;
.inner {
    box-shadow: 0 0 10px 0 @shadowColor;
}
//用變數儲存公用的URL、選擇器

    @selector: box;
    @bgImg: "../img";
    @property: color;
    @name: "fung";
    
    //->LESS程式碼
    .@{selector} {
        width: 100px;
        height: 100px;
        @{property}: #000;
        background: url("@{bgImg}/test.png");

        &:after {
            display: block;
            content: @@var;
        }
     }

混合(Mixins)
所謂的混合其實是把某個選擇器中的樣式拷貝一份拿過來使用


//->LESS程式碼
.public {
    width: 100px;
    height: 100px;
}

nav ul {
    .public;
    list-style: none;
}

//->編譯為CSS的結果
.public {
    width: 100px;
    height: 100px;
}

nav ul {
    width: 100px;
    height: 100px;
    list-style: none;
}

我們發現其實nav ul是把public中設定的樣式屬性值copy了一份到自己的樣式中。如果你想在編譯完成的結果中不輸出public這個樣式的結果,只需要按照下述的程式碼編寫即可:


//->LESS程式碼
.public() {//->在選擇器後面加上()就可以不編譯這個樣式了
    width: 100px;
    height: 100px;
}

nav ul {
    .public;
    list-style: none;
}

//->編譯為CSS的結果
nav ul {
    width: 100px;
    height: 100px;
    list-style: none;
}

3.extend

雖然在上述的案例中,nav ul把public中的樣式繼承了過來,但是原理卻是把程式碼copy一份過來,這樣編譯後的CSS中依然會存留大量的冗餘CSS程式碼,為了避免這一點,我們可以使用extend偽類來實現樣式的繼承使用。
```

//->LESS程式碼
.public {
    width: 100px;
    height: 100px;
}

nav ul {
    &:extend(.public);
    list-style: none;
}

//->編譯為CSS的結果
.public, nav ul {
    width: 100px;
    height: 100px;
}

nav ul {
    list-style: none;
}
```
或者
```

//->LESS程式碼
.public {
    width: 100px;
    height: 100px;
}

nav ul:extend(.public) {
    list-style: none;
}

//->編譯為CSS的結果和第一種寫法一樣
```

4.名稱空間和作用域

在LESS中定義了名稱空間就建立了一個私有的作用域,在這個私有作用域中使用的變數都是先看一下自己作用域中有沒有,沒有的話,在向上一級查詢(類似於JS的作用域鏈)
```

//->LESS程式碼
@color: #ccc;
.box {
    @color: #eee;
    .gray {
        color: @color;
    }
}

.box2 {
    .gray {
        color: @color;
    }
}

//->編譯為CSS的結果
.box .gray {
    color: #eee;
}

.box2 .gray {
    color: #ccc;
}
```

5.!important
在呼叫的混合集後面追加 !important 關鍵字,可以使混合集裡面的所有屬性都繼承 !important.

//->LESS程式碼
@color: #ccc;
.box {
  @color: #eee;
  .gray {
    color: @color;
  }
}

nav ul {
  .box !important;
}

//->編譯為CSS的結果
.box .gray {
    color: #eee;
}

nav ul .gray {
    color: #eee !important;
}

6.函式
如同JS一樣,LESS也可以向函式一樣設定形引數,這個技巧在我們的專案中會被經常的使用到,例如:處理CSS3的相容問題


    //->LESS程式碼
    .transition(@property:all;@duration:1s;@function:linear;@delay:0s;) {
      -webkit-transition: @property @duration @function @delay;
      -moz-transition: @property @duration @function @delay;
      -ms-transition: @property @duration @function @delay;
      -o-transition: @property @duration @function @delay;
      transition: @property @duration @function @delay;
    }

    .box1 {
      .transition;
    }

    .box2 {
      .transition(@duration: 2s);
    }

    .box3 {
      .transition(@duration: 2s; @property: width;);
    }

    //->編譯為CSS的結果
    .box1 {
        -webkit-transition: all 1s linear 0s;
        -moz-transition: all 1s linear 0s;
        -ms-transition: all 1s linear 0s;
        -o-transition: all 1s linear 0s;
        transition: all 1s linear 0s;
    }

    .box2 {
        -webkit-transition: all 2s linear 0s;
        -moz-transition: all 2s linear 0s;
        -ms-transition: all 2s linear 0s;
        -o-transition: all 2s linear 0s;
        transition: all 2s linear 0s;
    }

    .box3 {
        -webkit-transition: width 2s linear 0s;
        -moz-transition: width 2s linear 0s;
        -ms-transition: width 2s linear 0s;
        -o-transition: width 2s linear 0s;
        transition: width 2s linear 0s;
    }

此外我們需要值得注意的是,LESS中也有arguments。


    //->LESS程式碼
    .transition(@property:all;@duration:1s;@function:linear;@delay:0s;) {
      -webkit-transition: @arguments;
      transition: @arguments;
    }

    .box1 {
      .transition;
    }

    //->編譯為CSS的結果
    .box1 {
        -webkit-transition: all 1s linear 0s;
        transition: all 1s linear 0s;
    }