以下內容是我在學習和研究LESS時,對LESS的特性、重點和注意事項的提取、精練和總結,可以做為LESS特性的字典,方便大家查閱;
注意:
本文采用ABNF語法范式來描述語法規(guī)則,對于不熟悉ABNF語法范式的同學,可以參考《語法格式描述規(guī)范BNF和ABNF》
1. 變量
定義:
變量的定義 = “@”<變量名>“:”[變量值]“;”
變量名::= 標識符
變量值::= 任意類型
使用:
變量的使用 = “@”<變量名表達式>
變量名表達式 = 變量名 | 變量的使用
2. 字符串插值
字符串插值 = “@{”<變量名>“}”
3. 作用域
- LESS中的作用域是塊級作用域;
- LESS編譯器在查找標識符時,首先會從當前作用域中查找標識符(如:變量或者混合模塊),如果沒找到的話則會去父級作用域中查找,以此類推,直到找到為止;
- 變量的定義會被提升至該變量所在作用的頂部;所以,變量可以先使用后定義;
4. LESS樣式規(guī)則
定義:
LESS樣式規(guī)則::= 由LESS特性擴展的CSS樣式規(guī)則
CSS樣式規(guī)則 = <選擇器列表> “{” [CSS屬性列表] “}”
CSS屬性列表 = {CSS屬性的定義}
CSS屬性的定義 = <CSS屬性名>“:”<屬性值>";"
5. 混合
定義:
混合的定義 = <單個選擇器> [“(” [參數(shù)列表] “)”] “{” [屬性列表] “}”
參數(shù)列表 = {參數(shù)項}
單個選擇器 = class選擇器 | id選擇器 | 屬性選擇器
屬性列表 = { 屬性項 }
屬性項 = css屬性的定義 | LESS樣式規(guī)則
使用:
混合的使用 = <單個選擇器>[“(” [入?yún)?shù)列表] “)”]“;”
效果:
混合的使用 會被替換成 混合的定義 中的 屬性列表;
特性:
- 不參數(shù)的
混合的定義會被編譯成相應的css; - 帶參數(shù)的
混合的定義不會被編譯成相應的css; -
參數(shù)項可以是具體的值;如果參數(shù)項是具體的值,則在使用該混合時,只有傳入的參數(shù)的值與該具體值相匹配時,該混合才會生效;這個特性就是Less的模式匹配;
6. JavaScript表達式
調用JavaScript表達式 = “`”[JavaScript表達式]“`”
7. 注釋
注釋 = 單行注釋 | 多行注釋
單行注釋 = “//”[注釋內容]
多行注釋 = “/*”[注釋內容]“*/”
注意:
在編譯成 CSS 后,單行注釋會被刪除;
8. 不編譯語法
不編譯語法 = ‘~“’ [不需編譯的內容] ‘”’
9. 引導
引導用來指定Less規(guī)則生效的條件,相當于條件語句的功能;
語法:
引導表達式 = when 條件列表
條件列表 = {<邏輯關系> <條件項> }
條件項 = "(" <條件表達式> ")"
邏輯關系 = “,” | "and" | "not"
取值:
邏輯關系的取值:
逗號 , 表示邏輯或
and 表示 邏輯與
not 表殼邏輯非
條件表達式可用的比較運算符有:> < = >= =<
關鍵字true只表示布爾真值,除去關鍵字true以外的值都被視示布爾假;
10. 模式匹配
在定義帶參數(shù)的混合時,參數(shù)項可以是具體的值;如果參數(shù)項是具體的值,則在使用該混合時,只有傳入的參數(shù)的值與該具體值相匹配時,該混合才會生效;