SCSS

scss語法
scss常見用法
阮一峰 sass語法

變量 $

  • 定義
  • 嵌套引用
  • 多值變量
  • 變量計算
定義
1- 變量的定義一般以$開頭,某個變量的作用域僅限于他們定義的層級以及子層級。
如果變量是定義在所有嵌套選擇器之外的,那么他們可以在各處被調用。
$color1:#aeaeae;
.div1{
    background-color:$color1;
}

2- 如果希望某個在子選擇器中定義的變量能夠成為全局變量,可以使用!global關鍵字:
#main {
  $width: 5em !global;
  width: $width;
}

#sidebar {
  width: $width;
}
3- sass的默認變量僅需要在值后面加上 !default即可。
默認變量一般是用來設置默認值,然后根據需求來覆蓋的,覆蓋的方式也很簡單,只需要在默認變量之前重新聲明變量
$baseLineHeight:  1.5 !default;
$baseLineHeight:   2;
body{
    line-height: $baseLineHeight; 
}
//css style
//-------------------------------
body{
    line-height:2;
}
嵌套引用,特殊變量
嵌套引用在其他編程語言中即是字符串插值,需要用#{}進行包裹:
一般我們定義的變量都為屬性值,可直接使用
但是如果變量作為屬性或在某些特殊情況下等則必須要以 #{$variables}形式使用。
$left:left;
.div1{
    border-#{$left}-width:5px;
}

多值變量 list map
多值變量分為list類型和map類型
簡單來說list類型有點像js中的數組,而map類型有點像js中的對象。
  • list
list數據可通過空格,逗號或小括號分隔多個值,可用 nth($var,$index)取值。
定義
//一維數據
$px: 5px 10px 20px 30px;
//二維數據,相當于js中的二維數組
$px: 5px 10px, 20px 30px;
$px: (5px 10px) (20px 30px);

使用
$linkColor: #08c #333 !default;//第一個值為默認值,第二個鼠標滑過值
a{
  color:nth($linkColor,1);
  &:hover{
    color:nth($linkColor,2);
  }
}
//css style
//-------------------------------
a{
  color:#08c;
}
a:hover{
  color:#333;
}
  • map
map數據以key和value成對出現,其中value又可以是list。
格式為: `$map: (key1: value1, key2: value2, key3: value3);`,通過 `map-get($map,$key)`取值。
關于map數據還有很多其他函數如 `map-merge($map1,$map2)`, `map-keys($map)`,`map-values($map)`等
定義
$heading: (h1: 2em, h2: 1.5em, h3: 1.2em);

使用
//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 中 map自身帶了七個函數:
map-get($map,$key):根據給定的 key 值,返回 map 中相關的值。
map-merge($map1,$map2):將兩個 map 合并成一個新的 map。
map-remove($map,$key):從 map 中刪除一個 key,返回一個新 map。
map-keys($map):返回 map 中所有的 key。
map-values($map):返回 map 中所有的 value。
map-has-key($map,$key):根據給定的 key 值判斷 map 是否有對應的 value 值,如果有返回 true,否則返回 false。
keywords($args):返回一個函數的參數,這個參數可以動態的設置 key 和 value。
變量計算
$left:20px;
.div1{
    margin-left:$left+12px;
}

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
  font: (italic bold 10px/8px); // In a list, parentheses don't count
}

選擇器

  • 嵌套
  • 嵌套引用
嵌套
.div1{
    .span1{
        height: 12px;
    }
    .div2{
        width: 16px;
    }
}

屬性也可以嵌套,比如border-color屬性,可以寫成:
p {
  border: {       注意,border后面必須加上冒號。
   color: red;
  }
}
父元素引用
在嵌套的子層級中,允許使用&引用父元素:
.div1{
    &:hover{
        cursor: hand;
    }
}

代碼重用

  • 繼承 @extend
允許一個選擇器,繼承另一個選擇器
.class1{
    font-size:19px;
}
.class2{
    @extend .class1;
    color:black;
}

如果在class2后面有設置了class1的屬性,那么也會影響class2
class1{
    font-size:19px;
}
.class2{
    @extend .class1;
    color:black;
}
.class1{
    font-weight:bold;
}

import 引用外部css文件

@import "_test1.scss";
@import "_test2.scss";
@import "_test3.scss";

mixin&include 代碼塊的復用

使用 @mixin 命令,定義一個代碼快
@mixin left {
  float: left;
  margin-left: 10px;
}
使用 @include 命令,調用這個mixin
div {
  @include left;
}
1- 參數與缺省值

邊距設置
@mixin common($value1,$value2,$defaultValue:12px){
    display:block;
    margin-left:$value1;
    margin-right:$value2;
    padding:$defaultValue;
}
.class1{
    font-size:16px;
    @include common(12px,13px,15px);
}
.class2{
    font-size:16px;
    @include common(12px,13px);
}

2- 瀏覽器前綴設置設置
@mixin rounded($vert, $horz, $radius: 10px) {
  border-#{$vert}-#{$horz}-radius: $radius;
 -moz-border-radius-#{$vert}#{$horz}: $radius;
 -webkit-border-#{$vert}-#{$horz}-radius: $radius;
}
#navbar li { @include rounded(top, left); }
#footer { @include rounded(top, left, 5px); }

編程式方法

  • 流程控制
    • 條件語句
      • @if
      • @else
    • 循環語句
      • for
      • while
      • each
  • 函數
流程控制
條件語句
@if
p {
 @if 1 + 1 == 2 { border: 1px solid; }
 @if 5 < 3 { border: 2px dotted; }
}

@else
@if lightness($color) > 30% {
  background-color: #000;
 } @else {
  background-color: #fff;
 }

三目判斷
語法為: if($condition, $if_true, $if_false) 。三個參數分別表示:條件,條件為真的值,條件為假的值。
循環語句
 for
 @for $i from 1 to 10 {
  .border-#{$i} {
   border: #{$i}px solid blue;
     }
 }

while
  $i: 6;
  @while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
 }

each
  @each $member in a, b, c, d {
 .#{$member} {
   background-image: url("/image/#{$member}.jpg");
  }
}
函數
sass允許用戶編寫自己的函數
@function double($n) {
   @return $n * 2;
}
#sidebar {
 width: double(5px);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375