JavaScript getComputedStyle
最后修改于 2025 年 4 月 2 日
在本文中,我们将探讨 JavaScript 中的 window.getComputedStyle
方法。此方法对于访问 DOM 元素的计算后 CSS 样式至关重要,包括来自样式表和内联样式的样式。
基本定义
window.getComputedStyle
方法返回一个对象,其中包含元素的所有 CSS 属性,这些属性是从样式表和内联样式计算得出的。它提供了浏览器用于渲染元素的最终值。
与仅返回内联样式的 element.style
不同,getComputedStyle
返回所有影响元素的样式。这包括默认浏览器样式和 CSS 规则中的样式。
基本的 getComputedStyle
此示例演示了如何访问简单 div 元素的计算后样式。
<!DOCTYPE html> <html> <head> <title>Basic getComputedStyle</title> <style> #myDiv { width: 200px; height: 100px; background-color: lightblue; padding: 10px; } </style> </head> <body> <div id="myDiv">Sample Content</div> <script> const div = document.getElementById('myDiv'); const styles = window.getComputedStyle(div); console.log('Background color:', styles.backgroundColor); console.log('Width:', styles.width); console.log('Height:', styles.height); console.log('Padding:', styles.padding); </script> </body> </html>
在这个基本示例中,我们有一个带样式的 div 元素。JavaScript 代码使用 getComputedStyle
来访问 div 的所有计算后 CSS 属性。
该方法返回一个 CSSStyleDeclaration
对象,其中包含所有计算后样式。然后我们将几个样式属性记录到控制台。请注意,返回值是其计算后的形式(例如,“rgb(173, 216, 230)”)。
访问伪元素样式
此示例展示了如何使用 getComputedStyle 访问伪元素的样式。
<!DOCTYPE html> <html> <head> <title>Pseudo-element Styles</title> <style> #quote::before { content: "“"; font-size: 2em; color: red; } #quote::after { content: "”"; font-size: 2em; color: blue; } </style> </head> <body> <p id="quote">To be or not to be</p> <script> const quote = document.getElementById('quote'); // Get styles for ::before pseudo-element const beforeStyles = window.getComputedStyle(quote, '::before'); console.log('Before content:', beforeStyles.content); console.log('Before color:', beforeStyles.color); // Get styles for ::after pseudo-element const afterStyles = window.getComputedStyle(quote, '::after'); console.log('After content:', afterStyles.content); console.log('After color:', afterStyles.color); </script> </body> </html>
这里我们有一个带有 ::before 和 ::after 伪元素的段落。JavaScript 代码使用 getComputedStyle
的第二个参数来访问这些伪元素的样式。
这演示了如何检查应用于伪元素的样式,这些样式无法通过常规 DOM 方法访问。第二个参数指定要定位的伪元素。
比较内联样式和计算后样式
此示例演示了内联样式和计算后样式之间的区别。
<!DOCTYPE html> <html> <head> <title>Inline vs Computed Styles</title> <style> #compare { font-size: 18px; color: green; } </style> </head> <body> <div id="compare" style="color: red; font-weight: bold;"> Style Comparison </div> <script> const div = document.getElementById('compare'); // Inline styles console.log('Inline color:', div.style.color); console.log('Inline font-size:', div.style.fontSize); // Computed styles const computed = window.getComputedStyle(div); console.log('Computed color:', computed.color); console.log('Computed font-size:', computed.fontSize); console.log('Computed font-weight:', computed.fontWeight); </script> </body> </html>
在此示例中,我们有一个同时具有样式表和内联样式的 div。JavaScript 代码比较了通过 element.style
和 getComputedStyle
可访问的内容。
主要区别在于 element.style
仅显示内联样式,而 getComputedStyle
显示所有应用的样式,包括来自样式表的样式。还要注意,element.style
属性是驼峰式(fontSize),而计算后样式是连字符式(font-size)。
检查可见性状态
此示例显示如何使用 getComputedStyle 检查元素是否可见。
<!DOCTYPE html> <html> <head> <title>Checking Visibility</title> <style> #hidden { display: none; } #visible { visibility: hidden; } </style> </head> <body> <div id="hidden">This is hidden with display: none</div> <div id="visible">This is hidden with visibility: hidden</div> <div id="normal">This is normally visible</div> <script> function checkVisibility(id) { const el = document.getElementById(id); const style = window.getComputedStyle(el); console.log(`${id} visibility:`, style.visibility); console.log(`${id} display:`, style.display); console.log(`${id} is visible:`, style.display !== 'none' && style.visibility !== 'hidden'); } checkVisibility('hidden'); checkVisibility('visible'); checkVisibility('normal'); </script> </body> </html>
这里我们有三个具有不同可见性状态的 div。JavaScript 函数使用 getComputedStyle
来检查它们的 display 和 visibility 属性。
这演示了如何以编程方式确定元素是否可见。请注意,display: none
和 visibility: hidden
对可见性的影响不同,并且都需要检查以进行全面评估。
使用计算后样式进行动画
此示例展示了如何在动画中使用 getComputedStyle,通过在动画之前读取当前值。
<!DOCTYPE html> <html> <head> <title>Animation with Computed Styles</title> <style> #box { width: 100px; height: 100px; background-color: coral; position: relative; left: 0; transition: left 1s ease; } </style> </head> <body> <div id="box"></div> <button onclick="moveBox()">Move Box</button> <script> function moveBox() { const box = document.getElementById('box'); const style = window.getComputedStyle(box); // Get current left position (returns '0px') const currentLeft = parseInt(style.left); // Move to new position based on current position box.style.left = `${currentLeft + 100}px`; } </script> </body> </html>
在此示例中,我们有一个框,在单击按钮时会向右移动。JavaScript 使用 getComputedStyle
在计算新位置之前读取当前的 left 位置。
这演示了如何在动画中使用 getComputedStyle
读取当前属性值。请注意,我们使用 parseInt
将 'px' 字符串值转换为数字以进行计算。
来源
在本文中,我们展示了如何在 JavaScript 中使用 window.getComputedStyle
。此方法对于访问完整的样式信息和创建动态、样式感知型应用程序至关重要。
作者
列出 所有 JS DOM 教程。