前情提要

還在寫行內樣式醜醜的嗎?教你不用寫css檔案,使用javascript來動態修改樣式的招數! 這樣子處理的層次又更不一樣, 前端之路有你有我,馬上來看看這是怎麼完成的。

要修改CSS怎麼做呢?物件儲存

首先樣式寫成物件

```css= const die={ display:"none" }


為什麼要寫成物件呢?修改一種,可能看不出來,修改很多樣式就能感受到, 物件這個儲存方式是有它特別的美感與好處的。 下面我來舉例: ```css= const wrapperStyle = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%,-50%)', width: '350px', backgroundColor: '#261d4a', borderRadius: '5px', transition: 'box-shadow .5s ease', overflow: 'hidden' };

語法介紹 Object.assign

使用範例 Object.assign(element.style,Style) element是你要修改的元素,Style是樣式寫的object

這是修改一個的情況,當像是上面很多屬性要改的話,我們物件與JS的好處就產生了! 直接使用迴圈來全部套入: ```javascript= const wrapper = document.getElementsByClassName('wrapper'); for (let i = 0; i < wrapper.length; i++) { Object.assign(wrapper[i].style, wrapperStyle); }


[MDN官網說明](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) [JS 原力覺醒 Day27 - JS 常用 API - Object.assign && Object.defineProperty](https://ithelp.ithome.com.tw/notifications) ## 還有沒有別的寫法? 有。

document.getElementById("myElement").style.cssText = display: block; position: absolute;;


這樣寫也跟原生css寫起來差不多,比較舒服。 用這種比較分離畫面與程式的寫法, 體感上爽度更高。 就不會是找到元素後還要.style.display="none" 一直.屬性.進去點點點這樣。 ## 說好的三種呢?

function setStyle( objId, propertyObject ) { var elem = document.getElementById(objId); for (var property in propertyObject) elem.style[property] = propertyObject[property]; }

setStyle('myElement', {'fontsize':'12px', 'left':'200px'});

``` 這種寫成function的風格我也很愛,感覺很舒服,跟第一個的有點類似卻不太一樣。 這個是把迴圈弄再函式了,所以呼叫一次就會全部修改。 第一個則是把物件內的東西丟給迴圈,一次一次去做改動變化, 邏輯上一模一樣,手段跟風格差異而已唷。

stackoverflow

心得

使用這個小技巧很有趣,之後我們會應用到「JS油猴系列-遮蔽廣告腳本,自定義新增名單」文章裡面。 當要寫腳本,很需要JS動態修改CSS的時候,這種小技巧就佔了很大的角色呢٩(๑•̀ω•́๑)۶! 是不是沒有想到居然可以用JS修改呀!

加上我認為比較差的寫法,就不只三種了呢。 趕快選一種喜歡的, 練習成自己的寶藏知識吧!

按讚的人:

共有 13 則留言

很好的文章,我已拿來作為宣傳內容,分享到眾多公開社團!

https://www.facebook.com/groups/javascript.tw/permalink/5541848932583066/

https://www.facebook.com/groups/javascript.html.css.node/permalink/1816342628760240/

https://www.facebook.com/groups/f2e.tw/permalink/6002559003114748/

按讚的人:

謝謝站長鼓勵,我會持續精進自我並且分享~

按讚的人:

請教一下,用 js 改 css 的方式,之前有沒有做過弱點掃描的經驗呢? 之前專案做過弱掃都報我用 js 改樣式的方式

按讚的人:

很好的問題!感謝 jordan 提出! 這問題我也從沒想過,我想了一下,有點不懂為什麼用 js 改 css 算是資安漏洞? 我研究了一下,會不會跟 css 可以執行 javascript 有關? https://codepen.io/3n3a/pen/RwGKwrX

按讚的人:

@jordan 你之前是用什麼軟體掃描?有錯誤訊息可以參考嗎? 大家一起研究一下,相關資安漏洞在哪邊!

按讚的人:

感謝站長,

我之前是用 OWASP 去掃的,我用 Nuxt ,然後用了像 gsap 、還有一些其他像 lottie ,再來也有用 js 去監測改變樣式,或是 vue 本身 props 傳值到元件的 style 改樣式。

導致說弱掃中風險建議我設定好 csp (unsafe-inline),但只要我設定 csp 不通過 unsafe-inline ,那些 js 改動有的直接消失,或是不作用。

關於 Nuxt vue 檔案的