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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

预处理器less

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 预处理器less 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

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

預處理器less

less官方網站

bootstrap中less教程

less是一種動態樣式語言,屬于css預處理器的范疇,它擴展了 CSS 語言,
增加了變量、Mixin、函數等特性,使 CSS 更易維護和擴展
LESS 既可以在 客戶端 上運行 ,也可以借助Node.js在服務端運行。

less能干啥

舉個例子

這是css寫法,如果寫的太多搞不清楚嵌套層級

* {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寫法

*{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的使用環境

1.運行時編譯

在瀏覽器環境中使用 Less

不建議使用這種方式,應該預編譯

運行時編譯(html中樣式是less代碼,在運行的時候編譯【通過引用相關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文件也可以下載下來,然后引用本地文件<script src="less/less.min.js"></script>

  • style文件若為單獨的.less文件 <link rel="stylesheet/less" type="text/less" href="styles.less" /> 但此時需要考慮跨域的問題

2.預編譯

預編譯(開發的時候寫less文件,然后轉化為css文件后引用)

(1).借助考拉編譯less

koala 官網

這個不太好用

(2). vscode 插件 Easy LESS

保存拓展名為less 的文件 ,自動編譯為css文件

這個太香了

(3). vscode 插件 Easy LESS

二、less的語法

1. less中的注釋

以//開頭的注釋,不會被編譯到css文件中 以/**/包裹的注釋會被編譯到css文件中

2. less中的變量

使用@來申明一個變量:@pink:pink;

  • 作為普通屬性值只來使用:直接使用@pink
  • 作為選擇器和屬性名:@{selector的值}的形式
  • 變量的延遲加載,及其作用域{}范圍
  • @color:deeppink; @m:margin; @selector:#wrap; @url:'../img/1.jpg'; *{@{m}: 0;padding: 0;background: red url(@url);//也可以寫為 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;//這個編譯完為3@var: 3;}one: @var;//這個編譯完為1 }

    3. 作用域(Scope)

    塊級作用域

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

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

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

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

    4. less中的嵌套規則

  • 基本嵌套規則(就是每嵌套一級,下一級為上一級選擇器 下一級選擇器 之間空格隔開)
  • &的使用
  • @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;}//若沒有& 編譯后為#wrap .inner :hover//若加上& 編譯后為#wrap .inner:hover//沒加& hover是不可用的} }

    5.導入(Importing)

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

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

    6. less中的混合

    混合就是將一系列屬性從一個規則集引入到另一個規則集的方式

    混合名以 “.”開頭

    (1).普通混合

    混合名{規則集}

    編譯時該混合也被當類選擇器編譯出去

    當然類選擇器也可以當普通混合使用

    #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).不帶輸出的混合

    混合名(){規則集}

    編譯時該混合不被編譯

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

    (3).帶參數的混合

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

    編譯時該混合不被編譯

    (4).帶參數并且有默認值的混合

    混合名(變量有默認值){規則集}

    編譯時該混合不被編譯

    .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).帶多個參數的混合

    上方演示的就帶多個參數

    (6).命名參數

    傳參時指定傳給某個形參值,其他使用默認值

    若不指定,實參只會傳給第一形參

    .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).匹配模式

    先設置一個被引用的匹配模式的相關代碼

    triangle.less

    //把幾種模式的相同屬性放在這里,減少代碼量 //第一個參數為@_,調用其他模式會自動引入該混合中的屬性集 .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 版本開始,你還可以將混合(mixins)和規則集(rulesets)作為一組值的映射(map)使用。

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

    輸出符合預期:

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

    8.less運算

    在less中可以進行加減乘除的運算

    一般只有一個數帶單位就行

    算術運算符 +、-、*、/ 可以對任何數字、顏色或變量進行運算。如果可能的話,算術運算符在加、減或比較之前會進行單位換算。計算的結果以最左側操作數的單位類型為準。如果單位換算無效或失去意義,則忽略單位。無效的單位換算例如:px 到 cm 或 rad 到 % 的轉換。

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

    乘法和除法不作轉換。因為這兩種運算在大多數情況下都沒有意義,一個長度乘以一個長度就得到一個區域,而 CSS 是不支持指定區域的。Less 將按數字的原樣進行操作,并將為計算結果指定明確的單位類型。

    @base: 2cm * 3mm; // 結果是 6cm

    你還可以對顏色進行算術運算:

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

    現在除法算式需要加上括號,或./強制運算,否則不編譯

    9. less繼承

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

    (1)基本用法

    繼承被附在選擇器后面或放置在規則集(即具體定于樣式處),它看起來就像是一個在關鍵字extend后具有可選參數的偽類(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中,關鍵字extend里面的選擇器必須與已定義的樣式選擇器嚴格一致,如div .a{}樣式只能通過extend(div .a)繼承,而不能是extend(.a),盡管這兩者在CSS中并沒太多區別

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

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

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

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

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

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

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

    @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;} }

    說明:并非內外部優先級問題,實際編譯可知,若將媒體查詢print內部的.selector去掉,仍然無法繼承外部的.selector。

    (6)Duplication(重復)問題

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

    注意:class1與class2是用逗號隔開,屬于分組查詢,所有不會有上面的第2條。編譯為:

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

    可見繼承于分組選擇器將是每個都單獨繼承。對于此處class1與class2完全一樣的情況,extend內只寫一個即可,不存在匹配問題。

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

    extend的經典使用情況在于,用于減少基類的使用。

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

    css:

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

    html:

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

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

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

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

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

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

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

    編譯結果,與預期一致,使用了自身的特殊color:

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

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

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

    編譯結果,因為位置原因,與預期不一致,此時此例中繼承沒達到目的:

    .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() 并不對數學表達式進行計算,但是在嵌套函數中會計算變量和數學公式的值。

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

    總結

    以上是生活随笔為你收集整理的预处理器less的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲精品丝袜 | 亚洲国产日本 | v8888av| 葵司免费一区二区三区四区五区 | 91操视频 | av亚洲在线| 日美韩av| 丝袜美腿亚洲一区二区图片 | 国产精品永久免费 | 色老板精品凹凸在线视频观看 | 1级av | av88av| 黄色精品在线观看 | 国产精品二 | 一级做a爰片久久毛片潮喷 天天透天天干 | 久久三| 欧美裸体女人 | 国产精品无码一本二本三本色 | 狠狠激情 | 久久国产区 | 日本中文在线播放 | 国产精品一区二区三区在线看 | 日批的视频 | 精品久久人人妻人人做人人 | 色国产在线 | 一级a性色生活片久久毛片 爱爱高潮视频 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 美女视频一区二区三区 | 美女131爽爽爽 | 黄av网| 四虎在线网址 | 久久国产香蕉视频 | 无码精品国产一区二区三区免费 | 日韩精品无码一区二区三区 | 黄色大片毛片 | 久久亚洲区 | 国产美女福利视频 | 日韩中文网 | 久久中文字幕人妻熟av女蜜柚m | 色婷婷91 | 天天色一色 | 日韩欧美中文字幕一区 | 国内外免费激情视频 | 国产免费专区 | 在线免费观看视频网站 | 中文字幕乱视频 | 欧美性受xxxx黑人xyx | 免费无遮挡在线观看视频网站 | 精品久久久蜜桃 | av在线不卡免费看 | 老鸭窝视频在线观看 | 极品美女无套呻吟啪啪 | 日本少妇xxxx动漫 | 亚洲资源在线观看 | 中文字幕35页 | 性欧美又大又长又硬 | 亚洲成人精选 | 97综合视频 | 亚洲一区二区三区四区不卡 | 久久一本综合 | 日本va在线观看 | 日本丰满少妇做爰爽爽 | 免费av在 | 91大神精品 | 欧美精品在线一区二区三区 | 韩国一区视频 | 日本中文字幕在线免费观看 | 中文字幕avav | 亚洲成年人免费观看 | 国产成人三级一区二区在线观看一 | 性色欲情网站iwww九文堂 | 日本黄色大片免费看 | 美国色综合 | av在线资源播放 | 免费aa视频 | 国产精品视频久久久久 | 北条麻妃av在线播放 | 国产欧美一区二区三区视频在线观看 | 国产精品一区二区久久国产 | 久久久久久爱 | 欧美日韩精品中文字幕 | 久久精品国产亚洲av嫖农村妇女 | 一区影视 | 精品人妻一区二区三区潮喷在线 | 少妇熟女高潮流白浆 | 日本三级在线视频 | 精品一区二区在线观看视频 | 欧美一级色 | 夜夜操天天爽 | 欧美伦乱| 欧美嫩草 | 亚洲自拍偷拍一区 | 少妇高潮一区二区三区在线 | 色屁屁一区二区三区视频 | 性色tv| 国产一区二区三区四区在线观看 | 亚洲成人免费在线视频 | 自拍偷拍亚洲综合 | 久青草资源福利视频 |