每一門技術的出現都是為了解決現存的問題,同樣的,Less 的出現是為了解決 CSS 中過于呆闆的寫法。Less 官方文檔 中對 Less 的使用有詳細的介紹,總結一下為:Less = 變量 + 混合 + 函數。如果你對 js 和 css 有所了解,那麼就可以很快的掌握并在你的項目中使用 Less。
使用 Npm 全局安裝 Less
建立一個空檔案夾,這裡命名為:<code>learn-less</code>
在根目錄下建立 index.html 檔案,複制内容如下:
在根目錄下建立 main.less 檔案,複制内容如下:
現在打開浏覽器看一下,會發現并沒有加載樣式。這是因為 index.html 中引入的樣式檔案是 main.css 而不是 main.less。是以接下來,我們需要将 main.less 轉換為 main.css,不用擔心,這一步驟并不需要你手動操作,僅僅是運作一條指令就會自動完成轉換。
操作完以上步驟就會發現在根目錄下生成了一個 main.css 檔案,此時再打開浏覽器看看,樣式已經出現了。
main.css 轉義内容為:
如果你使用了 Webstorm 作為開發工具,那麼連手動輸入指令行這一步都可以跳過,因為 Webstorm 會在你的 .less 檔案被修改後自動生成對應的 .css 檔案,具體配置跳轉:Webstorm 配置 Less 自動轉譯成 css
現在有一個新的需求,需要将三個 div 的背景顔色改成藍色(blue),如果是之前 css 的寫法需要依次找到 container、container2、container3,對應修改裡面的 background-color 屬性,但是使用 less 我們僅僅修改前面定義過的變量值即可。
使用 <code>lessc main.less</code> 進行轉譯後打開浏覽器可以看到三個 div 的背景顔色已經被改變了。
在前面介紹的案例中已經使用了“變量”的概念,是不是感覺和 js 很像,事實上 less 就是用 js 的寫法來寫 css。
官網在介紹變量的時候會給出很多應用場景,總結一下就是使用 @ 符号定義變量,使用 @ 符号擷取變量,僅僅将 <code>@變量名</code> 看成是一個字元串。
從上面例子中可以看到,變量不僅僅可以作為樣式屬性值:<code>background-color: @color;</code>,還可以作為類名:<code>.@classname</code> 表示的就是 <code>.main</code>。這也就是為什麼說<code>僅僅将 @變量名 看成是一個字元串。</code>
先看一個 example.css 檔案:
可以看到上面三個樣式中都有 <code>border-top</code> 和 <code>border-bottom</code> 兩個屬性,并且内容完全相同;在傳統 CSS 寫法中隻能這樣一遍有一遍的去書寫重複的内容,在 Less 中通過<code>将公共屬性抽取出來作為一個公共類</code>的方式規避這一點。
将以上 example2.less 進行轉譯成 example2.css 檔案為:
可以看到 examle2.css 與 example.css 很相似,隻是多了一個 .bordered 樣式。
修改 example2.less,将 .bordered 寫成 .bordered(),此時在進行轉譯之後會看到 example2.css 和 example.css 檔案就完全一樣了,使用 less 書寫更加簡單。
總結:
混合也是減少代碼書寫量的一個方法;
混合的類名在定義的時候加上<code>小括弧 ()</code>,那麼在轉譯成 css 檔案時就不會出現;
混合的類名在被調用的時候加上<code>小括弧 ()</code>和不加上<code>小括弧 ()</code>是一樣的效果,看個人習慣,如:第三行和第八行轉譯成 css 是一樣的。
<code>1 #menu span { 2 height: 16px; 3 .bordered; 4 } 5 6 #menu p { 7 color: red; 8 .bordered(); 9 }</code>
曾幾何時,在書寫呆闆的 css 時有沒有想過讓類名動态化,根據不同的參數生成不同的樣式。看下面的示例:
使用 <code>$ lessc func.less</code> 進行轉譯 func.css 檔案内容如下:
可以看到,這裡就用到了函數的概念,在 <code>#header</code> 和 <code>.button</code> 中分别傳入不同的參數,結果也就生成不同的代碼。
關于 less 中函數的寫法還有以下幾種:
當然,上面是開發人員自定義的函數,Less 也為我們定義了很多好用的内置函數。關于内置函數,如果掌握,可以在開發過程中節約很多時間,由于内置函數數量很多,這裡就不一一介紹,傳送門:Less 内置函數官方文檔。
在 css 中父子元素的寫法通常如下:
在 Less 寫法如下,父子嵌套關系一目了然。
當然,父子元素還要一種是僞類的寫法,在 css 中寫法如下:
在 less 中寫法如下,可以看到引入了新的符号 <code>&</code>,以 <code>&</code> 來代替主類 <code>#header</code>。
在傳統 css 檔案中,每個檔案都是獨立的。在 less 中可以像 js 的子產品那樣在一個 less 檔案中引入另一個 less 檔案。
建立 one.less 檔案:
建立 two.less 檔案:
使用 <code>$ lessc two.less</code> 轉譯成 <code>two.css</code> 檔案,可以看到内容如下:
@import 的作用可以看成是将 one.less 的内容複制一份到目前 .less 檔案中。
那麼如果 two.less 中也有一個類名叫 container 的,使用 @import 之後會變成什麼樣子呢?這個留給自行測試好啦。