目錄
-
- 一、CSS 功能拓展
-
-
- 1、允許嵌套
- 2、父選擇器 &
- 3、屬性嵌套
- 4、占位符選擇器 %
-
- 二、注釋 /* */ 與 //
- 三、SassScript
-
-
- 1、變量 $
- 2、運算
- 3、圓括号
-
- 四、@-Rules 與指令
-
-
- 1、@import
- 2、@media
- 3. @extend繼承
-
- 五、控制指令
-
-
- 1、@if
- 2、@for
-
Scss (Sassy CSS),一款css預處理語言,SCSS 是 Sass 3 引入新的文法,其文法完全相容 CSS3,并且繼承了 Sass 的強大功能。也就是說,任何标準的 CSS3 樣式表都是具有相同語義的有效的 SCSS 檔案。SCSS 需要使用分号和花括号而不是換行和縮進。SCSS 對空白符号不敏感,其實就和css3文法一樣,其字尾名是分别為 .scss。
一、CSS 功能拓展
1、允許嵌套
允許将一套 CSS 樣式嵌套進另一套樣式中,内層的樣式将它外層的選擇器作為父選擇器,例如:
.main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;
}
}
2、父選擇器 &
在嵌套 CSS 規則時,有時也需要直接使用嵌套外層的父選擇器,例如,當給某個元素設定 hover 樣式時,或者當 body 元素有某個 classname 時,可以用 & 代表嵌套規則外層的父選擇器。
a {
font-weight: bold;
text-decoration: none;
&:hover { text-decoration: underline; }
body.firefox & { font-weight: normal; }
}
// 編譯為
a {
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body.firefox a {
font-weight: normal;
}
3、屬性嵌套
有些 CSS 屬性遵循相同的命名空間 (namespace),比如 font-family, font-size, font-weight 都以 font 作為屬性的命名空間。為了便于管理這樣的屬性,同時也為了避免了重複輸入,Sass 允許将屬性嵌套在命名空間中,例如:
.funky {
font: {
family: fantasy;
size: 30em;
weight: bold;
}
}
//編譯為
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold;
}
4、占位符選擇器 %
Sass 額外提供了一種特殊類型的選擇器:占位符選擇器 (placeholder selector)。與常用的 id 與 class 選擇器寫法相似,隻是 # 或 . 替換成了 %。必須通過 @extend 指令調用。(在下面@extend子產品舉例子)
二、注釋 /* */ 與 //
支援标準的 CSS 多行注釋 /* */,以及單行注釋 //,前者會 被完整輸出到編譯後的 CSS 檔案中,而後者則不會
/* This comment is
* several lines long. */
body { color: black; }
// These comments are only one line long each.
a { color: green; }
//編譯為
/* This comment is
* several lines long. */
body { color: black; }
a { color: green; }
三、SassScript
1、變量 $
SassScript 最普遍的用法就是變量,變量以美元符号開頭,指派方法與 CSS 屬性的寫法一樣:
$width: 5em;
.main {
width: $width;
}
// 編譯為
.main {
width: 5em;
}
2、運算
所有資料類型均支援相等運算 == 或 !=,此外,每種資料類型也有其各自支援的運算方式。
p { width: 1in + 8pt; }
// 編譯為
p { width: 1.111in; }
p {
font: 10px/8px; // Plain CSS, no division
$width: 1000px;
width: $width/2; // Uses a variable, does division
width: round(1.5)/2; // Uses a function, does division
height: (500px/2); // Uses parentheses, does division
margin-left: 5px + 8px/2px; // Uses +, does division
}
//編譯為
p {
font: 10px/8px;
width: 500px;
height: 250px;
margin-left: 9px;
}
p { color: #010203 + #040506; }
// 計算 01 + 04 = 05 02 + 05 = 07 03 + 06 = 09,然後編譯為
p { color: #050709; }
p { color: #010203 * 2; }
// 計算 01 * 2 = 02 02 * 2 = 04 03 * 2 = 06,然後編譯為
p { color: #020406; }
p { margin: 3px + 4px auto; }
// 編譯為
p { margin: 7px auto; }
p:before { content: "I ate #{5 + 10} pies!"; }
//編譯為
p:before { content: "I ate 15 pies!"; }
$value: null;
p:before { content: "I ate #{$value} pies!"; }
// 空的值被視作插入了空字元串,編譯為
p:before { content: "I ate pies!"; }
3、圓括号
p { width: 1em + (2em * 3); }
// 編譯為
p { width: 7em; }
四、@-Rules 與指令
1、@import
@import "foo.scss"; //引入外部樣式
假設 example.scss 檔案包含以下樣式:
.example { color: red; }
然後導入到 #main 樣式内
#main { @import “example”; }
将會被編譯為
#main .example { color: red; }
2、@media
.sidebar { width: 300px; @media screen and (orientation:
landscape) {
width: 500px; } }
3. @extend繼承
@extend讓你能夠在多個選擇器中通過繼承的方式共享一段樣式:
.icon {
transition: background-color ease .2s;
margin: 0 .5em;
}
.error-icon {
@extend .icon;
/* error specific styles... */
}
.info-icon {
@extend .icon;
/* info specific styles... */
}
//編譯為
.icon, .error-icon, .info-icon {
transition: background-color ease .2s;
margin: 0 .5em;
}
.error-icon {
/* error specific styles... */
}
.info-icon {
/* info specific styles... */
}
如果你不想要.icon這個類,那就改為%icon,将編譯為
.error-icon, .info-icon {
transition: background-color ease .2s;
margin: 0 .5em;
}
.error-icon {
/* error specific styles... */
}
.info-icon {
/* info specific styles... */
}
五、控制指令
1、@if
當 @if 的表達式傳回值不是 false 或者 null 時,條件成立,輸出 {} 内的代碼:
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 聲明。如果 @if 聲明失敗,Sass 将逐條執行 @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; }
2、@for
@for $i from 1 through 3 {
.item-#{$i} { width: 2em * $i; }
}
//編譯為
.item-1 { width: 2em; }
.item-2 { width: 4em; }
.item-3 { width: 6em; }