$link-color: blue; a { color: $link_color; } //編譯後 a { color: blue; }
#content { article { h1 { color: #333 } p { margin-bottom: 1.4em } } aside { background-color: #EEE } }
編譯後:css
/* 編譯後 */ #content article h1 { color: #333 } #content article p { margin-bottom: 1.4em } #content aside { background-color: #EEE }
article a { color: blue; &:hover { color: red } //&至關於article a }
&
被父選擇器直接替換html
article a { color: blue } article a:hover { color: red }
#content aside { color: red; body.ie & { color: green } }
翻譯後:web
/*編譯後*/ #content aside {color: red}; body.ie #content aside { color: green }
nav, aside { a {color: blue} }
編譯後:瀏覽器
article { ~ article { border-top: 1px dashed #ccc } > section { background: #eee } dl > { dt { color: #333 } dd { color: #555 } } nav + & { margin-top: 0 } }
編譯後:sass
article ~ article { border-top: 1px dashed #ccc } article > footer { background: #eee } article dl > dt { color: #333 } article dl > dd { color: #555 } nav + article { margin-top: 0 }
nav { border: 1px solid #ccc { left: 0px; right: 0px; } }
編譯後:ide
nav { border: 1px solid #ccc; border-left: 0px; border-right: 0px; }
css
有一個特別不經常使用的特性,即@import
規則,它容許在一個css
文件中導入其餘css
文件。然而,後果是隻有執行到@import
時,瀏覽器纔會去下載其餘css
文件,這致使頁面加載起來特別慢。spa
sass
也有一個@import
規則,但不一樣的是,sass
的@import
規則在生成css
文件時就把相關文件導入進來。這意味着全部相關的樣式被概括到了同一個css
文件中,而無需發起額外的下載請求。另外,全部在被導入文件中定義的變量和混合器都可在導入文件中使用。翻譯
使用sass
的@import
規則並不須要指明被導入文件的全名。你能夠省略.sass
或.scss
文件後綴3d
sass
局部文件的文件名如下劃線開頭。這樣,sass
就不會在編譯時單獨編譯這個文件輸出css
,而只把這個文件用做導入。當你@import
一個局部文件時,還能夠不寫文件的全名,即省略文件名開頭的下劃線。舉例來講,你想導入themes/_night-sky.scss
這個局部文件裏的變量,你只需在樣式表中寫@import
"themes/night-sky";
code
sass
的!default
$fancybox-width: 400px !default; .fancybox { width: $fancybox-width; }
有一個名爲_blue-theme.scss
的局部文件,內容以下:
aside { background: blue; color: white; }
把它導入到一個css規則內:
.blue-theme {@import "blue-theme"} //生成的結果跟你直接在.blue-theme選擇器內寫_blue-theme.scss文件的內容徹底同樣。 .blue-theme { aside { background: blue; color: #fff; } }
把原始的css
文件更名爲.scss
後綴,便可直接導入了。
css標準註釋格式: /*.......*/
靜默註釋: //
body { color: #333; // 這種註釋內容不會出如今生成的css文件中 padding: 0; /* 這種註釋內容會出如今生成的css文件中 */ }
混合器——實現大段樣式的重用
變量——實現比較小的樣式的複用,好比樣式、顏色等
@mixin rounded-corners { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
notice { background-color: green; border: 2px solid #00aa00; @include rounded-corners; }
.notice { background-color: green; border: 2px solid #00aa00; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
@mixin no-bullets { list-style: none; li { list-style-image: none; list-style-type: none; margin-left: 0px; } }
ul.plain { color: #444; @include no-bullets; }
ul.plain { color: #444; list-style: none; } ul.plain li { list-style-image: none; list-style-type: none; margin-left: 0px; }
@mixin link-colors($normal, $hover, $visited) { color: $normal; &:hover { color: $hover; } &:visited { color: $visited; } }
a { @include link-colors(blue, red, green); } //Sass最終生成的是: a { color: blue; } a:hover { color: red; } a:visited { color: green; }
@mixin link-colors( $normal, $hover: $normal, $visited: $normal ) { color: $normal; &:hover { color: $hover; } &:visited { color: $visited; } }
經過@extend
語法實現
.error { border: 1px solid red; background-color: #fdd; } .seriousError { @extend .error; border-width: 3px; }
在上邊的代碼中,.seriousError
將會繼承樣式表中任何位置處爲.error
定義的全部樣式。以class="seriousError"
修飾的html
元素最終的展現效果就好像是class="seriousError error"
。相關元素不只會擁有一個3px
寬的邊框,並且這個邊框將變成紅色的,這個元素同時還會有一個淺紅色的背景,由於這些都是在.error
裏邊定義的樣式。
.seriousError
不只會繼承.error
自身的全部樣式,任何跟.error
有關的組合選擇器樣式也會被.seriousError
以組合選擇器的形式繼承,以下代碼:
//.seriousError從.error繼承樣式 .error a{ //應用到.seriousError a color: red; font-weight: 100; } h1.error { //應用到hl.seriousError font-size: 1.2rem; }