getComputedStyle()用于获取DOM元素的最终计算样式,返回只读CSSStyleDeclaration对象,含已解析的像素值、rgb颜色等;支持伪元素查询但需注意content引号及未渲染情况。
要获取 dom 元素的样式计算值(即浏览器最终应用的实际样式),主要用 getcomputedstyle() 方法。它返回一个只读的 cssstyledeclaration 对象,包含该元素所有**已计算完毕**的 css 属性值(比如百分比转成像素、相对单位转成绝对值、继承值被展开等)。
使用 getComputedStyle 获取计算样式
这是标准且兼容性良好的方式,适用于大多数场景:
- 第一个参数是目标 DOM 元素(必需)
- 第二个参数可选,传伪元素字符串(如
::before),不传则默认为元素本身 - 返回的对象属性名遵循驼峰命名(如
backgroundColor),不是 CSS 中的短横线形式(background-color) - 获取的值是字符串类型(如
"rgb(255, 0, 0)"、"16px"),需手动解析数字或颜色
示例:
const el = document.querySelector('#myDiv');
const style = getComputedStyle(el);
console.log(style.fontSize); // "16px"
console.log(style.backgroundColor); // "rgb(255, 0, 0)"
console.log(style.width); // "200px"(即使 CSS 写的是 50%,也会转成具体像素)
注意:计算值 ≠ 行内样式,也不等于 CSS 规则文本
getComputedStyle() 返回的是浏览器布局后确定的最终值,和以下几种常见情况不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
element.style.xxx:只读取行内样式(
style属性),不包含 CSS 文件或继承来的值 -
document.defaultView.getComputedStyle():和直接调用
getComputedStyle()等价,无需显式写defaultView -
computedStyleMap():较新的 API(Chrome 94+),返回
StylePropertyMapReadOnly,支持更结构化的访问(如styleMap.get('font-size').value),但兼容性有限,暂不建议生产环境主用
获取伪元素的计算样式
如果想查 ::before 或 ::after 的样式,把伪元素名称作为第二个参数传入:
立即学习“Java免费学习笔记(深入)”;
const beforeStyle = getComputedStyle(el, '::before'); console.log(beforeStyle.content); // '"Hello"'(注意带引号) console.log(beforeStyle.left); // "10px"
注意:content 值会保留 CSS 中的引号;伪元素若未在 CSS 中定义或未渲染(如 display: none),可能返回空字符串或默认值。
常见陷阱与处理建议
-
单位转换需手动处理:比如
fontSize是"1.2em"还是"16px"取决于计算上下文,通常已是像素值;但某些情况(如根字体缩放)可能返回rem,需结合document.documentElement.fontSize换算 -
颜色格式统一为 rgb/rgba:无论原始写法是
#f00、red还是hsl(...),计算值基本都是rgb(255, 0, 0)或rgba(...) -
不可见元素仍可获取计算样式:即使
display: none,getComputedStyle仍返回值(但尺寸类属性如width、height通常为"0px");而visibility: hidden不影响尺寸计算 - 避免频繁调用:该方法触发重排(reflow)风险低,但大量调用仍可能影响性能,必要时缓存结果

















