【進階系列】前端開發環境構建(一)CSS -- Sass

weixin_33976072發表於2018-05-07

1 CSS

1.1 Sass——css編譯器

SASS用法指南

http://www.ruanyifeng.com/blog/2012/06/sass.html

http://www.sass-lang.com

        SASS是一種CSS的開發工具,提供了許多便利的寫法,大大節省了設計者的時間,使得CSS的開發,變得簡單和可維護。

1.1.1 安裝

        SASS是Ruby語言寫的,但是兩者的語法沒有關係。不懂Ruby,照樣使用。只是必須先安裝Ruby,然後再安裝SASS。

        假定你已經安裝好了Ruby,接著在命令列輸入下面的命令:

gem install sass

        然後,就可以使用了。

1.1.2 使用

        SASS檔案就是普通的文字檔案,裡面可以直接使用CSS語法。檔案字尾名是.scss,意思為SassyCSS。

        下面的命令,可以在螢幕上顯示.scss檔案轉化的css程式碼。(假設檔名為test。)

sass test.scss

        如果要將顯示結果儲存成檔案,後面再跟一個.css檔名。

sass test.scss test.css


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

    * nested:巢狀縮排的css程式碼,它是預設值。

    * expanded:沒有縮排的、擴充套件的css程式碼。

    * compact:簡潔格式的css程式碼。

    * compressed:壓縮後的css程式碼。

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

sass --style compressed test.sasstest.css


        你也可以讓SASS監聽某個檔案或目錄,一旦原始檔有變動,就自動生成編譯後的版本。

// watch a file

sass --watch input.scss:output.css

// watch a directory

sass --watch app/sass:public/stylesheets

        SASS的官方網站,提供了一個線上轉換器。你可以在那裡,試執行下面的各種例子。

1.1.3 基本用法

1.1.3.1 變數

        SASS允許使用變數,所有變數以$開頭。

$blue : #1875e7;

div {

   color : $blue;

}

        如果變數需要鑲嵌在字串之中,就必須需要寫在#{}之中。

$side : left;

.rounded {

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

}

1.1.3.2 計算功能

        SASS允許在程式碼中使用算式:

body {

    margin: (14px/2);

    top: 50px + 100px;

    right: $var * 10%;

}

1.1.3.3 巢狀

        SASS允許選擇器巢狀。比如,下面的CSS程式碼:

div h1 {

    color : red;

}

可以寫成:

div {

    hi {

        color: red;

    }

}

        屬性也可以巢狀,比如border-color屬性,可以寫成:

p {

    border: {

        color: red;

    }

}

        注意,border後面必須加上冒號。

        在巢狀的程式碼塊內,可以使用$引用父元素。比如a:hover偽類,可以寫成:

a {

    &:hover { color: #ffb3ff; }

}

1.1.3.4 註釋

        SASS共有兩種註釋風格。

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

        單行註釋 // comment,只保留在SASS原始檔中,編譯後被省略。

        在/*後面加一個感嘆號,表示這是"重要註釋"。即使是壓縮模式編譯,也會保留這行註釋,通常可以用於宣告版權資訊。

/*!

重要註釋!

*/

1.1.4 程式碼的重用

1.1.4.1 繼承

        SASS允許一個選擇器,繼承另一個選擇器。比如,現有class1:

.class1 {

    border: 1px solid #ddd;

}

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

.class2 {

    @extend .class1;

    font-size:120%;

}

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

1.1.4.3 顏色函式

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

lighten(#cc3, 10%) // #d6d65c

darken(#cc3, 10%) // #a3a329

grayscale(#cc3) // #808080

complement(#cc3) // #33c

1.1.4.4 插入檔案

@import命令,用來插入外部檔案。

@import "path/filename.scss";

        如果插入的是.css檔案,則等同於css的import命令。

@import "foo.css";

1.1.5 高階用法

1.1.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;    

}

1.1.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");

    }

}

1.1.5.3 自定義函式

SASS允許使用者編寫自己的函式。

@function double($n) {

    @return $n * 2;

}

#sidebar {

    width: double(5px);

}

相關文章