You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取CSS伪类(如:hover)的属性值?

获取元素伪类(:hover)的CSS属性值问题

尝试使用window.getComputedStyle()读取元素:hover状态的CSS属性值,但返回的是元素默认状态的属性值,而非预期的伪类状态值。

示例代码

HTML代码

<html>
<head>
  <style>
   #lo {
     color: green;
   }

   #lo:hover {
     color: black;
   }
  </style>
</head>

<body>
  <h1 class="yo" id="lo">hello</h1>
</body>
</html>

JS代码

let element = document.getElementById("lo");
console.log(window.getComputedStyle(element,':hover').getPropertyValue("color"));

当前返回值为rgb(0, 128, 0)(默认绿色),而非预期的black(hover状态颜色)。


原因分析

现代浏览器中,getComputedStyle()的第二个伪类参数(如:hover)无法正确获取未触发状态下的伪类样式,因为伪类样式只有当元素实际处于该交互状态时才会被计算应用。


解决办法

方法1:临时触发伪类状态后获取样式

通过模拟鼠标事件触发元素的:hover状态,获取样式后再恢复原状态:

let element = document.getElementById("lo");

// 触发mouseover事件,激活:hover状态
element.dispatchEvent(new MouseEvent('mouseover'));

// 获取计算后的样式
const hoverColor = window.getComputedStyle(element).getPropertyValue("color");
console.log(hoverColor); // 输出rgb(0, 0, 0)(对应black)

// 触发mouseout事件,恢复原状态
element.dispatchEvent(new MouseEvent('mouseout'));

方法2:直接解析CSS样式表

遍历页面的CSS样式表,匹配对应的伪类选择器规则,提取属性值:

function getPseudoStyle(element, pseudo) {
  // 构造匹配的选择器文本
  const selector = `${element.tagName.toLowerCase()}#${element.id}${pseudo}`;
  // 遍历所有样式表
  for (const sheet of document.styleSheets) {
    try {
      // 遍历样式表中的规则
      for (const rule of sheet.cssRules) {
        if (rule.selectorText === selector) {
          return rule.style.color;
        }
      }
    } catch (e) {
      // 跨域样式表会抛出权限错误,直接跳过
      continue;
    }
  }
  return null;
}

let element = document.getElementById("lo");
console.log(getPseudoStyle(element, ':hover')); // 输出black

这种方法无需触发元素状态,但需要确保选择器完全匹配样式表中的定义,且无法处理继承或优先级冲突后的最终样式。


内容的提问来源于stack exchange,提问作者Abhay Salvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:55:10