本文是以本身的理解起的結構,要看詳細的幫助文檔,參閱這裏: https://sass-lang.com/documen...
less
和 sass
是兩種 css
預編譯語言,其目的是爲了更快、更結構的編寫 css
文件,是一種強大的 css
編譯語言,都能使用 變量、運算符、判斷、方法等等。php
scss
與 sass
的區別(這裏先不講 less
):css
sass
後有的 scss
scss
須要大括號{}
和分號;
sass
什麼都不用直接裸奔感受 sass
不如 scss
嚴謹,裸奔太狂野了,因此咱們選用 scss
,git
寫一個 .btn
類並支持 :hover
:active
樣式github
cssweb
.btn { /* btn 初始樣式 */ } .btn:hover{ /* :hover 樣式 */ } .btn:active{ /* :active 樣式 */ }
scssbootstrap
.btn{ // btn 初始樣式 &:hover{ // hover 樣式 } &:active{ // active 樣式 } }
在scss, sass, less 中 &
都代指父類
上面這個例子中的 &
代指 .btn
能夠看出 scss
的結構要比 css
清晰,而且寫的也要更少。
下面的 scss
在使用中就會生成上面的 css
。
而這還只是皮毛,保證你用過 scss
以後就不會再用 css
寫樣式了。segmentfault
變量是以 $
開頭的,能夠是顏色,長度,數值,等等。sass
像 js 的變量同樣,scss
的變量也是有做用域的,也就是說內部聲明的變量是沒法在外面使用的,若是想讓內部的變量在外部可訪問,須要在變量值後面添加 !global
聲明。app
(還能夠經過添加 !default
給變量設置默認值,這個在寫一個樣式庫的時候比較實用,避免別人在沒有給變量賦值以前使用)less
$變量名: 變量值
// Colors $red: #CD594B !global; $yellow: #F8CE5E; $green: #4B9E65; $yellow: #5A8DEE; // Unites $btn-padding: 4px; $btn-lineheight: 26px;
實際使用中:
scss
.btn-success { background-color: $green; line-height: $btn-lineheight; color: #fff; }
生成 css
.btn-success { background-color: #4B9E65; line-height: 26px; color: #fff; }
將變量直接嵌入字符串,須要用#{ 變量 }
(相似 ES6 中模板字符串中的${ 變量 }
)
其實
#{}
中是能夠插入任意東西的,這裏只用到了插入變量,還能夠插入方法等等,高級用法。
scss
$bg-path: "./img" .card{ background: url("#{$bg-path}/card-bg.png" center center); }
css
.card{ background: url("./img/card-bg.png" center center); }
經過 @import
能夠把多個文件結合到一塊兒
有了這個功能,就能夠經過功能拆分 scss
文件,使其更結構化,好比,能夠分紅:變量類,按鈕類,列表類,字體類,排版類等等。
拆分紅多個文件的時候,以_
開頭命名的文件,不會被像phpStorm
中的file watcher
自動預編譯成css文件,less
沒有這效果,在這一點上scss
很不錯。
_variables.scss
$bg-btn: #ddd; $color-btn: #444;
btn.scss
@import "_variables"; .btn{ display: inline-block; padding: 3px 6px; background-color: $bg-btn; color: $color-btn; }
生成 css
.btn{ display: inline-block; padding: 3px 6px; background-color: #ddd; color: #444; }
這個是最經常使用的,經過 @mixin
定義一個類或方法,在其它地方經過 @include
引用這個方法或類。
若是是方法,還能夠定義默認值,也就是說能夠某些時候,能夠傳部分參數。
直接看例子
scss
// @mixin 若是沒有調用,不會被渲染 @mixin rounded($conor: 5px){ // 定義 mixin 並設置默認值 5px -webkit-border-radius: $conor; -moz-border-radius: $conor; border-radius: $conor; } .btn-rounded{ @include rounded(); // 這裏引用上面的 mixin,默認值 5px } .btn-big-rounded{ @include rounded(10px); // 這裏引用上面的 mixin,並設置值 10px }
生成 css
.btn-rounded{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn-big-rounded{ -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; }
有些時候,須要寫的某個類裏,包含另外一個類的全部聲明。
如: 警告按鈕,包含全部警告顏色類的內容。
scss
.danger{ background-color: #FF3B30; } .round{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn{ display: inline-block; padding: 3px 6px; } .btn-danger{ @extend .danger, .round, .btn; }
生成 css
.danger, .btn-danger { background-color: #FF3B30; } .round, .btn-danger { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .btn, .btn-danger { display: inline-block; padding: 3px 6px; }
@extend 注意事項:
不能繼承 @extend .danger.text
這種連續組合的類,應該寫爲 @extend .danger, .text
詳見: https://sass-lang.com/documen...
不知作別人,反正我最經常使用的就是顏色方法了。列舉經常使用的顏色方法
lighten (顏色, 百分比) // 調亮 darken (顏色, 百分比) // 調暗 saturate (顏色, 百分比) // 調高飽和度 desaturate (顏色, 百分比) // 下降飽和度
scss
$green: #4B9E65; .green{ background-color: $green; } .green-lighten{ background-color: lighten($green,20%); } .green-darken{ background-color: darken($green,20%); } .green-saturate{ background-color: saturate($green,20%); } .green-desaturate{ background-color: desaturate($green,20%); }
生成 css
.green { background-color: #4B9E65; } .green-lighten { background-color: #88c79c; } .green-darken { background-color: #2a5939; } .green-saturate { background-color: #34b55c; } .green-desaturate { background-color: #62876e; }
方法以 @function
開頭,以 @return
結尾,也就是說,方法的定義,必需要有返回值
詳見: https://sass-lang.com/documen...
像js同樣,用於輸出提示信息
@debug
: 普通輸出@warn
: 警告輸出@error
: 錯誤輸出通用
$var: value
@if
@each
@error
,@warn
,@debug
CSS
h1 { ... }
@media
@font-face
@at-root
頂級
@import
@mixin
@function
表達式
12
100px
Helvetina Neue
bold
#ffffff
blue
true
false
null
border: 1px solid #ccc
運算符
==
!=
+
-
*
/
%
<
<=
>=
and
or
not
+
-
/
鏈接字符(
)
其它
$var
nth($list,1)
var(--main-bg-color)
calc(1px + 100%)
url(http://myapp.com/assets/logo.png)
&
!important
/* 多行註釋 能夠多行 在非壓縮模式下,這種註釋會被輸出到 css 中 */ // 單行註釋 // 這種註釋不會輸出到 css 中
CSS 自己自帶一些方法,大多數方法都能與SCSS方法和平共存,但有些會產生衝突,如url()
若是 url()
傳入的參數是有效的帶引號的url,sass不會處理它,但還能夠往其中插入變量,若是不是有效的帶引號的 url,帶有方法或變量的,sass就把它當成正常的方式識別。如:
$bg-path: "./pics" .card-bg{ background: url("#{$bg-path}/card-bg.png") center center; } // 或 .card-bg{ background: url($bg-path+"/card-bg.png") center center; }
都會輸出爲
.card-bg{ background: url("./pics/card-bg.png") center center; }
有時候,好比,你須要寫一個按鈕類 .btn-success
, .btn-danger
, .btn-default
, .btn-warning
,若是單個定義的話,會很麻煩,如今用了方法,就能夠直接填參數完成了。
scss
$green: #4B9E65; $blue: #5A8DEE; $yellow: #F8CE5E; $red: #CD594B; @mixin btn-template($bgcolor,$fcolor:white){ // 定義了兩個參數,第二個參數有默認值 // 也就是說這個方法能夠值一個或兩個參數 // 另外 帶 () 參數的方法不會把自身渲染到 css 中,只有調用纔會渲染 color: $fcolor; border-color: darken($bgcolor, 3%); background-color: $bgcolor; &:hover { background-color: darken($bgcolor, 5%); } &:active { background-color: darken($bgcolor, 10%); } } .btn-success{ @include btn-template($green) } .btn-primary{ @include btn-template($blue) } .btn-warning{ @include btn-template($yellow) } .btn-danger{ @include btn-template($red) }
上面的 scss 輸出爲下面的內容,有沒有很厲害
.btn-success { color: white; border-color: #46945e; background-color: #4B9E65; } .btn-success:hover { background-color: #438d5a; } .btn-success:active { background-color: #3b7b4f; } .btn-primary { color: white; border-color: #4c83ed; background-color: #5A8DEE; } .btn-primary:hover { background-color: #437dec; } .btn-primary:active { background-color: #2c6de9; } .btn-warning { color: white; border-color: #f7ca4f; background-color: #F8CE5E; } .btn-warning:hover { background-color: #f7c746; } .btn-warning:active { background-color: #f6bf2d; } .btn-danger { color: white; border-color: #ca4e3f; background-color: #CD594B; } .btn-danger:hover { background-color: #c74737; } .btn-danger:active { background-color: #b34032; }
就是去看 bootstrap v4
的樣式源碼,bootstrap v4
就是用 scss
寫的
若是想學 less 能夠看這篇 [ less基礎用法 ] - SegmentFault -CSDN, bootstrap v3
就是用 less
寫的。
下載 bootstrap 的 scss 源碼,看裏面怎麼寫的,進步很快的。