[轉]SASS用法指南

[轉]SASS用法指南

轉自阮一峯 SASS用法指南css

1、什麼是SASS

SASS是一種CSS的開發工具,提供了許多便利的寫法,大大節省了設計者的時間,使得CSS的開發,變得簡單和可維護。
本文總結了SASS的主要用法。個人目標是,有了這篇文章,平常的通常使用就不須要去看官方文檔了。html

2、安裝和使用

2.1 安裝

SASS是Ruby語言寫的,可是二者的語法沒有關係。不懂Ruby,照樣使用。只是必須先安裝Ruby,而後再安裝SASS。
假定你已經安裝好了Ruby,接着在命令行輸入下面的命令:web

gem install sass

而後,就能夠使用了。數組

2.2 使用

SASS文件就是普通的文本文件,裏面能夠直接使用CSS語法。文件後綴名是.scss,意思爲Sassy CSS。瀏覽器

下面的命令,能夠在屏幕上顯示.scss文件轉化的css代碼。(假設文件名爲test。)sass

sass test.scss

若是要將顯示結果保存成文件,後面再跟一個.css文件名。app

sass test.scss test.css

SASS提供四個編譯風格的選項:dom

  • nested:嵌套縮進的css代碼,它是默認值。
  • expanded:沒有縮進的、擴展的css代碼。
  • compact:簡潔格式的css代碼。
  • compressed:壓縮後的css代碼。

生產環境當中,通常使用最後一個選項。ide

sass --style compressed test.sass test.css

你也可讓SASS監聽某個文件或目錄,一旦源文件有變更,就自動生成編譯後的版本。函數

// watch a file
sass --watch input.scss:output.css
// watch a directory
sass --watch app/sass:public/stylesheets

SASS的官方網站,提供了一個在線轉換器。你能夠在那裏,試運行下面的各類例子。

3、基本用法

3.1 變量

SASS容許使用變量,全部變量以$開頭。

$blue : #1875e7; 
div {
 color : $blue;
}

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

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

默認變量值

默認變量在進行組件化開發時,比較有用.

// 在默認變量值聲明前,聲明的同名變量,覆蓋默認值
$baseLineHeight: 2em;
// 默認變量值
$baseLineHeight: 1.3em !default

變量插值

#{合法的表達式,便可} 如: #{px2rem($x)}rem

$h: 10px;
@function sum(n) {
    @return n + 12;
}
.test {
    height: #{sum($h)}px;
}

多值變量

分爲list和map, 相似數組和對象

  • list
    經過空格,逗號或小括號分隔多個值,可用函數 nth($list, $index)取值,相關函數有( length($list), append($list, $item, [$seperator]), join($list, $list2))

    // 一維數組
      $list: 10px 5px;
      .test {
          padding: $list;
      }
    
      // 二維數組
      $2dlist: 10px 5px, 20px 10px;
      $2dlist2: (10px 5px) (20px 10px);
      .box {
          padding: nth($2dlist, 1);
          &:hover {
              padding: nth($2dlist, 2);
          }
      }
    
      $colors: blue darkblue;
      .link{
          color: nth($colors, 1);
          &:hover{
              color: nth($colors, 2);
          }
      }
  • map
    map數據以key:value的形式出現,value還能夠是list類型數據.
    如: $map: ($key: $val, $key2: $val2), 經過 map-get($map, $key)取值, 相關函數(map-merge($map1, $map2), map-keys($map), map-values($map))

    $heading: (h1: 4em, h2: 3em, h3: 2em);
      @each $header, $size in $heading {
          #{$header} {
              font-size: $size;
          }
      }
    
      .header1 {
          font-size: map-get($heading, h1);
      }

3.2 計算功能

SASS容許在代碼中使用算式:

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

3.3 嵌套

SASS容許選擇器嵌套。好比,下面的CSS代碼:

div h1 {
  color : red;
}

能夠寫成:

div {
  hi {
    color:red;
  }
}

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

p {
  border: {
    color: red;
        width: 3px;
  }
}

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

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

3.4 註釋

SASS共有兩種註釋風格。

標準的CSS註釋 /* comment */ ,會保留到編譯後的文件。
單行註釋 // comment,只保留在SASS源文件中,編譯後被省略。

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

/*! 
  重要註釋!
*/

4、代碼的重用

4.1 繼承

SASS容許一個選擇器,繼承另外一個選擇器。好比,現有class1:

.class1 {
  border: 1px solid #ddd;
}

class2要繼承class1,就要使用@extend命令:

.class2 {
  @extend .class1;
  font-size:120%;
}

4.2 Mixin

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); }

mixin選擇性入參

@mixin box($border: 1px solid #eee, $pad: 10px) {
    border: $border;
    padding: $pad;
}

.box {
    @include box($pad: 22px);
}

mixin傳入多組值參數

@mixin box-shadow($shadow...) {
    box-shadow: $shadow;
}

.my-box {
    @include box-shadow(0 2px 2px rgba(0,0,0,.2), 3px 2px 0px rgba(233,0,0,.5));
}

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);
}

內置函數

list函數

  • length($list);
  • nth($list, $index);
  • append($list, $item, [$seperator]);
  • join($list1, $list2);
  • index($list, $val);
  • set-nth($list, $n, $val);
  • ...

map函數

  • map-get($map, $key);
  • map-merge($map1, $map2);
  • map-remove($map, $keys...);
  • map-keys($map);
  • map-values($map);
  • ma-has-key($map, $key);
  • ...

color函數

  • lighten($color, $amount);
  • darken($color, $amount);
  • ...

string函數

  • quote($str)
  • unquote($str)
  • str-length($str)
  • str-insert($str, $con, $index);
  • str-index($str, $substr);
  • str-slice($str, $start-at, $end-at);
  • to-upper-case($str);
  • to-lower-case($str);

number函數

  • percentage($num)
  • round($num);
  • ceil($num);
  • floor($num);
  • min($num);
  • max($num);
  • abs($num);
  • random([$limit]);
相關文章
相關標籤/搜索