日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

预处理器less

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 预处理器less 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 預(yù)處理器less
    • 一、less的使用環(huán)境
      • 1.運(yùn)行時(shí)編譯
      • 2.預(yù)編譯
        • (1).借助考拉編譯less
        • (2). vscode 插件 Easy LESS
        • (3). vscode 插件 Easy LESS
    • 二、less的語(yǔ)法
      • 1. less中的注釋
      • 2. less中的變量
      • 3. 作用域(Scope)
      • 4. less中的嵌套規(guī)則
      • 5.導(dǎo)入(Importing)
      • 6. less中的混合
        • (1).普通混合
        • (2).不帶輸出的混合
        • (3).帶參數(shù)的混合
        • (4).帶參數(shù)并且有默認(rèn)值的混合
        • (5).帶多個(gè)參數(shù)的混合
        • (6).命名參數(shù)
        • (7).匹配模式
        • (8).arguments變量
      • 7.映射(Maps)
      • 8.less運(yùn)算
      • 9. less繼承
        • (1)基本用法
        • (2)****繼承嵌套(nested)選擇器****
        • (3)**精確匹配(exactly matching)**
        • (4)extend的選擇器替代問(wèn)題
        • (5)媒體查詢@media內(nèi)的繼承范圍(scope)問(wèn)題
        • (6)Duplication(重復(fù))問(wèn)題
        • (7)繼承的經(jīng)典使用情況
        • (8)**all 的使用**
      • 10. less避免編譯

預(yù)處理器less

less官方網(wǎng)站

bootstrap中l(wèi)ess教程

less是一種動(dòng)態(tài)樣式語(yǔ)言,屬于css預(yù)處理器的范疇,它擴(kuò)展了 CSS 語(yǔ)言,
增加了變量、Mixin、函數(shù)等特性,使 CSS 更易維護(hù)和擴(kuò)展
LESS 既可以在 客戶端 上運(yùn)行 ,也可以借助Node.js在服務(wù)端運(yùn)行。

less能干啥

舉個(gè)例子

這是css寫(xiě)法,如果寫(xiě)的太多搞不清楚嵌套層級(jí)

* {margin: 0;padding: 0; } #wrap {position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto; } #wrap .inner {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: pink;height: 100px;width: 100px; }

less寫(xiě)法

*{margin: 0;padding: 0;#wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: pink;height: 100px;width: 100px;}} }

一、less的使用環(huán)境

1.運(yùn)行時(shí)編譯

在瀏覽器環(huán)境中使用 Less

不建議使用這種方式,應(yīng)該預(yù)編譯

運(yùn)行時(shí)編譯(html中樣式是less代碼,在運(yùn)行的時(shí)候編譯【通過(guò)引用相關(guān)js文件】

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/less">*{margin: 0;padding: 0;}#wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: pink;height: 100px;width: 100px;}}</style></head><body><div id="wrap"><div class="inner"></div></div></body><script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js" ></script> </html>
  • less文件也可以下載下來(lái),然后引用本地文件<script src="less/less.min.js"></script>

  • style文件若為單獨(dú)的.less文件 <link rel="stylesheet/less" type="text/less" href="styles.less" /> 但此時(shí)需要考慮跨域的問(wèn)題

2.預(yù)編譯

預(yù)編譯(開(kāi)發(fā)的時(shí)候?qū)憀ess文件,然后轉(zhuǎn)化為css文件后引用)

(1).借助考拉編譯less

koala 官網(wǎng)

這個(gè)不太好用

(2). vscode 插件 Easy LESS

保存拓展名為less 的文件 ,自動(dòng)編譯為css文件

這個(gè)太香了

(3). vscode 插件 Easy LESS

二、less的語(yǔ)法

1. less中的注釋

以//開(kāi)頭的注釋,不會(huì)被編譯到css文件中 以/**/包裹的注釋會(huì)被編譯到css文件中

2. less中的變量

使用@來(lái)申明一個(gè)變量:@pink:pink;

  • 作為普通屬性值只來(lái)使用:直接使用@pink
  • 作為選擇器和屬性名:@{selector的值}的形式
  • 變量的延遲加載,及其作用域{}范圍
  • @color:deeppink; @m:margin; @selector:#wrap; @url:'../img/1.jpg'; *{@{m}: 0;padding: 0;background: red url(@url);//也可以寫(xiě)為 background: red url("@{url}"); } @{selector}{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: @color;height: 100px;width: 100px;} } //演示變量的延遲加載,及其作用域{}范圍 @var: 0; .class { @var: 1;.brass {@var: 2;three: @var;//這個(gè)編譯完為3@var: 3;}one: @var;//這個(gè)編譯完為1 }

    3. 作用域(Scope)

    塊級(jí)作用域

    Less 中的作用域與 CSS 中的作用域非常類似。首先在本地查找變量和混合(mixins),如果找不到,則從“父”級(jí)作用域繼承。

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

    與 CSS 自定義屬性一樣,混合(mixin)和變量的定義不必在引用之前事先定義。因此,下面的 Less 代碼示例和上面的代碼示例是相同的:

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

    4. less中的嵌套規(guī)則

  • 基本嵌套規(guī)則(就是每嵌套一級(jí),下一級(jí)為上一級(jí)選擇器 下一級(jí)選擇器 之間空格隔開(kāi))
  • &的使用
  • @color:deeppink; *{margin: 0;padding: 0; } #wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: @color;height: 100px;width: 100px;&:hover{background: pink;}//若沒(méi)有& 編譯后為#wrap .inner :hover//若加上& 編譯后為#wrap .inner:hover//沒(méi)加& hover是不可用的} }

    5.導(dǎo)入(Importing)

    “導(dǎo)入”的工作方式和你預(yù)期的一樣。你可以導(dǎo)入一個(gè) .less 文件,此文件中的所有變量就可以全部使用了。如果導(dǎo)入的文件是 .less 擴(kuò)展名,則可以將擴(kuò)展名省略掉:

    @import "library"; // library.less @import "typo.css";

    6. less中的混合

    混合就是將一系列屬性從一個(gè)規(guī)則集引入到另一個(gè)規(guī)則集的方式

    混合名以 “.”開(kāi)頭

    (1).普通混合

    混合名{規(guī)則集}

    編譯時(shí)該混合也被當(dāng)類選擇器編譯出去

    當(dāng)然類選擇器也可以當(dāng)普通混合使用

    #wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;}.inner2{.inner;} }

    (2).不帶輸出的混合

    混合名(){規(guī)則集}

    編譯時(shí)該混合不被編譯

    使用該混合時(shí)也需要加()

    (3).帶參數(shù)的混合

    混合名(變量){規(guī)則集}

    編譯時(shí)該混合不被編譯

    (4).帶參數(shù)并且有默認(rèn)值的混合

    混合名(變量有默認(rèn)值){規(guī)則集}

    編譯時(shí)該混合不被編譯

    .juzhong(@w:10px,@h:10px,@c:pink){position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: @c;height: @h;width: @w; }#wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{.juzhong(100px ,100px,pink);}.inner2{.juzhong();} }

    (5).帶多個(gè)參數(shù)的混合

    上方演示的就帶多個(gè)參數(shù)

    (6).命名參數(shù)

    傳參時(shí)指定傳給某個(gè)形參值,其他使用默認(rèn)值

    若不指定,實(shí)參只會(huì)傳給第一形參

    .juzhong(@w:10px,@h:10px,@c:pink){position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: @c;height: @h;width: @w; }#wrap{position: relative;width: 300px;height: 400px;border: 1px solid;margin: 0 auto;.inner{.juzhong(100px ,100px,pink);}.inner2{.juzhong(@c:black);} }

    (7).匹配模式

    先設(shè)置一個(gè)被引用的匹配模式的相關(guān)代碼

    triangle.less

    //把幾種模式的相同屬性放在這里,減少代碼量 //第一個(gè)參數(shù)為@_,調(diào)用其他模式會(huì)自動(dòng)引入該混合中的屬性集 .triangle(@_,@wwww,@ccccc){width: 0px;height: 0px;overflow: hidden; }//三角方向向左 .triangle(L,@w,@c){border-width: @w;border-style:dashed solid dashed dashed;border-color:transparent @c transparent transparent ; } //三角方向向右 .triangle(R,@w,@c){border-width: @w;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent @c; } //三角方向向上 .triangle(T,@w,@c){border-width: @w;border-style:dashed dashed solid dashed;border-color:transparent transparent @c transparent ; } //三角方向向下 .triangle(B,@w,@c){border-width: @w;border-style:solid dashed dashed dashed;border-color:@c transparent transparent transparent ; }

    3.less

    @import "./triangle.less"; #wrap .sjx{.triangle(R,40px,yellow) }

    編譯后

    #wrap .sjx {width: 0px;height: 0px;overflow: hidden;border-width: 40px;border-style: dashed dashed dashed solid;border-color: transparent transparent transparent #ffff00; }

    (8).arguments變量

    .border(@w:1px,@style:solid,@c:black){width: 20px;height: 50px;border: @arguments; }#wrap .sjx{.border() }

    編譯后:

    #wrap .sjx {width: 20px;height: 50px;border: 1px solid black; }

    7.映射(Maps)

    從 Less 3.5 版本開(kāi)始,你還可以將混合(mixins)和規(guī)則集(rulesets)作為一組值的映射(map)使用。

    #colors() {primary: blue;secondary: green; }.button {color: #colors[primary];border: 1px solid #colors[secondary]; }

    輸出符合預(yù)期:

    .button {color: blue;border: 1px solid green; }

    8.less運(yùn)算

    在less中可以進(jìn)行加減乘除的運(yùn)算

    一般只有一個(gè)數(shù)帶單位就行

    算術(shù)運(yùn)算符 +、-、*、/ 可以對(duì)任何數(shù)字、顏色或變量進(jìn)行運(yùn)算。如果可能的話,算術(shù)運(yùn)算符在加、減或比較之前會(huì)進(jìn)行單位換算。計(jì)算的結(jié)果以最左側(cè)操作數(shù)的單位類型為準(zhǔn)。如果單位換算無(wú)效或失去意義,則忽略單位。無(wú)效的單位換算例如:px 到 cm 或 rad 到 % 的轉(zhuǎn)換。

    // 所有操作數(shù)被轉(zhuǎn)換成相同的單位 @conversion-1: 5cm + 10mm; // 結(jié)果是 6cm @conversion-2: 2 - 3cm - 5mm; // 結(jié)果是 -1.5cm// conversion is impossible @incompatible-units: 2 + 5px - 3cm; // 結(jié)果是 4px// example with variables @base: 5%; @filler: @base * 2; // 結(jié)果是 10% @other: @base + @filler; // 結(jié)果是 15%

    乘法和除法不作轉(zhuǎn)換。因?yàn)檫@兩種運(yùn)算在大多數(shù)情況下都沒(méi)有意義,一個(gè)長(zhǎng)度乘以一個(gè)長(zhǎng)度就得到一個(gè)區(qū)域,而 CSS 是不支持指定區(qū)域的。Less 將按數(shù)字的原樣進(jìn)行操作,并將為計(jì)算結(jié)果指定明確的單位類型。

    @base: 2cm * 3mm; // 結(jié)果是 6cm

    你還可以對(duì)顏色進(jìn)行算術(shù)運(yùn)算:

    @color: #224488 / 2; //結(jié)果是 #112244 background-color: #112244 + #111; // 結(jié)果是 #223355

    現(xiàn)在除法算式需要加上括號(hào),或./強(qiáng)制運(yùn)算,否則不編譯

    9. less繼承

    • 性能比混合高
    • 靈活度比混合低

    (1)基本用法

    繼承被附在選擇器后面或放置在規(guī)則集(即具體定于樣式處),它看起來(lái)就像是一個(gè)在關(guān)鍵字extend后具有可選參數(shù)的偽類(pseudoclass)。

    .parentClass{color:red; } .subClassOne{&:extend(.parentClass); } .subClassTwo:extend(.parentClass){}

    編譯為:

    .parentClass, .subClassOne, .subClassTwo {color: red; }

    (2)繼承嵌套(nested)選擇器

    .parentClass{span{color:red} } .subClassOne{&:extend(.parentClass span); }

    編譯為:

    .parentClass span, .subClassOne {color: red; }

    (3)精確匹配(exactly matching)

    Less中,關(guān)鍵字extend里面的選擇器必須與已定義的樣式選擇器嚴(yán)格一致,如div .a{}樣式只能通過(guò)extend(div .a)繼承,而不能是extend(.a),盡管這兩者在CSS中并沒(méi)太多區(qū)別

    .a.class, .class.a, .class > .a {color: blue; } .test:extend(.class) {} // this will NOT match the any selectors above

    編譯將提示:extend ‘.class’ has no matches錯(cuò)誤。此外,通配符也不能用于此情況。

    (4)extend的選擇器替代問(wèn)題

    此處即針對(duì)《less筆記-變量》文中選擇器名字被變量替代的情況。只需extend繼承的選擇器名不包含變量,或在被參考的地方不是變量即可。

    @myClass:.redColor;@{myClass}{color:red; } .class{color:red; } .subClass:extend(.redColor){} //extend參考的選擇器名在參考處為變量,錯(cuò)誤 .subClass:extend(@{myClass}){} //extend內(nèi)選擇器名為變量,錯(cuò)誤。 @myClass:extend(.class){} //不是上面兩種情況,無(wú)錯(cuò)。

    (5)媒體查詢@media內(nèi)的繼承范圍(scope)問(wèn)題

    同一個(gè)媒體查詢(@media)內(nèi)可被繼承,

    @media print {.screenClass:extend(.selector) {} // extend inside media.selector { // this will be matched - it is in the same mediacolor: black;} } .selector { // ruleset on top of style sheet - extend ignores itcolor: red; } @media screen {.selector { // ruleset inside another media - extend ignores itcolor: blue;} }

    編譯為:

    @media print {.selector,.screenClass {color: black;} } .selector {color: red; } @media screen {.selector {color: blue;} }

    說(shuō)明:并非內(nèi)外部?jī)?yōu)先級(jí)問(wèn)題,實(shí)際編譯可知,若將媒體查詢print內(nèi)部的.selector去掉,仍然無(wú)法繼承外部的.selector。

    (6)Duplication(重復(fù))問(wèn)題

    .class1,.class2{color:red; } .class3:extend(.class1,.class2){}

    注意:class1與class2是用逗號(hào)隔開(kāi),屬于分組查詢,所有不會(huì)有上面的第2條。編譯為:

    .class1, .class2, .class3, .class3 {color: red; }

    可見(jiàn)繼承于分組選擇器將是每個(gè)都單獨(dú)繼承。對(duì)于此處class1與class2完全一樣的情況,extend內(nèi)只寫(xiě)一個(gè)即可,不存在匹配問(wèn)題。

    (7)繼承的經(jīng)典使用情況

    extend的經(jīng)典使用情況在于,用于減少基類的使用。

    如:現(xiàn)在有個(gè)默認(rèn)字體樣式類baseStyle,此外有個(gè)與baseStyle稍有差別的類specialStyle。則使css較少的css與html分別可為:

    css:

    .baseStyle{color:gray;font-weight:500; } .specialStyle{color:blue; }

    html:

    <p class="baseStyle">我是默認(rèn)的段落樣式</p> <p class="baseStyle specialStyle">我是默認(rèn)樣式上加了特殊樣式的段落</p>

    而思路相同,卻更好的做法是使用Less的繼承:

    .baseStyle{color:gray;font-weight:500; } .specialStyle:extend(.baseStyle){color:blue; }

    效果雖一樣,但使用less將使html結(jié)構(gòu)信息更加直觀,也更便于日后修改。

    繼承實(shí)際上是將當(dāng)前的選擇器名以分組形式添加到被繼承的選擇器處,所以當(dāng)既有繼承又有自身樣式時(shí),應(yīng)注意被繼承的選擇器的位置。

    情況一:被繼承的選擇器在前面

    .parentClass{color:red; } .subClass{color:blue;&:extend(.parentClass);border:1px solid blue; }

    編譯結(jié)果,與預(yù)期一致,使用了自身的特殊color:

    .parentClass, .subClass {color: red; } .subClass {color: blue;border: 1px solid blue; }

    情況二:被繼承的選擇器在后面

    .subClass{color:blue;&:extend(.parentClass);border:1px solid blue; } .parentClass{color:red; }

    編譯結(jié)果,因?yàn)槲恢迷?#xff0c;與預(yù)期不一致,此時(shí)此例中繼承沒(méi)達(dá)到目的:

    .subClass {color: blue;border: 1px solid blue; } .parentClass, .subClass {color: red; }

    (8)all 的使用

    *{margin: 0;padding: 0; }.juzhong{position: absolute;left: 0;right: 0;bottom: 0;top: 0;margin: auto; }.juzhong:hover{background: red!important; }#wrap{position: relative;width: 300px;height: 300px;border: 1px solid;margin: 0 auto;.inner{&:extend(.juzhong all);&:nth-child(1){width: 100px;height: 100px;background: pink;}&:nth-child(2){width: 50px;height: 50px;background: yellow;}} }

    編譯后

    * {margin: 0;padding: 0; } .juzhong, #wrap .inner {position: absolute;left: 0;right: 0;bottom: 0;top: 0;margin: auto; } .juzhong:hover, #wrap .inner:hover {background: red!important; } #wrap {position: relative;width: 300px;height: 300px;border: 1px solid;margin: 0 auto; } #wrap .inner:nth-child(1) {width: 100px;height: 100px;background: pink; } #wrap .inner:nth-child(2) {width: 50px;height: 50px;background: yellow; }

    10. less避免編譯

    為了與 CSS 保持兼容,calc() 并不對(duì)數(shù)學(xué)表達(dá)式進(jìn)行計(jì)算,但是在嵌套函數(shù)中會(huì)計(jì)算變量和數(shù)學(xué)公式的值。

    @var: 50vh/2; width: calc(50% + (@var - 20px)); // 結(jié)果是 calc(50% + (25vh - 20px))//~"" 里面的任何內(nèi)容都不進(jìn)行計(jì)算 padding: ~"calc(50% + (@var - 20px))";// 結(jié)果是 calc(50% + (@var - 20px))

    總結(jié)

    以上是生活随笔為你收集整理的预处理器less的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。