CSS 不是带有后内容的选择器

标签 css css-selectors pseudo-element

是否可以在 :after 中使用 :not() 选择器/伪类?

例如,如果我有以下内容:

li:hover > ul
{
    display: block;
}

li:after
{
    content: " ";
    width: 200px;
    height: 200px;
    background: #cccccc;
    position: absolute;
    top: -100px;
    left: -100px;
}

发生的情况是,如果有人将鼠标悬停在由之后创建的内容上,它也会使子菜单显示 block 。换句话说,悬停其他 LI 或 AFTER 内容被确认为悬停 LI。我该如何阻止它,所以它只会在悬停 ACTUAL LI 而不是使用 AFTER 创建的内容时显示 block 。

我想过:li:hover:not(:after) > ul { display: none; } 但没有成功...

也尝试过:li:after:hover > ul 但也没有用。

对此有什么想法吗?这可能看起来微不足道,但它会导致我的设计出现一些问题,因此需要尽快停止它。

最佳答案

如您所见,元素上的 :hover 样式将在悬停在其内容(包括后代元素和伪元素)上时触发。但是,您不能阻止元素上的 :hover 样式应用于其 :after 伪元素,也不能使用 :not() 选择 :after 伪元素(这被 spec 明确禁止)。

这是设计使然,因此唯一的解决方法是不使用 :after,而是使用 JavaScript 生成一些其他元素,您可以将这些元素附加到 li并取消 :hover 效果。

关于CSS 不是带有后内容的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11275823/

相关文章:

html -::after 伪元素出现在之前

HTML:如何创建数字索引

html - first-child 伪类不适用于 <a> 标签

javascript - 独家 CSS 选择器

CSS 在 IE 和 FFox 中被忽略,但在 Chrome 中没有

html - 扩展 :after inline-block for the rest of the element

html - 在 div 上设置背景颜色( Bootstrap )

html - 图标悬停与列表项 anchor 一起悬停时不会悬停 - HTML

html - 强制 li 元素继承其容器的全宽

html - 自定义单选按钮无法将伪元素居中