學會如何使用LESS(一)----變數和混合
最近在學習了less,作些筆記;
本質上,LESS 包含一套自定義的語法及一個解析器,使用者根據這些語法定義自己的樣式規則,這些規則最終會通過解析器,編譯生成對應的 CSS 檔案。LESS 並沒有裁剪 CSS 原有的特性,更不是用來取代 CSS 的,而是在現有 CSS 語法的基礎上,為 CSS 加入程式式語言的特性。你也可以再less檔案中寫按照css規則寫樣式。less檔案是以less作為檔案字尾名,HTML引用時可以像css那樣引用,如下:
<link rel="stylesheet/less" type="text/css" href="styles.less">
在渲染HTML頁面時,less檔案需要編譯成css檔案。我們可以有很多種方法。在伺服器端,如Node.js,我們有專門的less編譯模組。如果是在客戶端,需要從LESS官網下載less.js檔案,然後在HTML頁面中引入,如下:
<script src="less.js" type="text/javascript"></script>
注意:
(1)確保包涵.less樣式表在less.js指令碼之前。
(2)當你引入多個.less樣式表時,它們都是獨立編譯的。所以,在每個檔案中定義的變數、混合、名稱空間都不會被其它的檔案共享。
(3)必須通過伺服器環境訪問頁面,否則報錯。
變數
一、定義變數
//定義變數
@gray:#555;
@orange:orange;
header{
background: @gray;
text-align: center;
height: 100px;
line-height: 100px;
}
編譯後的css:
header{
background: #555555;
text-align: center;
height: 100px;
line-height: 100px;
}
二、作為選擇器和屬性名的變數
注意:使用時將變數以@{變數名}的方式使用
@gao: height;
.@{gao}{
@{gao}:300px;
}
編譯後的css:
.height {
height: 300px;
}
三、作為URL的變數
@imgurl:"https://www.baidu.com/img/" ;
header{
background:url("@{imgurl}bdlogo.png") no-repeat;
height: 500px;
border: 1px solid #333;
background-size: 150px 150px;
}
編譯後的css:
header {
background: url("https://www.baidu.com/img/bdlogo.png") no-repeat;
height: 500px;
border: 1px solid #333;
background-size: 150px 150px;
}
四、定義多個相同名稱的變數時
在定義一個變數兩次或者多次時,只會使用當前作用域最後定義的變數,Less會從當前作用域向上搜尋。這個行為類似於css的定義中始終使用最後定義的屬性值。
@var: 0;
.class{
@var: 1;
.brass {
@var: 2;
three: @var; //這是的值是3
@var: 3;
}
one: @var; //這是的值是1
}
編譯後的css:
.class {
one: 1;
}
.class .brass {
three: 3;
}
五、延遲載入
延遲載入:變數是延遲載入的,在使用前不一定要預先說明。
意思是指:在前面使用了這個變數,但沒有定義,但可以在後面給他定義出來,不影響輸出。
@color: #333;
div{
width: 100px; height: 200px;
font-size: @size;
color: @color;
}
@size: 20px;
編譯後的css:
div {
width: 100px;
height: 200px;
font-size: 20px;
color: #333333;
}
混合
一、基本混合
@orange: orange;
.base{
font-size: 30px;
color: @orange;
}
h1{
border: 1px solid red;
.base;
}
編譯後的css:
.base {
font-size: 30px;
color: #ffa500;
}
h1 {
border: 1px solid red;
font-size: 30px;
color: #ffa500;
}
二、不帶輸出的混合,類名後面使用();(原來模板不出現)
@pink: pink;
.base2(){
border: 1px solid blue;
background: @pink;
}
footer{
.base2;
}
編譯後的css:
footer {
border: 1px solid blue;
background: #ffc0cb;
}
三、帶選擇器的混合
.hoverMix(){
&:hover{
border: 1px solid green;
}
}
button{
.hoverMix;
}
編譯後的css:
button:hover {
border: 1px solid green;
}
四、帶引數的混合
@gray: #555;
.border( @color ){
border: 1px solid @color;
}
h1{
.border( @gray );
}
編譯後的css:
h1 {
border: 1px solid #555555;
}
五、帶引數並且有預設值的混合
像這樣給引數設定預設值。有了預設值,我們可以不用設定屬性值也能被呼叫。
.border2( @color:red ){
border: 1px solid @color;
}
h2{
.border2();
}
h3{
.border2( @pink );
}
編譯後的css:
h2 {
border: 1px solid #ff0000;
}
h3 {
border: 1px solid #ffc0cb;
}
六、帶多個引數的混合
如果傳參的括號裡全部都是以”,”分隔,那麼會依次傳給各個引數的值;如果傳參的括號裡既有”,”又有”;”那麼會把”;”前面當作一個整體,傳給一個值;
.mixin(@color;@padding:10;@margin:2){
color: @color;
padding: @padding;
margin: @margin, @margin, @margin, @margin;
}
div{
.mixin(@pink);
}
.div{
.mixin(@orange;10,10,14,14;3);
}
編譯後的css:
div {
color: #ffc0cb;
padding: 10;
margin: 2, 2, 2, 2;
}
.div {
color: #ffa500;
padding: 10, 10, 14, 14;
margin: 3, 3, 3, 3;
}
七、定義多個具有相同名稱和引數數量不同的混合
.mixin2(@color) {
color-1: @color;
}
.mixin2(@color; @padding:2) {
color-2: @color;
padding-2: @padding;
}
.mixin2(@color; @padding; @margin: 2) {
color-3: @color;
padding-3: @padding;
margin: @margin @margin @margin @margin;
}
.some .selector div {
.mixin2(#008000);
}
編譯後的css:
.some .selector div {
color-1: #008000;
color-2: #008000;
padding-2: 2;
}
從編譯的結果可以看出,less也有函式過載的特性。當我們定義相同混合屬性名,引數不同,然後.mixin(#008000);呼叫,第一和第二混合都能匹配,但是第三個缺少引數@padding的值,所以不會引用第三個混合屬性。
八、命名引數
引用mixin時可以通過引數名稱而不是引數的位置來為mixin提供引數值。任何引數都以用過它的名稱來使用,這樣就不必按照任意特定的順序來使用引數;
.mixin3(@color: black; @margin: 10px; @padding: 20px) {
color: @color;
margin: @margin;
padding: @padding;
}
.class1 {
.mixin3(@margin: 20px; @color: #33acfe);
}
.class2 {
.mixin3(#efca44; @padding: 40px);
}
編譯後的css:
.class1 {
color: #33acfe;
margin: 20px;
padding: 20px;
}
.class2 {
color: #efca44;
margin: 10px;
padding: 40px;
}
九、@arguments變數
@arguments代表所有的可變引數。
注意事項:
1. @arguments代表所有可變引數,引數的先後順序就是你的()括號內的引數的先後順序。
2. 在使用的賦值,值的位置和個數也是一一對應的,只有一個值,把值賦值給第一個,兩個值,賦值給第一個和第二個,三個值賦值給第三個……以此類推,但是需要注意的是假如我想給第一個和第三個賦值,你不能寫(值1,,值3),必須把原來的預設值寫上去!
.border3(@x:solid,@c:red){
border: 21px @arguments;
}
.div1{
.border3(dashed);
}
編譯後的css:
.div1 {
border: 21px dashed #ff0000;
}
十、匹配模式
傳值的時候定義一個字元,在使用的時候使用哪個字元,就呼叫那條規則。
.border4(all,@w: 5px){
border-radius: @w;
}
.border4(t_l,@w:5px){
border-top-left-radius: @w;
}
.border4(t_r,@w:5px){
border-top-right-radius: @w;
}
.border4(b-l,@w:5px){
border-bottom-left-radius: @w;
}
.border4(b-r,@w:5px){
border-bottom-right-radius: @w;
}
footer{
.border4(t_l,10px);
.border4(b-r,10px);
background: #33acfe;
}
編譯後的css:
footer {
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
background: #33acfe;
}
十一、混合的返回值
在使用混合時,有時會用到一些運算,這時就有返回值。
.average(@x, @y) {
@average: ((@x + @y) / 2);
@he:(@x + @y);
}
footer{
.average(16px, 50px);
padding: @average;
margin: @he;
}
編譯後的css:
footer {
padding: 33px;
margin: 66px;
}
十二、關鍵字!important
在使用混合屬性後面加上!important關鍵字,則混合中的所有屬性都會加上關鍵字!important。
.fool(@bg:#333;@color: orange){
background: @bg;
color: @color;
}
.unimportant{
.fool;
}
.important{
.fool !important;
}
編譯後的css:
.unimportant {
background: #333333;
color: #ffa500;
}
.important {
background: #333333 !important;
color: #ffa500 !important;
}
相關推薦
學會如何使用LESS(一)----變數和混合
最近在學習了less,作些筆記; 本質上,LESS 包含一套自定義的語法及一個解析器,使用者根據這些語法定義自己的樣式規則,這些規則最終會通過解析器,編譯生成對應的 CSS 檔案。LESS 並沒有裁剪 CSS 原有的特性,更不是用來取代 CSS 的,而是在現有
JavaScript複習筆記(一)變數、資料型別和運算子
1、JavaScript用來做什麼 HTML:專門編寫網頁內容的語言 CSS:專門美化網頁內容樣式的語言 JavaScript:專門編寫互動程式的語言 JavaScript包含三個方面:ECMAScript標準+DOM標準+BOM 2、常用語句 在控制檯中輸出一段話 &nbs
less 新手入門(一) 變數、extend 擴充套件
變數 1.定義 使用 @ 符號來定義變數 ,在Less中開頭是 @ 則是變數,關於變數的命名方法,大家可以參考js中命名的規則,畢竟是做前端的,有著統一的習慣有助於我們統一風格。個人推薦變數名的命名規則使用駝峰命名法。第一個單詞首寫字母小寫,從第二個開始,單詞首寫字母大寫。如
[轉]設計模式--單例模式(一)懶漢式和餓漢式
打印 是否 調用構造 餓漢 一段 tools 會有 輸出結果 java 單例模式是設計模式中比較簡單的一種。適合於一個類只有一個實例的情況,比如窗口管理器,打印緩沖池和文件系統, 它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統的不同對象訪問,因此需要一個
Android內存優化(一)DVM和ART原理初探
java虛擬機 劃分 cimage beef 靜態 由於 jar blank 查找 要學習Android的內存優化,首先要了解Java虛擬機,此前我用了多篇文章來介紹Java虛擬機的知識,就是為了這個系列做鋪墊。在Android開發中我們接觸的是與Java虛擬機類似的Dal
docker(一)安裝和必要的配置。
cgroup deb secure expec dex store div post oca Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制
自動化運維工具Ansible實戰(一)簡介和部署
Ansible 自動化運維 一、Ansible的介紹 Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點。實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible是基於模塊工作的,本身沒
(一)Hybrid app混合開發模式
hone oid 定義 frame hybrid and ova 角度 分享 hybrid app是什麽? 這裏我們先看一下詞條上的定義 Hybrid App:Hybrid App is a mobile application that is coded in both
Golang學習筆記(一)變數申明
第一種:指定變數型別,聲明後若不賦值,使用預設值。 var aaa int aaa = 10 第二種:根據值自行判定變數型別。 var aaa = "string" 第三種:用程式碼塊批量生成變數。 var ( a int b string c float32 d
自動化測試(一)-get和post的簡單應用
今天主要介紹兩種測試的介面post和get: get和post是http的兩種基本請求方式,區別在於get把引數包含在url中傳遞;給而post把引數以json或鍵值對的方式利用工具傳遞。 get的傳遞隨便找個遊覽器就可以進行介面測試: 舉個栗子:這是個獲取學生資訊的介面 介面資訊:1:url
作用域和閉包(一)上下文和提升
上下文: 一段script 或者函式 全域性作用域: 一段script中 函式作用域: 函式中 變數提升 JS 引擎在解析js指令碼時,進入全域性作用域,首先提取變數宣告和函式宣告, 函式宣告在變數宣告之前, 提取到頂部 函式作用域解析過程(執行之前): 提取變數宣告,函式宣告,th
java學習筆記(一)int和Integer的區別
int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值
ES6學習(一)---let和const用法
1.let用法 (1)存在作用域,即let宣告函式會在花括號中執行 (2)es6規定暫時性死區,暫時性死區通俗的來講就是一個區塊中存在let和const宣告的變數,那麼該區塊會形成封閉作用域,在let和const宣告之前使用該變數都會報錯。 //例子1 { console.lo
手遊客戶端的效能篇(一)----Unity和C#版之Foreach GC
序:昨天去了南京的湯山紫清湖溫泉,安利一下,價格也不貴(不是打廣告。。。不貼怎麼訂票之類的,有興趣可以評論),還去見了多年未見的老友啊~不出意外的話下篇是手遊客戶端的效能篇(二)----Unity和C#版,想寫優化和效能想寫很久了
第七章 檔案管理(一)——檔案和檔案系統
**資料項:**描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。 **記錄:**一組相關資料項集合,描述物件某方面的屬性; **關鍵字:**一個記錄中的一個或幾個資料項的集合,用於唯一的標識一個記錄。 檔案:由建立者定義的、具有檔名的一組相關元素的集合。 有結構:由相關記錄
react and redux(一)props和state
安裝 示例 總結 安裝 安裝好node.js和npm之後,命令列執行下面的命令: npm install --global create-react-app 建立應用目錄: create-react-app fi
Spark Streaming狀態管理函式(一)——updateStateByKey和mapWithState
updateStateByKey和mapWithState 什麼是狀態管理函式 updateStateByKey mapWithState updateStateByKey和mapWithState的區別 適用場景 什麼是狀態管理函
spring事務管理原始碼分析(一)配置和事務增強代理的生成流程
在本篇文章中,將會介紹如何在spring中進行事務管理,之後對其內部原理進行分析。主要涉及 @EnableTransactionManagement註解為我們做了什麼? 為什麼標註了@Transactional註解的方法就可以具有事務的特性,保持了資料的ACID特性?spring到底是如何具有這樣
Oracle資料庫學習(一)安裝和簡單使用
新公司的新專案,需要用到Oracle資料庫,所以現在便來解除此資料庫,不得不說,這個資料庫還這是麻煩。 安裝倒是簡單,就是中間會遇到各種問題。 安裝步驟參考:https://blog.csdn.net/fancheng614/article/details/78172894 安裝完成後,中間不要有太大的
Python基礎(一)--變數、註釋、檔案頭
一、變數 1、什麼是變數 變數是變化的量,用來儲存程式執行的狀態以及狀態的變化 2、變數定義規範 #1. 變數名只能是:字母、數字或下劃線的任意組合 #2. 變數名的第一個字元不能是數字 #3. 關鍵字不能宣告為變數名['and', 'as', 'assert', 'break', 'class