less用法總結

班主任發表於2019-11-22

變數

@with: 10px;
@height: @with + 10px;
#header {
    width: @width;
    height: @height;
}
複製程式碼
  • 上面檔案編譯成下面
#header {
    width: 10px;
    height: 20px;
}
複製程式碼

混合

.bodered {
    border-top: dotted 1px black;
    border-bottom: solid 2px black;
}
複製程式碼
  • 混合.bodered的樣式
. post {
    color: red;
    .bordered();
}
複製程式碼

巢狀

#header {
    color: black;
}
#header .navigation {
    font-size: 12px;
}
#header .logo {
    width: 300px;
}
複製程式碼
  • 巢狀後如下
#header {
    color: black;
    .navgation {
        font-size:12px;
    }
    .logo {
        width: 300;
    }
}
複製程式碼
  • 可以和偽類一起使用
.clearfix {
    display: block;
    zoom: 1;
    &:after {
        content: "";
        display: block;
    }
}
複製程式碼
  • @media @support 也可以巢狀
.component {
  width: 300px;
  @media (min-width: 768px) {
    width: 600px;
    @media  (min-resolution: 192dpi) {
      background-image: url(/img/retina2x.png);
    }
  }
  @media (min-width: 1280px) {
    width: 800px;
  }
}

複製程式碼
  • 編譯為下面檔案
.component {
  width: 300px;
}
@media (min-width: 768px) {
  .component {
    width: 600px;
  }
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
  .component {
    background-image: url(/img/retina2x.png);
  }
}
@media (min-width: 1280px) {
  .component {
    width: 800px;
  }
}

複製程式碼

運算

  • 不同單位計算時,以第一個出現的單位為準
// numbers are converted into the same units
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // result is 4px

// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%

複製程式碼

calc 特例

  • 為了與css保持相容,calc() 並不對數學表示式進行計算,但是在巢狀函式中會計算變數和數學公式的值
@var50vh/2
width: calc(50% + (@var - 20px)); // result is calc(50% + (25vh - 20px) );

複製程式碼

escaping

  • 轉義允許使用任何字串或者變數值
  • 用法~'anything' 或者 ~"anything"
@min768: ~"(min-width: 768px)";
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

複製程式碼
  • 編譯為
@media (min-width: 768px) {
  .element {
    font-size: 1.2rem;
  }
}

複製程式碼
  • less3.5以後可以使用簡寫的方式
@min768: (min-width: 768px);
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

複製程式碼

函式

  • 利用 percentage 函式將 0.5 轉換為 50%,將顏色飽和度增加 5%,以及顏色亮度降低 25% 並且色相值增加 8 等用法
@base: #f04615;
@width: 0.5;

.class {
  width: percentage(@width); // returns `50%`
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

複製程式碼

命令空間和選擇器

#bundle() {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: white;
    }
  }
  .tab { ... }
  .citation { ... }
}

複製程式碼
  • 如果想複用.button的樣式
#header a {
  color: orange;
  #bundle.button();  // can also be written as #bundle > .button
}

複製程式碼

maps

  • 從少於3.5的版本開始,您還可以使用mixin和ruleset作為值的對映。
#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}
// .button 編譯成如下檔案
.button {
  color: blue;
  border: 1px solid green;
}

複製程式碼

作用域

  • less中的作用域與css中的作用域非常相似。首先在本地查詢變數和混合函式,如果找不到它們,則從“父”範圍繼承。
@var: red;

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

複製程式碼
  • 與CSS自定義屬性一樣,mixin和變數定義不必放在引用它們的行之前。因此下面的程式碼與前面的示例相同:
@var: red;

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

複製程式碼

註釋

/* 一個塊註釋
 * style comment! */
@var: red;

// 這一行被註釋掉了!
@var: white;

複製程式碼

import

  • “匯入”的工作方式和你預期的一樣。你可以匯入一個 .less 檔案,此檔案中的所有變數就可以全部使用了。如果匯入的檔案是 .less 副檔名,則可以將副檔名省略掉:
@import "library"; // library.less
@import "typo.css";

複製程式碼