//sass style $fontStack: Helvetica, sans-serif; $primaryColor: #333; body { font-family: $fontStack; color: $primaryColor; } //css style body { font-family: Helvetica, sans-serif; color: #333; }
//sass style nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } } //css style nav ul { margin: 0; padding: 0; list-style: none; } nav li { display: inline-block; } nav a { display: block; padding: 6px 12px; text-decoration: none; }
@import
//sass style //----------------------------------- @mixin box-sizing ($sizing) { -webkit-box-sizing:$sizing; -moz-box-sizing:$sizing; box-sizing:$sizing; } .box-border{ border:1px solid #ccc; @include box-sizing(border-box); } //css style //----------------------------------- .box-border { border: 1px solid #ccc; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
@extend
來實現代碼組合聲明,使代碼更加優越簡潔。
//sass style .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; } //css style .message, .success, .error, .warning { border: 1px solid #cccccc; padding: 10px; color: #333; } .success { border-color: green; } .error { border-color: red; } .warning { border-color: yellow; }
//sass style $linkColor: #08c; a { text-decoration:none; color:$linkColor; &:hover{ color:darken($linkColor,10%); } } //css style a { text-decoration: none; color: #0088cc; } a:hover { color: #006699; }
運算css
sass可進行簡單的加減乘除運算等css3
//sass style .container { width: 100%; } article[role="main"] { float: left; width: 600px / 960px * 100%; } aside[role="complimentary"] { float: right; width: 300px / 960px * 100%; } //css style .container { width: 100%; } article[role="main"] { float: left; width: 62.5%; } aside[role="complimentary"] { float: right; width: 31.25%; }
@import
)規則和CSS的有所不一樣,編譯時會將
@import
的scss文件合併進來只生成一個CSS文件。可是若是你在sass文件中導入css文件如
@import 'reset.css'
,那效果跟普通CSS導入樣式文件同樣,導入的css文件不會合併到編譯後的文件中,而是以
@import
方式存在。全部的sass導入文件均可以忽略後綴名.scss。通常來講基礎的文件命名方法以_開頭,如_mixin.scss。這種文件在導入的時候能夠不寫下劃線,可寫成@import "mixin"。
/* */
,另外一種則是
//
雙斜杆形式的單行註釋,不過這種單行註釋不會被轉譯出來。
//sass style $baseLineHeight: 2; $baseLineHeight: 1.5 !default; body{ line-height: $baseLineHeight; } //css style body{ line-height:2; }
#{$variables}
形式使用。
//sass style $borderDirection: top !default; $baseFontSize: 12px !default; $baseLineHeight: 1.5 !default; //應用於class和屬性 .border-#{$borderDirection}{ border-#{$borderDirection}:1px solid #ccc; } //應用於複雜的屬性值 body{ font:#{$baseFontSize}/#{$baseLineHeight}; } //css style .border-top{ border-top:1px solid #ccc; } body { font: 12px/1.5; }
nth($var,$index)
取值。
//list定義 //一維數據 $px: 5px 10px 20px 30px; //二維數據,至關於js中的二維數組 $px: 5px 10px, 20px 30px; $px: (5px 10px) (20px 30px); //使用 //sass style $linkColor: #08c #333 !default;//第一個值爲默認值,第二個鼠標滑過值 a{ color:nth($linkColor,1); &:hover{ color:nth($linkColor,2); } } //css style a{ color:#08c; } a:hover{ color:#333; }
$map: (key1: value1, key2: value2, key3: value3);
。可經過
map-get($map,$key)
取值, 關於map數據還有不少其餘函數如
map-merge($map1,$map2)
,
map-keys($map)
,
map-values($map)
等
//sass style $headings: (h1: 2em, h2: 1.5em, h3: 1.2em); @each $header, $size in $headings { #{$header} { font-size: $size; } } //css style h1 { font-size: 2em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; }
//sass style $fontSize: 12px; body{ $fontSize: 14px; font-size:$fontSize; } p{ font-size:$fontSize; } //css style body{ font-size:14px; } p{ font-size:14px; }
!global
以後纔會成爲全局變量。
所謂選擇器嵌套指的是在一個選擇器中嵌套另外一個選擇器來實現繼承,從而加強了sass文件的結構性和可讀性。web
&
表示父元素選擇器
//sass style #top_nav{ line-height: 40px; text-transform: capitalize; li{ float:left; } a{ display: block; padding: 0 10px; color: #fff; &:hover{ color:#ddd; } } } //css style #top_nav{ line-height: 40px; text-transform: capitalize; } #top_nav li{ float:left; } #top_nav a{ display: block; padding: 0 10px; color: #fff; } #top_nav a:hover{ color:#ddd; }
//sass style .fakeshadow { border: { style: solid; left: { width: 4px; color: #888; } right: { width: 2px; color: #ccc; } } } //css style .fakeshadow { border-style: solid; border-left-width: 4px; border-left-color: #888; border-right-width: 2px; border-right-color: #ccc; }
//sass style //沒有跳出 .parent-1 { color:#f00; .child { width:100px; } } //單個選擇器跳出 .parent-2 { color:#f00; @at-root .child { width:200px; } } //多個選擇器跳出 .parent-3 { background:#f00; @at-root { .child1 { width:300px; } .child2 { width:400px; } } } //css style .parent-1 { color: #f00; } .parent-1 .child { width: 100px; } .parent-2 { color: #f00; } .child { width: 200px; } .parent-3 { background: #f00; } .child1 { width: 300px; } .child2 { width: 400px; }
//sass style //跳出父級元素嵌套 @media print { .parent1{ color:#f00; @at-root .child1 { width:200px; } } } //跳出media嵌套,父級有效 @media print { .parent2{ color:#f00; @at-root (without: media) { .child2 { width:200px; } } } } //跳出media和父級 @media print { .parent3{ color:#f00; @at-root (without: all) { .child3 { width:200px; } } } } //css style @media print { .parent1 { color: #f00; } .child1 { width: 200px; } } @media print { .parent2 { color: #f00; } } .parent2 .child2 { width: 200px; } @media print { .parent3 { color: #f00; } } .child3 { width: 200px; } @at-root與&配合使用: //sass style .child{ @at-root .parent &{ color:#f00; } } //css style .parent .child { color: #f00; }
//sass style .demo { ... animation: motion 3s infinite; @at-root { @keyframes motion { ... } } } //css style .demo { ... animation: motion 3s infinite; } @keyframes motion { ... }
@mixin
聲明混合,能夠傳遞參數,參數名以$符號開始,多個參數以逗號分開,也能夠給參數設置默認值。聲明的
@mixin
經過
@include
來調用。
//sass style @mixin center-block { margin-left:auto; margin-right:auto; } .demo{ @include center-block; } //css style .demo{ margin-left:auto; margin-right:auto; }
//sass style @mixin opacity($opacity:50) { opacity: $opacity / 100; filter: alpha(opacity=$opacity); } //css style .opacity{ @include opacity; //參數使用默認值 } .opacity-80{ @include opacity(80); //傳遞參數 }
@include
傳入參數的個數小於
@mixin
定義參數的個數,則按照順序表示,後面不足的使用默認值,如不足的沒有默認值則報錯。除此以外還能夠選擇性的傳入參數,使用參數名與值同時傳入。
//sass style @mixin horizontal-line($border:1px dashed #ccc, $padding:10px){ border-bottom:$border; padding-top:$padding; padding-bottom:$padding; } .imgtext-h li{ @include horizontal-line(1px solid #ccc); } .imgtext-h--product li{ @include horizontal-line($padding:15px); } //css style .imgtext-h li { border-bottom: 1px solid #cccccc; padding-top: 10px; padding-bottom: 10px; } .imgtext-h--product li { border-bottom: 1px dashed #cccccc; padding-top: 15px; padding-bottom: 15px; }
$variables...
。
//sass style //box-shadow能夠有多組值,因此在變量參數後面添加... @mixin box-shadow($shadow...) { -webkit-box-shadow:$shadow; box-shadow:$shadow; } .box{ border:1px solid #ccc; @include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3)); } //css style .box{ border:1px solid #ccc; -webkit-box-shadow:0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3); box-shadow:0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3); }
@content
在sass3.2.0中引入,能夠用來解決css3的@media等帶來的問題。它可使
@mixin
接受一整塊樣式,接受的樣式從@content開始。
//sass style @mixin max-screen($res){ @media only screen and ( max-width: $res ) { @content; } } @include max-screen(480px) { body { color: red } } //css style @media only screen and (max-width: 480px) { body { color: red } }
@mixin
經過
@include
調用後解析出來的樣式是以拷貝形式存在的,而下面的繼承則是以聯合聲明的方式存在的,因此從3.2.0版本之後,建議傳遞參數的用
@mixin
,而非傳遞參數類的使用下面的繼承
%
。
@extend
,後面緊跟須要繼承的選擇器
//sass style h1{ border: 4px solid #ff9aa9; } .speaker{ @extend h1; border-width: 2px; } //css style h1,.speaker{ border: 4px solid #ff9aa9; } .speaker{ border-width: 2px; }
%
。這種選擇器的優點在於:若是不調用則不會有任何多餘的css文件,避免了之前在一些基礎的文件中預約義了不少基礎的樣式,而後實際應用中不論是否使用了
@extend
去繼承相應的樣式,都會解析出來全部的樣式。佔位選擇器以
%
標識定義,經過
@extend
調用。
//sass style %ir{ color: transparent; text-shadow: none; border: 0; } %clearfix{ @if $lte7 { *zoom: 1; } &:before, &:after { content: ""; display: table; font: 0/0 a; } &:after { clear: both; } } #header{ h1{ @extend %ir; width:300px; } } .ir{ @extend %ir; } //css style #header h1, .ir{ color: transparent; text-shadow: none; border: 0; } #header h1{ width:300px; }
如上代碼,定義了兩個佔位選擇器%ir
和%clearfix
,其中%clearfix
這個沒有調用,因此解析出來的css樣式也就沒有clearfix部分。佔位選擇器的出現,使css文件更加簡練可控,沒有多餘。因此能夠用其定義一些基礎的樣式文件,而後根據須要調用產生相應的css。chrome
@media
中暫時不能
@extend
@media
外的代碼片斷,之後將會能夠。
lighten($color,$amount)
和
darken($color,$amount)
,它們的第一個參數都是顏色值,第二個參數都是百分比。
//sass style $baseFontSize: 10px !default; $gray: #ccc !defualt; // pixels to rems @function pxToRem($px) { @return $px / $baseFontSize * 1rem; } body{ font-size:$baseFontSize; color:lighten($gray,10%); } .test{ font-size:pxToRem(16px); color:darken($gray,10%); } //css style body{ font-size:10px; color:#E6E6E6; } .test{ font-size:1.6rem; color:#B3B3B3; }
$baseFontSize: 14px !default;
$baseLineHeight: 1.5 !default;
$baseGap: $baseFontSize * $baseLineHeight !default;
$halfBaseGap: $baseGap / 2 !default;
$samllFontSize: $baseFontSize - 2px !default;
//grid
$_columns: 12 !default; // Total number of columns
$_column-width: 60px !default; // Width of a single column
$_gutter: 20px !default; // Width of the gutter
$_gridsystem-width: $_columns * ($_column-width + $_gutter); //grid system width
//sass style $lte7: true; $type: monster; .ib{ display:inline-block; @if $lte7 { *display:inline; *zoom:1; } } p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else if $type == monster { color: green; } @else { color: black; } } //css style .ib{ display:inline-block; *display:inline; *zoom:1; } p { color: green; }
if($condition, $if_true, $if_false)
。三個參數分別表示:條件,條件爲真的值,條件爲假的值
if(true, 1px, 2px) => 1px
if(false, 1px, 2px) => 2px
for循環:
for循環有兩種形式,分別爲:@for $var from <start> through <end>和@for $var from <start> to <end>。$i表示變量,start表示起始值,end表示結束值,這兩個的區別是關鍵字through表示包括end這個數,而to則不包括end這個數。api
//sass style @for $i from 1 through 3 { .item-#{$i} { width: 2em * $i; } } //css style .item-1 { width: 2em; } .item-2 { width: 4em; } .item-3 { width: 6em; }
@each $var in <list or map>
。其中
$var
表示變量,而list和map表示list類型數據和map類型數據。sass 3.3.0新加入了多字段循環和map數據循環。
//sass style $animal-list: puma, sea-slug, egret, salamander; @each $animal in $animal-list { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); } } //css style .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'); }
//sass style $animal-data: (puma, black, default),(sea-slug, blue, pointer),(egret, white, move); @each $animal, $color, $cursor in $animal-data { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); border: 2px solid $color; cursor: $cursor; } } //css style .puma-icon { background-image: url('/images/puma.png'); border: 2px solid black; cursor: default; } .sea-slug-icon { background-image: url('/images/sea-slug.png'); border: 2px solid blue; cursor: pointer; } .egret-icon { background-image: url('/images/egret.png'); border: 2px solid white; cursor: move; }
//sass style $headings: (h1: 2em, h2: 1.5em, h3: 1.2em); @each $header, $size in $headings { #{$header} { font-size: $size; } } //css style h1 { font-size: 2em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; }
// nested #main { color: #fff; background-color: #000; } #main p { width: 10em; } .huge { font-size: 10em; font-weight: bold; text-decoration: underline; } // expanded #main { color: #fff; background-color: #000; } #main p { width: 10em; } .huge { font-size: 10em; font-weight: bold; text-decoration: underline; } // compact #main { color: #fff; background-color: #000; } #main p { width: 10em; } .huge { font-size: 10em; font-weight: bold; text-decoration: underline; } // compressed #main{color:#fff;font-weight:bold;text-decoration:underline}
F12打開調試面板,點擊調試面板右上角的齒輪圖標打開設置,在general
選項中勾選Enable CSS source map
和 Auto-reload generated CSS
。數組
開啓--sourcemap
編譯,f12
打開調試面板,就能夠看到原先右邊的css文件變成了咱們如今的scss文件瀏覽器
點擊scss文件,會跳到source
裏面的scss源文件,如今能夠在裏面進行修改,修改完成後能夠右鍵選擇save
或save as
命令,而後替換咱們本地的scss源文件,刷新chrome就能夠看到變化(注意,解析樣式須要必定時間)。之後只要ctrl+s
保存修改就能夠在瀏覽器中看到修改效果了。sass
firefox能夠安裝插件FireSass使用debug-info
來調試。app
開啓--debug-info
編譯,f12
打開firebug,就能夠看到原先右邊的css文件變成了咱們如今的scss文件koa
sourcemap
,注意是火狐自帶的調試功能,而不是firebug。
--sourcemap
編譯,右鍵「查看元素」採用火狐自帶的調試功能,打開調試面板,在樣式上右鍵選擇「顯示原始來源」。
點擊scss文件,這樣就跳到了scss文件。以下圖:
而後就能夠進行咱們的修改了,修改以後點擊保存或者'ctrl+s'彈出咱們要保存到哪裏,同谷歌同樣直接覆蓋到咱們本地的源文件就ok了。