1. 程式人生 > >學會如何使用LESS(一)----變數和混合

學會如何使用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內存優化DVMART原理初探

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

自動化測試-getpost的簡單應用

今天主要介紹兩種測試的介面post和get: get和post是http的兩種基本請求方式,區別在於get把引數包含在url中傳遞;給而post把引數以json或鍵值對的方式利用工具傳遞。 get的傳遞隨便找個遊覽器就可以進行介面測試: 舉個栗子:這是個獲取學生資訊的介面 介面資訊:1:url

作用域閉包上下文提升

上下文: 一段script 或者函式 全域性作用域: 一段script中 函式作用域: 函式中   變數提升 JS 引擎在解析js指令碼時,進入全域性作用域,首先提取變數宣告和函式宣告, 函式宣告在變數宣告之前, 提取到頂部 函式作用域解析過程(執行之前): 提取變數宣告,函式宣告,th

java學習筆記intInteger的區別

int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值

ES6學習---letconst用法

1.let用法 (1)存在作用域,即let宣告函式會在花括號中執行 (2)es6規定暫時性死區,暫時性死區通俗的來講就是一個區塊中存在let和const宣告的變數,那麼該區塊會形成封閉作用域,在let和const宣告之前使用該變數都會報錯。 //例子1 { console.lo

手遊客戶端的效能篇----UnityC#版之Foreach GC

          序:昨天去了南京的湯山紫清湖溫泉,安利一下,價格也不貴(不是打廣告。。。不貼怎麼訂票之類的,有興趣可以評論),還去見了多年未見的老友啊~不出意外的話下篇是手遊客戶端的效能篇(二)----Unity和C#版,想寫優化和效能想寫很久了

第七章 檔案管理——檔案檔案系統

**資料項:**描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。 **記錄:**一組相關資料項集合,描述物件某方面的屬性; **關鍵字:**一個記錄中的一個或幾個資料項的集合,用於唯一的標識一個記錄。 檔案:由建立者定義的、具有檔名的一組相關元素的集合。 有結構:由相關記錄

react and reduxpropsstate

安裝 示例 總結 安裝 安裝好node.js和npm之後,命令列執行下面的命令: npm install --global create-react-app 建立應用目錄: create-react-app fi

Spark Streaming狀態管理函式——updateStateByKeymapWithState

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