基礎(chǔ)
- 聲明變量
- 普通變量
$fontSize:12px;
- 默認變量
$fontSize:12px; !default;
變量覆蓋:只需要在默認變量之前重新聲明下變量即可
$fontSize:14px;
$fontSize:12px; !default;
- 變量的調(diào)用
$fontSize:14px;
.demotest{
font-size:$fontSize;
}
- 局部變量和全局變量
全局變量就是定義在元素外面的變量
$color:orange !default; //定義全局變量
.block{
color:$color; //調(diào)用全局變量;
}
.em{
$color:red; //定義局部變量
a{
color:$color;//調(diào)用局部變量
}
}
- 嵌套
1、選擇器嵌套
比如實現(xiàn)下面的css
nav a {
color:red;
}
header nav a {
color:green;
}
在sass,就可以使用選擇器嵌套來實現(xiàn)
nav {
a {
color:red;
header & { //& 符是對當前選擇器的引用
color:green;
}
}
}
2、屬性嵌套
比如實現(xiàn)下面的css
//css有一些屬性前綴相同,只是后綴不一樣
//比如: border、margin、padding、font等
.box{
border-top:1px solid #eee;
border-bottom:1px solid #ddd;
}
在sass,就可以使用使用屬性嵌套實現(xiàn)
.box{
border:{
top:1px solid #eee;
bottom:1px solid #ddd;
}
}
3、偽類嵌套
偽類嵌套和屬性嵌套非常類似,只不過偽類嵌套需要借助'&'符合配合使用
比如寫個大家都熟悉的clearfix
.clearfix {
display: block;
&:after{
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
}
編譯出來的css
.clearfix {
display: block;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
- 混合宏-聲明混合宏
需要重復(fù)使用大段樣式時,使用變量無法達到目的時就使用混合宏-使用@mixin
來聲明一個混合宏。個人建議:如果你的代碼塊中涉及到變量,建議使用混合宏來創(chuàng)建相同的代碼塊。
1、不帶參數(shù)混合宏
@mixin border-radius{
-webkit-border-radius: 5px;
border-radius: 5px;
}
2、帶參數(shù)混合宏
a) 傳一個不帶值的參數(shù)
@mixin border-radius($radius){
-webkit-border-radius: $radius;
border-radius: $radius;
}
b)傳一個帶值的參數(shù)
@mixin border-radius($radius:5px){
-webkit-border-radius: $radius;
border-radius: $radius;
}
c)傳多個參數(shù)
@mixin center($width,$height){
margin-top: -($height) / 2;
margin-left: -($width) / 2;
}
3、復(fù)雜的混合宏
//帶有多個參數(shù)時,可以使用"..."來替代
@mixin box-shadow($shadow...){
@if length($shadow) >= 1{
@include prefixer(box-shadow,$shadow);
}@else{
$shadow:0 0 4px rgba(0,0,0,.3);
@include prefixer(box-shadow,$shadow);
}
}
- 混合宏-調(diào)用混合宏
使用@include
來調(diào)用聲明好的混合宏
//調(diào)用上面不帶參數(shù)的混合宏
.button{
@include border-radius;
}
//調(diào)用傳一個不帶值的參數(shù)
.button{
@include border-radius(4px);
}
- 繼承
通過關(guān)鍵詞@extend
來繼承已存在的類樣式塊,從而實現(xiàn)代碼的繼承。個人建議:如果你的代碼塊不需要專任何變量參數(shù),而且有一個基類已在文件中存在,那么建議使用 Sass 的繼承。
.btn {
border: 1px solid #ccc;
padding: 6px 10px;
}
.btn-primary {
background-color: #f36;
@extend .btn;
}
編譯出來后
.btn, .btn-primary{
border: 1px solid #ccc;
padding: 6px 10px;
}
.btn-primary {
background-color: #f36;
}
- 占位符 %placeholder
%placeholder 聲明的代碼,如果不被@extend
調(diào)用的話,不會產(chǎn)生任何代碼
%mt5{
margin-top:5px;
}
%pt5{
padding-top:5px;
}
上面這段代碼沒有被@extend
調(diào)用,不產(chǎn)生任何代碼塊
%mt5{
margin-top:5px;
}
%pt5{
padding-top:5px;
}
.btn {
@extend %mt5;
@extend %pt5;
}
.block {
@extend %mt5;
span {
@extend %pt5;
}
}
被@extend
調(diào)用后,編譯出來的css(編譯出來的代碼會將相同的代碼合并在一起
.btn, .block {
margin-top: 5px;
}
.btn, .block span {
padding-top: 5px;
}
- 混合宏 vs 繼承 vs 占位符
個人建議使用時,遵循適合最好的原則,不要濫用。如果比較圖片無法顯示,請點擊鏈接查看http://img.mukewang.com/55263aa30001913307940364.jpg
- 插值#{}
插值--通常是指變量插值,或者變量替換,Sass是基于Ruby的,它使用 ${}進行表達式替換
$description:"awesome";
@warn "this is #{$description} "
//輸出 this is awesome
需要注意的是,變量中的$不能像PHP一樣丟掉。變量被#{}包裹了起來。另外值得一提的是:你可以插入任何類型的變量,不僅僅是字符串
什么時候應(yīng)該使用插值?
1、字符串-最常見的變量替換場景:打印字符串中變量的內(nèi)容
情景1
//假設(shè)你有一組叫$colors名的顏色映射(映射是指一個存儲了一系列 key/value 組合的變量),但你已經(jīng)受夠了一次又一次地敲 map-get($colors, ...)。所以,你寫了一個簡單的color()函數(shù),使用key去獲得相應(yīng)的值
$colors: (
"primary": tomato,
"secondary": hotpink
);
@function color($key) {
@return map-get($colors, $key);
}
.el {
background-color: color(primary);
}
現(xiàn)在,當你敲錯名稱,或者去取一個不存在的key時,你想給出哪個key沒有找到錯誤的信息。
調(diào)用color(awesomeness)
@function color($key) {
@if not map-has-key($colors,$key) {
@warn "key '#{$key}' not found in $colors map.";
}
@return map-get($colors , $key);
在這個場景里,由于這個$colors變量沒有使用插值,它將打印以下信息:
Key awesomeness not found in $colors map.
2、css函數(shù)-css函數(shù)中的變量,如calc(),url()等
情景1:
$sidebar-width: 250px;
.main {
width: calc(100% - $sidebar-width);
}
//你會驚訝地發(fā)現(xiàn),根本不work。沒有報錯,容器的大小卻又不正確。如果你去審查你的dom元素,你會看到這個 — 被劃掉了。因為,這是不合法的
//因為calc()是一個CSS函數(shù),不是一個Sass函數(shù)。這就是說Sass會將整個表達式解釋成一個字符串
$type-of-expression: type-of(calc(100% - $sidebar-width)); // string
.main{
width:calc(100% - #{$sidebar-width});
}
//$sidebar-width被認為是一個常規(guī)字符串,所以打出來就是它自己,當我們用插值這樣做時,Sass編譯這個樣式文件時,它會用#{$sidebar-width}的值,即
.main {
width: calc(100% - 250px);
}
情景2
@for $i from 1 through $max {
.el:nth-of-type(#{$i}) {
...
}
}
//for循環(huán)和:nth-*()選擇器一起使用。再一次說明,你需要使用插值變量,才能最終得到想得到的結(jié)果
Sass會把CSS函數(shù)認為是字符串,所以想要在最后獲得它們的值,要求你轉(zhuǎn)義所有同它們一起使用的變量
3、css指令-如 @support , @page , @media
//如果你的變量在@media字符串后面,需要使用插值才可以
$value : screen;
@media #{$value} {
...
}
//如果@media后面緊跟(),你就不再需要插值變量里,因為sass會求出所有在這些括號里的值
$value: 1336px;
@media (max-width: $value) {
...
}
4、選擇器-使用變量作為一個選擇器,或者選擇器的一部分
$value : cunstom;
selector-#{$value} {
property : value;
}
數(shù)據(jù)類型
1、數(shù)字:如,12、12px
2、字符串:如,jill、"jill"
3、顏色:如,blue、#ddd、rgba(0,0,0,.3)
4、布爾值
5、空值
6、值列表:如,1.5rem 1rem 0 、1.5rem,1rem,0數(shù)學運算-單位最好一致(函數(shù)中有不同單位,將會報錯)
1、加法
.box{
width : 20rem + 1rem;
}
2、減法
$full-width: 960px;
$sidebar-width: 200px;
.content {
width: $full-width - $sidebar-width;
}
3、乘法
注意:兩個值單位相同時,只需要為一個數(shù)值提供單位即可,單位不一致,也會報錯哦
.box { width:10px * 2px; } //20px*px isn't a valid CSS value.
.box { width: 20px * 2em;}//40em*px isn't a valid CSS value.
.box { width: 10px * 2;}//ok
4、除法
”/ ”符號被當作除法運算符時有以下幾種情況:
a 如果數(shù)值或它的任意部分是存儲在一個變量中或是函數(shù)的返回值。
b 如果數(shù)值被圓括號包圍。
c 如果數(shù)值是另一個數(shù)學表達式的一部分。
p {
font: 10px/8px; // 純 CSS,不是除法運算
$width: 1000px;width: $width/2; // 使用了變量,是除法運算
width: round(1.5)/2; // 使用了函數(shù),是除法運算
width:(1000 / 100px);//?
height: (500px/2); // 使用了圓括號,是除法運算
margin-left: 5px + 8px/2px; // 使用了加(+)號,是除法運算
width: (1000px / 100px); //如果兩個值帶有相同的單位值時,除法運算之后會得到一個不帶單位的數(shù)值
}
- 字符運算
1、通過加法符號“+”來對字符串進行連接
$content: "Hello" + "" + "Sass!";
.box:before {
content: " #{$content} ";
}
//編譯后
.box:before {
content: " Hello Sass! ";
}
2、通過 +,把字符連接在一起
div {
cursor: e + -resize;
}
//編譯后
div {
cursor: e-resize;
}
控制命令
- @if
//控制一個元素隱藏或顯示
@mixin blockOrHidden($boolean:true) {
@if $boolean {
@debug "$boolean is #{$boolean}";
display:block;
}
@else {
@debug "$boolean is #{$boolean}";
display:none;
}
//編譯后
.block {
display: block;
}
.hidden {
display: none;
}
- for循環(huán)
在sass的@for有兩種方式
//$i 表示變量,start 表示起始值,end 表示結(jié)束值
@for $i from <start> through <end>//關(guān)鍵字 through 表示包括 end 這個數(shù)
@for $i from <start> to <end> //而 to 則不包括 end 這個數(shù)
$grid-prefix : span !default;
$grid-width : 60px !default;
$grid-gutter: 20px !default;
%grid {
float: left;
margin-left: $grid-gutter / 2;
margin-right: $grid-gutter / 2;
}
//方式1
@for $i from 1 through 12{
.#{$grid-prefix}#{$i} {
width : $grid-width * $i + $grid-gutter * ($i - 1);
@extend %grid;
}
}
//編譯后
.span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12 {
float: left;
margin-left: 10px;
margin-right: 10px;
}
.span1 {
width: 60px;
}
.span2 {
width: 140px;
}
.span3 {
width: 220px;
}
.span4 {
width: 300px;
}
.span5 {
width: 380px;
}
.span6 {
width: 460px;
}
.span7 {
width: 540px;
}
.span8 {
width: 620px;
}
.span9 {
width: 700px;
}
.span10 {
width: 780px;
}
.span11 {
width: 860px;
}
.span12 {
width: 940px;
}
- @while循環(huán)
$types : 4;
$type-width : 20px;
@while $types > 0 {
.while-#{$types} {
width : $type-width + $types;
}
$types : $types - 1;
}
//編譯后
.while-4 {
width: 24px;
}
.while-3 {
width: 23px;
}
.while-2 {
width: 22px;
}
.while-1 {
width: 21px;
}
- @each循環(huán)
@each循環(huán)就是去遍歷一個列表,然后從列表中取出對應(yīng)的值
@each $var in <list>
$list: adam john wynn mason kuroir;//$list 就是一個列表
@mixin author-images {
@each $author in $list {
.photo-#{$author} {
background: url("/images/avatars/#{$author}.png") no-repeat;
}
}
}
.author-bio { @include author-images;}
//編譯后
.author-bio .photo-adam {
background: url("/images/avatars/adam.png") no-repeat; }
.author-bio .photo-john {
background: url("/images/avatars/john.png") no-repeat; }
.author-bio .photo-wynn {
background: url("/images/avatars/wynn.png") no-repeat; }
.author-bio .photo-mason {
background: url("/images/avatars/mason.png") no-repeat; }
.author-bio .photo-kuroir {
background: url("/images/avatars/kuroir.png") no-repeat; }
函數(shù)功能
字符串函數(shù)
- unquote($string) : 刪除字符串中的引號
.test4 {
content: unquote("'Hello Sass!'");
}
//編譯后
.test4 { content: 'Hello Sass!'; }
//從測試的效果中可以看出,unquote( ) 函數(shù)只能刪除字符串最前和最后的引號(雙引號或單引號),而無法刪除字符串中間的引號。如果字符沒有帶引號,返回的將是字符串本身
quote($string) : 給字符串添加引號
如果字符串,自身帶有引號會統(tǒng)一換成雙引號 ""To-upper-case()、To-lower-case()
//To-upper-case() 函數(shù)將字符串小寫字母轉(zhuǎn)換成大寫字母
.text{
test : to-upper-case(aAa);
}
//編譯后
.text{
test : AAA
}
//To-lower-case() 函數(shù) 與 To-upper-case() 剛好相反,將字符串轉(zhuǎn)換成小寫字母
數(shù)字函數(shù)
- percentage($value) : 將一個不帶單位的數(shù)轉(zhuǎn)換成百分比值
.footer{
width : precentage(20px / 200px);
}
- round() : 將一個數(shù)四舍五入為一個最接近的整數(shù)
.footer {
width:round(12.3px)
}
- ceil():將一個數(shù)轉(zhuǎn)換成最接近于自己的整數(shù),會將一個大于自身的任何小數(shù)轉(zhuǎn)換成大于本身 1 的整數(shù)。也就是只做入,不做舍的計算
.footer {
width:ceil(12.3px);
}
//編譯后
.footer {
width: 13px;
}
- floor():剛好與 ceil() 函數(shù)功能相反,其主要將一個數(shù)去除其小數(shù)部分,并且不做任何的進位。也就是只做舍,不做入的計算
.footer {
width:floor(12.3px);
}
//編譯后
.footer {
width: 12px;
}
abs() : 返回一個數(shù)的絕對值
min()、max():在多個數(shù)之中找到最小的一個,這個函數(shù)可以設(shè)置任意多個參數(shù)
random() :用來獲取一個隨機數(shù)
列表函數(shù)
- length($list):返回一個列表的長度值
$list:(1,2px) ;
length(10px 20px (border 1px solid) 2em) //4
length($list) //2
- nth($list, $n):返回一個列表中指定的某個標簽值
$n 必須是大于 0 的整數(shù),且1 是指列表中的第一個標簽值,2 是指列給中的第二個標簽值,以此類推
nth(10px 20px 30px,1) //10px
nth((1px solid #eee) border left,1) //1px solid #eee
nth((1px solid #eee),border,left,1) //?
nth((Helvetica,Arial,sans-serif),2) //Arial
- join($list1, $list2, [$separator]):將兩個列給連接在一起,變成一個列表
//join() 只能將兩個列表連接成一個列表,如果直接連接兩個以上的列表將會報錯
//但很多時候不只碰到兩個列表連接成一個列表,這個時候就需要將多個 join() 函數(shù)合并在一起使用
join((blue red), join((#abc #def),(#dee #eff)))
結(jié)合以上,來個演示
$list1:jill,mage,leng;
$list2:2,33;
$joins: join($list1,$list2,space); //join() 函數(shù)中 $separator 除了默認值 auto 之外,還有 comma 和 space 兩個值,其中 comma 值指定列表中的列表項值之間使用逗號(,)分隔,space 值指定列表中的列表項值之間使用空格( )分隔。
$nthList:$joins;
.test-join {
content:length($joins);
}
@for $i from 1 through (length($nthList)) {
.test-#{$i}{
color: nth($nthList,$i);
}
}
//編譯后
.test-join { content: 5; }
.test-1 { color: jill; }
.test-2 { color: mage; }
.test-3 { color: leng; }
.test-4 { color: 2; }
.test-5 { color: 33; }
- append($list1, $val, [$separator]):將某個值放在列表的最后
- zip($lists…):將幾個列表結(jié)合成一個多維的列表
注意:
1、在使用zip()函數(shù)時,每個單一的列表個數(shù)值必須是相同的
2、每行每行的存,每列每列的取
$zips:zip(1px 2px 3px,solid dashed dotted,green blue red);//1px solid green, 2px dashed blue, 3px dotted red
.test-zip { content:length($zips);} //3
@for $i from 1 to (length($zips)+1){
.test-#{$i} {
border: nth($zips,$i);
}
}
//編譯后
.test-zip { content: 3; }
.test-1 { border: 1px solid green; }
.test-2 { border: 2px dashed blue; }
.test-3 { border: 3px dotted red; }
- index($list, $value):返回一個值在列表中的位置值
index(1px solid red, 1px) //1 ->在 Sass 中,第一個值就是1,第二個值就是 2
index(1px solid red,dotted) //false -> 列表中沒有找到 dotted
false
- Introspection函數(shù)
Introspection 函數(shù)包括了幾個判斷型函數(shù)-這幾個函數(shù)主要用來對值做一個判斷的作用:
1、type-of($value):返回一個值的類型
.testIntrospection{
content:type-of(1 / 2 = 2);
}
//編譯后
.testIntrospection { content: string; }
2、unit($number):返回一個值的單位
3、unitless($number):判斷一個值是否帶有單位
unitless(100) //true ->如果不帶單位返回的值為 true
unitless(100px) //false ->帶單位返回的值為 false
4、comparable($number-1, $number-2):判斷兩個值是否可以做加、減和合并
comparable(2rem,1em)//false ->不可以返回的值是 false
comparable(2px,1cm)//true ->可以返回的值為 true
- Miscellaneous函數(shù)
在這里把 Miscellaneous 函數(shù)稱為三元條件函數(shù),主要因為他和 JavaScript 中的三元判斷非常的相似。他有兩個值,當條件成立返回一種值,當條件不成立時返回另一種值
if($condition,$if-true,$if-false)
- map -管理變量
//用個 $ 加上命名空間來聲明 map。后面緊接是一個小括號 (),將數(shù)據(jù)以 key:value 的形式賦予,其中 key 和 value 是成對出現(xiàn),并且每對之間使用逗號 (,) 分隔,其中最后一組后面沒有逗號
$map:(
$key1:value1,
$key2:value2,
$key3:value3
}
使用 map 可以很容易收集鍵的值和動態(tài)插入,比如換皮膚的項目
//map 嵌套 map。其實就是 map 的某一個 key 當成 map,里面可以繼續(xù)放一對或者多對 key:value
$theme-color:(
defalt:(
bgcolor:#fff;
text-color:#444;
link-color:#ddd;
),
primary:(
bgcolor: #000,
text-color:#fff,
link-color: #93f
)
在 Sass 中 map 自身帶了七個函數(shù)
1、map-get($map,$key):根據(jù)給定的key值,返回map中相關(guān)的值
//$map:定義好的map;$key:需要遍歷的key;如果$key不存在$map中,將返回null值
$social-colors:(
dribble: #ea4c89,
facebook: #3b5998,
github: #171515,
google: #db4437,
twitter: #55acee
);
//假設(shè)需要獲取facebook鍵值對應(yīng)的值
.btn-dribble{
color:map-get($social-colors,facebook);
background-color: map-get($social-colors,weibo);//如果 $key 不在 $map 中,不會編譯出 CSS,其實在 Sass 中,map-get($social- colors,weibo) 返回了一個 null 值
}
//編譯后
.btn-dribble {
color: #3b5998;
}
2、map-merge($map1,$map2):將兩個map合并成一個新的map
3、map-remove($map,$key):從map中刪除一個key,返回一個新的map
$map:map-remove($social-colors,dribble);
//編譯后
$map:(
facebook: #3b5998,
github: #171515,
google: #db4437,
twitter: #55acee
);
4、map-keys($map):返回map中所有的key
@each $name in map-keys($social-colors) {
.btn-#{$name} {
color : colors($name);
}
}
5、map-values($map):返回map中所有的value
6、map-has-key($map,$key):根據(jù)給定的key值判斷map是否有對應(yīng)的value值,如果有返回true,否則返回false
//自定義一個函數(shù)
@function colors($color){
@if not map-has-key($social-colors,$color){
@warn "no color found for '#{$color}' in $social-colors map";
}
@return map-get($social-colors,$color);
}
//調(diào)用函數(shù)
.btn-dribble { color: colors(dribble);}
.btn-facebook { color: colors(facebook);}
.btn-github { color: colors(github);}
7、keywords($args):返回一個函數(shù)的參數(shù),這個參數(shù)可以動態(tài)的設(shè)置key和value
//其中 $args 變成 key(會自動去掉$符號),而 $args 對應(yīng)的值就是value
@mixin map($args...){
@debug keywords($args);
}
@include map(
$dribble: #ea4c89,
$facebook: #3b5998,
$github: #171515,
$google: #db4437,
$twitter: #55acee
);
顏色函數(shù)
RGB()顏色函數(shù)
1、rgb($red,$green,$blue):根據(jù)紅、綠、藍三個值創(chuàng)建一個顏色;
2、rgba($red,$green,$blue,$alpha):根據(jù)紅、綠、藍和透明度值創(chuàng)建一個顏色;
3、red($color):從一個顏色中獲取其中紅色值;
4、green($color):從一個顏色中獲取其中綠色值;
5、blue($color):從一個顏色中獲取其中藍色值;
6、mix($color-1,$color-2,[$weight]):把兩種顏色混合在一起HSL函數(shù)
1、hsl($hue,$saturation,$lightness):
通過色相(hue)、飽和度(saturation)和亮度(lightness)的值創(chuàng)建一個顏色;
2、hsla($hue,$saturation,$lightness,$alpha):
通過色相(hue)、飽和度(saturation)、亮度(lightness)和透明(alpha)的值創(chuàng)建一個顏色;
3、hue($color):
從一個顏色中獲取色相(hue)值;
4、saturation($color):
從一個顏色中獲取飽和度(saturation)值;
5、lightness($color):
從一個顏色中獲取亮度(lightness)值;
6、adjust-hue($color,$degrees):
通過改變一個顏色的色相值,創(chuàng)建一個新的顏色;
7、lighten($color,$amount):
通過改變顏色的亮度值,讓顏色變亮,創(chuàng)建一個新的顏色;
8、darken($color,$amount):
通過改變顏色的亮度值,讓顏色變暗,創(chuàng)建一個新的顏色;
9、saturate($color,$amount):
通過改變顏色的飽和度值,讓顏色更飽和,從而創(chuàng)建一個新的顏色
10、desaturate($color,$amount):通過改變顏色的飽和度值,讓顏色更少的飽和,從而創(chuàng)建出一個新的顏色;
11、grayscale($color):將一個顏色變成灰色,相當于desaturate($color,100%);
12、complement($color):
返回一個補充色,相當于adjust-hue($color,180deg);
13、invert($color):
反回一個反相色,紅、綠、藍色值倒過來,而透明度不變。Opacity函數(shù)
1、alpha($color) /opacity($color):獲取顏色透明度值;
2、rgba($color, $alpha):改變顏色的透明度值;
3、opacify($color, $amount) / fade-in($color, $amount):使顏色更不透明;
4、transparentize($color, $amount) / fade-out($color, $amount)**:使顏色更加透明。
@規(guī)則
- @import
@import 根據(jù)文件名引入。 默認情況下,它會尋找 Sass 文件并直接引入, 但是,在少數(shù)幾種情況下,它會被編譯成 CSS 的 @import 規(guī)則:
1、文件的擴展名是 .css。
2、文件名以 http:// 開頭。
3、文件名是 url()。
4、@import 包含了任何媒體查詢(media queries)
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
//編譯后
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
//如果你有一個 SCSS 或 Sass 文件需要引入, 但是你又不希望它被編譯為一個 CSS 文件, 這時,你就可以在文件名前面加一個下劃線,就能避免被編譯
//例如,你有一個文件叫做 _colors.scss。 這樣就不會生成 _colors.css 文件了, 而且你還可以這樣引入 _colors.scss 文件
@import "colors";//不用加下劃線
//注意:在同一個目錄不能同時存在帶下劃線和不帶下劃線的同名文件。 例如, _colors.scss 不能與 colors.scss 并存
嵌套@import
//example.scss文件
.example{ color:red};
//引用
#main{@import "example";}
//編譯后
#main .example{color:red}
- @media
1、嵌套在css規(guī)則中,有點類似js的冒泡功能
.sidebar{
width:300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}
//編譯后
.sidebar {width: 300px; }
@media screen and (orientation: landscape) {
.sidebar {
width: 500px;
}
}
2、@media 嵌套 @media(還可以使用插值哦)
$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;
@media #{$media} {
.sidebar {
@media (#{$feature}: #{$value}) {
width: 500px;
}
}
}
//編譯后
@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sidebar {width: 500px; }
}
- @extend
Sass 中的 @extend 是用來擴展選擇器或占位符
//@extend 是用來擴展選擇器
.hoverlink {
@extend a:hover;
}
a:hover { text-decoration: underline;}
//編譯后
a:hover, .hoverlink {text-decoration: underline; }
//使用 @extend 來繼承多個選擇器或占位符的樣式
.error {
border: 1px #f00;
background-color: #fdd;
}
.attention {
font-size: 3em;
background-color: #ff0;
}
.seriousError {
@extend .error;
@extend .attention;
border-width: 3px;
}
- @at-root
@at-root 從字面上解釋就是跳出根元素。當你選擇器嵌套多層之后,想讓某個選擇器跳出,此時就可以使用 @at-root
.a { color: red;
.b { color: orange;
.c { color: yellow;
@at-root .d { color: green; }
}
}
}
//編譯后
.a { color: red;}
.a .b { color: orange;}
.a .b .c { color: yellow;}
.d { color: green;} //跳出來了
- @debug
@debug 在 Sass 中是用來調(diào)試的,當你的在 Sass 的源碼中使用了 @debug 指令之后,Sass 代碼在編譯出錯時,在命令終端會輸出你設(shè)置的提示 Bug - @warm
@warn 和 @debug 功能類似,用來幫助我們更好的調(diào)試 Sass。 - @error
@mixin error($x){
@if $x < 10 {
width: $x * 10px;
} @else if $x == 10 {
width: $x;
} @else {
@error "你需要將#{$x}值設(shè)置在10以內(nèi)的數(shù)";
}
}
.test {
@include error(15);
}
//編譯后
你需要將15值設(shè)置在10以內(nèi)的數(shù) on line 7 at column 5