還在寫行內樣式醜醜的嗎?教你不用寫css檔案,使用javascript來動態修改樣式的招數! 這樣子處理的層次又更不一樣, 前端之路有你有我,馬上來看看這是怎麼完成的。
首先樣式寫成物件
```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(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的風格我也很愛,感覺很舒服,跟第一個的有點類似卻不太一樣。 這個是把迴圈弄再函式了,所以呼叫一次就會全部修改。 第一個則是把物件內的東西丟給迴圈,一次一次去做改動變化, 邏輯上一模一樣,手段跟風格差異而已唷。
使用這個小技巧很有趣,之後我們會應用到「JS油猴系列-遮蔽廣告腳本,自定義新增名單」文章裡面。 當要寫腳本,很需要JS動態修改CSS的時候,這種小技巧就佔了很大的角色呢٩(๑•̀ω•́๑)۶! 是不是沒有想到居然可以用JS修改呀!
加上我認為比較差的寫法,就不只三種了呢。 趕快選一種喜歡的, 練習成自己的寶藏知識吧!
請教一下,用 js 改 css 的方式,之前有沒有做過弱點掃描的經驗呢? 之前專案做過弱掃都報我用 js 改樣式的方式
很好的問題!感謝 jordan 提出! 這問題我也從沒想過,我想了一下,有點不懂為什麼用 js 改 css 算是資安漏洞? 我研究了一下,會不會跟 css 可以執行 javascript 有關? https://codepen.io/3n3a/pen/RwGKwrX
感謝站長,
我之前是用 OWASP 去掃的,我用 Nuxt ,然後用了像 gsap 、還有一些其他像 lottie ,再來也有用 js 去監測改變樣式,或是 vue 本身 props 傳值到元件的 style 改樣式。
導致說弱掃中風險建議我設定好 csp (unsafe-inline),但只要我設定 csp 不通過 unsafe-inline ,那些 js 改動有的直接消失,或是不作用。
關於 Nuxt vue 檔案的
很好的文章,我已拿來作為宣傳內容,分享到眾多公開社團!
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/