使用:hover 修改另一个类的css?

IT技术 javascript css class hover
2021-03-06 13:25:25

仅使用 css 将鼠标悬停在另一个类的元素上时,是否可以修改一个类的 css?

就像是:

.item:hover .wrapper { /*some css*/ }

只有 'wrapper' 不在 'item' 里面,它在别的地方。

我真的不想将 javascript 用于这么简单的事情,但如果我必须这样做,我该怎么做?这是我失败的尝试:

document.getElementsByClassName('item')[0].onmouseover="document.getElementsByClassName('wrapper')[0].style.background="url('some url')";";

每个类只有一个元素。不知道为什么他们在制作模板时不使用 ID,但事实就是如此,我无法更改它。

[编辑]

这是一个菜单。每个菜单元素都有一个不同的类。当您将鼠标悬停在元素上时,会在右侧弹出一个子菜单。这就像一个叠加层,当我使用“检查元素”工具时,我可以看到当子菜单处于活动状态时整个网站的 html 都会发生变化(意味着除了子菜单之外什么都没有)。我称之为“包装器”的类具有控制子菜单背景的 css。我真的看不出这两个类之间的联系。

5个回答

您可以采用两种方法,让悬停的元素影响 ( E) 另一个元素 ( F):

  1. F是 的子元素E,或
  2. F是稍后兄弟(或兄弟姐妹的后代)元件E(在E出现在标记上/ DOM F):

为了说明这些选项中的第一个(F作为 的后代/子代E):

.item:hover .wrapper {
    color: #fff;
    background-color: #000;
}​

为了演示第二个选项,F作为 的同级元素E

.item:hover ~ .wrapper {
    color: #fff;
    background-color: #000;
}​

在这个例子中,如果.wrapper.item(两者之间没有其他元素)的直接兄弟,你也可以使用.item:hover + .wrapper.

JS小提琴演示

参考:

你在 2015 年帮助了我。:D
2021-04-24 13:25:25
你让我开心.. 非常感谢
2021-04-25 13:25:25

目前在 CSS 中是不可能的,除非您想选择一个子元素或同级元素(这里的其他答案中描述了微不足道的元素)。

对于所有其他情况,您将需要 JavaScript。jQuery 和 Angular 等框架可以相对轻松地解决这个问题。

[编辑]

使用新的 CSS (4) 选择器:has(),您将能够定位父元素/类,在不久的将来使仅 CSS 的解决方案可行!

@MarcusRiemer 这是我的一个相当古老的问题,当时我可能没有很好地描述描述,但是对我有帮助的是以下内容: .common_parrent:has(.item:hover) .content {/*...*/}
2021-05-09 13:25:25
简要阅读:has它后,我的印象是它只对当前范围内的孩子起作用。您将如何使用 来定位育儿元素:has
2021-05-13 13:25:25

您可以通过制作以下 CSS 来实现。如果悬停在根上,您可以将影响子类所需的 css 放在这里

.root:hover    .child {
   
}

如果 .wrapper 位于 .item 中,并且您不是在 IE 6 中,或者 .item 是一个标签,那么您拥有的 CSS 应该可以正常工作。你有证据表明它不是吗?

编辑:

单独的 CSS 不能影响未包含在其中的内容。要做到这一点,请像这样格式化菜单:

<ul class="menu">
    <li class="menuitem">
        <a href="destination">menu text</a>
        <ul class="menu">
            <li class="menuitem">
                <a href="destination">part of pull-out menu</a>
... etc ...

和你的 CSS 是这样的:

.menu .menu {
    display: none;
}

.menu .menuitem:hover .menu {
    display: block;
    float: left;
    // likely need to set top & left
}
他们说“只有‘包装’不在‘项目’里面,它在别的地方。”
2021-05-04 13:25:25

你可以这样做。
当悬停到 时.item1,它会改变.item2元素。

.item1 {
  size:100%;
}

.item1:hover
{
   .item2 {
     border:none;
   }
}

.item2{
  border: solid 1px blue;
}
这种语法对我不起作用......“样式规则中缺少选择器。”。你能发布一个工作示例吗?
2021-04-23 13:25:25