- 從mixin返回變量
在mixin中定義的所有變量都是可見的,並且可以在調用者的作用范圍中使用(除非調用者用相同的名稱定義它自己的變量)。
.mixin(){ @width:100%; @height:200px;
} .caller{ .mixin(); width: @width; height: @height;
}
輸出:
.caller { width: 100%; height: 200px;
}
因此,在mixin中定義的變量可以作為其返回值。這使我們可以像函數一樣使用 .mixin 。
.average(@x, @y){ @average:((@x + @y )/2);
} div{ .average(16px, 50px); padding: @average;
}
輸出:
div { padding: 33px;
}
- 從其他樣式表導入樣式
在標准CSS中,@ import規則必須優於所有其他類型的規則。但Less.js不關心@ import語句在代碼中的具體位置。例如:
.foo { background: #900;
} @import "this-is-valid.less";
6.1 文件擴展名 - File extensions
@import 可以根據文件擴展的不同來不同地處理語句
- 如果文件有 .css擴展名,將被視為css,@ import語句規則保持不變 (具體見下面的描述)。
- 如果它有任何其他擴展名,它將被視為 less進行導入。
- 如果它沒有擴展,.less將被添加上,它將會作為一個less文件被添加。
@import "foo"; // 作為foo.less 被導入
@import "foo.less"; // 作為foo.less 被導入
@import "foo.php"; // foo.php 作為 a less file被導入
@import "foo.css"; // 保持原有的聲明
可以使用以下選項覆蓋該行為
Less為CSS @import CSS at- rule提供了幾個擴展,以提供更多的靈活性,使您能夠處理外部文件。
語法:@import (keyword) "filename";
下面這些指令可以使用:
- reference 使用 less 文件,但不要輸出它
- inline 在輸出中包含源文件,但不處理它
- less 無論文件擴展名是什么,將文件視為一個 less 文件
- css 無論文件擴展名是什么,將文件視為一個css 文件
- once 只引入這個文件一次(這是默認行為)
- multiple 引入這個文件多次
7.1 reference
使用@ import(reference) 導入外部文件,但是,除非引用,否則不將導入的樣式添加到已編譯的輸出中。
例如:
@import (reference) "foo.less";
reference是Less語言中最強大的特性之一,想象一下,在導入的文件中,引用的每個指示符和選擇器都帶有一個引用標志,導入是正常的,但是當生成CSS時,"reference"選擇器(以及任何包含reference 選擇器的媒體查詢)都不是輸出。除非引用樣式用作 mixins 或 extended,否則引用樣式不會出現在生成的CSS中。
另外,根據使用的方法(mixin或extend),reference會產生不同的結果:
- extend 當一個選擇器被extended(擴展)時 ,只有新的選擇器被標記為沒有被引用referenced,並且它被拉入到引用@ import語句的位置。
- mixins 當
reference
樣式用作隱式mixin時,它的規則是混合的,標記為“not reference”,並在被引用的位置顯示為正常
例子:
這允許您能從一個庫中提取特定的、有針對性的樣式,例如bootstrap通過做類似的事情來引導
.navbar:extend(.navbar all) {}
你只會引進來自Bootstrap的navbar相關樣式
7.2 inline
- 使用 @import(inline) 包含外部文件,但不處理它們
發布v1.5.0
例子:
@import (inline) "not-less-compatible.css";
當CSS文件可能不那么兼容時,您可以使用inline ;這是因為雖然Less支持大多數已知的標准CSS,但它不支持某些地方的注釋,不支持所有已知的CSS hacks,而不修改CSS。 因此,您可以使用該文件將文件包含在輸出中,這樣所有的CSS都將在一個文件中。
7.3 less
- 使用@ import(less)來處理導入的文件,而不考慮文件擴展名。
@import (less) "foo.css";
7.4 css
- 使用@ import(css)將導入的文件視為常規的css,而不考慮文件擴展名。這意味着import語句將被保留原樣。
@import (css) "foo.less";
輸出:
@import "foo.less";
7.5 once
- @ import語句的默認行為。這意味着該文件只導入一次,而該文件的后續導入語句將被忽略。
@import (once) "foo.less";
@import (once) "foo.less"; // 這條語句會被忽略
7.6 multiple
- 使用@ import(多個)允許導入具有相同名稱的多個文件。這是和 once 相反的行為。