SCSS語法 - @at-root、@include、Mixin Directives
一、@Rules and Directives
1、@at-root
在@at-root指示詞範圍內,其樣式在編譯後將獨立出來,
並不會被包在父層裡面。
scss輸入
.error { border: 1px #f00; background-color: #fdd; @at-root { .child { color: red; } } }
css輸出
.error { border: 1px #f00; background-color: #fdd; } .child { color: red; }
在@media裡面則使用@at-root指示詞加上「(with)或(without)」則可以達成不同目地,羅列如下
a、
scss輸入
@media print { .error { border: 1px #f00; background-color: #fdd; @at-root (without: rule) { .child { color: red; } } } }
css輸出
@media print { .error { border: 1px #f00; background-color: #fdd; } .child { color: red; } }
b、
scss輸入
@media print { .error { border: 1px #f00; background-color: #fdd; @at-root (without: media) { .child { color: red; } } } }
css輸出
@media print { .error { border: 1px #f00; background-color: #fdd; } } .error .child { color: red; }
c、
scss輸入
@media print { .error { border: 1px #f00; background-color: #fdd; @at-root (without: all) { .child { color: red; } } } }
css輸出
@media print { .error { border: 1px #f00; background-color: #fdd; } } .child { color: red; }
2、@debug、@warn、@error
@debug、@warn、@error這三個指示詞都對於scss偵錯都很有幫助,暫不舉例。
二、Miinx directive
@mixin指示詞的用途類似「方法」,需搭配@include使用,
可以跟@extend、function比較看看。
scss輸入
/*裡面可以只放屬性*/ @mixin red-property { color: red; }.page-title {
@include red-property;
}/裡面可以包含元素/
@mixin red-element {
p {
color: red;
}
}.page-title2 {
@include red-element;
}/可以單獨使用include/
@include red-element;
css輸出
@charset "UTF-8"; /*裡面可以只放屬性*/ .page-title { color: red; }/裡面可以包含元素/
.page-title2 p {
color: red;
}/可以單獨使用include/
p {
color: red;
}
另外@include也可以配合參數使用
scss輸入
@mixin mack-color($value) { color: $value; }.box {
@include mack-color(#fff);
}
css輸出
.box { color: #fff; }
對於所定義的參數可以設定預設值
scss輸入
@mixin mack-color($value, $width: 100px) { color: $value; width: $width; }.box {
@include mack-color(#fff);
}
css輸出
.box { color: #fff; width: 100px; }
可以特別註明參數名稱
scss輸入
@mixin mack-color($value, $width: 100px) { color: $value; width: $width; }.box {
@include mack-color($value:#fff);
}
css輸出
.box { color: #fff; width: 100px; }
Variable Arguments
如果參數是變動的,可以使用如「$args...」形式放入@mixin來代入
scss輸入
@mixin box-shadow($shadows...) { -moz-box-shadow: $shadows; -webkit-box-shadow: $shadows; box-shadow: $shadows; }.shadows {
@include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
css輸出
.shadows { -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; }
另一種「$args...」是放在@include裡
scss輸入
@mixin colors($text, $background, $border) { color: $text; background-color: $background; border-color: $border; }$values: #ff0000, #00ff00, #0000ff;
.primary {
@include colors($values…);
}$value-map: (text: #00ff00, background: #0000ff, border: #ff0000);
.secondary {
@include colors($value-map…);
}
css輸出
.primary { color: #ff0000; background-color: #00ff00; border-color: #0000ff; }.secondary {
color: #00ff00;
background-color: #0000ff;
border-color: #ff0000;
}
另一種「$args...」例子
scss輸入
@mixin stylish-mixin($color,$width) { color: $color; width: width; }@mixin wrapped-stylish-mixin($args…) {
font-weight: bold;
@include stylish-mixin($args…);
}.stylish {
@include wrapped-stylish-mixin(#00ff00, $width: 100px);
}
css輸出
.stylish { font-weight: bold; color: #00ff00; width: width; }
可以利用@content指示詞來把@include指定的內容代入
scss輸入
@mixin apply-to-ie6-only { p { @content; } }@include apply-to-ie6-only {
#logo {
background-image: url(/logo.gif);
}
}
css輸出
p #logo { background-image: url(/logo.gif); }
@content指示詞與變數範圍的關係
scss輸入
$color: white;@mixin colors($color: blue) {
background-color: $color;
@content;
border-color: $color;
}.colors {
@include colors {
color: $color;
}
}
css輸出
.colors { background-color: blue; color: white; border-color: blue; }
參考資料: