光看是沒用的,過不了多久就忘光光,因此仍是記錄一下吧。php
首先windows仍是離不開我,因此仍是環境仍是windows..css
1、SASS環境安裝配置html
SASS是ruby寫的,因此要想將sass編譯成css文件,就給配上ruby環境。git
windows下載裝個 rubyinstaller 就好了,注意要保證 配置好環境變量。github
好比 E:\Ruby22-x64\bin 配置到系統環境變量 path中編程
cmd命令行執行 ruby -v 正確則安裝配置正確windows
接下來是使用gem給咱們裝上sass數組
通常的作法是直接sass
gem install sass
但不少時候回報錯,也許是國內網絡太差被封殺了.. 經過 -V 參數能夠看到具體信息ruby
通常來講,淘寶團隊都提供了不少鏡像,去看看~
使用簡單的命令,切換源就行
gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org # 請確保只有 ruby.taobao.org gem install rails
sass安裝成功,先來體驗一下吧~
在sass目錄下新建一個test.scss文件,寫入幾句,直接執行看看。
可以使用 sass test.scss test.css 將scss文件直接編譯成css文件
2、SASS用法:
如上例test.scss文件,我能夠定義編譯後css代碼的風格。
* nested:嵌套縮進的css代碼,它是默認值。
* expanded:沒有縮進的、擴展的css代碼。
* compact:簡潔格式的css代碼。
* compressed:壓縮後的css代碼。
也能夠直接定義監聽文件的改動,修改scss文件,css將會獲得同步更新
接下來,談談sass的各語法
1.像css那樣,直接定義
div{width:50px;}
2.使用變量,變量有$標識符,若是要定義默認變量值,則在後方加上 !default便可。
若是變量要放在字符串裏頭,就用 #{}包含.可使用計算功能
$width: 500px;
$height: 300px !default; $side: right; div{ border-#{$side}-width: $width / 5; } | | | div { border-right-width: 100px; }
3.嵌套。sass能夠進行選擇器的嵌套,表示層級關係,看起來很優雅整齊。若是要使用父類,就用&符,如常見的 a:hover
$width: 500px; div{ width: $width; .answer a{ &:hover{text-decoration:none;} } } | | | div { width: 500px; } div .answer a:hover { text-decoration: none; }
4.混入(Mixins). 相似於定義一個宏/函數,而後在須要的地方調用
// *.scss $width: 500px; @mixin right($color: '#0f0'){ font-weight: bold; color: $color; } div{ width: $width; .answer{ @include right(); } } //--------------------------------------- // *.css div { width: 500px; } div .answer { font-weight: bold; color: "#0f0"; }
5.導入其餘scss或css文件 @import , 導入scss文件會自動編譯展開,導入css則原樣置入
//test.scss $width: 500px; div{ width: $width; .answer a{ &:hover{text-decoration:none;} } } @import './test1.css'; @import './test1.scss'; p{width: $width / 10;} //test1.css p.new{ color: red; } //test1.scss $width: 200px; #nav{ width: $width; } //最後,test.css 能夠看到,$width變量的值已經更新 @import url(./test1.css); div { width: 500px; } div .answer a:hover { text-decoration: none; } #nav { width: 200px; } p { width: 20px; }
6.繼承/擴展 使用 @extend
// *.scss $width: 100px; .block{ color: #333; border-left: 1px; } .block-1{ @extend .block; width: $width / 2; } .block-2{ @extend .block-1; background-color: green; } // *.css .block, .block-1, .block-2 { color: #333; border-left: 1px; } .block-1, .block-2 { width: 50px; } .block-2 { background-color: green; }
7.顏色函數,sass內置了許多顏色函數,例如加亮、變暗、顏色梯度等。
如:
lighten(#cc3, 10%) // #d6d65c
darken(#cc3, 10%) // #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c
8.其餘比較少用到的方法
1] 變量也能夠有多個值:相似於一個數組
// *.scss $px : 1px 2px 3px 4px; div{ border-left: nth($px,2); } // *.css div { border-left: 2px; }
2]能夠用map作key-value關係 用@each遍歷(相似於php語法)
// *.scss $headings : (h1: 12px,h2:13px,h3:14px); @each $header,$size in $headings{ #{$header}{ font-size: $size; } } // *.css h1 { font-size: 12px; } h2 { font-size: 13px; } h3 { font-size: 14px; }
3] 跳出選擇器嵌套 @at-root 不過應該不多用到,若是要跳出媒體的嵌套例如 @media .block-1{}的,type就選media|all
語法爲 @at-root (without: type) type有四種:all
(全部),rule
(常規css,默認),media
(media),support
(support)
// *.scss .block-1{ border-left:1px; .flw{ color: red; @at-root{ .today{ font-size: 14px; } } } @at-root .tomo{ font-size: 12px; } } // *.css .block-1 { border-left: 1px; } .block-1 .flw { color: red; } .today { font-size: 14px; } .tomo { font-size: 12px; }
4]條件判斷和循環等
// *.scss $width: 25px; .block-5{ width: 50px; } // 如今不包含4,若是是froms 1 through 4 ,就會包含4 @for $i from 1 to 4{ .block-#{$i}{ @if $i % 2 == 0 { width: $width;} @else {width: 50px;} } } // *.css .block-5 { width: 50px; } .block-1 { width: 50px; } .block-2 { width: 25px; } .block-3 { width: 50px; }
5]固然了,也能夠定義個函數,而後調用~
逐增width 這css愈來愈像編程了..
// *.scss $width: 25px; .block-5{ width: 50px; } @function inc($num){ @return $num + 1; } @for $i from 1 through 4{ .block-#{$i}{ @if $i % 2 == 0 { $width: inc($width); width: $width; } @else {width: 50px;} } } // *.css .block-5 { width: 50px; } .block-1 { width: 50px; } .block-2 { width: 26px; } .block-3 { width: 50px; } .block-4 { width: 27px; }
字符串函數 unquote($string):刪除字符串中的引號; unquote( ) 函數只能刪除字符串最前和最後的引號(雙引號或單引號),而沒法刪除字符串中間的引號。若是字符沒有帶引號,返回的將是字符串自己。 quote($string):給字符串添加引號。 quote() 函數只能給字符串增長雙引號,並且字符串中間有單引號或者空格時,須要用單引號或雙引號括起,不然編譯的時候將會報錯。 To-upper-case():函數將字符串小寫字母轉換成大寫字母 To-lower-case():函數 與 To-upper-case() 恰好相反,將字符串轉換成小寫字母 數字函數 Sass 中的數字函數提要針對數字方面提供一系列的函數功能: percentage($value):將一個不帶單位的數轉換成百分比值; round($value):將數值四捨五入,轉換成一個最接近的整數;(四捨五入) ceil($value):將大於本身的小數轉換成下一位整數;(向上取整) floor($value):將一個數去除他的小數部分;(向下取整) abs($value):返回一個數的絕對值;(絕對整數) min($numbers…):找出幾個數值之間的最小值;(min(1,2,3)) max($numbers…):找出幾個數值之間的最大值; random(): 獲取隨機數(random()) 列表函數 列表函數主要包括一些對列表參數的函數使用,主要包括如下幾種: length($list):返回一個列表的長度值;===length(border 1px solid)===3 nth($list, $n):返回一個列表中指定的某個標籤值===nth(border 1px solid,1)===border join($list1, $list2, [$separator]):將兩個列給鏈接在一塊兒,變成一個列表;=== join(10px 20px, 30px 40px) (10px 20px 30px 40px) join((blue,red),(#abc,#def)) (#0000ff, #ff0000, #aabbcc, #ddeeff) join((blue,red),(#abc #def)) (#0000ff, #ff0000, #aabbcc, #ddeeff) append($list1, $val, [$separator]):將某個值放在列表的最後; append(10px 20px ,30px) (10px 20px 30px) append((10px,20px),30px) (10px, 20px, 30px) append(green,red) (#008000 #ff0000) append(red,(green,blue)) (#ff0000 (#008000, #0000ff)) 若是沒有明確的指定 $separator 參數值,其默認值是 auto。 若是列表只有一個列表項時,那麼插入進來的值將和原來的值會以空格的方式分隔。 若是列表中列表項是以空格分隔列表項,那麼插入進來的列表項也將以空格分隔; 若是列表中列表項是以逗號分隔列表項,那麼插入進來的列表項也將以逗號分隔。 zip($lists…):將幾個列表結合成一個多維的列表;( 每一個單一的列表個數值必須是相同的) zip(1px 2px 3px,solid dashed dotted,green blue red) ((1px "solid" #008000), (2px "dashed" #0000ff), (3px "dotted" #ff0000)) zip()函數中每一個單一列表的值對應的取其相同位置值: |--- List ---|--- nth(1) ---|--- nth(2) ---|--- nth(3) ---| |------------|--------------|--------------|--------------| | List1 | 1px | 2px | 3px | |------------|--------------|--------------|--------------| | List2 | solid | dashed | dotted | |------------|--------------|--------------|--------------| | List3 | green | blue | red | |------------|--------------|--------------|--------------| index($list, $value):返回一個值在列表中的位置值。 index(1px solid red,dotted) //列表中沒有找到 dotted false index(1px solid red,solid) //列表中找到 solid 值,而且返回他的位置值 2 2 Introspection函數 Introspection函數包括了幾個判斷型函數: type-of($value):返回一個值的類型 返回值: 1. number 爲數值型。 2. string 爲字符串型。 3. bool 爲布爾型。 4. color 爲顏色型。 unit($number):返回一個值的單位; 碰到複雜的計算時,其能根據運算獲得一個「多單位組合」的值,不過只充許乘、除運算: 但加、減碰到不一樣單位時,unit() 函數將會報錯,除 px 與 cm、mm 運算以外 comparable($number-1, $number-2):判斷兩個值是否能夠作加、減和合並 Miscellaneous函數 Miscellaneous 函數稱爲三元條件函數,主要由於他和 JavaScript 中的三元判斷很是的類似。他有兩個值,當條件成立返回一種值,當條件不成立時返回另外一種值: if($condition,$if-true,$if-false) 上面表達式的意思是當 $condition 條件成立時,返回的值爲 $if-true,不然返回的是 $if-false 值。 if(true,1px,2px) 1px if(false,1px,2px) 2px 顏色函數 RGB顏色函數簡介 RGB 顏色只是顏色中的一種表達式,其中 R 是 red 表示紅色,G 是 green 表示綠色而 B 是 blue 表示藍色。在 Sass 中爲 RGB 顏色提供六種函數: `rgb($red,$green,$blue):根據紅、綠、藍三個值建立一個顏色; rgba($red,$green,$blue,$alpha):根據紅、綠、藍和透明度值建立一個顏色; red($color):從一個顏色中獲取其中紅色值; green($color):從一個顏色中獲取其中綠色值; blue($color):從一個顏色中獲取其中藍色值; mix($color-1,$color-2,[$weight]):把兩種顏色混合在一塊兒。[$weight]是合併的比例 HSL函數簡介 hsl($hue,$saturation,$lightness):經過色相(hue)、飽和度(saturation)和亮度(lightness)的值建立一個顏色; hsla($hue,$saturation,$lightness,$alpha):經過色相(hue)、飽和度(saturation)、亮度(lightness)和透明(alpha)的值建立一個顏色; hue($color):從一個顏色中獲取色相(hue)值; saturation($color):從一個顏色中獲取飽和度(saturation)值; lightness($color):從一個顏色中獲取亮度(lightness)值; adjust-hue($color,$degrees):經過改變一個顏色的色相值,建立一個新的顏色; lighten($color,$amount):經過改變顏色的亮度值,讓顏色變亮,建立一個新的顏色; darken($color,$amount):經過改變顏色的亮度值,讓顏色變暗,建立一個新的顏色; saturate($color,$amount):經過改變顏色的飽和度值,讓顏色更飽和,從而建立一個新的顏色 desaturate($color,$amount):經過改變顏色的飽和度值,讓顏色更少的飽和,從而建立出一個新的顏色; grayscale($color):將一個顏色變成灰色,至關於desaturate($color,100%); complement($color):返回一個補充色,至關於adjust-hue($color,180deg); invert($color):反回一個反相色,紅、綠、藍色值倒過來,而透明度不變。 Opacity函數簡介 alpha($color) /opacity($color):獲取顏色透明度值; rgba($color, $alpha):改變顏色的透明度值; opacify($color, $amount) / fade-in($color, $amount):使顏色更不透明; transparentize($color, $amount) / fade-out($color, $amount):使顏色更加透明。