【Css】SCSS基本語法
1.Sass安裝(Windows版)
npm install -g sass
2.預處理
sass src/assets/main.scss(輸入檔案) src/assets/output.css(輸出檔案)
還可以利用--watch
引數來監視單個檔案或目錄。--watch
引數告訴 Sass監聽原始檔的變化, 並在每次儲存 Sass 檔案時重新編譯為CSS。如果你只是想監視 (而不是手動構建)input.scss
檔案,你只需在 sass命令後面新增--watch
引數即可。
監聽檔案:
sass --watch input.scss output.css
監聽目錄:(可以使用資料夾路徑作為輸入和輸出,並使用冒號分隔它們,來監聽檔案並輸出到目錄。)
sass --watch app/sass:public/stylesheets
Sass 將會監聽app/sass
目錄下所有檔案的變動,並 編譯CSS到public/stylesheets
目錄下。
2.1巢狀輸出方式nested
sass --watch test.scss:test.css --style nested
2.2展開輸出方式expanded
sass --watch test.scss:test.css --style expanded
2.3展開輸出方式compact
sass --watch test.scss:test.css --style compact
2.4展開輸出方式compressed
sass --watch test.scss:test.css --style compressed
3.scss語法格式
Scss:
SCSS SYNTAX $font-stack: Helvetica, sans-serif; $primary-color: #333; body { font: 100% $font-stack; color: $primary-color; }
Sass:
$font-stack: Helvetica, sans-serif $primary-color: #333 body font: 100% $font-stack color: $primary-color
預處理後的css:
body { font: 100% Helvetica, sans-serif; color: #333; }
4.變數(variables)、巢狀(nested rules)、混合(mixins)、函式(functions)等功能
4.1變數
語法:$+變數名+:+變數值;
$width:200px;
4.1.1普通變數和預設變數
- 普通變數聲明後可以在全域性範圍內使用;
- 預設變數僅需在值後面加上!default 即可;
- 預設變數一般是用來設定預設值,然後根據需求來覆蓋的,覆蓋的方式是在預設變數之前重新宣告下變數即可。預設變數的價值在進行元件化開發的時候會非常有用。
$baseLineHeight: 2; $baseLineHeight: 1.5 !default; body { line-height: $baseLineHeight; }
編譯後的CSS程式碼:
body { line-height:2; }
4.1.2區域性變數和全域性變數
- 區域性變數:在元素裡面宣告的變數;
- 全域性變數:在元素外面定義的變數;
- 全域性變數的影子:和全域性變數名字相同的區域性變數叫做全域性變數的影子。
4.2sass巢狀
4.2.1選擇器巢狀
css:
nav a { color:red; } header nav a { color:green; }
scss:
nav { a { color: red; header & { color:green; } } }
4.2.2屬性巢狀
css:
.box { font-size: 12px; font-weight: bold; }
scss:
.box { font: { size: 12px; weight: bold; } }
4.2.3偽類巢狀
scss:.clearfix { &: before,&:after { content:""; display: table; } &:after { clear: both; overflow: hidden; } }
css:
clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; overflow: hidden; }
4.3sass混合巨集
4.3.1宣告混合巨集
@mixin border-radius { -webkit-border-radius: 5px; border-radius: 5px; }
@mixin :宣告混合巨集的關鍵詞;
border-radius:混合巨集的名稱;
大括號內:複用的樣式程式碼;
4.3.2呼叫混合巨集
@mixin border-radius{ -webkit-border-radius: 3px; border-radius: 3px; }//宣告混合巨集border-radius button { @include border-radius; }//呼叫混合巨集border-radius
編譯為CSS:
button { -webkit-border-radius: 3px; border-radius: 3px; }
4.3.3混合巨集的引數
4.3.3.1不帶任何值的引數
@mixin border-radius($radius){ -webkit-border-radius: $radius; border-radius: $radius; }//宣告一個帶有引數$radius的混合巨集 .box { @include border-radius(3px);//呼叫混合巨集並給混合巨集傳引數“3px” }
4.3.3.2傳一個帶值引數(傳入一個預設值)
@mixin border-radius($radius:3px){ -webkit-border-radius: $radius; border-radius: $radius; }//宣告一個傳入了預設引數值的混合巨集 .btn { @include border-radius;//使用預設引數值的混合巨集 } .box { @include border-radius(50%);//可以自己傳入引數值 }
編譯出來的CSS:
.btn { -webkit-border-radius: 3px; border-radius: 3px; } .box { -webkit-border-radius: 50%; border-radius: 50%; }
4.3.3.3傳多個引數值
@mixin size($width,$height){ width: $width; height: $height; } .box-center { @include size(500px,300px); }
編譯出來的css:
.box-center { width: 500px; height: 300px; }
4.4.sass 繼承
scss:
.btn { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { background-color: #f36; color: #fff; @extend .btn; }
編譯出來後:
.btn, .btn-primary { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { background-color: #f36; color: #fff; }
4.5sass佔位符%
用佔位符宣告的程式碼,如果不被@extend呼叫就不會被編譯。
%mt5 { margin-top: 5px; } %pt5{ padding-top: 5px; } .btn { color:red; }
編譯後:
.btn { color:red; }//%佔位符宣告的程式碼沒有被編譯產生css程式碼
使用@extend呼叫:
%mt5 { margin-top: 5px; } %pt5{ padding-top: 5px; } .btn { @extend %mt5;//使用@extend呼叫佔位符程式碼 @extend %pt5; } .block { @extend %mt5; span { @extend %pt5; } }
編譯後的css程式碼:
.btn, .block { margin-top: 5px; } .btn, .block span { padding-top: 5px; }
通過@extend呼叫的佔位符,編譯出來的程式碼會將相同的程式碼合併在一起,程式碼變得十分簡潔。
4.6sass插值
4.6.1示例
$properties: (margin, padding); @mixin set-value($side, $value) { @each $prop in $properties {//對每個在$properties中的$prop,即$properties中的margin、padding #{$prop}-#{$side}: $value;//$prop連線引數$side,值為引數$value } } .login-box { @include set-value(top, 14px);//呼叫混合巨集 }
編譯出來的css:
.login-box { margin-top: 14px; padding-top: 14px; }
4.6.2不可以1:
$margin-big: 40px; $margin-medium: 20px; $margin-small: 12px; @mixin set-value($size) { margin-top: $margin-#{$size}; } .login-box { @include set-value(big); }
插值不能用在屬性的值中,也就是不能出現在冒號後邊,否則會報錯,無法識別。上面的 Sass 程式碼編譯出來,你會得到下面的資訊:
error style.scss (Line 5: Undefined variable: “$margin-".)
在冒號左邊是可以成功的:
@mixin set-value($type) { #{$type}-top: 20px; } .login-box { @include set-value(margin); }
4.6.3不可以2:
@mixin updated-status { margin-top: 20px; background: #F00; } $flag: "status"; .navigation { @include updated-#{$flag}; }
不能用來呼叫混合巨集,如@include updated-#{$flag} ,這裡的插值同樣不會被識別。(@extend後邊使用插值是可以的)。
4.6.4可以在使用@extend時使用插值:
%updated-status { margin-top: 20px; background: #F00; } .selected-status { font-weight: bold; } $flag: "status"; .navigation { @extend %updated-#{$flag}; @extend .selected-#{$flag}; }
4.7sass 註釋
/*註釋內容*/ :會在編譯出來的css檔案中顯示 //註釋內容 :不會在編譯出來的css檔案中顯示
//定義一個佔位符 %mt5 { margin-top: 5px; } /*呼叫一個佔位符*/ .box { @extend %mt5; }
編譯出來的css:
.box { margin-top: 5px; } /*呼叫一個佔位符*/
4.8sass運算
4.8.1sass 加法/減法
4.8.1.1變數或屬性中都可以做加法/減法運算
.box { width: 20px + 8in; height:20px - 5px; }
in:
英寸(Inches)。絕對長度單位。
1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px
編譯出來的css:
.box { width: 788px; height: 15px; }
4.8.1.2不用型別的單位做加法/減法會報錯:
.box { width: 20px + 1em;//不同型別單位不能做加法 }
4.8.2sass 乘法
.box { width: 10px * 2; }
以下寫法有問題:
.box { width:10px * 2px; }
編譯出來的css:
.box { width: 20px; }
同加法減法一樣,不同型別單位做乘法也會報錯。
4.8.3sass除法
如果除式中沒有變數或者不是在一個數學表示式中(有加法減法等),就要將除式運算用小括號括起來,否則“/”不會被當做除號運算。
p { font: 10px/8px; // 純 CSS,不是除法運算 $width: 1000px; width: $width/2; // 使用了變數,是除法運算 width: round(1.5)/2; // 使用了函式,是除法運算 height: (500px/2); // 使用了圓括號,是除法運算 margin-left: 5px + 8px/2px; // 使用了加(+)號,是除法運算 }
編譯出來的css:
p { font: 10px/8px;//這種是無意義的css width: 500px; height: 250px; margin-left: 9px; }
除法中相同單位相除不會報錯,會產生一個無單位的值:
.container { width: 100%; } article[role="main"] { float: left; width: 600px / 960px * 100%; } aside[role="complementary"] { float: right; width: 300px / 960px * 100%; }
編譯出的css:
.container { width: 100%; } article[role="main"] { float: left; width: 62.5%; } aside[role="complementary"] { float: right; width: 31.25%; }
4.8.4sass 變數計算
$content-width: 720px; $sidebar-width: 220px; $gutter: 20px; .container { width: $content-width + $sidebar-width + $gutter; }
編譯出來的css:
.container { width: 960px; }
4.8.5sass數字運算
.box { width: ((220px + 720px) - 11 * 20 ) / 12 ; }
編譯出來的css:
.box { width: 60px; }
4.8.6sass顏色運算
4.8.6.1所有算術運算都支援顏色值,並且是分段計算的。
p { color: #010203 + #040506; }
計算公式為 01 + 04 = 05、02 + 05 = 07 和 03 + 06 = 09, 並且被合成為:
p { color: #050709; }
4.8.6.2數字和顏色一起運算:
p { color: #010203 * 2; }
計算公式為 01 * 2 = 02、02 * 2 = 04 和 03 * 2 = 06, 並且被合成為:
p { color: #020406; }
4.8.7sass 字元運算
4.8.7.1用“+”對字串進行連線:
$content: "Hello" + "" + "Sass!"; .box:before { content: " #{$content} "; }
編譯出來的css:
.box:before { content: " Hello Sass! "; }
4.8.7.2可以使用“+”直接連線字元:
div { cursor: e + -resize; }
編譯出來的css:
div { cursor: e-resize; }
有引號的字串和沒有引號的字串相加,看哪個在“+”號的左邊,如果有引號的在左邊,結果為有引號的;如果沒有引號的在左邊,結果為沒有引號的:
p:before { content: "Foo " + Bar; font-family: sans- + "serif"; }
編譯出來的css:
p:before { content: "Foo Bar"; font-family: sans-serif; }
參考:
https://www.jianshu.com/p/fa379a309c8a
https://blog.csdn.net/weixin_33724046/article/details/93747728
官網:
https://sass.bootcss.com/guide
p {
color: #010203 + #040506;
}