Sass (Syntactically Awesome Stylesheets)是一種動態樣式語言,Sass語法屬於縮排語法,比css比多出好些功能(如變量、嵌套、運算,混入(Mixin)、繼承、顏色處理,函數等),更容易閱讀。javascript
Sass與Scss是什麼關係?css
Sass的縮排語法,對於寫慣css前端的web開發者來講很不直觀,也不能將css代碼加入到Sass裏面,所以sass語法進行了改良,Sass 3就變成了Scss(sassy css)。與原來的語法兼容,只是用{}取代了原來的縮進。html
Less也是一種動態樣式語言. 對CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. Less 既能夠在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可在服務端運行 (藉助 Node.js)。前端
Sass的安裝須要Ruby環境,是在服務端處理的,而Less是須要引入less.js來處理Less代碼輸出css到瀏覽器,也能夠在開發環節使用Less,而後編譯成css文件,直接放到項目中,也有 Less.app、SimpleLess、CodeKit.app這樣的工具,也有在線編譯地址。java
Less-做用域 @color: #00c; /* 藍色 */ #header { @color: #c00; /* red */ border: 1px solid @color; /* 紅色邊框 */ } #footer { border: 1px solid @color; /* 藍色邊框 */ } Less-做用域編譯後 #header{border:1px solid #cc0000;} #footer{border:1px solid #0000cc;} scss-做用域 $color: #00c; /* 藍色 */ #header { $color: #c00; /* red */ border: 1px solid $color; /* 紅色邊框 */ } #footer { border: 1px solid $color; /* 藍色邊框 */ } Sass-做用域編譯後 #header{border:1px solid #c00} #footer{border:1px solid #c00} 咱們能夠看出來,less和scss中的變量會隨着做用域的變化而不同。
輸出樣式的風格能夠有四種選擇,默認爲nestednode
/* Sample Sass 「if」 statement */ @if lightness($color) > 30% { } @else { } /* Sample Sass 「for」 loop */ @for $i from 1 to 10 { .border-#{$i} { border: #{$i}px solid blue; } }
scss引用的外部文件命名必須以_開頭, 以下例所示:其中_test1.scss、_test2.scss、_test3.scss文件分別設置的h1 h2 h3。文件名若是如下劃線_開頭的話,Sass會認爲該文件是一個引用文件,不會將其編譯爲css文件.git
// 源代碼: @import "_test1.scss"; @import "_test2.scss"; @import "_test3.scss";
// 編譯後: h1 { font-size: 17px; } h2 { font-size: 17px; } h3 { font-size: 17px; }
Less引用外部文件和css中的@import沒什麼差別。github
Sass有工具庫Compass, 簡單說,Sass和Compass的關係有點像Javascript和jQuery的關係,Compass是Sass的工具庫。在它的基礎上,封裝了一系列有用的模塊和模板,補充強化了Sass的功能。web
Less有UI組件庫Bootstrap,Bootstrap是web前端開發中一個比較有名的前端UI組件庫,Bootstrap的樣式文件部分源碼就是採用Less語法編寫。express
不論是Sass,仍是Less,均可以視爲一種基於CSS之上的高級語言,其目的是使得CSS開發更靈活和更強大,Sass的功能比Less強大,基本能夠說是一種真正的編程語言了,Less則相對清晰明瞭,易於上手,對編譯環境要求比較寬鬆。考慮到編譯Sass要安裝Ruby,而Ruby官網在國內訪問不了,我的在實際開發中更傾向於選擇Less。
gulp
gulp是前端開發過程當中對代碼進行構建的工具,是自動化項目的構建利器;她不只能對網站資源進行優化,並且在開發過程當中不少重複的任務可以使用正確的工具自動完成;使用她,咱們不只能夠很愉快的編寫代碼,並且大大提升咱們的工做效率。
gulp是基於Nodejs的自動任務運行器, 她能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合併、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動後重復指定的這些步驟。在實現上,她借鑑了Unix操做系統的管道(pipe)思想,前一級的輸出,直接變成後一級的輸入,使得在操做上很是簡單。經過本文,咱們將學習如何使用Gulp來改變開發流程,從而使開發更加快速高效。
gulp 和 grunt 很是相似,但相比於 grunt 的頻繁 IO 操做,gulp 的流操做,能更快地更便捷地完成構建工做。
本示例以gulp-less爲例(將less編譯成css的gulp插件)展現gulp的常規用法,只要咱們學會使用一個gulp插件後,其餘插件就差看看其幫助文檔了。讓咱們一塊兒來學習gulp吧! ^_^
gulp經常使用地址:
gulp官方網址:http://gulpjs.com
gulp插件地址:http://gulpjs.com/plugins
gulp 官方API:https://github.com/gulpjs/gulp/blob/master/docs/API.md
gulp 中文API:http://www.ydcss.com/archives/424
目錄:
在學習前,先談談大體使用gulp的步驟,給讀者以初步的認識。首先固然是安裝nodejs,經過nodejs的npm全局安裝和項目安裝gulp,其次在項目裏安裝所須要的gulp插件,而後新建gulp的配置文件gulpfile.js並寫好配置信息(定義gulp任務),最後經過命令提示符運行gulp任務便可。
安裝nodejs -> 全局安裝gulp -> 項目安裝gulp以及gulp插件 -> 配置gulpfile.js -> 運行任務
1.一、說明:gulp是基於nodejs,理所固然須要安裝nodejs;
1.二、安裝:打開nodejs官網,點擊碩大的綠色Download按鈕,它會根據系統信息選擇對應版本(.msi文件)。而後像安裝QQ同樣安裝它就能夠了(安裝路徑隨意)。
2.一、說明:什麼是命令行?命令行在OSX是終端(Terminal),在windows是命令提示符(Command Prompt);
2.二、注:以後操做都是在windows系統下;
2.三、簡單介紹gulp在使用過程當中經常使用命令,打開命令提示符執行下列命令(打開方式:window + r 輸入cmd回車):
node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。PS:未能出現版本號,請嘗試註銷電腦重試;
npm -v查看npm的版本號,npm是在安裝nodejs時一同安裝的nodejs包管理器,那它有什麼用呢?稍後解釋;
cd定位到目錄,用法:cd + 路徑 ;
dir列出文件列表;
cls清空命令提示符窗口內容。
3.一、說明:npm(node package manager)nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等);
3.二、使用npm安裝插件:命令提示符執行npm install <name> [-g] [--save-dev]
;
3.2.一、<name>:node插件名稱。例:npm install gulp-less --save-dev
3.2.二、-g:全局安裝。將會安裝在C:\Users\Administrator\AppData\Roaming\npm
,而且寫入系統環境變量; 非全局安裝:將會安裝在當前定位目錄; 全局安裝能夠經過命令行在任何地方調用它,本地安裝將安裝在定位目錄的node_modules文件夾下,經過require()調用;
3.2.三、--save
:將保存配置信息至package.json(package.json是nodejs項目配置文件);
3.2.四、-dev:保存至package.json的devDependencies節點,不指定-dev將保存至dependencies節點;通常保存在dependencies的像這些express/ejs/body-parser等等。
3.2.五、爲何要保存至package.json?由於node插件包相對來講很是龐大,因此不加入版本管理,將配置信息寫入package.json並將其加入版本管理,其餘開發者對應下載便可(命令提示符執行npm install,則會根據package.json下載全部須要的包,npm install --production
只下載dependencies節點的包)。
3.三、使用npm卸載插件:npm uninstall <name> [-g] [--save-dev]
PS:不要直接刪除本地插件包
3.3.一、刪除所有插件:npm uninstall gulp-less gulp-uglify gulp-concat ……???太麻煩
3.3.二、藉助rimraf:npm install rimraf -g 用法:rimraf node_modules
3.四、使用npm更新插件:npm update <name> [-g] [--save-dev]
3.4.一、更新所有插件:npm update [--save-dev]
3.五、查看npm幫助:npm help
3.六、當前目錄已安裝插件:npm list
PS:npm安裝插件過程:從http://registry.npmjs.org下載對應的插件包(該網站服務器位於國外,因此常常下載緩慢或出現異常),解決辦法往下看↓↓↓↓↓↓。
4.一、說明:由於npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常,若是npm的服務器在中國就行了,因此咱們樂於分享的淘寶團隊幹了這事。32個!來自官網:「這是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步。」;
4.二、官方網址:http://npm.taobao.org;
4.三、安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org
; 注意:安裝完後最好查看其版本號cnpm -v或關閉命令提示符從新打開,安裝完直接使用有可能會出現錯誤;
注:cnpm跟npm用法徹底一致,只是在執行命令時將npm改成cnpm(如下操做將以cnpm代替npm)。
5.一、說明:全局安裝gulp目的是爲了經過她執行gulp任務;
5.二、安裝:命令提示符執行cnpm install gulp -g;
5.三、查看是否正確安裝:命令提示符執行gulp -v,出現版本號即爲正確安裝。
6.一、說明:package.json是基於nodejs項目必不可少的配置文件,它是存放在項目根目錄的普通json文件;
6.二、它是這樣一個json文件(注意:json文件內是不能寫註釋的,複製下列內容請刪除註釋):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"name": "test", //項目名稱(必須)
"version": "1.0.0", //項目版本(必須)
"description": "This is for study gulp project !", //項目描述(必須)
"homepage": "", //項目主頁
"repository": { //項目資源庫
"type": "git",
"url": "https://git.oschina.net/xxxx"
},
"author": { //項目做者信息
"name": "surging",
"email": "surging2@qq.com"
},
"license": "ISC", //項目許可協議
"devDependencies": { //項目依賴的插件
"gulp": "^3.8.11",
"gulp-less": "^3.0.0"
}
}
|
6.三、固然咱們能夠手動新建這個配置文件,可是做爲一名有志青年,咱們應該使用更爲效率的方法:命令提示符執行cnpm init
6.四、查看package.json幫助文檔,命令提示符執行cnpm help package.json
特別注意:package.json是一個普通json文件,因此不能添加任何註釋。參看 http://www.zhihu.com/question/23004511
7.一、安裝:定位目錄命令後提示符執行cnpm install --save-dev
;
7.二、本示例以gulp-less爲例(編譯less文件),命令提示符執行cnpm install gulp-less --save-dev
;
7.三、將會安裝在node_modules的gulp-less目錄下,該目錄下有一個gulp-less的使用幫助文檔README.md;
7.四、爲了能正常使用,咱們還得本地安裝gulp:cnpm install gulp --save-dev
;
PS:細心的你可能會發現,咱們全局安裝了gulp,項目也安裝了gulp,全局安裝gulp是爲了執行gulp任務,本地安裝gulp則是爲了調用gulp插件的功能。
8.一、說明:gulpfile.js是gulp項目的配置文件,是位於項目根目錄的普通js文件(其實將gulpfile.js放入其餘文件夾下亦可)。
8.二、它大概是這樣一個js文件(更多插件配置請查看這裏):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//導入工具包 require('node_modules裏對應模塊')
var gulp = require('gulp'), //本地安裝gulp所用到的地方
less = require('gulp-less');
//定義一個testLess任務(自定義任務名稱)
gulp.task('testLess', function () {
gulp.src('src/less/index.less') //該任務針對的文件
.pipe(less()) //該任務調用的模塊
.pipe(gulp.dest('src/css')); //將會在src/css下生成index.css
});
gulp.task('default',['testLess', 'elseTask']); //定義默認任務 elseTask爲其餘任務,該示例沒有定義elseTask任務
//gulp.task(name[, deps], fn) 定義任務 name:任務名稱 deps:依賴任務名稱 fn:回調函數
//gulp.src(globs[, options]) 執行任務處理的文件 globs:處理的文件路徑(字符串或者字符串數組)
//gulp.dest(path[, options]) 處理完後文件生成路徑
|
8.三、該示例文件請下載查看
9.一、說明:命令提示符執行gulp 任務名稱;
9.二、編譯less:命令提示符執行gulp testLess;
9.三、當執行gulp default或gulp將會調用default任務裏的全部任務[‘testLess’,’elseTask’]。
10.一、說明:使用webstorm可視化運行gulp任務;
10.二、使用方法:將項目導入webstorm,右鍵gulpfile.js 選擇」Show Gulp Tasks」打開Gulp窗口,若出現」No task found」,選擇右鍵」Reload tasks」,雙擊運行便可。
11.一、安裝nodejs;
11.二、新建package.json文件;
11.三、全局和本地安裝gulp;
11.四、安裝gulp插件;
11.五、新建gulpfile.js文件;
11.六、經過命令提示符運行gulp任務。