less的基本語法


寫更少的代碼,做更多的事情

1.LESS 原理及使用方式

本質上,LESS 包含一套自定義的語法及一個解析器,用戶根據這些語法定義自己的樣式規則,這些規則最終會通過解析器,編譯生成對應的 CSS 文件。LESS 並沒有裁剪 CSS 原有的特性,更不是用來取代 CSS 的,而是在現有 CSS 語法的基礎上,為 CSS 加入程序式語言的特性。

 

2. 語法

 

變量  Mixin混入 嵌套  Import  函數(內置函數 運算)

 

2.1變量

 

LESS 允許開發者自定義變量,變量可以在全局樣式中使用,變量使得樣式修改起來更加簡單。

/*-----------注釋-----------*/

1.使用“/**/”注釋,在編譯后會在同時css文件生成

2.使用“//”注釋,只在less文件,不會在css生成

 

/*-----------------變量-----------------*/

變量的命名:必須以@為前綴+名字:值;@color:red;必須分號結束

@charset"UTF-8"設置編碼字符集(建議)
@mainColor:#E93223;
body{
  color: @mainColor;
}

@className:box;  //聲明類名變量

.@{className}{  //使用變量字符拼接的方法

  color:@mainColor;

}

2.2 Mixin混入

Mixin(混入)功能對用開發者來說並不陌生,很多動態語言都支持 Mixin(混入)特性,它是多重繼承的一種實現,在 LESS 中,混入是指在一個 CLASS 中引入另外一個已經定義的 CLASS,就像在當前 CLASS 中增加一個屬性一樣。

/*-----------------mixin 混入----------------*/

1.組合樣式的混入

@mainColor:red;

@h100:100px;

@w50:50px;
.red{
  color: @mainColor;
}

.box{

   width:@50px;

}

.redBox{  //把上面的兩個類樣式組合到一起,生成一個新的類樣式=》"類的混入"

  .red();

  .box();

  heigth:@h100;

}

2.函數的混入

2.1函數的定義

.w50(){

  width:50px;

}

.f_left(){

  float:left;

}

.w50-f_left{

  .w50();//調用函數

  .f_left();

}

3.定義帶參數的函數:定義了參數函數,參數沒有默認值時,在調用的時候必須傳參數,設置了默認值,調用時可帶參數,也可不帶參數

.f(@direction:left){

  float:@direction;

}

.r(@direction){

  float:@direction;

}

.f-r{

  .f();//有默認值的函數,可不傳參數,也可傳參數

  .r(right)//沒有默認值的函數,必須傳參數

}

例子:css3=》border-radius圓角兼容性處理的函數

.borderRadius(@direction:30px){

  border-radius:@direction;

  -webkit-border-radius;@direction;

  -o-border-radius:@direction;

  -moz-bordius:@direction;

  -ms-boreder-radius:@direction;

}

.box{

  .borderRadius(20px);

}

總結:樣式組合的方式混入,在css文件也能全生成,造成了less的代碼冗余,函數的方式,函數是不會編譯在css文件里。

 

2.3嵌套

在我們書寫標准 CSS 的時候,遇到多層的元素嵌套這種情況時,我們要么采用從外到內的選擇器嵌套定義,要么采用給特定元素加 CLASS ID 的方式

/*------------------嵌套------------------*/

.text{

  .test-one{  //.test的下第一級第一個子元素

    樣式

    .test-tow{  //.test-one的第一級子元素

      樣式

    }

  }

  .test-ones{   //.test的下第一級第二個子元素

    樣式

  }

}

使用偽類的時候需要連接的情況:&
#w_banner{
  .carousel-inner{
    > div.item{
      a.img_box{
        background: url("../images/slide_01_2000x410.jpg") no-repeat center center;
        height: 410px;
        /*調用redBorder mixin*/
        display: block;
        .redBorder();
        /*調用@mainColor 變量*/
        &:hover{
          color: @mainColor;

   img{

     display:block;

     position:absolute;

     left:0;

   }

  &::before{

    content:"";

   }
        }
      }
      a.img_mobile{
        width: 100%;
        display: block;
        img{
          width: 100%;
          display: block;
        }
      }
    }
  }
}

 

2.4Import 導入

 

/*---------------------Import 引入------------------------*/

nav.less、banner.less、topBar.less三個模塊less文件,組合到index.less中。會把這三個樣式導入index.less

index.less=》

@charset "UTF-8";

@import "nav";

@import "banner";

@import "topBar";

 


@import "base";
.f_left{
  float: @right;
}

 

2.5運算及函數

在我們的 CSS 中充斥着大量的數值型的 value,比如 colorpaddingmargin 等,這些數值之間在某些情況下是有着一定關系的,那么我們怎樣利用 LESS 來組織我們這些數值之間的關系呢?

http://www.1024i.com/demo/less/reference.html

escape(@string); // 通過 URL-encoding 編碼字符串

e(@string); // 對字符串轉義

%(@string, values...); // 格式化字符串

unit(@dimension, [@unit: ""]); // 移除或替換屬性值的單位

color(@string); // 將字符串解析為顏色值

data-uri([mimetype,] url); // * 將資源內嵌到css中,可能回退到url()

ceil(@number); // 向上取整

floor(@number); // 向下取整

percentage(@number); // 將數字轉換為百分比,例如 0.5 -> 50%

round(number, [places: 0]); // 四舍五入取整

sqrt(number); // * 計算數字的平方根

abs(number); // * 數字的絕對值

sin(number); // * sin函數

asin(number); // * arcsin函數

cos(number); // * cos函數

acos(number); // * arccos函數

tan(number); // * tan函數

atan(number); // * arctan函數

pi(); // * 返回PI

pow(@base, @exponent); // * 返回@base的@exponent次方

mod(number, number); // * 第一個參數對第二個參數取余

convert(number, units); // * 在數字之間轉換

unit(number, units); // * 不轉換的情況下替換數字的單位

color(string); // 將字符串或者轉義后的值轉換成顏色

rgb(@r, @g, @b); // 轉換為顏色值

rgba(@r, @g, @b, @a); // 轉換為顏色值

argb(@color); // 創建 #AARRGGBB 格式的顏色值

hsl(@hue, @saturation, @lightness); // 創建顏色值

hsla(@hue, @saturation, @lightness, @alpha); // 創建顏色值

hsv(@hue, @saturation, @value); // 創建顏色值

hsva(@hue, @saturation, @value, @alpha); // 創建顏色值

hue(@color); // 從顏色值中提取 hue 值(色相)

saturation(@color); // 從顏色值中提取 saturation 值(飽和度)

lightness(@color); // 從顏色值中提取 'lightness' 值(亮度)

hsvhue(@color); // * 從顏色中提取 hue 值,以HSV色彩空間表示(色相)

hsvsaturation(@color); // * 從顏色中提取 saturation 值,以HSV色彩空間表示(飽和度)

hsvvalue(@color); // * 從顏色中提取 value 值,以HSV色彩空間表示(色調)

red(@color); // 從顏色值中提取 'red' 值(紅色)

green(@color); // 從顏色值中提取 'green' 值(綠色)

blue(@color); // 從顏色值中提取 'blue' 值(藍色)

alpha(@color); // 從顏色值中提取 'alpha' 值(透明度)

luma(@color); // 從顏色值中提取 'luma' 值(亮度的百分比表示法)

saturate(@color, 10%); // 飽和度增加 10%

desaturate(@color, 10%); // 飽和度降低 10%

lighten(@color, 10%); // 亮度增加 10%

darken(@color, 10%); // 亮度降低 10%

fadein(@color, 10%); // 透明度增加 10%

fadeout(@color, 10%); // 透明度降低 10%

fade(@color, 50%); // 設定透明度為 50%

spin(@color, 10); // 色相值增加 10

mix(@color1, @color2, [@weight: 50%]); // 混合兩種顏色

greyscale(@color); // 完全移除飽和度,輸出灰色

contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]); // 如果 @color1 的 luma 值 > 43% 輸出 @darkcolor,否則輸出 @lightcolor

multiply(@color1, @color2);

screen(@color1, @color2);

overlay(@color1, @color2);

softlight(@color1, @color2);

hardlight(@color1, @color2);

difference(@color1, @color2);

exclusion(@color1, @color2);

average(@color1, @color2);

negation(@color1, @color2);

iscolor(@colorOrAnything); // 判斷一個值是否是顏色

isnumber(@numberOrAnything); // 判斷一個值是否是數字(可含單位)

isstring(@stringOrAnything); // 判斷一個值是否是字符串

iskeyword(@keywordOrAnything); // 判斷一個值是否是關鍵字

isurl(@urlOrAnything); // 判斷一個值是否是url

ispixel(@pixelOrAnything); // 判斷一個值是否是以px為單位的數值

ispercentage(@percentageOrAnything); // 判斷一個值是否是百分數

isem(@emOrAnything); // 判斷一個值是否是以em為單位的數值

isunit(@numberOrAnything, "rem"); // * 判斷一個值是否是指定單位的數值

 

 

 

例子

/*-------------------運算和函數--------------------------*/
@back:#333;
.test{
  border: 1px solid @back*2;
  background: lighten(#000, 10%);
  color:darken(#000, 10%);
}

 


免責聲明!

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



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