JS30 day03 - Update CSS variables
作業內容
今天要做的是做出一個網頁,裡面有張圖片,上面有兩個滑桿,一個選顏色的欄位,隨便改變其中一個,就會讓圖片的顏色 / 模糊度 / padding 跟著改變
HTML:
1 | <h2>Update CSS Variables with <span class='hl'>JS</span></h2> |
CSS:
1 | :root{ |
JS:
1 | const inputs = document.querySelectorAll('.controls input'); |
學到什麼
列點如下:
-
HTML
- 之前都沒有機會用到 type 是 range 的 input,這次終於知道可以做什麼了! 然後需要用 min / max 來設定這個 range 的最大最小值
ex.<input id="spacing" type="range" name="spacing" min="10" max="200" value="10" data-sizing="px">
- 之前都沒有機會用到 type 是 range 的 input,這次終於知道可以做什麼了! 然後需要用 min / max 來設定這個 range 的最大最小值
-
CSS
- 變數:這也是第一次真的在 CSS 裡面用到變數,這次使用的方法如下:
1
2
3
4
5:root{
--base: #ffc600;
--spacing: 10px;
--blur: 10px;
}其中
:root
表示在:root
的範圍內可以使用這些變數,這邊的 root 其實代表html
的範圍,但真的拿來比較的話,優先層級比html
更高
除了:root
之外,可以在 CSS 選擇器之下宣告變數,限縮變數使用範圍,可以參考:https://muki.tw/tech/native-css-variables/另外呼叫的方法也是有點難記:
1
padding: var(--spacing);
- 這也是第一次用到
filter
的屬性(也太多第一次),除了blur
之外,filter
還可以使用很多不同效果,可以參考:https://www.runoob.com/cssref/css3-pr-filter.html
-
JS
-
用
querySelectorAll
拿到的節點很像是Array
但他不是,它是節點組合(nodeList),一般的Array
可以用map
等方法,但這些節點的組合不行,因此有些人會把這些節點的組合再轉型成陣列 -
this.dataset.sizing
裡面的dataset
會把這個 node 所有有關data-
開頭屬性的值,全部拿進來變成 key-value pair -
document.documentElement
對於一個 html 文件來說,他指的就是html
標籤 -
style.setProperty
可以對於某個節點增加行內 CSS 屬性,語法如下:style.setProperty(propertyName, value, priority);
,所以剛剛這行document.documentElement.style.setProperty
他在瀏覽器上面看到的結果會是在html
標籤上直接改變 inline CSS 屬性,可以參考 MDN: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/setProperty
-
總結
我覺得在 CSS 中變數的應用會是很多優化使用者體驗的關鍵,所以今天的作業讓我覺得挺有收穫的!
參考資料:
https://github.com/wesbos/JavaScript30