SASS用法指南(轉)

學過CSS的人都知道,它不是一種編程語言。javascript

你能夠用它開發網頁樣式,可是無法用它編程。也就是說,CSS基本上是設計師的工具,不是程序員的工具。在程序員眼裏,CSS是一件很麻煩的東西。它沒有變量,也沒有條件語句,只是一行行單純的描述,寫起來至關費事。css

很天然地,有人就開始爲CSS加入編程元素,這被叫作"CSS預處理器"(css preprocessor)。它的基本思想是,用一種專門的編程語言,進行網頁樣式設計,而後再編譯成正常的CSS文件。html

各類"CSS預處理器"之中,我本身最喜歡SASS,以爲它有不少優勢,打算之後都用它來寫CSS。下面是我整理的用法總結,供本身開發時參考,相信對其餘人也有用。前端

============================================java

SASS用法指南node

做者:阮一峯python

1、什麼是SASSlinux

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

本文總結了SASS的主要用法。個人目標是,有了這篇文章,平常的通常使用就不須要去看官方文檔了。程序員

2、安裝和使用

2.1 安裝

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

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

  gem install sass

而後,就可使用了。

2.2 使用

SASS文件就是普通的文本文件,裏面能夠直接使用CSS語法。文件後綴名是.scss,意思爲Sassy CSS。

下面的命令,能夠在屏幕上顯示.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.sass test.css

你也可讓SASS監聽某個文件或目錄,一旦源文件有變更,就自動生成編譯後的版本。

  // watch a file

  sass --watch input.scss:output.css

  // watch a directory

  sass --watch app/sass:public/stylesheets

SASS的官方網站,提供了一個在線轉換器。你能夠在那裏,試運行下面的各類例子。

3、基本用法

3.1 變量

SASS容許使用變量,全部變量以$開頭。

  $blue : #1875e7; 

  div {
   color : $blue;
  }

若是變量須要鑲嵌在字符串之中,就必須須要寫在#{}之中。

  $side : left;

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

3.2 計算功能

SASS容許在代碼中使用算式:

  body {
    margin: (14px/2);
    top: 50px + 100px;
    right: $var * 10%;
  }

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; }
  }

3.4 註釋

SASS共有兩種註釋風格。

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

單行註釋 // comment,只保留在SASS源文件中,編譯後被省略。

在/*後面加一個感嘆號,表示這是"重要註釋"。即便是壓縮模式編譯,也會保留這行註釋,一般能夠用於聲明版權信息。

  /*! 
    重要註釋!
  */

4、代碼的重用

4.1 繼承

SASS容許一個選擇器,繼承另外一個選擇器。好比,現有class1:

  .class1 {
    border: 1px solid #ddd;
  }

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

  .class2 {
    @extend .class1;
    font-size:120%;
  }

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

4.3 顏色函數

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

  lighten(#cc3, 10%) // #d6d65c
  darken(#cc3, 10%) // #a3a329
  grayscale(#cc3) // #808080
  complement(#cc3) // #33c

4.4 插入文件

@import命令,用來插入外部文件。

  @import "path/filename.scss";

若是插入的是.css文件,則等同於css的import命令。

  @import "foo.css";

5、高級用法

5.1 條件語句

@if能夠用來判斷:

  p {
    @if 1 + 1 == 2 { border: 1px solid; }
    @if 5 < 3 { border: 2px dotted; }
  }

配套的還有@else命令:

  @if lightness($color) > 30% {
    
  } @else {
    background-color: #fff;
  }

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");
    }
  }

5.3 自定義函數

SASS容許用戶編寫本身的函數。

  @function double($n) {
    @return $n * 2;
  }

  #sidebar {
    width: double(5px);
  }

(完)

留言(69條)

不懂ruby 和less好比何

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

好像用dreamweaver 來寫的話,代碼提示功能就沒了,稍有不便。

以至我還一直沒怎麼嘗試過這種方式

強大的東西果真都很複雜...

我也想學CSS+DIV,一直懶惰!!!

我看twitter的bootstrap的時候有個less也是和這個差很少的,這些沒準也會成爲前端工程師的必備知識了,看來要抓緊時間學習一下。

你好啊,我一直在使用less,我以爲您上面寫的sass的功能less幾乎全有,那麼爲何您最後選擇了sass呢?

我覺的好的頁面製做,他們面對的和要解決的問題都不是 sass 這種工具能夠解決的,因此它的應用範圍有限,有點程序員的一廂情願,卻不能知足實際快速開發和維護頁面製做的需求,一句話,「它解決的問題不在點兒上」。

LESS仍是差了很多的,沒有@extend,沒有屬性嵌套,沒有@if和@for,我用下來還有很多bug(好比從javascript拿到的數據沒法參與計算什麼的)。

惟一的特色就是能夠在網頁上運行時解析,這感受至關酷(但要說有啥好處其實也沒多少)。

不過用這種實現CSS比直接寫CSS暢快多了,尤爲是單頁面應用型網頁。

不太看好SASS,有點雞肋的感受。

謝謝之前好還沒注意,有這樣好的工具!

gem install sass
命令行提示HTTP RESPONSE 302錯誤,網上查找資料提示更新gem,經嘗試無效,何解?
win7 x86

博主,您的網友捐助試驗到如今已經一年了,能夠公佈數據讓你們瞭解一下情況嗎?

SASS適合程序員,設計師可能更習慣於CSS

引用bingo的發言:

博主,您的網友捐助試驗到如今已經一年了,能夠公佈數據讓你們瞭解一下情況嗎?

很差意思,請再等一下。

有報紙買走了這篇文章,我要等到他們發表之後,才能貼上來,大概在6月底吧。

引用大春餌的發言:

你好啊,我一直在使用less,我以爲您上面寫的sass的功能less幾乎全有,那麼爲何您最後選擇了sass呢?

Less要靠javascript解析,我不喜歡這種作法。另外,less的變量用@表示,我也不太習慣。

一直用960 Grid System這種框架。
樓主怎麼用ruby下的呢,有沒有VS或QT下的推薦?

挺累人的.. 我覺着用ruby還不如用javascript

沒學過CSS的路過。

不錯。前陣子看貌似仍是要收費的;今天一看居然上github了。能夠開始用了。

引用大春餌的發言:

你好啊,我一直在使用less,我以爲您上面寫的sass的功能less幾乎全有,那麼爲何您最後選擇了sass呢?

sass比less更強大點,特別是對於顏色這塊的處理function很是強大,並且還能夠自定義function(ruby),另外就是sass的黃金搭檔http://compass-style.org/,讓sass變得更加完美,就如ruby之於rails... 另外能夠看看這篇文章,介紹sass,less,node.js,coffeescript開發工具WebMatrix: http://www.cnblogs.com/aNd1coder/archive/2012/06/17/2552037.html

引用阮一峯的發言:

 

Less要靠javascript解析,我不喜歡這種作法。另外,less的變量用@表示,我也不太習慣。

less一樣也有ruby的gem,能夠在本地進行preprocessor...

引用依樹的發言:

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

好像用dreamweaver 來寫的話,代碼提示功能就沒了,稍有不便。

以至我還一直沒怎麼嘗試過這種方式

不要保存爲.less文件,直接保存成.css,這樣提示功能仍是有的。
像這樣:
<link rel="stylesheet/less" type="text/css" href="less.css">

引用依樹的發言:

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

好像用dreamweaver 來寫的話,代碼提示功能就沒了,稍有不便。

以至我還一直沒怎麼嘗試過這種方式

Emacs卻是能夠勝任。我試着用了一段時間,還愉快


ERROR: Could not find a valid gem 'sass' (>= 0) in any repository
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
Errno::ETIMEDOUT: A connection attempt failed because the connected party di
d not properly respond after a period of time, or established connection failed
because connected host has failed to respond. - connect(2) (http://rubygems.org/
latest_specs.4.8.gz)

why?

這類工具毫無心義。能節省時間能更方便快捷?沒有!

貌似我還停留在純的css上,這種還沒試過,不過對於我懂點後臺語言的來講,還好理解,若是那種只會html,css的是不很難理解這些了?

sass貌似把css變複雜了,支持您的博客,

請教阮一峯老師:

您是用什麼編輯器來編輯SASS的。

我用的是Sublime,安裝了SASS的package,但是仍是不行。

謝謝!

用了幾年div+Css,居然都沒據說過還有這個神奇的工具,看來要好好了解了解!!

好複雜..我其實只是想扒下octopress 的高亮代碼的css而已..

引用依樹的發言:

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

好像用dreamweaver 來寫的話,代碼提示功能就沒了,稍有不便。

以至我還一直沒怎麼嘗試過這種方式

用sublime text編輯器,能夠安裝sass開發包,就能夠用提示功能了,我如今就用這個開發,很方便的

博主的代碼中的縮進的空格都被轉換成中文的空格了,因此直接複製過去在sass下會報錯。

很感謝你呀, 正在考慮使用LESS, 仍是SASS, 只是不想裝RUBY...呵呵

所有試了一遍,發現@import和自帶的顏色函數這兩處有問題。按照博主的說法使用sass不能編譯成功。

@import 「path/xxx」 //xxx 能夠是xxx.scss 或者xxx.sass
這裏用的是雙引號而不是圓括號
並且 xxx文件的文件名必須爲 _xxx.scss 或者 _xxx.sass 
SASS官方文檔說這叫 partial

@import

Stylesheets can get pretty big. CSS has an @import directive that allows you to break your styles up into multiple stylesheets, but each stylesheet takes a separate (slow) HTTP request. That’s why Sass’s @import directive pulls in the stylesheets directly. Not only that, but any variables or mixins defined in @imported files are available to the files that import them.

Sass has a naming convention for files that are meant to be imported (called 「partials」): they begin with an underscore. Let’s create a partial called _rounded.scss to hold our rounded mixin.

In order to support both .scss and .sass files, Sass allows files to be imported without specifying a file extension. That means we can just import "rounded", rather than "rounded.scss".

嗯,關於顏色函數,是在sass的交互shell下使用
在命令行下先敲入 sass -i
這時會有 >> 提示
在敲入 lighten(#cc3, 10%) 
會得出 #d6d65c

@linus脫襪子:

謝謝指出。import後面不能跟圓括號,已經改過來了。可是,文件名好像不用如下劃線開頭,下面的代碼能夠編譯經過。

@import "./test.scss"

另外,顏色函數沒有問題啊,我能夠正常使用。

 

感受有點雞肋,如今css很熟悉了,用記事本也能寫出一個網頁~

sass自己很好,看用的人用在何處,怎麼用了~

正在試用Sass,還不敢妄下評論。第一感受就是把簡單的CSS變複雜了

仍是喜歡手寫css的說。。。。。

引用依樹的發言:

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

webstorm

3.3 嵌套最後
在嵌套的代碼塊內,可使用$引用父元素。好比a:hover僞類,能夠寫成:
應該是 & 代碼中的正確

你好,很感謝您的介紹,只是使用後遇到問題,.scss的文件裏面有中文註釋的時候它會提示Syntax error: Invalid GBK character "\xE5"這樣的錯誤,在網上搜索了一下仍是沒能解決,您知道有啥解決辦法嗎?

引用阮一峯的發言:

Less要靠javascript解析,我不喜歡這種作法。另外,less的變量用@表示,我也不太習慣。

其實less是能夠node.js來編譯生成css,再放到服務器那邊呢。還有,若是 會用gvim的話,那有個腳本,能夠實現語法高亮,保存時自動生成css。原來直接寫css的好處全有了。還有less人性化的書寫方式。less也有工具,能夠將再有css代碼轉換爲less(http://css2less.cc)。我想,若是是設計師的話,更喜歡用less.

只是個預處理器嘛。看了下語法,感受less, scss都不如sass簡潔。看來是python寫慣了,喜歡縮進了。。

less的語法更輕便,喜歡less. Sass的語法太編程化了,雖然沒壓力,可是不給力。沒有解放思惟

不如下劃線開頭的文件也不會被編譯啊
這是爲何呢?
我創建了3個文件colors.scss _widths.scss和test.scss
在test.scss中@import 前兩個文件
而後命令行編譯test.scss時 sass test.scss test.css
不會產生 color.css
這是爲何呢?請教

引用小徐的發言:

不如下劃線開頭的文件也不會被編譯啊
這是爲何呢?
我創建了3個文件colors.scss _widths.scss和test.scss
在test.scss中@import 前兩個文件
而後命令行編譯test.scss時 sass test.scss test.css
不會產生 color.css
這是爲何呢?請教

是否是你編譯命令寫錯了 color那個scss文件是否是沒修改過 默認編譯是隻編譯修改的文件

引用gigi的發言:

你好,很感謝您的介紹,只是使用後遇到問題,.scss的文件裏面有中文註釋的時候它會提示Syntax error: Invalid GBK character "\xE5"這樣的錯誤,在網上搜索了一下仍是沒能解決,您知道有啥解決辦法嗎?

同問

引用shawn的發言:

 

同問

在文件的開頭聲明編碼 @charset "utf-8";

其實能夠用compass工具的,而沒必要要一長串的命令

http://ihavanna.org/internet/2013-08/convert-scss-to-css.html

引用shawn的發言:

同問

@charset "utf-8";
在有中文頂部的地方都聲明一下。注意要放在第一行。

剛開始看 LESS 和 SASS 感受是 LESS 語法更簡單一些但運算功能好像弱一些,打算暫時先用 LESS 逐漸熟悉後再試試 SASS 吧……

工具我在用 LiveReload 和 CodeKit 其實都挺方便,不須要 js 去作 LESS 編譯的。

3.3 嵌套,第四個 code block 上的說明,應是:
「在嵌套的代碼塊內,可使用 & 引用父元素。好比a:hover僞類,能夠寫成:」
原文將 & 寫成了 $

3.3的一個是h1,一個是hi

引用依樹的發言:

sass 和 less 都很好

但有沒有什麼好的編輯器配合啊?

好像用dreamweaver 來寫的話,代碼提示功能就沒了,稍有不便。

以至我還一直沒怎麼嘗試過這種方式

用sublimetext吧~

引用gigi的發言:

你好,很感謝您的介紹,只是使用後遇到問題,.scss的文件裏面有中文註釋的時候它會提示Syntax error: Invalid GBK character "\xE5"這樣的錯誤,在網上搜索了一下仍是沒能解決,您知道有啥解決辦法嗎?

在linux或者Mac下就不會有問題 好比用codekit和grunt就不會有問題

引用hooboy的發言:

 

在linux或者Mac下就不會有問題好比用codekit和grunt就不會有問題

或者給每一個sass文件加上@charset "utf-8"; 只是在Mac或者Linux上寫代碼會比較酷~!

引用gigi的發言:

你好,很感謝您的介紹,只是使用後遇到問題,.scss的文件裏面有中文註釋的時候它會提示Syntax error: Invalid GBK character "\xE5"這樣的錯誤,在網上搜索了一下仍是沒能解決,您知道有啥解決辦法嗎?

官方是這樣說的:
Compass doesn't expose all of its options through the CLI, which this task makes use of. If you need an option not mentioned below you can either specify a path to a config.rb file in the config option or embed it directly into the raw option. Options defined in your Gruntfile will override those specified in your config.rb or raw property. config and raw are mutually exclusive.

因此這個問題很好解決。
compass: {
options: {
config: './config.rb',
}
}

在config.rb compass的配置文件中加一句:
# set the css file encoding
Encoding.default_external = "utf-8"

便可

 sass --watch app/sass:public/stylesheets 這句我怎麼寫怎麼把錯,您能給我解釋下這個路徑

你們能夠裝一個idea編輯器很強大的代碼編輯工具

照着練習了,感謝。

div {
    hi {
      color:red;
    }
  }

此處代碼有誤
應爲
div {
    h1 {
      color:red;
    }
  }

弱弱的問一下,在頁面裏引用的仍是.css文件吧,那在瀏覽器裏調試的話怎麼找到SASS文件

很明顯 SASS 比 LESS 更強大,SASS 擁有條件語句,循環語句還能夠自定義函數

這SASS看起來,仍是很是CSS化呀,呵呵。

請問樓主:我本地安裝好了, 而後在cmd 下面 運行了,確實能夠轉化成正常的css。 
可是scss怎麼在實際項目中使用呢?難道是本身把scss寫好,而後運行好的css再放到網站上去?
仍是在網站打開執行過程當中生成呢?謝謝!

峯哥:
建議開頭加上這一段

sass 有兩種語法
sass有兩種後綴名文件:
一種後綴名爲sass,不使用大括號和分號;
另外一種就是咱們這裏使用的scss文件,這種和咱們平時寫的css文件格式差很少,使用大括號和分號。
​在此也建議使用後綴名爲scss的文件,以免sass後綴名的嚴格格式要求報錯。
由於百度搜索sass,第一個出現就是這篇。

我開始不知道,因此命名爲sass,編譯半天也不對。(其實有兩種語法)

引用輕揚的發言:

仍是喜歡手寫css的說。。。。。

對於以設計爲主,輔作前端的設計師來講,會css已經很不錯了,sass這種編程類的讓我等實在兩難,仍是手寫css算了........
相關文章
相關標籤/搜索