SCSS #{} 插值
很多從事前端的朋友應該看到#{}感覺非常眼熟,因為這是ES2015新增的佔位符。
佔位符大括號中可以是任意的合法表示式,能夠很方便的實現字串連線操作。
SCSS的#{}與JavaScript中的佔位符非常的類似,也具有計算並返回表示式的值和資料拼接操作。
由此也可以看到,多學習一門語言或者周邊知識,能夠開闊思路,有利於問題的解決。
關於JavaScript佔位符相關知識可以參閱${} 佔位符用法一章節。
通常情況下,SCSS中的變數只能作為屬性值或者運算數,不能直接與其他資料拼接起來。
首先看一段程式碼例項:
[Scss] 純文字檢視 複製程式碼$name: foo; $attr: border; p.$name { $attr-color: blue; }
程式碼分析如下:
(1).宣告兩個變數$name和$attr,並分別賦值。
(2).變數$name直接與選擇器p連線在一起。
(3).變數$attr直接與-color連線在一起。
上面的使用非常粗暴,就如同JavaScript宣告一個變數web,強行和其他字串拼接在一起,如web"螞蟻部落"。
上述SCSS程式碼編譯成CSS,會報錯如下:
[Scss] 純文字檢視 複製程式碼Error: Invalid CSS after "p.": expected class name, was "$name"
使用本文的主角#{} 可以很好的解決上述問題,程式碼修改如下:
[Scss] 純文字檢視 複製程式碼$name: foo; $attr: border; p.#{$name} { #{$attr}-color: blue; }
上述程式碼將變數放在大括號中,應用方式與JavaScript中的佔位符如出一轍。
對齊進行一下分析,以便於理解與記憶:
(1).#{}大括號中可以是任何有效的表示式,然後計算並返回這個表示式的值。
(2).$name與$attr都是變數,放在大括號的時候,它們都是一個表示式,能夠返回它們各自的值。
(3).返回值可以與其他內容進行拼接,或者說在指定位置插入了這個返回值,最終實現了插值操作。
上述程式碼最終編譯成CSS,結果如下:
[CSS] 純文字檢視 複製程式碼p.foo { border-color: blue; }
再來看一段關於#{}的應用例項,程式碼如下:
[Scss] 純文字檢視 複製程式碼p { $font-size: 12px; $line-height: 30px; font: $font-size/$line-height; }
上面是一段簡單的SCSS程式碼,宣告兩個變數$font-size和$line-height,並對它們賦值。
程式碼的本意是通過font設定當前元素的字型大小與行高,然而編譯成CSS卻是如下結果:
[CSS] 純文字檢視 複製程式碼p { font: 0.4; }
很明顯程式碼將斜槓當做了除法運算子,並計算出兩個變數相除的結果。
雖然沒有語法錯誤,但是卻沒有達到我們的預期效果,通過#{} 可以輕鬆解決上述問題,程式碼修改如下:
[Scss] 純文字檢視 複製程式碼p { $font-size: 12px; $line-height: 30px; font: #{$font-size}/#{$line-height}; }
將兩個變數分別放入大括號中,程式設計CSS程式碼如下:
[CSS] 純文字檢視 複製程式碼p { font: 12px/30px; }
通過利用#{}實現了我們的預期效果,斜槓並沒有被當做除法運算子。
可以記住這個特點,當然也可以試著以JavaScript的思路進行理解,畢竟SCSS是模擬程式語言,#{}會對錶達式進行計算並返回其值,我們可以認為返回的值是一個字串型別,那麼就產生一個字串上下文環境,斜槓被認作字串的一部分,自然就不會當做除法運算子使用,當然SCSS內部的解析也許並非如此,以上述方式理解僅僅是接受並記憶概念的一家之言。
相關文章
- 二、插值操作
- MATLAB插值Matlab
- MATLAB一維插值和二維插值 比較Matlab
- SCSS 顏色值運算CSS
- 【java】【插值查詢】Java
- 求插值係數
- 插值技術研究
- 數值計算 插值與擬合
- c#-string 插值C#
- 拉格朗日插值
- B樣條插值加速
- 插值查詢演算法演算法
- Swift 5 字串插值之美Swift字串
- Swift 5 字串插值-簡介Swift字串
- 插值演算法總結演算法
- CoffeeScript攻略3.8:字串插值字串
- 2.Vue插值表示式Vue
- scala實現球面插值(Slerp)
- 插值查詢的簡單理解
- MemoryCache 的原生插值方式淺談
- vue.js插值與表示式Vue.js
- 影象縮放--插值法(opencv,原理)OpenCV
- 實驗二 插值方法(android)Android
- 連續插值,用forall實現。
- Qt自定義動畫插值函式QT動畫函式
- 查詢演算法__插值查詢演算法
- 常用演算法 插值演算法演算法
- Vue 模板語法第一式 —— 插值Vue
- 牛頓插值 C++ 和 Matlab實現C++Matlab
- 層次分析法 插值與擬合
- 拉格朗日插值學習筆記筆記
- scssCSS
- 【Android 動畫】動畫詳解之插值器(二)Android動畫
- 數值分析Python實現系列—— 一、拉格朗日插值法Python
- SCSS @importCSSImport
- SCSS @extendCSS
- SCSS @mixinCSS
- SCSS @if() 指令CSS