less的引入和使用


文章地址:https://www.cnblogs.com/sandraryan/

之前就了解過less,但項目一直用的是css,所以,重新做一次系統的了解,順便寫個博客Orz

簡介

less和sass都是css的預處理語言,最常用於bootstrap

less 是基於js的,在客戶端處理(編譯less文件)

sass基於ruby,在服務器端處理

less安裝引入

 

 另一種引入方法是直接下載 (指路:官網),或者cdn引入

舉個例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div class="box">
        <p class="p1">test p</p>
    </div>
    <script src="https://cdn.bootcss.com/less.js/3.10.3/less.js"></script>
    <script></script>
</body>
</html>

html文件里引入css文件(這個css文件是less文件編譯產生的,vscode自動編譯),引入cdn的less文件

less 文件
@blue: lightblue; .p1
{ background-color: @blue; }

less文件(具體后續再解釋~)

編譯后的css文件:

.p1 {
  background-color: lightblue;
}

以上 一個簡單的demo~~~~

變量

普通變量 

@blue: lightblue;

.p1 {
    background-color: @blue;
}

👆 @blue 是定義的一個新變量,名字為blue,值為lightblue

在調用的時候,直接用變量名調用

選擇器變量

選擇器可以被聲明為變量,調用時在前面加類型(.或者#),調用的時候要加上{}

@blue: lightblue;
@p1 : p1;

.@{p1}{
    color: @blue;
}

聲明選擇器變量的時候也可以直接聲明某種類型的選擇器

@p2 : .p2;
@{p2} {
    color: red;
}

屬性變量

屬性名也可以被聲明為變量,也要用{}調用

@b: border;
.p3 {
    @{b}: 1px solid red;
}

url變量

我怕覺得這個超好用der, 把一個路徑給一個變量,如果整個項目和img的相對路徑發生變化,直接修改變量就可以了

舉個栗子

@img : '../../img';
.p1 {
    background-image : url('@{img}/1.jpg');
}
.p1 {
    background-image : url('@{img}/2.jpg');
}

申明變量

我的理解是,可以利用申明變量定義多條樣式,調用時加上()

@pre: {
    width: 100px;
    height: 100px;
    border: 1px solid red;
}
.p1 {
    @pre();
}

變量的計算

在計算的時候,加減法以第一個數據的單位為基准,稱出務必保持單位統一

顏色也可以計算~~~

@w : 200px;
@c : #333;
.p2 {
    width: 200px * 2;
    color: @c * 2;
    border: 1px solid green;
}

轉換為css樣式是

.p2 {
  width: 400px;
  color: #666666;
  border: 1px solid green;
}

可見注釋 隱藏注釋

也就是說 //后面的代碼注釋僅在less文件中可見,轉換為css文件不可見

/*
you can see me
*/

// u can't see me 

轉換為css

/*
you can see me
*/

變量套娃😁

@c1 : 'hi,c1';
@c2 : 'c1';
.p3::before{
    content : @@c2;
}

轉為css

.p3::before {
  content: 'hi,c1';
}

less嵌套

less選擇器是可以嵌套的,可以根據不同的塊,使用不同樣式,有利於代碼維護,使css不容易互相影響

嵌套的時候,內層選擇器前面的 & 符號就表示對父選擇器的引用。 (& === 父元素)

在一個內層選擇器的前面,如果沒有 & 符號,則它被解析為父選擇器的后代;如果有 & 符號,它就被解析為父元素自身或父元素的偽類。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div class="box1 box1_f">
        <p class="p1">111</p>
        <p class="p2">222</p>
        <p class="p3">333</p>
        <p class="p4">444</p>
    </div>
    <div class="box2">
        <p class="p1  box1_f">111</p>
        <p class="p2">222</p>
        <p class="p3">333</p>
        <p class="p4">444</p>
    </div>

    <script src="https://cdn.bootcss.com/less.js/3.10.3/less.js"></script>
</body>
</html>

less

.box1 {
    .p1 {
        // p1 被解析為box1 的后代p1
        color: red;
    }
}

.box1 {
    // 在box1 后插入content內容
    &:after{
        content: 'hello, after box1';
    } 
    &_f {
        font-size: 20px;
        text-decoration: underline;
    }
}

css

.box1 .p1 {
  color: red;
}
.box1:after {
  content: 'hello, after box1';
}
.box1_f {
  font-size: 20px;
  text-decoration: underline;
}

嵌套的less樣式會覆蓋為嵌套的(原理和cs選擇器一樣)

.box1 {
    .p1 {
        // p1 被解析為box1 的后代p1
        color: red;
    }
}
.p1 {
    color: yellow;
}

box1下的p1 紅色, box2 下的p1黃色 👆

媒體查詢

@media screen {
    @media (max-width : 768px){
        .box1 {
            width: 700px;
            border: 1px solid green;
        }
    }
    @media (min-width: 770px){
        .box1 {
            width: 100%;
            border: 2px solid red;
        }
    }
}

css:

@media screen and (max-width: 768px) {
  .box1 {
    width: 700px;
    border: 1px solid green;
  }
}
@media screen and (min-width: 770px) {
  .box1 {
    width: 100%;
    border: 2px solid red;
  }
}

↑ 在屏幕狀態下,寬度小於768px,box1 使700px且1px綠色邊框,屏幕大於770, 100%寬度,紅色邊框

less方法

less聲明的方法可以傳參,聲明方法可以用.和#,聲明的方法可以傳參,也可以有默認參數,調用時加上(),使用默認形參的話,不加也可以

舉個例子

.wh(@w:10px,@h:10px){
    width :@w;
    height:@h;
}
.b(@a:1px,@b:solid,@c:red){
    border: @a @b @c;
}
.box1 {
    .wh(60px,30px);
    .b();
}
.box2 {
    .wh(60px,40px);
    .b(3px,dotted,green);
}

css:

.box1 {
  width: 60px;
  height: 30px;
  border: 1px solid red;
}
.box2 {
  width: 60px;
  height: 40px;
  border: 3px dotted green;
}

less方法還是很好用的~~~

less方法同時支持不定參

在定義這個方法之前,只有上帝知道后期要傳幾個參數

@arguments 是當前方法的參數列表 不定參用...表示

.e (...){
    box-shadow : @arguments;
}

.box3 {
    .e(1px,4px,10px,blue);
}

轉換后 css

.box3 {
  box-shadow: 1px 4px 10px blue;
}

吃個飯

回來再寫。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM