sass學習研究

這篇文章是算是前兩天學習sass的一個摘要和總結吧,簡單記載下。但願對你們有所幫助css


對於什麼是sass,我想如今你們可能都有所瞭解了。其實就是css的一種開發工具,或者也能夠說是將css編程化。其實和less是有很大的類似點的。或者說幾乎都是相同的。可是對於這兩種的高級用法,其實我的更加的偏向於sass!angularjs



關於sass的安裝以及編譯之類的這個東西上網一查一大把的就很少說了web

我這裏是用koala編譯的。編程




下面簡單的總結下sass的幾個特色吧。sass


一、變量:less


sass中容許使用變量,在sass中變量都是以$開頭的。dom


$blue:#249804;koa

div{函數

color:$blue;工具

}


若是須要將變量嵌入在字符串中則就必須寫在#{}中


相似於我在匯聯易中自定義的柵格寬度的sass寫法:

@mixin colWidth($value:20%) {

    -webkit-box-flex: 0;

    -webkit-flex: 0 0 $value;

    -moz-box-flex: 0;

    -moz-flex: 0 0 $value;

    -ms-flex: 0 0 $value;

    flex: 0 0 $value;

}


$i:1;


@while $i<=100{

    .col-#{$i}{

        @include colWidth($i*1%);

        $i:$i+1;

    }

}


//這裏用到的Mixin和循環後面會講到。


變量很是的簡單,基本也就這樣。


二、計算功能


這個很是的簡單,舉個例子就能夠了


在上面的例子中也用到了,好比$i*1%;

再好比:margin:(10px+2px);


三、嵌套


這裏的嵌套給個人感受就相似於dom樹的樹狀結構似的。


很簡單,舉個例子就能夠了

.hly{

.expense-type-icon-list {

            box-shadow: inset 0px 3px 5px 3px rgba(0, 0, 0, .26);

            .scroll {

                float: left;

                .scroll-content-container {

                    width: 35em;

                    padding: 8px 10px;

                    float: left;

                    img {

                        float: left;

                        margin-left: 5px;

                    }

                    img:first-child {

                        margin-left: 0px;

                    }

                }

            }


        }

}


對應的生成出來的css:


        .hly .create-invoice .expense-type-icon-list {

  box-shadow: inset 0px 3px 5px 3px rgba(0, 0, 0, 0.26); }

  .hly .create-invoice .expense-type-icon-list .scroll {

    float: left; }

    .hly .create-invoice .expense-type-icon-list .scroll .scroll-content-container {

      width: 35em;

      padding: 8px 10px;

      float: left; }

      .hly .create-invoice .expense-type-icon-list .scroll .scroll-content-container img {

        float: left;

        margin-left: 5px; }

      .hly .create-invoice .expense-type-icon-list .scroll .scroll-content-container img:first-child {

        margin-left: 0px; }



四、繼承

sass容許一個選擇器去繼承另外一個選擇器,好比如今有個class1,

.class1{

border:1px soild #ddd;

}


如今有class2要繼承class1的屬性,則用@extend命令

.class2{

@extend .class1;

font-size:1.5em;

}


五、Mixin

這個能夠理解爲宏定義,angularjs中的指令,在變量的舉例中就有說到了。這裏再具體的說下


這裏咱們經過一個mixin來定義一個代碼塊

仍是拿上面的例子:

@mixin colWidth($value:20%) {

    -webkit-box-flex: 0;

    -webkit-flex: 0 0 $value;

    -moz-box-flex: 0;

    -moz-flex: 0 0 $value;

    -ms-flex: 0 0 $value;

    flex: 0 0 $value;

}

用@include來調用它。

div{

@include colWidth(30%);

}


看到這裏你們可能會有個疑問,爲何這裏的mixin中有個參數在裏面?

其實這個也就是Mixin的強大之處了(固然,你也能夠不指定)

當指定了之後,咱們能夠傳入不一樣的值,固然也能夠缺省,當缺省的時候就是默認的指,例如上面的例子就是20%


六、顏色函數

說實話這個我不是很懂,由於基本我以爲是用不到的。簡單從網上找了些例子:

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

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

  grayscale(#cc3) // #808080

  complement(#cc3) // #33c

你們這個也能夠多查查。


七、插入文件

簡單的一個命令@import

@import("path/fileName.scss");

若是是.css的文件

@import "fileName.css";


八、條件語句

從這裏開始應該能夠說是sass的一些高級的用法了吧


@if能夠用來判斷

div{

@if 1+2 ==3 {border:1px soild #ddd};

@if 3<2 {margin:0 auto};

}


固然,既然存在if,必然少不了else!用法以下:

@if lightness($color) > 30% {

    background-color: #000;

  } @else {

    background-color: #fff;

  }


九、循環語句

sass支持for循環,while循環以及each命令


for循環:

@for $i form 1 to 10{

.class-#{i}{

margin-left:#{i}px;

}

}


while循環(一樣是匯聯易中的例子):

@mixin colWidth($value:20%) {

    -webkit-box-flex: 0;

    -webkit-flex: 0 0 $value;

    -moz-box-flex: 0;

    -moz-flex: 0 0 $value;

    -ms-flex: 0 0 $value;

    flex: 0 0 $value;

}


$i:1;


@while $i<=100{

    .col-#{$i}{

        @include colWidth($i*1%);

        $i:$i+1;

    }

}


each例子:

@each $member in a, b, c, d {

   .#{$member} {

     background-image: url("/image/#{$member}.jpg");

   }

  }



十、自定義函數

固然也是有特殊符號的:@function @return


@function double($i){

@return $i*2;

}


div{

margin:double(2em);

}



最後說一句,在項目中儘可能仍是少用sass的高級用法,由於可能項目跑起來編譯特別慢,甚至會卡在高級用法中編譯不出sass別的樣式


好比我自定的柵格用的Mixin,這個在項目可以很快被編譯,可是配合了while循環就會卡死。後來我是引入koala編譯出來的css文件引入到項目中的~

相關文章
相關標籤/搜索