前端學習之路——scss篇

來源:互聯網
上載者:User

標籤:range   環境變數   ken   字串   and   lan   rem   href   put   

學習資料:

  sass文法 http://www.w3cplus.com/sassguide/syntax.html

  Sass http://sass.bootcss.com/docs/sass-reference/

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

一、什麼是SASS

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

二、安裝和使用

Sass依賴於ruby環境,所以裝sass之前先確認裝了ruby。先導官網下載個ruby。在安裝的時候,請勾選Add Ruby executables to your PATH這個選項,添加環境變數,不然以後使用編譯軟體的時候會提示找不到ruby環境。安裝好ruby後,然後安裝Sass。(mac內建)

輸入一下命令:

gem install sass

這樣,sass就可以使用了。

三、基本使用

Sass 有兩種文法。 第一種被稱為 SCSS (Sassy CSS),是一個 CSS3 文法的擴充版本;二種比較老的文法成為縮排文法(或者就稱為 "Sass"), 提供了一種更簡潔的 CSS 書寫方式。使用 sass-convert 命令實現兩者相互轉換。本文介紹的是Scss用法。

# 將 Sass 轉換為 SCSS$ sass-convert style.sass style.scss# 將 SCSS 轉換為 Sass$ sass-convert style.scss style.sass
3.1 注釋

SASS共有兩種注釋風格。標準的CSS注釋 /* comment */ ,會保留到編譯後的檔案。單行注釋 // comment,只保留在SASS源檔案中,編譯後被省略。在/*後面加一個驚嘆號,表示這是"重要注釋"。即使是壓縮模式編譯,也會保留這行注釋,通常可以用於聲明著作權資訊。

3.2 變數

SASS可以使用變數,所有變數以$開頭。如果變數需要鑲嵌在字串之中,就必須需要寫在#{}之中。變數後面添加 !default ,表示該值是預設值。

$left: left;div{    float: $left;    margin-#{$left}: 20px;}
多個變數

多值變數分為list類型和map類型,簡單來說list類型有點像js中的數組,而map類型有點像js中的對象。

/* list */$linkColor:         #08c #333 !default;//第一個值為預設值,第二個滑鼠滑過值a{  color:nth($linkColor,1);  &:hover{    color:nth($linkColor,2);  }}/* map */$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);@each $key, $value in $headings {  #{$key} {    font-size: $value;  }}編譯為:/* list */a { color: #08c; }a:hover { color: #333; }/* map */h1 { font-size: 2em; }h2 { font-size: 1.5em; }h3 { font-size: 1.2em; }
3.3 嵌套

SASS可以使用選取器嵌套。

div {    img{        width: 50px;    }}//編譯為div img{ width: 50px; }

屬性也可以嵌套,比如 border-color 屬性。

div{    border: {        color: red;    }}//編譯為div{ border-color: red; }

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

在嵌套的代碼塊內,可以使用 & 引用父元素。比如 a:hover 偽類。

a{    &:hover{        color: #ccc;    }}//編譯為a:hover{ color: #ccc;}
3.4 @at-root

sass3.3.0中新增的功能,用來跳出選取器嵌套的。預設所有的嵌套,繼承所有上級選取器,但有了這個就可以跳出所有上級選取器。適用 BEM 命名方式(如: .block 、.block__element 、.block--modifier)、@keyframe。先看如果使用嵌套寫法是什麼樣的情況。

.block {    color: red;    #{&}_element {        color:blue;    }    #{&}--modifier {        color: orange;    }}編譯為.block { color: red; }.block .block_element { color: blue; }.block .block--modifier { color: orange; }

明顯編譯出來的CSS並不是我們想要的代碼。 @at-root 可以實現上面 BEM 的特性。

.block {    color: red;    @at-root #{&}_element {        color:blue;    }    @at-root #{&}--modifier {        color: orange;    }}編譯為:.block { color: red; }.block_element { color: blue; }.block--modifier { color: orange; }
3.5 計算

SASS允許在代碼中使用算式。這裡就不做描述了。

四、代碼重用4.1 繼承

SASS通過 @extend 命令使一個選取器class2繼承另一個選取器class1

.class1{    width: 50px / 2;    height: 50px + 50px;}.class2{    @extend .class1;    height: 50px;}編譯為:.class1, .class2 { width: 50px / 2; height: 100px; }.class2 { height: 50px; }

 

編譯後以群組選取器方式顯示;如果選取器class2不需要選取器class1的某個屬性,可添加該屬性進行覆蓋,並單獨顯示出來。(看文檔的時候總是將群組選擇的 “,” 看成 “.”,誤認為後代選取器了,所以寫出來。)

4.2 Mixin

Sass中使用 @mixin 聲明混合,可以傳遞參數,參數名以$符號開始,多個參數以逗號分開,也可以給參數設定預設值 $opacity:50 ,如果一個參數可以有多組值,如 box-shadow、transition 等,那麼參數則需要在變數後加三個點表示,如 $variables... 。使用 @mixin 命令,定義一個代碼塊。再使用 @include 命令,調用這個 @mixin。

@mixin opacity($opacity:50) {  opacity: $opacity / 100;  filter: alpha(opacity=$opacity);}.opacity{  @include opacity; }.opacity-80{  @include opacity(80); }編譯為:.opacity { opacity: 0.5; filter: alpha(opacity=50); }.opacity-80 { opacity: 0.8; filter: alpha(opacity=80); }
 4.3 函數

Sass定義了很多函數可供使用,當然你也可以自訂函數,以 @fuction 開始。實際項目中我們使用最多的應該是顏色函數,而顏色函數中又以lighten減淡和darken加深為最,其調用方法為lighten($color,$amount)darken($color,$amount),它們的第一個參數都是顏色值,第二個參數都是百分比。

$color: red;@function rem($rem){    @return $rem / 10 + rem;}.box{    foot-size: rem(20);    color: lighten($color, 20%);}編譯為:.box { foot-size: 2rem; color: #ff6666; }
五、進階使用5.1 條件陳述式

@if可以用來判斷:

p {  @if 1 + 1 == 2 { border: 1px solid;  }  @if 5 < 3      { border: 2px dotted; }  @if null       { border: 3px double; }}編譯為:p { border: 1px solid; }

@if 聲明可以由幾個 @else if語句,一個 @else 聲明組成。

$type: monster;p {  @if $type == ocean {    color: blue;  } @else if $type == matador {    color: red;  } @else if $type == monster {    color: green;  } @else {    color: black;  }}編譯為:p { color: green; }
5.2 迴圈語句

@for迴圈:from x to y: 不含y;from x through y:包含y。

@for $i from 1 to 3 {    .border-#{$i} {        border: #{$i}px solid blue;    }}@for $i from 1 through 3 {  .item-#{$i} { width: 2em * $i; }}編譯為:.border-1 { border: 1px solid blue; }.border-2 { border: 2px solid blue; }.item-1 { width: 2em; }.item-2 { width: 4em; }.item-3 { width: 6em; }

@each

$animal-list: puma, sea-slug, egret, salamander;@each $animal in $animal-list {  .#{$animal}-icon {    background-image: url(‘/images/#{$animal}.png‘);  }}編譯為:.puma-icon { background-image: url("/images/puma.png"); }.sea-slug-icon { background-image: url("/images/sea-slug.png"); }.egret-icon { background-image: url("/images/egret.png"); }.salamander-icon { background-image: url("/images/salamander.png"); }

@while

$i: 6;@while $i > 0 {  .item-#{$i} { width: 2em * $i; }  $i: $i - 2;}編譯為:.item-6 { width: 12em; }.item-4 { width: 8em; }.item-2 { width: 4em; }
六、編譯

在命令列中運行 Sass 進行編譯,只要輸入:

sass input.scss output.css 

命令 Sass 監視檔案的改動並更新 CSS :

sass --watch input.scss:output.css

如果你的目錄裡有很多 Sass 檔案,你還可以命令 Sass 監視整個目錄:

sass --watch app/sass:public/stylesheets

在命令列後面添加 --style 編譯格式 可以選擇編譯方式。

編譯方式有四種:

  nested(預設):選取器與屬性等單獨佔用一行,縮排量與 Sass 檔案中一致,每行的縮排量反映了其在嵌套規則內的層數。當閱讀大型 CSS 檔案時,這種樣式可以很容易地分析檔案的主要結構;

  expanded:選取器、屬性等各佔用一行,屬性根據選取器縮排,而選取器不做任何縮排;

  compact:每條 CSS 規則只佔一行,包含其下的所有屬性。嵌套過的選取器在輸出時沒有空行,不嵌套的選取器會輸出空白行作為分隔字元;

  compressed:刪除所有無意義的空格、空白行、以及注釋,力求將檔案體積壓縮到最小,同時也會做出其他調整,比如會自動替換佔用空間最小的顏色表達方式。

編譯錯誤,命令列中會報錯,並提示錯誤碼行數。

 

前端學習之路——scss篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.