如何在伪元素上使用 Chrome 开发工具设置悬停?

How do you set hover using Chrome Dev Tools on pseudo elements?

我正在调试 Bootstrap Tabs 模块,使用 Tab 模块的应用程序将其所有颜色更改放在 li:hover::before 元素中。 Firefox 不会将 ::before 与 DOM 元素分开,但 Chrome 会。在常规 DOM 元素上,例如 a,我可以右键单击以调出菜单以 select 悬停或单击右侧的图钉以 select 悬停

Picture of menu with image Picture of right side of dev tools

当我在元素 window 中右键单击 ::before 或尝试 select 将鼠标悬停在开发工具 windows 的右侧时,我不能。

有没有办法在伪元素上创建悬停动作?

我不相信 :hover 可以直接应用于伪元素。 Selectors Level 3 specification states:

Only one pseudo-element may appear per selector, and if present it must appear after the sequence of simple selectors that represents the subjects of the selector.

我可能错了,但我相信伪classes(如:hover)是选择器的主题的一部分。这本身意味着在伪元素之后指定伪class是无效的。

这反过来意味着无法将 :hover 样式专门应用于伪元素,但是正如其他人在评论中所述,您可以在它们所属的元素上执行此操作。

*::before:hover {
  /* This markup is INVALID as pseudo-class selectors
   * cannot be placed after pseudo-element selectors.
   */
}

*:hover::before {
  /* This would apply styling to the pseudo-element
   * when the containing element is hovered over.
   */
}

如上面的答案所述,无法直接在伪元素上应用 :hover。但是有一个解决方法,可以使用 jQuery 来实现。 出于测试目的 您可以为 element:hover::before 定义一个单独的 CSS class 添加一个 button 并将 class 应用到点击按钮上的元素。

HTML:

<p>This is a sample paragraph.</p>
<input type="button" id="btnFoo" value="Apply Hover On Before"/>

CSS:

p:before{
  content: 'B4';
}
p.foo::before{
  color: red;
}

JS:

$("#btnFoo").click(function () {
    $("p").toggleClass("bar");
});

DEMO