Less & Sass

CSS不是一種編程語言。它開發網頁樣式,可是無法用它編程。也就是說,CSS基本上是設計師的工具,它沒有變量,也沒有條件語句,只是一行行單純的描述。有人就開始爲CSS加入編程元素,這被叫作"CSS預處理器"(css preprocessor)。它的基本思想是,用一種專門的編程語言,進行網頁樣式設計,而後再編譯成正常的CSS文件。
1、Less
LESS 包含一套自定義的語法及一個解析器,用戶根據這些語法定義本身的樣式規則,這些規則最終會經過解析器,編譯生成對應的 CSS 文件。LESS 並無裁剪 CSS 原有的特性,更不是用來取代 CSS 的,而是在現有 CSS 語法的基礎上,爲 CSS 加入程序式語言的特性。在語法方面,LESS與CSS較爲接近,一個合法的CSS代碼段自己也是一段合法的LESS代碼段。LESS提供變量、嵌套、混合、操做符、函數等通常編程所需的抽象機制。
1.變量容許咱們在一個地方定義一系列通用的值,而後在整個樣式表中調用。因此在作全局樣式調整的時候咱們可能只須要修改幾行代碼就能夠了。
 
//LESS源碼
@color:#4D926F;
#header{
color:@color;
}
h2{
color:@color;
}
 
/*編譯後的CSS*/
#header{
color:#4D926F;
}
h2{
color:#4D926F;
}

2.混合:指在一個 CLASS 中引入另一個已經定義好的的 CLASS,就像在當前 CLASS 中增長一個屬性同樣。Less實現了這種嵌套。咱們還可使用參數,就好像咱們再用一個函數同樣。css

//LESS源碼
rounded-corners(@radius:5px){
    border-radius:@radius;
    -webkit-border-radius:@radius;
    -moz-border-radius:@radius;
}
#header{
    .rounded-corners;
}
#footer{
    .rounded-corners(10px);
}
 
/*生成的CSS*/
#header{
    border-radius:5px;
    -webkit-border-radius:5px;
    -moz-border-radius:5px;
}
#footer{
    border-radius:10px;
    -webkit-border-radius:10px;
    -moz-border-radius:10px;
}

3.嵌套:能夠在一個選擇器中嵌套另外一個選擇器來實現繼承,這樣很大程度減小了代碼量,而且代碼看起來更加的清晰。web

//LESS源碼
#header{
    h1{
        font-size:26px;
        font-weight:bold;
    }
    p{
        font-size:12px;
        a{
            text-decoration:none;
            &:hover{border-width:1px}
        }
    }
}
/*編譯後的CSS*/
#header h1{
    font-size:26px;
    font-weight:bold;
}
#header p{
    font-size:12px;
}
#header p a{
    text-decoration:none;
}
#header p a:hover{
    border-width:1px;
}                

4.函數與運算:運算提供了對屬性值和顏色的加、減、乘、除操做,賦予你建立屬性之間複雜關係的能力。運算應當只出如今圓括號中,這樣能確保與CSS的兼容。編程

 
//LESS
@the-border:1px;
@base-color:#111;
@red:#842210;
#header{
    color:(@base-color*3);
    border-left:@the-border;
    border-right:(@the-border*2);
}
#footer{
    color:(@base-color+#003300);
    border-color:desaturate(@red,10%);
}
 
/*編譯後的CSS*/
#header{
    color:#333;
    border-left:1px;
    border-right:2px;
}
#footer{
    color:#114411;
    border-color:#7d2717;
}

2、Sass瀏覽器

1.變量:全部變量以$開頭。
$blue : #1875e7; 
div {
    color : $blue;
}

若是變量須要鑲嵌在字符串之中,就必須須要寫在#{}之中。服務器

$side : left;
.rounded {
  border-#{$side}-radius: 5px;
}

2. 計算功能app

body {
    margin: (14px/2);
    top: 50px + 100px;
    right: $var * 10%;
  }

3. 嵌套編程語言

 div h1 {
    color : red;
  }

//能夠寫成:
div {
    hi {
      color:red;
    }
  }

屬性也能夠嵌套,好比border-color屬性,能夠寫成:ide

p {
    border: {
      color: red;
    }
  }

注意,border後面必須加上冒號。在嵌套的代碼塊內,可使用&引用父元素。好比a:hover僞類,能夠寫成:函數

a {
    &:hover { color: #ffb3ff; }
  }

4. 註釋工具

標準的CSS註釋 /* comment */ ,會保留到編譯後的文件。

單行註釋 // comment,只保留在SASS源文件中,編譯後被省略。

在/*後面加一個感嘆號,表示這是"重要註釋"。即便是壓縮模式編譯,也會保留這行註釋,一般能夠用於聲明版權信息。

/*! 
    重要註釋!
  */

5. 繼承

//SASS容許一個選擇器,繼承另外一個選擇器。好比,現有class1:
.class1 {
    border: 1px solid #ddd;
  }

//class2要繼承class1,就要使用@extend命令:
.class2 {
    @extend .class1;
    font-size:120%;
  }

 

Mixin有點像C語言的宏(macro),是能夠重用的代碼塊。

使用@mixin命令,定義一個代碼塊。

  @mixin left {
    float: left;
    margin-left: 10px;
  }

使用@include命令,調用這個mixin。

  div {
    @include left;
  }

mixin的強大之處,在於能夠指定參數和缺省值。

  @mixin left($value: 10px) {
    float: left;
    margin-right: $value;
  }

使用的時候,根據須要加入參數:

  div {
    @include left(20px);
  }

下面是一個mixin的實例,用來生成瀏覽器前綴。

  @mixin rounded($vert, $horz, $radius: 10px) {
    border-#{$vert}-#{$horz}-radius: $radius;
    -moz-border-radius-#{$vert}#{$horz}: $radius;
    -webkit-border-#{$vert}-#{$horz}-radius: $radius;
  }

使用的時候,能夠像下面這樣調用:

  #navbar li { @include rounded(top, left); }

  #footer { @include rounded(top, left, 5px); }

4.3 顏色函數

SASS提供了一些內置的顏色函數,以便生成系列顏色。

  lighten(#cc3, 10%) // #d6d65c
  darken(#cc3, 10%) // #a3a329
  grayscale(#cc3) // #808080
  complement(#cc3) // #33c

4.4 插入文件

@import命令,用來插入外部文件。

  @import "path/filename.scss";

若是插入的是.css文件,則等同於css的import命令。

  @import "foo.css";

5、高級用法

5.1 條件語句

@if能夠用來判斷:

  p {
    @if 1 + 1 == 2 { border: 1px solid; }
    @if 5 < 3 { border: 2px dotted; }
  }

配套的還有@else命令:

  @if lightness($color) > 30% {
    background-color: #000;
  } @else {
    background-color: #fff;
  }

5.2 循環語句

SASS支持for循環:

  @for $i from 1 to 10 {
    .border-#{$i} {
      border: #{$i}px solid blue;
    }
  }

也支持while循環:

  $i: 6;

  @while $i > 0 {
    .item-#{$i} { width: 2em * $i; }
    $i: $i - 2;
  }

each命令,做用與for相似:

  @each $member in a, b, c, d {
    .#{$member} {
      background-image: url("/image/#{$member}.jpg");
    }
  }

5.3 自定義函數

SASS容許用戶編寫本身的函數。

 
@function double($n) {
    @return $n * 2;
  }
#sidebar {
    width: double(5px);
  }

3、二者區別

相同點:二者都是CSS預處理器,都具備相同的功能,能夠幫助咱們快速編譯代碼,幫助咱們更好的維護咱們的樣式代碼或者說維護項目吧。
不一樣點:語法規則不一樣,固然功能或許略有差異;
LESS和Sass的主要不一樣就是他們的實現方式,LESS是基於JavaScript,因此,是在客戶端處理的。另外一方面,Sass是基於Ruby的,而後是在服務器端處理的。不少開發者不會選擇LESS由於JavaScript引擎須要額外的時間來處理代碼而後輸出修改過的CSS到瀏覽器。關於這個有不少種方式,我選擇的是隻在開發環節使用LESS。一旦我完成了開發,我就複製而後粘貼LESS輸出的到一個壓縮器,而後到一個單獨的CSS文件來替代LESS文件。另外一個選擇是使用LESS.app來編譯和壓縮你的LESS文件。兩個選擇都將最小化你的樣式輸出,從而避免因爲用戶的瀏覽器不支持JavaScript而可能引發的任何問題。儘管這不大可能,但終歸是有可能的。
相關文章
相關標籤/搜索