iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
Modern Web

關於SASS/SCSS系列 第 28

[DAY28]SASS Map函數

  • 分享至 

  • xImage
  •  

前情提要

又是一天的函數來啦!!


正文

Maps函數介紹

很常有人說SASS是一個數據地圖
因為在SASS裡面很常有一個樣式是key value綁在一起
然後稱之為map
map的用途是把類似的樣式放在一起,
然後它會更好的新增或是修改。
在map裡面再繼續加map也是可以的
只是還是要注意不要堆疊太多層
就跟巢狀結構一樣,
太多層的時候編譯會比較困難
而且不是只有編譯 太多層的時候自己看起來也是困擾的。

Maps函數分類

分為鍵值key跟值value

|意外的插曲|
設定map的時候出現了一點問題
我原本想像當中的map宣告是長類似這樣的

$role-colors: 
  hair: #b06,
  eyes: #334,
  dress: #666777

就是用SCSS的版本去掉括號,
但是怎麼試都沒有成功。
Syntax error: Illegal nesting: Nothing may be nested beneath variable declarations.
這個字樣一值跳出來,
但我努力看了很多次都沒有成功
正當我想了又想是不是自己眼殘的時候
試了一次新的方法

$role-colors: (hair: #b06,eyes: #334,dress: #666777)

成功了!!!

後來取查了一下才發現SASS不支援多行列表
目前好像是無解(或者是我沒有查到最新的資訊
有興趣可以看這裡

|Map-get()函數|:
根據鍵值找到地圖裡面相應的值
https://ithelp.ithome.com.tw/upload/images/20221008/20151717ZSI3qsbnQW.png

|Map-merge()函數|:
把兩個map合併變成一個新的map

|Map-remove()函數|:
把地圖裡面的一個鍵值刪掉
https://ithelp.ithome.com.tw/upload/images/20221008/20151717kZ3hvng4Bf.png

|Map-keys()函數|:
得到地圖當中的所有鍵值keys
https://ithelp.ithome.com.tw/upload/images/20221008/20151717QIF5d71b3d.png

|Map-values()函數|:
同理 得到地圖當中的所有值values
https://ithelp.ithome.com.tw/upload/images/20221008/20151717la8xhMkBk5.png

|map-has-key()函數|:
類似尋找的功能 map-get你確定地圖裡面有鍵值跟值
但是map-has-key是給定一個鍵值之後判斷地圖裡面有沒有相應的值再返回true或是false
https://ithelp.ithome.com.tw/upload/images/20221008/20151717Wi0QPGLsLH.png


應用篇

|應用1(問題1)|
Map-has-key()函數加上if配合Map-get()函數
當使用Map-get()的時候,
如果裡面沒有相應的值,
就會長以下這樣
https://ithelp.ithome.com.tw/upload/images/20221008/20151717nQCCY704zB.png
不會顯示error可是就只是null,
如果今天只是打錯,
可能要找很久才會發現。

|解決1|
先用Map-has-key()看看有沒有值,
再使用Map-get()得到該值,
如果沒有的話,
也會有一個顯示。
因為是@warn,所以會顯示在命令終端提是字元裡面。
https://ithelp.ithome.com.tw/upload/images/20221008/201517171DlhhFZKqy.png

|應用2|
Map-keys()函數是同時取得所有key值的方法,
形成一個list之後,
可以利用列表函數做種活動。
同理適用於Map-values()函數


/images/emoticon/emoticon82.gif


上一篇
[DAY27]SASS字符串函數|Introspection函數
下一篇
[DAY29]SASS 顏色函數(3)
系列文
關於SASS/SCSS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言