SASS學(xué)習(xí)筆記

Sass是一門CSS編譯語(yǔ)言,為CSS賦予了可編程的能力初家,允許我們使用變量寝受、函數(shù)坷牛、mixin等手段來(lái)進(jìn)行模塊化的CSS開發(fā),減少了大量冗余的代碼工作量很澄。

1. 語(yǔ)法

Sass支持兩種語(yǔ)法

1.1 scss

SCSS語(yǔ)法使用.scss后綴京闰,SCSS基本上是CSS的超集,也就是絕大多數(shù)的CSS語(yǔ)法都可以直接使用甩苛。因?yàn)榕cCSS語(yǔ)法相似蹂楣,這是學(xué)習(xí)SASS最簡(jiǎn)單也最流行的一種語(yǔ)法。

@mixin button-base() {
  @include typography(button);
  @include ripple-surface;
  @include ripple-radius-bounded;

  display: inline-flex;
  position: relative;
  height: $button-height;
  border: none;
  vertical-align: middle;

  &:hover { cursor: pointer; }

  &:disabled {
    color: $mdc-button-disabled-ink-color;
    cursor: default;
    pointer-events: none;
  }
}

1.2 sass 縮進(jìn)語(yǔ)法

縮進(jìn)語(yǔ)法是sass的原生語(yǔ)法讯蒲,因此使用.sass作為文件后綴痊土。這種語(yǔ)法用縮進(jìn)表示花括號(hào),空號(hào)表示花括號(hào)的結(jié)束墨林。

@mixin button-base()
  @include typography(button)
  @include ripple-surface
  @include ripple-radius-bounded

  display: inline-flex
  position: relative
  height: $button-height
  border: none
  vertical-align: middle

  &:hover
    cursor: pointer

  &:disabled
    color: $mdc-button-disabled-ink-color
    cursor: default
    pointer-events: none

2. 文檔構(gòu)成

像大多數(shù)CSS文件一樣赁酝,Sass文件主要由樣式規(guī)則及規(guī)則的屬性構(gòu)成反浓,除此之外還包括一些獨(dú)有的特性。

作者主要用scss語(yǔ)法赞哗,因此本文后續(xù)介紹中只考慮scss語(yǔ)法雷则,使用sass語(yǔ)法的請(qǐng)自行轉(zhuǎn)換。

2.1 樣式規(guī)則

.item {
    color: green;
}

2.2 變量聲明

$bg-color: #fff;

2.3 @if語(yǔ)句

@if語(yǔ)法

@if expression {
    //CSS codes here
}

具體事例

p {
    @if $bg-color { border:1px solid; }
    @if $box-width > 100 { border: none; }
}

還可以接著很多@else

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

2.4 @each語(yǔ)句

語(yǔ)法

@each $var in <list or map>

具體示例

@each $color in red, green, yellow, blue {
    .p_#{$color} {
        background-color: #{$color}
    }
}

列表和映射還可以是二維的肪笋,如下所示

@each $color, $border in (aqua, dotted),
                        (red, solid),
                        (green, double){
  .#{$color} {
    background-color : $color;
    border: $border;
  }
}

也可以使用映射的方式

@each $header, $color in (h1: red, h2: green, h3: blue) {
  #{$header} {
    color: $color;
  }
}

2.5 @error@warn@debug

和傳統(tǒng)的編程語(yǔ)言一樣月劈,在編寫sass中的mixin,function過(guò)程中,如果有變量沒有按照期望的格式傳遞藤乙,我們還可以增加錯(cuò)誤處理邏輯猜揪。

@mixin reflexive-position($property, $value) {
  @if $property != left and $property != right {
    @error "Property #{$property} must be either left or right.";
  }

  $left-value: if($property == right, initial, $value);
  $right-value: if($property == right, $value, initial);

  left: $left-value;
  right: $right-value;
  [dir=rtl] & {
    left: $right-value;
    right: $left-value;
  }
}

.sidebar {
  @include reflexive-position(top, 12px);
  //       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  // Error: Property top must be either left or right.
}

和@error類似的作用,但是@warn并不會(huì)停止sass的編譯坛梁。

$known-prefixes: webkit, moz, ms, o;

@mixin prefix($property, $value, $prefixes) {
  @each $prefix in $prefixes {
    @if not index($known-prefixes, $prefix) {
      @warn "Unknown prefix #{$prefix}.";
    }

    -#{$prefix}-#{$property}: $value;
  }
  #{$property}: $value;
}

.tilt {
  // Oops, we typo'd "webkit" as "wekbit"!
  @include prefix(transform, rotate(15deg), wekbit ms);
}

@debug我想就不用再細(xì)說(shuō)了而姐,這個(gè)語(yǔ)句是為了方便我們調(diào)試,將一些變量打印出來(lái)供分析運(yùn)行態(tài)的划咐。

2.6 CSS語(yǔ)句

包括以下幾種:

  • CSS樣式規(guī)則 h1 { font-size:xxxx; }
  • @media,@font-face等CSS內(nèi)置的@規(guī)則
  • @include引用的mixin
  • @at-root指令拴念,更詳細(xì)的可以參考這里,表示選擇器嵌套的最外層褐缠,對(duì)于編譯結(jié)果來(lái)說(shuō)將使嵌套失效政鼠,直接移除父選擇器。队魏。

2.7 一些頂級(jí)的聲明

  • @use 通過(guò)命令加載modules公般,包括sass自帶的一些modules,這里面也有作用域的概念胡桨,更詳細(xì)的內(nèi)容還是參考官方文檔
  • @import 應(yīng)用外部文件
  • @mixin 定義mixin
  • @function 定義function

3. Expressions

類似于其他語(yǔ)言中的變量類型或操作符的定義官帘。

SASS中包括以下變量類型

  • 數(shù)字 Numbers,可以是純數(shù)字也可以包括單位昧谊,如12px
  • 字符串 Strings 可以用雙引號(hào)也可以不用雙引號(hào)刽虹,例如"Helfetica Nenu"或者bold
  • 顏色 Colors 可以用預(yù)定義的縮寫或者十六進(jìn)制的寫法,例如#c6538cgreen
  • 布爾值 boolean 揽浙,包括truefalse
  • null
  • 值列表状婶,例如空格分割的值,比如padding: 1em 2em 1em 2em;
  • 映射馅巷,例如"background":red, "foreground":pink

SASS中的操作符包括:

  • ==!=用于檢查兩個(gè)值是否相等
  • +,-,*,%用來(lái)進(jìn)行數(shù)學(xué)運(yùn)算
  • <,<=,>,>= 用來(lái)進(jìn)行兩個(gè)值大小的比較
  • +,-,/用來(lái)連接字符串
  • (,) 用來(lái)控制運(yùn)算的順序

4. 注釋的寫法

注釋分兩種//開頭的注釋不會(huì)編譯到CSS文件中膛虫,/**/形式的注釋會(huì)編譯到CSS中。
單行注釋以//開頭钓猬,/**/格式支持多行注釋稍刀。

// This comment won't be included in the CSS.

/* But this comment will, except in compressed mode. */

/* It can also contain interpolation:
 * 1 + 1 = #{1 + 1} */

/*! This comment will be included even in compressed mode. */

p /* Multi-line comments can be written anywhere
   * whitespace is allowed. */ .sans {
  font: Helvetica, // So can single-line commments.
        sans-serif;
}

文檔注釋

如果使用sass寫一些基本的庫(kù),可以對(duì)mixin,functions,variables等編寫文檔注釋,通過(guò)SassDoc工具可以提取文檔账月。

文檔注釋以///開頭综膀,支持Markdown語(yǔ)法格式。

參考資料

  1. SASS Document
  2. scss-@if指令
  3. SCSS @if() 指令
  4. scss-@each指令
  5. sass @error
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末局齿,一起剝皮案震驚了整個(gè)濱河市剧劝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抓歼,老刑警劉巖讥此,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谣妻,居然都是意外死亡萄喳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門蹋半,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)他巨,“玉大人,你說(shuō)我怎么就攤上這事减江∪就唬” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵您市,是天一觀的道長(zhǎng)觉痛。 經(jīng)常有香客問(wèn)我役衡,道長(zhǎng)茵休,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任手蝎,我火速辦了婚禮榕莺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棵介。我一直安慰自己钉鸯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布邮辽。 她就那樣靜靜地躺著唠雕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吨述。 梳的紋絲不亂的頭發(fā)上岩睁,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音揣云,去河邊找鬼捕儒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刘莹。 我是一名探鬼主播阎毅,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼点弯!你這毒婦竟也來(lái)了扇调?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抢肛,失蹤者是張志新(化名)和其女友劉穎肃拜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雌团,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燃领,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锦援。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猛蔽。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖灵寺,靈堂內(nèi)的尸體忽然破棺而出曼库,到底是詐尸還是另有隱情,我是刑警寧澤略板,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布毁枯,位于F島的核電站,受9級(jí)特大地震影響叮称,放射性物質(zhì)發(fā)生泄漏种玛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一瓤檐、第九天 我趴在偏房一處隱蔽的房頂上張望赂韵。 院中可真熱鬧,春花似錦挠蛉、人聲如沸祭示。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)质涛。三九已至,卻和暖如春掰担,著一層夾襖步出監(jiān)牢的瞬間汇陆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工恩敌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞬测,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像月趟,于是被迫代替她去往敵國(guó)和親灯蝴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 什么是SASS SASS是一種CSS的開發(fā)工具孝宗,提供了許多便利的寫法穷躁,大大節(jié)省了設(shè)計(jì)者的時(shí)間,使得CSS的開發(fā)因妇,變...
    陳小陌丿閱讀 476評(píng)論 0 0
  • 安裝運(yùn)行 1.下載ruby并安裝 2.安裝之后打開命令行執(zhí)行g(shù)em命令问潭,檢查是否已經(jīng)安裝好 安裝完ruby之后,在...
    wshining閱讀 720評(píng)論 0 1
  • ? Sass是使用Ruby語(yǔ)言編寫的css預(yù)處理語(yǔ)言婚被,誕生于2007年狡忙。Sass, LESS, stylus等...
    智明書閱讀 257評(píng)論 0 1
  • SASS學(xué)習(xí)筆記 文件后綴名 sass有兩種后綴名文件:一種后綴名為sass,不使用大括號(hào)和分號(hào)址芯;另一種是scss...
    EL_PSY_CONGROO閱讀 268評(píng)論 0 0
  • title: vue 中使用 sass Sass 是一款強(qiáng)化 CSS 的輔助工具灾茁,它在 CSS 語(yǔ)法的基礎(chǔ)上增加了...
    送你一堆小心心閱讀 1,377評(píng)論 0 0