P粉4133078452023-09-04 20:05:48
使用Array.from(target.style)
取得target.style
的預設迭代器的問題。它不包括背景屬性。根據規範,速記屬性已擴展到其各個部分。
一切都在程式碼中進行了解釋。
感謝@t.niese 在評論中提供的提示。
<div id="test" style="background: var(--bg-white);">Test</div> <script> const target = document.querySelector('#test'); // style is itarable console.log(target.style[Symbol.iterator]); // but doesn't include background in the iterator console.log(...target.style); // but background is iterable! console.log(Object.getOwnPropertyDescriptor(target.style, 'background')); // we can see it in Object.keys console.log(Object.keys(target.style).filter(name => name === 'background')); // so we can iterate it anyway for(const k in target.style){ if(k === 'background'){ console.log(target.style[k]); } } // Object.entries works too console.log(Object.entries(target.style).filter(([name]) => name === 'background')); // or access directly console.log(target.style.getPropertyValue('background')); console.log(target.style.background); </script>
P粉4364105862023-09-04 17:12:59
如果您使用HTMLElement.style
,它將傳回透過style
屬性直接套用(而不是計算)的內容。
在這種情況下,瀏覽器無法知道background: var(--bg-white);
中的var(...)
將解析什麼並它將包含哪些background-...
屬性(變數的內容將放置在var(...)
語句所在的位置,然後結果值將是已解析。
所以如果你例如有--bg-white: content-box Radial-gradient(crimson, skyblue);
那麼你的--bg-white
實際上會影響多個屬性。