我們都知道HTML和CSS不是程式語言,而是標記語言,所以很難像JS那樣定義變數、編寫方法、實現模組化開發等。 在目前的CSS編寫模式中,我們定義了一些常用的樣式類名,哪一塊HTML需要這個樣式,並新增相應的樣式類名,所以我們經常會看到乙個標籤上有很多樣式類名,在這種模式下我們必須時刻注意CSS的優先順序,避免重疊的樣式覆蓋。
為了解決CSS的這個困境,CSS預處理和預編譯的思想脫穎而出,比較有代表性的有less、sass和stylus。 他們在傳統的CSS中增加了大量的新的語法、寫作方法、常用函式等,可以使我們的CSS成為像JS一樣的程式語言。 本文重點介紹 less 的語法和用法。
寫出的少**不能直接在瀏覽器中執行,需要編譯成普通的css**,所以先來學習習常見的少編譯方法。
Less 僅適用於現代瀏覽器(最新版本的 Chrome、Firefox、Safari 和 IE)。 我們不建議在生產中使用 LESS 客戶端,因為使用者在將 LESS 編譯為 CSS 時會看到載入延遲,即使瀏覽器中的載入延遲不到一秒。
讓我們首先介紹我們設定樣式的 less 檔案注意:rel='stylesheet/less'
然後少介紹JS 檔案。
在瀏覽器中呼叫有乙個好處:可以開啟監控模式,只要我們改動少,在一定時間內,瀏覽器就會重新編譯,我們可以看到想要的效果。方法如下:
需要注意的是,瀏覽器端是用來拉取ajax的。 較少的檔案,因此當直接在本地檔案系統上開啟時(即位址以 file: 開頭)或存在跨域時,它們不能直接拉取。 檔案較少,導致樣式無法生效。因此,一般使用less來做CSS預處理,很少採用引用less的方式,一般將less編譯成css,然後引用生成的CSS檔案。
// index.HTML 檔案 Hello World!
// styles.減少檔案@blue:5b83ad;@size:50px;header
如果直接匯入較少的檔案,則會出現錯誤,這可以通過嘗試從簡單的 Web 伺服器**(例如 lite-server)開始來解決
npm install -g lite-serverlite-server //to run
這個方法是目前專案中最常用的方式,適用於專案的生產環境,就是將我們的LESS檔案編譯成乙個CSS檔案,我們可以直接在專案中匯入CSS檔案基本步驟:安裝>編譯、壓縮編譯>或使用節點**實現批量編譯等
將 less 模組安裝到全域性節點環境中。
npm install less -g
使用命令進行編譯。
->看跌期權樣式更少的檔案編譯成樣式CSS 檔案(如果您沒有此 CSS 檔案,您將自行建立) LESSC 樣式less styles.CSS ->編譯的CSS檔案是壓縮的Lessc Stylesless styles.min.css -x 或 --compress
節點命令編譯前後的對比:
// styles.更少檔案(預編譯) @blue: 5b83ad;@size:50px;header
// styles.CSS 檔案(編譯後)標頭
當我們使用上面的 node 命令進行編譯時,我們一次只能編譯乙個檔案,這樣如果頁面中少了多個檔案,每次編譯都比較耗時,所以我們可以結合 node 的 fs 檔案讀寫操作編寫一組批量編譯的 **。
-> 定義編譯檔案目錄和目標匯出目錄 var dirpath ="./less/", tarpath = "./css/";->匯入匯入節點中需要用到的模組 var fs = require()"fs"), less = require("less");->讀取 dirpath 中的所有檔案,檢查檔案型別,只檢查我們儲存的檔案更少 var ary = files = fsreaddirsync(dirpath); files.foreach(function (file, index) ) ) ->編譯目錄下的所有檔案,並將編譯後的結果儲存在指定目錄下 aryforeach(function (file) ,function (error, output) )
目前常用的編譯工具有:考拉(據說是目前最流行的)、*編譯( )等。 我不會在本文中詳細介紹。 LESS的基本語法基本分為以下幾個方面:變數、mixins、巢狀規則、操作、函式、作用域等。
與 JS 中的變數一樣,較少的變數定義使用 @ 而不是 var
//->less **link-color: #428bca; @link-color-hover: darken(@link-color, 10%);a } ->編譯成css的結果 a a:hover
除了如上所述使用變數儲存公共屬性值外,我們還可以使用變數來儲存公共 URL、選擇器等。
//->less **#000; background: url("@/test.png"); selector: box; @bgimg: "../img"; @property: color;
基本混合:您可以輕鬆地將定義的類 A 引入到另乙個類 B 中,從而使類 B 輕鬆繼承類 A 中的所有屬性。 我們也可以使用引數進行呼叫,就像使用函式一樣。
->less **public n** ul ->編譯為 css 的結果public n** ul
上面的 **,n** ul 是將 public 中設定的 style 屬性值複製到自己的樣式中。 如果不想在編譯後的結果中以 public 的樣式輸出結果,只需要按如下方式編寫即可:
->less **public() n** ul ->編譯為 css n** ul 的結果
extend雖然在上面的例子中,n** ul 繼承了 public 的樣式,但原理是將 ** 複製過來,這樣在編譯好的 CSS 中仍然會有很多冗餘的 CSS**為了避免這種情況,我們可以使用 extend 偽類來實現樣式的繼承。 與原始選擇器共享一組樣式,但請確保原始選擇器不是括號。
->less **public n** ul ->編譯為 css 的結果public, n** ul n** ul
我們可以通過在選擇器中巢狀另乙個選擇器來實現繼承,這大大減少了數量並使其看起來更清晰。
//->less **#header .logo }
->編譯為 css header header 的結果n**igation #header .logo #header .logo:hover
運算提供加法、減法、乘法和除法運算;我們可以做屬性值和顏色的操作,這樣我們就可以實現屬性值之間的複雜關係。 如果要操作屬性值,則 less 中的函式將逐一反映** j**ascript**。
可以涉及任何數字、顏色或變數。 讓我們看一組示例:
@base: 5%;@filler: @base * 2;@other: @base + filler;color: #888 / 4;background-color: @base-color + #111;height: 100% / 2 + filler;
Less 提供一系列顏色算術函式。 顏色首先轉換為 HSL 顏色空間,然後在通道級別進行操作:
lighten(@color, 10%);// return a color which is 10% *lighter* than @colordarken(@color, 10%);// return a color which is 10% *darker* than @color
Less 提供了一組方便的數學函式,可用於處理某些數值型別的值:
round(1.67); // returns `2`ceil(2.4); // returns `3`floor(2.6); // returns `2`
less 的作用域與其他程式語言非常相似,它首先在本地查詢變數或混合模組,如果沒有,則在父作用域中查詢,直到找到它。
@var: red;#page }#footer
少習學習:少理解少編譯少學習習:少的基本語法 一種動態樣式的語言。