less入門及知識點整理

来源:https://www.cnblogs.com/linxian95/archive/2018/10/07/9750154.html
-Advertisement-
Play Games

LESS « 一種動態樣式語言 文檔鏈接:http://www.bootcss.com/p/lesscss/ 百科 Less 是一門 CSS 預處理語言,它擴充了 CSS 語言,增加了諸如變數、混合(mixin)、函數等功能,讓 CSS 更易維護、方便製作主題、擴充。 Less 可以運行在 Node ...


LESS « 一種動態樣式語言

文檔鏈接:http://www.bootcss.com/p/lesscss/

 

百科

Less 是一門 CSS 預處理語言,它擴充了 CSS 語言,增加了諸如變數、混合(mixin)、函數等功能,讓 CSS 更易維護、方便製作主題、擴充。

Less 可以運行在 Node 或瀏覽器端。

 

疑問

Less是什麼呢?

Less是CSS的一門預處理語言。

其他一些CSS預處理語言諸如Sass、Stylus等。

 

什麼是預處理語言呢?

以前寫CSS是沒有變數的,使用Less的話就有了變數,所以可以乾一些奇妙的事情!還有其他一些方便的功能會在下麵講到。

 

Less和CSS在開發中是什麼關係呢?

在開發中,我們先使用Less的語法編寫代碼,再通過其他一些手段將.less文件轉成.css文件。

工具如Koala等。

 

知識鏈

1 變數

2 混合

    2.1 帶參數混合

    2.2 給參數設置預設值

    2.3 不帶參數混合

    2.4 @arguments變數

    2.5 模式匹配

    2.6 匹配多個參數

    2.7 導引

        2.7.1 導引序列使用逗號

        2.7.2 導引參數

        2.7.3 使用函數

        2.7.4 and關鍵字

        2.7.5 not關鍵字

3 嵌套

4 運算

5 Color函數

6 Math函數

7 命名空間

8 作用域

9 註釋

10 引入

11 字元串插值

12 避免編譯

13 JavaScript表達式

  1 變數
// .less文件(後面的代碼將省略說明)
// 變數用@符號聲明
@nice-blue: #5b83ad;
@light-blue: @nice-blue + #111;
 
#header {
    color: @light-blue
}
 
// 將變數名定義為變數
@fnord: 'I am fnord.';
@var: 'fnord';
content: @@var;
 
// less中的變數為完全的常量,所以只能定義一次

// .css文件(後面的代碼將省略css輸出)
// 在css中輸出為
#header {
    color: #6c94be;
}

content: 'I am fnord.';

 

2 混合
// 定義一些通用的屬性集為一個class,
// 然後在另一個class中去調用這些屬性
.bordered {
    border-top: dotted 1px black;
    border-bottom: solid 2px black;
}

#menu a {
    color: #111;
    .bordered;
}

.post a  {
    color: red;
    .bordered;
}

 

2.1 帶參數混合
.border-radious(@radious) {
    border-radius: @radious;
    -moz-border-radius: @radious;
    -webkit-border-radius: @radious;
}

#header {
    .border-radious(4px);
}

.button {
    .border-radious(6px);
}

 

2.2 給參數設置預設值
.border-radious(@radious) {
    border-radius: @radious;
    -moz-border-radius: @radious;
    -webkit-border-radius: @radious;
}

#header {
    .border-radious(4px);
}

.button {
    .border-radious(6px);
}

 

2.3 不帶參數混合
// 如果想隱藏屬性集合,不讓它暴露到CSS中去,
// 但是還想在其他的屬性集合中引用
.wrap() {
    text-wrap: wrap;
    white-space: pre-wrap;
    white-space: -moz-pre-wrap;
    word-wrap: break-word;
}

pre {
    .wrap
}

 

2.4 @arguments變數
// @arguments包含了所有傳遞進來的參數
// 如果不想單獨處理每一個參數的話
.box-shadow(@x:0, @y:0, @blur:1px, @color:#000) {
    box-shadow: @arguments;
    -moz-box-shadow: @arguments;
    -webkit-box-shadow: @arguments;
}

 

2.5 模式匹配
// 根據傳入的參數來改變混合的預設呈現
// 讓.mixin根據不同的@switch值而表現各異
.mixin(dark, @color) { // 這裡前面沒有帶@所以可以作為標識
    color: darken(@color, 10%);
}
 
.mixin(light, @color) { // 只接受light為首參
    color: lighten(@color, 10%);
}
 
.mixin(@_, @color) { // 接受任意值
    display: block;
}
 
// 使用
@switch: light;
 
.class {
    .mixin(@switch, #888);
}
 
// 只有被匹配的混合才會被使用
// 變數可以匹配任意的傳入值,
// 而變數以外的固定值就僅僅匹配與其相等的傳入值

// 在css中輸出為
.class {
    color: #a2a2a2;
    display: block;
}

 

2.6 匹配多個參數
.mixin(@a) {
    color: @a;
}

.mixin(@a, @b) {
    color: fade(@a, @b);
}

 

2.7 導引
// 當我們想根據表達式進行匹配,而非根據值和參數匹配
// 為了儘可能地保留CSS的可聲明性,less通過導引混合而非if/else語句來實現條件判斷
.mixin (@a) when (lightness(@a) >= 50%) {
    background-color: black;
}

.mixin (@a) when (lightness(@a) < 50%) {
    background-color: white;
}

.mixin (@a) {
    color: @a;
}

// 使用
.class1 {
    .mixin(#ddd)
}

.class2 {
    .mixin(#555)
}

// 導引中可用的全部比較運算有:>, >=, =, =<, <

 

2.7.1 導引序列使用逗號
// 導引序列使用逗號分割,當且僅當所有條件都符合時,才會被視為匹配成功。
.mixin (@a) when (@a > 10), (@a < -10) {}

 

2.7.2 導引參數
// 導引可以無參數,也可以對參數進行比較運算
@media: mobile;

.mixin (@a) when (@media = mobile) {}
.mixin (@a) when (@media = desktop) {}

.max (@a, @b) when (@a > @b) { width: @a }
.max (@a, @b) when (@a < @b) { width: @b }

 

2.7.3 使用函數
// 基於值的類型進行匹配,可以使用is函數
.mixin (@a, @b: 0) when (isnumber(@b)) {}
.mixin (@a, @b: black) when (iscolor(@b)) {}

// 常見的檢測函數
// iscolor
// isnumber
// isstring
// iskeyword
// isurl

// 判斷一個值是純數字還是單位量
// ispixel
// ispercentage
// isem

 

2.7.4 and關鍵字
// 使用and關鍵字實現與條件
.mixin (@a) when (isnumber(@a)) and (@a > 0) {}

 

2.7.5 not關鍵字
// 使用not關鍵字實現或條件
.mixin (@b) when not (@b > 0) {}

 

3 嵌套

#header {

    color: black;

    .navigation {
        font-size: 12px;
    }

    .logo {
        width: 300px;
        &:hover {
            text-decoration: none;
        }
    }

}

 

4 運算

// 任何數字、顏色或者變數都可以參與運算

// less能夠分辨出顏色和單位
@var: 1px + 5;

// 使用括弧
width: (@var + 5) * 2;

// 在複合屬性中運算
border: (@width * 2) solid black;

 

5 Color函數

lighten(@color, 10%);    // 輕
darken(@color, 10%);     // 深
saturate(@color, 10%);   // 飽和
desaturate(@color, 10%); // 稀釋
fadein(@color, 10%);     // 漸顯
fadeout(@color, 10%);    // 漸隱
fade(@color, 50%);       // 透明
spin(@color, 10);        // 大10度
spin(@color, -10);       // 小10度
mix(@color1, @color2);   // 組合

// 使用
@base: #f04615; 

.class {
    color: saturate(@base, 5%);
    background-color: lighten(spin(@base, 8), 25%);
}

// 提取顏色信息
hue(@color);        // 色度
saturation(@color); // 飽和度
lightness(@color);  // 亮度

// 在一種顏色的通道上創建另一種顏色
// @new 將會保持@old的色調, 但是具有不同的飽和度和亮度
// hsl函數同時使用上述3種函數
@new: hsl(hue(@old), 45%, 90%);

 

6 Math函數

ceil(2.4);       // 向上
round(1.67);     // 四捨五入
floor(2.6);      // 向下
percentage(0.5); // 轉成百分比

 

7 命名空間

// 為了更好組織CSS或者單純是為了更好的封裝,
// 將一些變數或者混合模塊打包起來,
// 定義一些屬性集之後可以重覆使用
#bundle {
    .button() {
        display: block;
        border: 1px solid black;
        background-color: grey;
        &:hover {
            background-color: white;
        }
    }
    .tab {}
    .citation {}
}

// 在#header a中引入.button
#header a {
    color: orange;
    #bundle > .button;
}

 

8 作用域

// 首先會從本地查找變數或者混合模塊,
// 如果沒找到的話會去父級作用域中查找,直到找到為止
@var: red;

#page {
  @var: white;
  #header {
    color: @var; // white
  }
}

#footer {
  color: @var;   // red  
}

 

9 註釋

/* Hello, I'm a CSS-style comment */
.class { color: black }

// less同樣也支持雙斜線的註釋, 但是編譯成 CSS 的時候自動過濾掉:
// Hi, I'm a silent comment, I won't show up in your CSS
.class { color: white }

 

10 引入

// 在main文件中引入.less文件,.less尾碼可帶可不帶
@import "lib.less";
@import "lib";

// 導入一個CSS文件而且不想less對它進行處理,只需要使用.css尾碼就可以
@import "lib.css";

 

11 字元串插值

// 變數可以使用@{name}這樣的結構嵌入到字元串中
@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");

 

12 避免編譯

// 如果需要輸出一些不正確的CSS語法
// 或者使用一些less不認識的專有語法
// 要輸出這樣的值可以在字元串前加上一個~
.class {
    filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}

 

13 JavaScript表達式

// 通過反引號的方式使用
@var: `"hello".toUpperCase() + '!'`;

// 可以同時使用字元串插值和避免編譯
@str: "hello";
@var: ~`"@{str}".toUpperCase() + '!'`;

// 可以訪問JavaScript環境
@height: `document.body.clientHeight`;

// 將一個JavaScript字元串解析成16進位的顏色值
@color: color(`window.colors.baseColor`);
@darkcolor: darken(@color, 10%);

 

使用

less的使用有多種方法,最終都是通過編譯工具編譯成.css文件。

先用你的編輯器新建一個.less文件,再用Less的語法編寫你的代碼,就如

再用編譯工具將你的.less文件編譯成.css文件。

 

這裡我用的編譯工具是 Koala ,

下載地址:http://koala-app.com/index-zh.html

它的界面是這樣子的

直接將你包含.less文件的文件夾拖拽進去就行了。

 

點擊文件,執行編譯,最後將會在你的桌面上生成.css文件。

 

最後生成的.css文件

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • RDB RDB是將當前數據生成快照保存到硬碟上。 RDB的工作流程: 1. 執行bgsave命令,Redis父進程判斷當前是否存在正在執行的子進程,如RDB/AOF子進程,如果存在bgsave命令直接返回。 2. 父進程執行fork操作創建子進程,fork操作過程中父進程被阻塞。 3. 父進程for ...
  • 本文對Flutter的29種佈局控制項進行了總結分類,講解一些佈局上的優化策略,以及面對具體的佈局時,如何去選擇控制項。 ...
  • 本文主要介紹Flutter佈局中的FittedBox、AspectRatio、ConstrainedBox,詳細介紹了其佈局行為以及使用場景,並對源碼進行了分析。 ...
  • js中innerHTML與innerText的用法與區別 用法: <div id="test"> <span style="color:red">test1</span> test2 </div> 在JS中可以使用:test.innerHTML: 也就是從對象的起始位置到終止位置的全部內容,包括Ht ...
  • 在大家在網上平常瀏覽網頁的時候,想必各位都會看到選項卡功能,在這裡給大家詳解一下用原生js、jQuery如何來寫一些基本的選項卡 話不多說,先給各位看一下功能圖: 好了,下邊開始寫代碼了: HTML代碼: CSS代碼: *{ margin: 0; padding: 0; } ul{ overflow ...
  • react將dom解耦,不用直接操作dom,使用了狀態機制,當狀態改變時視圖就會相應更新。我們知道在react中,父組件可以將一些狀態傳遞給子組件,讓子組件的視圖相應更新,這時我們會發現,只有有關聯的組件才可以依次傳遞,那些沒有父組件與子組件關係的組件,這些組件之間的某些狀態是共用的,這時就需要re ...
  • 正則表達式(Regular Expression)是電腦科學的一個概念。 正則表達式使用單個字元竄來描述、匹配一系列符合某個句法規則的字元竄。 在很多文本編輯器里, 正則表達式通常用來被檢索替換哪些符合某個模式的文本。 "正則表達式實例" 創建 JavaScript通過內置對象 RegExp支持正 ...
  • 用了幾個月Vue一直很糾結自定義組件的v-model實現,最近開始學習React時,React中受控組件與狀態提升的理念與v-model不謀而合。 轉載請註明地址: https://www.cnblogs.com/sonoda-umi/p/9750188.html 在Vue與React中其實都存在單 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...