天天看點

從零開始學 Web 之 移動Web(八)Less

一、Less簡介

LESS 是一種動态的樣式表語言,通過簡潔明了的文法定義,使編寫 CSS 的工作變得非常簡單,本質上,LESS 包含一套自定義的文法及一個解析器。

從零開始學 Web 之 移動Web(八)Less

二、less 安裝

1、下載下傳安裝 node.js 環境。(官網:https://nodejs.org/zh-cn/)

2、安裝完成後驗證 node 環境是否安裝成功。

在指令行中輸入:

node -v

出現 node 的版本号表示安裝成功。

3、安裝 less 工具(需要聯網)。

在指令行中輸入:

npm install -g less

即可下載下傳安裝。

4、安裝後驗證 less 是否安裝成功。

指令行輸入:

lessc -v

出現 less 版本号,即表示安裝成功。

從零開始學 Web 之 移動Web(八)Less

三、編譯

浏覽器隻能識别 CSS,Less 隻是用來提升CSS可維護性的一個工具,所最終需要将LESS編譯成CSS。

編譯方式有兩種:

1、一種是使用指令行的方式手工編譯。

在我們編寫好一個 less 檔案後,可以使用指令行輸入以下指令将 less 檔案編譯成 css 檔案。

lessc .\test.less .\test.css           

複制

這種手工編譯的方式效率比較低下,一般我們都會借助一些編輯器來完成自動編譯。

2、這裡我使用 vscode,使用很簡單,隻需要安裝插件 “Easy LESS” ,那麼編寫的 less 檔案在儲存時會自動在 less 檔案相同的目錄下生成 css 檔案。

從零開始學 Web 之 移動Web(八)Less

四、文法

1、注釋

注釋的方式有兩種:

//

或者

/**/

但是這兩種注釋有差別:這兩種樣式在 less 中都是注釋,但是

//

注釋不會進行編譯,也就是不會在生成的 css 檔案中顯示,而

/**/

注釋則會在 css 檔案中對應顯示。

/*注釋  才會編譯*/
//這也是樣式,但是不會進行編譯           

複制

2、變量

文法格式為:

@變量名:值;

,比如

@baseColor: #ccc;

使用的時候:

div { color: @baseColor;}

/*變量  @變量名:值; */
@baseColor:#e92322;
a{
  color: @baseColor;
}           

複制

3、混入(類似于函數)

文法:

.樣式名(@變量名 :預設值) {具體樣式}

/*混入:可以将一個定義好的樣式引入到另外一個樣式中  類似于函數的調用*/
/*.addRadius{
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
}*/
/*相當于定義一個函數的參數*/
.addRadius(@r:10px){
  border-radius: @r;
  -webkit-border-radius: @r;
  -moz-border-radius: @r;
}
div{
  width: 200px;
  height: 200px;
  /*引入已經寫好的圓角樣式*/
  /*傳入參數*/
  .addRadius(5px);
}           

複制

4、嵌套

嵌套可以實作選擇器的繼承,可以減少代碼量,同時使用代碼結構更加清晰。

/* 以前我們寫的樣式
.jd_header{}
.jd_header > div{}
.jd_header > div > h3{}
.jd_header > div > h3::before{}
.jd_header > div > a{}
.jd_header > div > a:hover{}
*/


/*嵌套:實作選擇器的繼承,可以減少代碼量,同時使用代碼結構更加清晰*/
.jd_header{
  width: 100%;
  height: 200px;
  .addRadius();
  // 加 > 表示直接子元素
  > div{
    // 加 & 表示中間沒有空格為 div::before,如果沒有 & 則是 div ::before 就錯了。
    &::before{
      content: "";
    }
    width: 100%;
    // div下面的直接子元素a
    >a{
      text-decoration: underline;
      // a::hover,中間沒有空格
      &:hover{
        text-decoration: none;
      }
    }
    > h3{
      height: 20px;
    }
    ul{
      list-style: none;
    }
  }
}           

複制

五、less 檔案引入

我們之前編寫好 less 檔案之後,都是自動解析成 css 然後添加到 html 檔案中。如果 css 的檔案很多的話,就要引入很多個 link 标簽,那麼可不可以直接引入 less 檔案呢?

當然可以。

文法:

<link rel="stylesheet/less" href="./index.less">           

複制

隻是在 stylesheet 後面加上 less 的說明。

隻是引入 less 檔案是不可以的,還需要引入解析 less 的 js 插件。

<script src="./js/less.js"></script>           

複制

看起來好麻煩哦,為什麼要引入 less 檔案,它有什麼好處嗎?

好處是:不管有多少 less 檔案,隻需要引入一個 less 檔案就可以了,其他需要的 less 檔案都包含在引入的這個 less 檔案中。

如何在 less 檔案中引入其他 less 檔案呢?

文法:

@import "other1.less";  // other.less 為其他 less 檔案的路徑名稱
@import "other2.less";
@import "other3.less";           

複制

這樣,不管有多少個 less 檔案,都可以寫到一個待引入的 less 檔案中。