App下載

Vue-cli中怎么安裝并使用Less?安裝并使用less經(jīng)驗(yàn)分享!

猿友 2021-06-24 16:03:26 瀏覽數(shù) (3027)
反饋

}今天小編來(lái)和大家說(shuō)說(shuō)有關(guān)于“Vue-cli中怎么安裝并使用Less?”這個(gè)問(wèn)題吧!下面是小編分享的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!


一、安裝

我們可以在網(wǎng)絡(luò)上找到很多有關(guān)于?less?安裝的相關(guān)資料也是比較簡(jiǎn)單的我們下載完成之后在vue項(xiàng)目中運(yùn)行我們輸入下面這串代碼進(jìn)行安裝在?vue?中:

npm install less less-loader --save-dev

我們可以在?vue?項(xiàng)目中的?package.json?中看到?less?的相關(guān)依賴(lài),截圖如下:

依賴(lài)

接下來(lái)我們找到build目錄下的?webpack.base.conf.js?文件然后打開(kāi)找到module?下的?rules?寫(xiě)入下面這些代碼:

{
    test: /\.less$/,
    loader: "style-loader!css-loader!less-loader"
}

如果沒(méi)有的?module?和?rules?我們就可以自己加上,但是一般都是有的如果沒(méi)有的話,說(shuō)明可能安裝錯(cuò)誤的?vue-cli?或者找錯(cuò)文件了。

module: {
        rules: [
            {
                test: /\.less$/,
                loader: "style-loader!css-loader!less-loader"
            }
        ]
    },

等我們這些步驟都完成之后我們就可以在組件文件下面的style標(biāo)簽上面寫(xiě)上?lang=“l(fā)ess”?從而表示以less語(yǔ)法解析?css?,下面我們就可以進(jìn)行?less?的實(shí)操。


二、less語(yǔ)法介紹、

首先我們要知道什么是less才知道怎么去使用它!對(duì)于什么是less的話,它是一門(mén)css預(yù)處理語(yǔ)言,擴(kuò)展lcss語(yǔ)言、增加變量、mixin、函數(shù)等特性、使得css更加易于維護(hù)和擴(kuò)展。

1、語(yǔ)法變量

(1)、在less中,我們?cè)趯?xiě)樣式的時(shí)候需要給我們的元素加上背景顏色,在考慮之后我們會(huì)修改主題樣式中我們可以使用下面這種方法:

@tabBar-red-style:#f00
#tabBar{
    background:@tabBar-red-style
}

我們?cè)陧?yè)面上id為tabBar的元素的背景就會(huì)被顯示為#f00,會(huì)被正常的渲染出來(lái),以后倘若變態(tài)的產(chǎn)品經(jīng)理想要全局改變顏色風(fēng)格,就可以只改變移除變量即可全局修改。

(2)、變量通過(guò)變量名來(lái)定義:

@message: "this is a string";
@text: 'message';
content: @@text;

在content這個(gè)屬性后面就是this is a string這個(gè)內(nèi)容。

(3)、通常我們?cè)趯?xiě)css樣式的時(shí)候會(huì)重復(fù)的寫(xiě)同樣的類(lèi),其實(shí)我們可以這么做,代碼如下:

.col-row-center{
    dispaly:flex;
    align-items:center;
    justify-content:center;
}
.message{
    .col-row-center
}
//等同于
.message{
    dispaly:flex;
    align-items:center;
    justify-content:center;
}

我們通過(guò)定義一個(gè)?class?類(lèi)然后在其他的?class?中進(jìn)行調(diào)用。這樣我們還可以解決浮動(dòng)?父元素?的高度丟失問(wèn)題。


2、面對(duì)攜帶參數(shù)時(shí)的混合使用方法:

(1)、帶一個(gè)參數(shù)的時(shí)候代碼如下:

.border-radius (@radius) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}
#tabBar{
  .border-radius(4px);//使用時(shí)可以在括號(hào)內(nèi)寫(xiě)入想要的值
}
.card{
  .border-radius(6px);  
}

(2)、給參數(shù)設(shè)定默認(rèn)值代碼如下:

.border-radius (@radius:4px) {
  border-radius: @radius;
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
}
#tabBar{
  .border-radius();//此時(shí)不傳值也會(huì)有默認(rèn)值傳入
}
.card{
  .border-radius();  
}

(3)、不寫(xiě)參數(shù)防止隱藏css代碼如下:

.border-radius () {
  border-radius: 4px;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
}
#tabBar{
  .border-radius();//此時(shí)不傳值在解析過(guò)程中,.border-radius類(lèi)不會(huì)出現(xiàn)在css文件之中,節(jié)省css空間
}
.card{
  .border-radius();  
}

(4)、?@arguments?大量傳參,節(jié)省操作代碼如下:

.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
  box-shadow: @arguments;
  -moz-box-shadow: @arguments;
  -webkit-box-shadow: @arguments;
}
.box-shadow(2px, 5px);

3、模式匹配

我們通過(guò)根據(jù)傳入的參數(shù)來(lái)改變混合的默認(rèn)呈現(xiàn),代碼如下:

//讓.mixin根據(jù)不同的@switch值而表現(xiàn)各異
.mixin (dark, @color) {
  color: darken(@color, 10%);
}
.mixin (light, @color) {
  color: lighten(@color, 10%);
}
.mixin (@_, @color) {
  display: block;
}
//運(yùn)行
@switch: light;
 
.class {
  .mixin(@switch, #888);
}

在我們的代碼中的意思是我們?cè)谑褂?.mixin?的時(shí)候,當(dāng)?@switch?位置上的值是?dark?那就應(yīng)用第一個(gè)?.mixin?,如果是?light?那就應(yīng)用第二個(gè)?.mixin?,第三個(gè)?@_?是接受一切值得配對(duì),第三個(gè)可以一直被使用。

那么我們?cè)赾ss文件中看到的內(nèi)容應(yīng)該就是下面這些代碼:

.class {
   color: #a2a2a2;
   display: block;
}

4、引導(dǎo)表達(dá)式

(1)、我們通過(guò)根據(jù)表達(dá)式進(jìn)行匹配,代碼如下:

//when關(guān)鍵字用以定義一個(gè)導(dǎo)引序列(此例只有一個(gè)導(dǎo)引)
.mixin (@a) when (lightness(@a) >= 50%) {
  background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
  background-color: white;
}
.mixin (@a) {
  color: @a;
}
 
//運(yùn)行
.class1 { .mixin(#ddd) }
.class2 { .mixin(#555) }

(2)、我們通用導(dǎo)引中可用的全部比較運(yùn)算有:? > >= = =< <?。除此之外關(guān)鍵字?true?只表示布爾真值,除去關(guān)鍵字?true?以外的值都被視示布爾假值,代碼如下:

.truth (@a) when (@a) { ... }
.truth (@a) when (@a = true) { ... }

(3)、導(dǎo)引序列使用逗號(hào)?‘,’?—分割,當(dāng)且僅當(dāng)所有條件都符合時(shí),才會(huì)被視為匹配成功,如下代碼:

.mixin (@a) when (@a > 10), (@a < -10) { ... }

(4)、導(dǎo)引可以無(wú)參數(shù),也可以對(duì)參數(shù)進(jìn)行比較運(yùn)算,代碼如下:

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

5、嵌套規(guī)則

嵌套的寫(xiě)法會(huì)讓css看起來(lái)非常有層次感,易于瀏覽器解析

(1)、以嵌套的方式編寫(xiě)層疊樣式,下面是相關(guān)的css的寫(xiě)法:

#header { color: black; }
#header .navigation {
  font-size: 12px;
}
#header .logo { 
  width: 300px; 
}
#header .logo:hover {
  text-decoration: none;
}

less代碼寫(xiě)法:(2)&符號(hào)用于寫(xiě)串聯(lián)選擇器,而不是寫(xiě)后代選擇器。這點(diǎn)對(duì)偽類(lèi)尤其有用,如:hover和:focus

#header {
  color: black;
 
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
    &:hover { text-decoration: none }
  }
}

(2)、通過(guò)&符號(hào)用于寫(xiě)串聯(lián)選擇器,而不是寫(xiě)后代選擇器。這點(diǎn)對(duì)偽類(lèi)尤其有用,如:hover和:focus,代碼如下:

.bordered {
  &.float {
    float: left; 
  }
  .top {
    margin: 5px; 
  }
}

解析之后是這樣的:

.bordered.float {//中間沒(méi)有空格
  float: left;  
}
.bordered .top {//中間有空格
  margin: 5px;
}

6、運(yùn)算

(1)、任何數(shù)字、顏色或者變量都可以參與運(yùn)算,代碼案例如下:

@base: 5%;
@filler: @base * 2;
@other: @base + @filler;
color: #888 / 4;
background-color: @base-color + #111;
height: 100% / 2 + @filler;

(2)、less運(yùn)算能夠分辨出顏色和單位,代碼如下:

@var: 1px + 5;  //less會(huì)輸出6px
//括號(hào)也同樣允許使用
width: (@var + 5) * 2;
//可以在復(fù)合屬性中進(jìn)行運(yùn)算
border: (@width * 2) solid black;

7、color函數(shù)

(1)、我們?cè)趌ess中可以知道它提供了一系列的顏色運(yùn)算函數(shù),如下所示:

lighten(@color, 10%);     // 返回一個(gè)比@color低10%更輕的顏色
darken(@color, 10%);      // 返回一個(gè)比@color高10%較暗的顏色
saturate(@color, 10%);    // 返回比@color多飽和度10%的顏色
desaturate(@color, 10%);  // 返回一個(gè)比@color少飽和度10%的顏色
fadein(@color, 10%);      // 返回一個(gè)比@color少10%透明度的顏色
fadeout(@color, 10%);     // 返回一個(gè)比@color多10%透明度的顏色
fade(@color, 50%);        // 返回一個(gè)顏色透明度為50%的顏色
spin(@color, 10);         // 返回色調(diào)比@color大10度的顏色
spin(@color, -10);        // 返回一個(gè)比@color小10度色調(diào)的顏色
mix(@color1, @color2);    // 返回一個(gè)混合@ color1和@ color2的顏色

8、math函數(shù)

在這個(gè)函數(shù)中l(wèi)ess提供了很多大便利:

round(1.67); // returns `2`
ceil(2.4);   // returns `3`
floor(2.6);  // returns `2`
percentage(0.5); // returns `50%`

9、作用域

對(duì)于作用域的話其實(shí)和js的作用域是相同的,會(huì)在當(dāng)前作用域下面查找我們的變量,如果沒(méi)有找到的話它會(huì)到上一級(jí)父元素中查找,如下所示:

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

10、注釋方法

less里面的注釋沿用了css的舒適,包括js的注釋也可以使用,如下所示案例:

/* Hello, I'm a CSS-style comment */
.class { 
    color: black 
}
// Hi, I'm a silent comment, I won't show up in your CSS
.class { 
    color: white 
}

11、import方式

下面是我們的先關(guān)?import?的案例:

@import "lib.less";
@import "lib";

12、字符串插值

我們的變量可以用類(lèi)似?js?模板的字符串嵌入我們的字符中,如下所示:

@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");

13、避免編譯

我們有時(shí)候在輸入錯(cuò)誤的?css?的時(shí)候或者使用一些?less?不認(rèn)識(shí)的語(yǔ)法我們?cè)谳敵鲞@樣的值我們可以在字符串前面加上?“~”?這個(gè)符號(hào),從而避免編譯的值用“”這個(gè)符號(hào)包含起來(lái),如下所示:

.class {
  filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
}

14、JavaScript表達(dá)式

(1)、JavaScript的表達(dá)式可以在 .less文件中進(jìn)行使用,我們可以通過(guò)反引導(dǎo)的方式進(jìn)行使用,如下所示:

@var: `"hello".toUpperCase() + '!'`;    //@var: "HELLO!";

(2)、我們也可以同時(shí)使用字符串插值和避免編譯,如下所示:

@str: "hello";
@var: ~`"@{str}".toUpperCase() + '!'`; //@var: HELLO!;

(3)、也可以訪問(wèn)我們的JavaScript環(huán)境,如下所示:

@height: `document.body.clientHeight`;

(4)、我們還可以使用color函數(shù)來(lái)將JavaScript字符串解析成16進(jìn)制的顏色值,代碼如下:

@color: color(`window.colors.baseColor`);
@darkcolor: darken(@color, 10%);

總結(jié):

以上就是有關(guān)于“Vue-cli中怎么安裝并使用Less?”這個(gè)問(wèn)題的相關(guān)內(nèi)容,如果你有其他的想法也可以和大家一起分享探討,更多的有關(guān)vue的相關(guān)內(nèi)容和知識(shí)我們都可以在W3cschool中進(jìn)行學(xué)習(xí)和了解。


相關(guān)資料:

less使用方法鏈接:http://lesscss.cn/#using-less


0 人點(diǎn)贊