您好,登錄后才能下訂單哦!
本篇內容主要講解“Scss基礎語法和導入SASS文件的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Scss基礎語法和導入SASS文件的方法是什么”吧!
sass有兩種語法格式Sass(早期的縮進格式:Indented Sass)和SCSS(Sassy CSS)
目前最常用的是SCSS,任何css文件將后綴改為scss,都可以直接使用Sassy CSS
語法編寫。
所有有效的 CSS 也同樣都是有效的 SCSS。
使用變量
sass使用$
符號來標識變量。
變量的作用就是,讓你在整個樣式表中保存并重用一些信息或數據。
比如存儲顏色(color)、字體集,或任何你想重用的CSS值。
1. 變量聲明
和css屬性的聲明(property declaration
)很像!
如,聲明值為 #F90
的變量 $highlight-color
,字體集變量:
$highlight-color: #F90; $font-stack: Helvetica, sans-serif; body { font: 100% $font-stack; color: $highlight-color; }
輸出結果為:
body { font: 100% Helvetica, sans-serif; color: #F90; }
變量有作用域,當變量定義在css規則塊內,則該變量只能在此規則塊內使用。
2. 變量引用
凡是css屬性的標準值(比如說1px或者bold)可存在的地方,就可以使用變量。
css生成時,變量會被它們的值所替代。
$color:#A34554; .box { width: 300px; height: 400px; &-left{ width: 30%; color: $color; } }
生成css為:
.box { width: 300px; height: 400px; } .box-left{ width: 30%; color: #A34554; }
聲明變量時,變量的值也可以引用其他變量,如下 $highlight-border
變量中使用了 $highlight-color
變量:
$highlight-color: #F90; $highlight-border: 1px solid $highlight-color; .selected { border: $highlight-border; } //編譯后 .selected { border: 1px solid #F90; }
3. 變量名中的中橫線(hyphen
)和下劃線(underscore
)
sass的變量名可以使用中劃線和下劃線,用中劃線聲明的變量可以使用下劃線的方式引用,反之亦然。
也就是,變量名中的中橫線和下劃線沒有區別,兩者互通。
比如下面的示例,中橫線的$link-color
,可以通過下劃線的$link_color
引用。
$link-color: blue; a { color: $link_color; } //編譯后 a { color: blue; }
相對,使用中橫線更普遍些!
嵌套(Nesting
)
css中重復寫選擇器是非常惱人的。尤其是嵌套的html元素樣式,如:
#content article h2 { color: #333 } #content article p { margin-bottom: 1.4em } #content aside { background-color: #EEE }
Scss的嵌套
Sass中,借助在規則塊中嵌套子規則塊,可以使重復選擇器只寫一遍,避免重復而且可讀性更高。
比如上面的示例,借助scss嵌套:
#content { article { h2 { color: #333 } p { margin-bottom: 1.4em } } aside { background-color: #EEE } }
scss嵌套打開(解析)的規則是:從外層到內層,將嵌套規則塊打開,父級的選擇器放在子級選擇的前面組成一個新的選擇器,然后再循環打開內部的嵌套塊處理。
父選擇器的標識符&
通常,sass解析嵌套時,把父選擇器(#content
)通過一個空格連接到子選擇器的前邊(article
和aside
)形成(#content article
和#content aside
),即生成后代選擇器。
但是對于偽類:hover
、對于多class名等情況,則不應該以"后代選擇器"的方式連接,比如:
article a { color: blue; :hover { color: red } }
默認生成的article a :hover
會讓article元素內a鏈接的所有子元素在被hover時都會變成紅色,顯然是不正確的(應該應用到a自身)。
為此sass提供了一種特殊的選擇器:父選擇器&
。它可以更好的控制嵌套規則!
只要是選擇器可以放置的地方,就都可以在嵌套中同樣使用
&
。
article a { color: blue; &:hover { color: red } }
展開時,&
被父選擇器直接替換:
article a { color: blue } article a:hover { color: red }
通過&
可以在嵌套塊內,實現在父選擇器之前添加選擇器(非常靈活)。
如:
#content aside { color: red; body.ie & { color: green } }
群組選擇器嵌套
css中,使用,
分割的群組選擇器可以同時應用樣式在多個選擇器上,如:
h2, h3 { margin: 0; }
但是,如果想對一個特定的容器元素內的多個元素,使用群組選擇器時,就會有很多重復性工作。
.container h2, .container h3, .container h4 { margin-bottom: .8em }
而,sass的嵌套特性,在解開一個內嵌的群組選擇器時,會把每一個內嵌選擇器正確的結合起來:
.container{ h2,h3,h4{ margin-bottom:.8em; } }
sass會組合成 .container h2
、 .container h3
、.container h4
三者的群組選擇器:.container h2, .container h3, .container h4{ xxx }
。
同樣,群組選擇器內的嵌套也會以這種方式解析:
nav, aside { a {color: blue} } // nav a, aside a {color: blue}
子組合選擇器和同層組合選擇器:>、+和~
這三種選擇器必須和其他選擇器配合使用。
/* 子組合選擇器> */ article > section { border: 1px solid #ccc } /* 相鄰組合選擇器+ 選擇 元素后緊跟的指定元素 */ header + p { font-size: 1.1em } /* 同層全體組合選擇器~,選擇所有跟在article后的同層article元素 */ article ~ article { border-top: 1px dashed #ccc }
在sass中使用時,可以通過嵌套直接生成正確的結果(位于外層選擇器的后面,或內層選擇器的前面均可!),而不需要使用&
。
article { /* 放在 里層選擇器前邊 */ ~ article { border-top: 1px dashed #ccc } > section { background: #eee } /* 放在 外層選擇器后邊 */ dl > { dt { color: #333 } dd { color: #555 } } nav + & { margin-top: 0 } }
解開后的css為:
article ~ article { border-top: 1px dashed #ccc } article > footer { background: #eee } article dl > dt { color: #333 } article dl > dd { color: #555 } nav + article { margin-top: 0 }
最后一句,
nav + &
使用父選擇器&后,原本默認的嵌套規則不再適用,而是直接應用 & 組合的結果。
屬性嵌套
sass中,屬性也可以進行嵌套!
把屬性名從中劃線-的地方斷開,在該屬性后邊添加一個冒號:,緊跟一個{ }塊,把子屬性部分寫在這個{ }塊中。這樣就可以實現屬性的嵌套。
nav { border: { style: solid; width: 1px; color: #ccc; } }
編譯生成如下:
nav { border-style: solid; border-width: 1px; border-color: #ccc; }
結合屬性的縮寫形式,可以實現在嵌套屬性中指明需要額外樣式的特殊子屬性。
nav { border: 1px solid #ccc { /* 單獨設置的 子屬性 */ left: 0px; right: 0px; } } /* 生成后 */ nav { border: 1px solid #ccc; border-left: 0px; border-right: 0px; }
插值(Interpolation
)
類似 es6 中的插值表達式,Sass也提供了插值計算的方式。
插值幾乎可以用在任何地方,作為一個 SassScript 表達式的嵌入結果。
Sass的插值寫法為:#{$variable_name}
。
利用插值動態生成選擇器、屬性名和值
可以使用插值獲取變量或函數調用到一個選擇器、或屬性值。
比如:
$bWidth:5px; $style:"blue"; .nav { border: #{$bWidth} solid #ccc; &.nav-#{$style} { color: #{$style}; } } // 編譯為: .nav { border: 5px solid #ccc; } .nav.nav-blue { color: blue; }
屬性名使用插值變量
使用插值的一個好處是,可以直接將變量值作為屬性名使用。
如下,通過插值,屬性名直接用變量來替代,這樣就可以動態生成屬性。
不使用插值,直接在屬性的位置使用變量
$property
,將會被處理為對變量的賦值!
$value:grayscale(50%); $property:filter; .nav{ #{$property}: $value; } // 編譯為: .nav { filter: grayscale(50%); }
在 @mixin 中使用插值
@mixin 混合器將在下一節介紹。
插值在寫mixin時非常有用,比如下面通過傳遞的參數創建選擇器(來自官網):
@mixin define-emoji($name, $glyph) { span.emoji-#{$name} { font-family: IconFont; font-variant: normal; font-weight: normal; content: $glyph; } } @include define-emoji("women-holding-hands", " ");
編譯后的CSS為:
@charset "UTF-8"; span.emoji-women-holding-hands { font-family: IconFont; font-variant: normal; font-weight: normal; content: " "; }
css的特殊函數(Special Functions
【僅作了解】)
CSS中的許多函數都可以在Sass中正常使用,但也有一些特殊的函數有所不同。
所有的特殊函數,調用都返回不帶引號的字符串。
url()
url()
函數在CSS中很常見,但是它的參數可以是帶引號或不帶引號的URL。
不帶引號的URL在 Sass 中是無效的,所以需要特殊邏輯進行解析。
如下是url()的示例,如果url()的參數是有效的不帶引號URL,Sass會原樣解析它,并且不帶引號時也可以使用插值表達式;如果不是有效的不帶符號URL,將會解析其中的變量或函數,并轉換為普通的CSS函數調用。
$roboto-font-path: "../fonts/roboto"; @font-face { // 引號中作為一個正常的函數調用解析 src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2"); font-family: "Roboto"; font-weight: 100; } @font-face { // 使用數學表達式,解析為普通的函數調用 src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2"); font-family: "Roboto"; font-weight: 300; } @font-face { // 作為一個插值表達式特殊處理 src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2"); font-family: "Roboto"; font-weight: 400; }
calc(), clamp(), element()
算數表達式 calc() 和 Sass 的沖突;element() 的參數可以color。
使用它們時,Sass除了處理插值,其他都會保持原樣解析!
min() 和 max()
Sass早于CSS支持使用 min() 和 max(),為了兼容所以需要特殊處理。
如果 min() 和 max() 函數調用的是普通CSS,則會被編譯為CSS的 min() 和 max()。
普通CSS(Plain CSS
)包含嵌套調用 calc(), env(), var(), min(), max() 以及 插值。
但是,只要包含 SassScript 的特性,比如 Sass的變量、函數調用,min() 和 max() 就會被作為 Sass 的函數處理。
$padding: 12px; .post { // max()沒有使用插值以外的Sass特性, 所以將會被編譯為 CSS 的 max(). padding-left: max(#{$padding}, env(safe-area-inset-left)); padding-right: max(#{$padding}, env(safe-area-inset-right)); } .sidebar { // 應為沒有通過插值使用sass變量,此處會調用Sass內置的 max() padding-left: max($padding, 20px); padding-right: max($padding, 20px); }
注釋
sass另外提供了一種不同于css標準注釋格式/* ... */
的注釋語法,即靜默注釋,以//
開頭,直到行末結束。
在生成的css中,靜默注釋將會被抹除,這樣,可以按需抹除一些注釋,而不需要全部顯示給其他人。
body { color: #333; // 這種注釋內容不會出現在生成的css文件中 padding: 0; /* 這種注釋內容會出現在生成的css文件中 */ }
當標準注釋
/* ... */
出現在原生css不允許的地方時,也會在編譯后的css中被抹去。
多行注釋 /* ... */
在 compressed 模式下會被移除,但是如果以 /*!
開頭,則仍會包含在生成的 CSS 中。
使用@import
可以導入另外的sass文件(在生成css文件時會把相關文件導入進來)。在被導入文件中定義的變量和混合器maxin等均可在導入文件中使用。
css中的
@import
導入其他css文件很不常用,因為它是在執行到@import
規則時才會加載其他的css文件,這會導致頁面加載變慢、樣式的錯亂和延遲等問題。
注:Sass官方目前已經開始打算用 @use 替代 @import 規則,因此鼓勵使用 @use。但是,目前只有 Dart Sass 支持 @use,因此,現階段主要還是使用 @import。
scss導入sidebar.scss
文件,可以使用如下規則:
@import "sidebar"; @import "sidebar.scss";
sass局部文件(或分部文件,partial file
)
有的sass文件是專門用于被@import
命令導入的,而不需要單獨生成css文件,這樣的文件稱為局部文件。
sass的約定是:sass局部文件的文件名以下劃線 _ 開頭,sass在編譯時就不會將這個文件編譯輸出為css。
在 @import
局部文件時,可以省略文件開頭的下劃線和.scss
后綴,不需要寫文件的全名。
局部文件可以被多個不同的文件引入。對于需要在多個頁面甚至多個項目中使用的樣式,非常有用。
默認變量值
通常情況下,在反復多次聲明一個變量時,只有最后一個聲明有效(即使用最后一個聲明賦予的值)。
sass通過!default
標簽可以實現定義一個默認值(類似css的!important
標簽對立),!default
表示如果變量被聲明賦值了則用新聲明的值,否則用默認值。
比如一個局部文件中:
$fancybox-width: 400px !default; .fancybox { width: $fancybox-width; }
如果用戶在導入該sass局部文件之前,聲明了一個 $fancybox-width
變量,那么局部文件中對 $fancybox-width
賦值400px的操作就無效。如果用戶沒有做這樣的聲明,則 $fancybox-width
將默認為400px。
也就是,在后面使用 !default
聲明的變量,并不會覆蓋其前面聲明賦值的相同變量值。
嵌套導入
sass可以在嵌套規則塊的內部使用@import
導入局部文件【局部文件會被直接插入到css規則內導入它的地方】。
如局部文件_blue-theme.sass
內容為:
aside { background: blue; color: white; }
將它導入到一個CSS規則內:
.blue-theme {@import "blue-theme"}
生成的結果跟你直接在 .blue-theme
選擇器內寫 _blue-theme.scss
文件中的內容完全一樣。
.blue-theme { aside { background: blue; color: #fff; } }
原生的CSS導入的支持
sass中支持原生css的導入,會生成原生的scc @import(在瀏覽器解析css時再下載并解析)。
sass中@import
生成原生css導入的條件是:
被導入文件的名字以.css結尾;
被導入文件的名字是一個URL地址(比如http://www.sass.hk/css/css.css%EF%BC%89)
被導入文件的名字是CSS的url()值。
如果想將原始的css文件,當做sass導入,可以直接修改.css
后綴為.scss
(sass語法完全兼容css)。
到此,相信大家對“Scss基礎語法和導入SASS文件的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。