Sass入門

學(xué)習(xí)Sass(官網(wǎng):Sass)之前需要了解什么是Sass,Sass全稱:Syntactically Awesome StyleSheets让网,中文的大概意思是“語(yǔ)法樣式表”煤杀。從字面意思來(lái)講,就是把css樣式增加了一些語(yǔ)法旁理。其實(shí)其功能也是差不多的。css本身是有自身的語(yǔ)法,但是并沒(méi)有變量需忿、條件判斷、循環(huán)蜡歹、函數(shù)等編程語(yǔ)言的基本語(yǔ)法屋厘,Sass就是提供了css缺失的功能。一般將Sass等稱為“Css預(yù)處理器”月而。

“Css預(yù)處理器”:
    CSS 預(yù)處理器是一種語(yǔ)言用來(lái)為 CSS 增加一些編程的的特性汗洒,無(wú)需考慮瀏覽器的兼容
性問(wèn)題,例如你可以在 CSS 中使用變量父款、簡(jiǎn)單的程序邏輯溢谤、函數(shù)等等在編程語(yǔ)言中的一些
基本技巧瞻凤,可以讓你的 CSS 更見(jiàn)簡(jiǎn)潔,適應(yīng)性更強(qiáng)世杀,代碼更直觀等諸多好處

作為css預(yù)處理器阀参,不僅僅只有Sass一種,還包括LESS(官網(wǎng):LESS)瞻坝、Stylus(官網(wǎng):Stylus),它們之間的異同這里不再贅述蛛壳,如果感興趣的朋友可以查看這篇文章,本文主要介紹Sass所刀。如果你對(duì)為什么選擇Sass有疑問(wèn)衙荐,請(qǐng)查看視頻《How I use SASS》(自備梯子

環(huán)境安裝

  • Sass是使用Ruby開(kāi)發(fā)的,在使用之前需要電腦安裝Ruby環(huán)境(本文基于mac浮创,其他系統(tǒng)請(qǐng)自行Google,Google請(qǐng)自備梯子)忧吟。
    詳細(xì)查看:教程0--教程3。地址:https://ruby-china.org/wiki/install_ruby_guide

  • 安裝Sass gem

    gem install sass

    查看安裝是否成功:
    sass -v 能夠輸出版本號(hào)蒸矛,表示安裝成功瀑罗。

預(yù)處理

  • 通過(guò)命令行運(yùn)行sass

    sass input.scss output.css

    將input.scss 轉(zhuǎn)換為css文件

  • 監(jiān)控Sass文件的變化,自動(dòng)轉(zhuǎn)換為css文件

    1. 監(jiān)控單個(gè)文件 sass input.scss output.css
    2. 監(jiān)控目錄 sass --watch app/sass:public/stylesheets
  • 編譯風(fēng)格:詳細(xì)查看編譯風(fēng)格文檔

    1. nested:嵌套縮進(jìn)的css代碼雏掠,它是默認(rèn)值斩祭。
    2. expanded:沒(méi)有縮進(jìn)的、擴(kuò)展的css代碼乡话。
    3. compact:簡(jiǎn)潔格式的css代碼摧玫。
    4. compressed:壓縮后的css代碼。(生產(chǎn)環(huán)境使用)

    ex: sass --style compressed test.sass test.css

語(yǔ)法

  • 展現(xiàn)方式绑青,有sass和scss兩種诬像。其不同點(diǎn)在下面代碼中可以非常清晰的看到。

    sass樣式:

    $font-stack:    Helvetica, sans-serif
    $primary-color: #333
    
    body
        font: 100% $font-stack
        color: $primary-color
    

    scss樣式:

    $font-stack:    Helvetica, sans-serif;
    $primary-color: #333;
    
    body {
      font: 100% $font-stack;
      color: $primary-color;
    }
    

    sass的樣式是Sass剛剛問(wèn)世的時(shí)候的樣式闸婴,后來(lái)隨著發(fā)展增加了scss的樣式坏挠,目前兩種樣式Scss都是支持的。sass沒(méi)有花括號(hào)邪乍,與原生的css樣式相差較大降狠,scss基本上是和css的代碼樣式是一樣的,更符合之前寫css代碼習(xí)慣庇楞。我個(gè)人建議使用第二種scss的方式榜配。

  • 注釋

    Sass注釋包括三中注釋風(fēng)格://注釋/* 注釋 */吕晌、/*! 注釋 */蛋褥。下面分別介紹不同的注釋方式。

    1. //注釋:?jiǎn)涡凶⑨尵Σ担A(yù)處理后消失烙心,只存在sass文件中膜廊。
    2. /* 注釋 */:標(biāo)準(zhǔn)css注釋,會(huì)保留到編譯后的文件中弃理。
    3. /*! 注釋 */:常用于版權(quán)聲明溃论,使用壓縮模式預(yù)處理后,依舊會(huì)保留此注釋痘昌。
  • 變量

    Scss中的變量定義使用$開(kāi)頭钥勋,例如:$my-color: #333 需要調(diào)用的地方直接:body { color: $my-color }

    下面查看完整例子:

    $font-stack:    Helvetica, sans-serif;
    $primary-color: #333;
    
    body {
      font: 100% $font-stack;
      color: $primary-color;
    }
    
    

    預(yù)處理后生成的代碼:

    body {
        font: 100% Helvetica, sans-serif;
        color: #333;
    }
    

    變量調(diào)用還有另外一種方式:

    $left: left;
    
    body{
        margin-#{$left}:10px;
    }
    

    這種方式是將變量嵌套在字符串中,使用#{}辆苔。

  • 嵌套

    Sass 支持標(biāo)簽屬性等嵌套算灸。

    標(biāo)簽嵌套,Sass代碼如下:

    nav {
      ul {
        margin: 0;
        padding: 0;
        list-style: none;
      }
    
      li { display: inline-block; }
    
      a {
        display: block;
        padding: 6px 12px;
        text-decoration: none;
      }
    }
    

    預(yù)處理后的css代碼如下:

    nav ul {
      margin: 0;
      padding: 0;
      list-style: none;
    }
    
    nav li {
      display: inline-block;
    }
    
    nav a {
      display: block;
      padding: 6px 12px;
      text-decoration: none;
    }
    

    屬性嵌套

    Sass代碼(切記不要講屬性color后面的:漏掉):

p {
   border: {
     color: red;
   }
  }
```
預(yù)處理后css代碼:

```css
p {
    border-color: red;
}
```
引用父類元素驻啤。使用符號(hào)`&`

    Sass代碼:

```scss
a {

&:hover { color: blue; }
}
```
預(yù)處理后的css代碼:

```css
a : hover {
    color: blue;
}
```

高級(jí)用法

  • 局部模板

    在Sass中菲驴,可以創(chuàng)建一個(gè)局部文件,然后在其他的文件中引入局部文件骑冗。局部文件的命名一般以_開(kāi)頭赊瞬,如_partial.scss。在另一文件中可以同過(guò)@import引入,這樣在瀏覽器看到css文件只有一個(gè)贼涩。

  • 導(dǎo)入局部文件

    導(dǎo)入局部文件的關(guān)鍵字是@import巧涧。其不僅僅可以import.scss文件,還可以import.css文件遥倦,當(dāng)導(dǎo)入.css功能時(shí)谤绳,同css中@import "file.css"的功能一致。

    局部Sass文件:

    // _reset.scss
    
    html,
    body,
    ul,
    ol {
       margin: 0;
      padding: 0;
    }
    

    導(dǎo)入局部文件:

    // base.scss
    
    @import 'reset';
    
    body {
      font: 100% Helvetica, sans-serif;
      background-color: #efefef;
    }
    

    最終生成的css文件:

    html, body, ul, ol {
      margin: 0;
      padding: 0;
    }
    
    body {
      font: 100% Helvetica, sans-serif;
      background-color: #efefef;
    }
    
  • Mixins(混合)

    Mixins定義方式:

    @mixin Mixins名稱(參數(shù):參數(shù)值){
    /*公用樣式*/
    }
    

    定義成為模塊后袒哥,需要通過(guò)@include進(jìn)行調(diào)用mixin缩筛,調(diào)用代碼如下:

    selector {
        @includ Mixins名稱(參數(shù)值);
    }
    

    下面來(lái)看一個(gè)例子:

    Sass 文件:

    @mixin border-radius($radius) {
      -webkit-border-radius: $radius;
         -moz-border-radius: $radius;
          -ms-border-radius: $radius;
              border-radius: $radius;
    }
    
    .box { @include border-radius(10px); }
    

    預(yù)處理后的css文件:

    .box {
      -webkit-border-radius: 10px;
      -moz-border-radius: 10px;
      -ms-border-radius: 10px;
      border-radius: 10px;
    }
    
  • Extend/Inheritance(擴(kuò)展或繼承)

    Sass中可以從一個(gè)選擇器,繼承另一個(gè)選擇器堡称。其關(guān)鍵字是:@extend瞎抛。

    下面看一個(gè)例子,可以直觀的展現(xiàn)繼承關(guān)系:

    Sass代碼:

    .message {
      border: 1px solid #ccc;
      padding: 10px;
      color: #333;
    }
    
    .success {
      @extend .message;
      border-color: green;
    }
    
    .error {
      @extend .message;
      border-color: red;
    }
    
    .warning {
      @extend .message;
      border-color: yellow;
    }
    

    上面例子中却紧,.success婿失、.error.warning都通過(guò)@extend關(guān)鍵字繼承了.message選擇器啄寡。下面看一下生成的css代碼:

    .message, .success, .error, .warning {
      border: 1px solid #cccccc;
      padding: 10px;
      color: #333;
    }
    
    .success {
      border-color: green;
    }
    
    .error {
      border-color: red;
    }
    
    .warning {
      border-color: yellow;
    }
    
  • 操作符

    在學(xué)習(xí)一門新的編程語(yǔ)言中基本上都會(huì)有介紹操作符的章節(jié),但是css這門獨(dú)特的編程語(yǔ)言確沒(méi)有這種方式哩照,但是通過(guò)Sass挺物,可以讓我們編寫css程序的時(shí)候也能有操作符、條件循環(huán)語(yǔ)句飘弧、自定義函數(shù)等识藤。下面將介紹操作符砚著。

    在Sass中的操作符包括 +-缭贡、*昧辽、/送矩。具體不用介紹,大家應(yīng)該都明白舌镶。下面我們直接來(lái)看一個(gè)例子:

    Sass代碼

    .container { width: 100%; }
    
    
    article[role="main"] {
      float: left;
      width: 600px / 960px * 100%;
    }
    
    aside[role="complimentary"] {
      float: right;
      width: 300px / 960px * 100%;
    }
    

    預(yù)處理后的css代碼:

    .container {
      width: 100%;
    }
    
    article[role="main"] {
      float: left;
      width: 62.5%;
    }
    
    aside[role="complimentary"] {
      float: right;
      width: 31.25%;
    }
    

    不僅僅上述的寬度可以通過(guò)操作符進(jìn)行技術(shù),css的顏色也可以通過(guò)技術(shù)得到一個(gè)新的顏色豪娜,例如 #777 + #888其最后的結(jié)果是white

  • 數(shù)據(jù)類型

    Sass支持7中主要的數(shù)據(jù)類型:

    1. numbers:數(shù)字類型 (e.g. 1.2, 13, 10px)

    2. strings:字符串類型餐胀,既可以是""號(hào),也可以是''瘤载,還可以直接省略 (e.g. "foo", 'bar', baz)

    3. colors: 顏色類型 (e.g. blue, #04a3f9, rgba(255, 0, 0, 0.5))

    4. booleans: 布爾類型 (e.g. true, false)

    5. nulls: 空類型 (e.g. null)

    6. lists:集合否灾,可以通過(guò)空格或者逗號(hào)進(jìn)行l(wèi)ists值得分隔 (e.g. 1.5em 1em 0 2em, Helvetica, Arial, sans-serif)

    7. maps :鍵值對(duì) (e.g. (key1: value1, key2: value2))

  • 條件語(yǔ)句

    條件語(yǔ)句無(wú)非就是if-else格式,下面介紹一下格式鸣奔。

    定義方式:

    if方式墨技,關(guān)鍵字:@if

    @if true {
        /* 樣式 */
    }
    

    if-else,關(guān)鍵字:@if @else

    @if true {
        /* 樣式 */
    } @esle{
        /* 樣式 */
    }
    
  • 循環(huán)語(yǔ)句

    SASS支持for循環(huán):

@for $i from 1 to 10 {
    .border-#{$i} {
      border: #{$i}px solid blue;
    }
  }
```
  
也支持while循環(huán):

```scss
    $i: 6;
  @while $i > 0 {
    .item-#{$i} { width: 2em * $i; }
    $i: $i - 2;
  }
```
each命令,作用與for類似:

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

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

  • 自定義函數(shù)

    Sass支持自定義函數(shù)挎狸。函數(shù)的定義和調(diào)用如下所示:

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

總結(jié)

Sass的基本用法扣汪,上文中都有介紹到,如果還有其它問(wèn)題伟叛,或本文沒(méi)有介紹到的地方私痹,請(qǐng)查看官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末统刮,一起剝皮案震驚了整個(gè)濱河市紊遵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侥蒙,老刑警劉巖暗膜,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鞭衩,居然都是意外死亡学搜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門论衍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瑞佩,“玉大人,你說(shuō)我怎么就攤上這事坯台【嫱瑁” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蜒蕾,是天一觀的道長(zhǎng)稠炬。 經(jīng)常有香客問(wèn)我焕阿,道長(zhǎng),這世上最難降的妖魔是什么首启? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任暮屡,我火速辦了婚禮,結(jié)果婚禮上毅桃,老公的妹妹穿的比我還像新娘褒纲。我一直安慰自己,他們只是感情好疾嗅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布外厂。 她就那樣靜靜地躺著,像睡著了一般代承。 火紅的嫁衣襯著肌膚如雪汁蝶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天论悴,我揣著相機(jī)與錄音掖棉,去河邊找鬼。 笑死膀估,一個(gè)胖子當(dāng)著我的面吹牛幔亥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播察纯,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帕棉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饼记?” 一聲冷哼從身側(cè)響起香伴,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎具则,沒(méi)想到半個(gè)月后即纲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡博肋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年低斋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匪凡。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膊畴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出病游,到底是詐尸還是另有隱情巴比,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站轻绞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏佣耐。R本人自食惡果不足惜政勃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兼砖。 院中可真熱鬧奸远,春花似錦、人聲如沸讽挟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耽梅。三九已至薛窥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眼姐,已是汗流浹背诅迷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留众旗,地道東北人罢杉。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓贡歧,卻偏偏與公主長(zhǎng)得像滩租,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子利朵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 聲明變量 定義變量的語(yǔ)法: 在有些編程語(yǔ)言中(如,JavaScript)聲明變量都是使用關(guān)鍵詞“var”開(kāi)頭屿衅,但是...
    Junting閱讀 1,470評(píng)論 0 6
  • 2015年10月20日 1.嵌套 Sass 中還提供了選擇器嵌套功能埃难,但這也并不意味著你在 Sass 中的嵌套是無(wú)...
    a0d560da7818閱讀 609評(píng)論 0 1
  • 一,CSS 預(yù)處理器 CSS 預(yù)處理器定義了一種新的語(yǔ)言,其基本思想是涡尘,用一種專門的編程語(yǔ)言忍弛,為 CSS 增加了一...
    馮傻大粗閱讀 448評(píng)論 0 0
  • 很詳細(xì)的sass入門指南,學(xué)習(xí)一下考抄。原文sass入門指南css預(yù)處理器已經(jīng)算不上一個(gè)新鮮的詞了细疚,當(dāng)前比較有代表性的...
    hzrWeber閱讀 1,022評(píng)論 0 18
  • 長(zhǎng)歌九霄氣蓋世,烽煙盡處豈無(wú)痕川梅。 將軍錦衣人未還疯兼,濁酒一樽飲春秋。 迎風(fēng)刺骨萬(wàn)馬行贫途,泣血沉沙萬(wàn)骨枯吧彪。 末敬君臣孝為...
    海貝閱讀 713評(píng)論 0 4