Css 如何应用子级:悬停而不是父级:悬停

Css 如何应用子级:悬停而不是父级:悬停,css,hover,Css,Hover,在下面的html中,当我将鼠标悬停在child上时,父对象上会出现一个绿色背景。我怎样才能阻止这种事情发生?如果我在子元素之外悬停,我确实需要绿色背景 CSS3很好 .parent{ 填充:100px; 宽度:400px; 高度:400px; } .家长:悬停{ 背景颜色:绿色; } .孩子{ 填充:100px; 宽度:200px; 高度:200px; } .孩子:悬停{ 背景颜色:蓝色; } 小孩 最简单的方法可能是将JS用于这种CSS。也许您可以尝试重新考虑您的实现。为什么要尝试这样做?

在下面的html中,当我将鼠标悬停在child上时,父对象上会出现一个绿色背景。我怎样才能阻止这种事情发生?如果我在子元素之外悬停,我确实需要绿色背景

CSS3很好

.parent{
填充:100px;
宽度:400px;
高度:400px;
}
.家长:悬停{
背景颜色:绿色;
}
.孩子{
填充:100px;
宽度:200px;
高度:200px;
}
.孩子:悬停{
背景颜色:蓝色;
}

小孩

最简单的方法可能是将JS用于这种CSS。也许您可以尝试重新考虑您的实现。为什么要尝试这样做?

使用普通CSS是不可能的。您正在请求子级的伪类(
child:hover
)来影响父级的
background
声明。使用常规css无法指定这类内容


这当然可以用javascript来完成。

所以这确实很难看,但它可以工作(有点)。我基本上是把父母复制成孩子的兄弟姐妹。默认情况下,父覆盖是隐藏的,然后显示在子覆盖的悬停位置上。Chrome不喜欢它,除非您使用+选择器而不是~选择器。这不是很容易扩展,但它可能会工作

正如其他人所说,javascript可能是一个更好的解决方案


.parent{填充:100px;宽度:400px;高度:400px;位置:相对;z索引:998;}
.parent:hover{背景色:绿色;}
.child{填充:100px;宽度:200px;高度:200px;位置:相对;z索引:1000;}
.child:hover{背景色:蓝色;}
.parent覆盖{填充:继承;宽度:继承;高度:继承;位置:绝对;顶部:0;左侧:0;z索引:999;背景色:#FFF;显示:无;}
.child:hover~.parent覆盖{display:block;}
小孩

我只能通过添加附加标记来实现这一点。需要添加一个空div,它基本上充当父背景。看看这里的CSS

HTML部分

  <div class="parent">
    Parent
    <div class="child">
      Child
      <div class="grandson">
        Grandson
        <div class="grandson-bg"></div>
      </div>
      <div class="child-bg"></div>
    </div>
    <div class="parent-bg"></div>
  </div>
article, aside, figure, footer, header, hgroup, menu, nav, section { display: block; }

  .parent { display: block; position: relative; z-index: 0;
            height: auto; width: auto; padding: 25px;
          }

  .parent-bg { display: block; height: 100%; width: 100%; 
               position: absolute; top: 0px; left: 0px; 
               border: 1px solid white; z-index: 0; 
             }
  .parent-bg:hover { border: 1px solid red; }

  .child { display: block; position: relative; z-index: 1; 
           height: auto; width: auto; padding: 25px;
         }

  .child-bg { display: block; height: 100%; width: 100%; 
              position: absolute; top: 0px; left: 0px; 
              border: 1px solid white; z-index: 0; 
            }
  .child-bg:hover { border: 1px solid red; }

  .grandson { display: block; position: relative; z-index: 2; 
              height: auto; width: auto; padding: 25px;
            }

  .grandson-bg { display: block; height: 100%; width: 100%; 
                 position: absolute; top: 0px; left: 0px; 
                 border: 1px solid white; z-index: 0; 
               }
  .grandson-bg:hover { border: 1px solid red; }

我有一个我认为更好的解决方案,因为它可以扩展到更多级别,可以根据需要扩展到多个级别,而不仅仅是两个或三个级别

我使用边框,但也可以使用任何想要的样式,比如背景色

有了边界,我们的想法是:

  • 有不同的边框颜色只有一个div,鼠标所在的div,不在任何父对象上,也不在任何子对象上,因此只能以不同的颜色看到此类div边框,而其余部分保持为白色
您可以在以下位置进行测试:

代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Hierarchie Borders MarkUp</title>
<style>

  .parent { display: block; position: relative; z-index: 0;
            height: auto; width: auto; padding: 25px;
          }

  .parent-bg { display: block; height: 100%; width: 100%; 
               position: absolute; top: 0px; left: 0px; 
               border: 1px solid white; z-index: 0; 
             }
  .parent-bg:hover { border: 1px solid red; }

  .child { display: block; position: relative; z-index: 1; 
           height: auto; width: auto; padding: 25px;
         }

  .child-bg { display: block; height: 100%; width: 100%; 
              position: absolute; top: 0px; left: 0px; 
              border: 1px solid white; z-index: 0; 
            }
  .child-bg:hover { border: 1px solid red; }

  .grandson { display: block; position: relative; z-index: 2; 
              height: auto; width: auto; padding: 25px;
            }

  .grandson-bg { display: block; height: 100%; width: 100%; 
                 position: absolute; top: 0px; left: 0px; 
                 border: 1px solid white; z-index: 0; 
               }
  .grandson-bg:hover { border: 1px solid red; }

</style>
</head>
<body>
  <div class="parent">
    Parent
    <div class="child">
      Child
      <div class="grandson">
        Grandson
        <div class="grandson-bg"></div>
      </div>
      <div class="child-bg"></div>
    </div>
    <div class="parent-bg"></div>
  </div>
</body>
</html>

层次边界标记
.parent{显示:块;位置:相对;z索引:0;
高度:自动;宽度:自动;填充:25px;
}
.parent bg{显示:块;高度:100%;宽度:100%;
位置:绝对;顶部:0px;左侧:0px;
边框:1px纯白;z索引:0;
}
.parent bg:悬停{边框:1px纯红色;}
.child{显示:块;位置:相对;z索引:1;
高度:自动;宽度:自动;填充:25px;
}
.child bg{显示:块;高度:100%;宽度:100%;
位置:绝对;顶部:0px;左侧:0px;
边框:1px纯白;z索引:0;
}
.child bg:hover{border:1px纯红色;}
.grands{显示:块;位置:相对;z索引:2;
高度:自动;宽度:自动;填充:25px;
}
.grandson bg{显示:块;高度:100%;宽度:100%;
位置:绝对;顶部:0px;左侧:0px;
边框:1px纯白;z索引:0;
}
.grands bg:hover{border:1px纯红色;}
父母亲
小孩
孙子

我有一个很大的元素树,其中一些元素会响应鼠标单击。我只想突出显示将响应单击的元素。在javascript中这样做将意味着基于mouseover/mouseout的样式设计,并将大大增加代码库。这不会增加代码库—如果使用jQuery,大约需要4-5行代码。在伪代码中:$('.parent').hover(函数(){…将CSS设置为绿色…})$('.child').hover(函数(){this.parent.css(..将css设置为白色..});我不认为CSS不能做到这一点。我想我想做一些改变。父元素:hover仅当没有悬停的子元素时才选择。这样子元素就不会影响父元素声明,而父元素选择器会更具辨别力。不;这正是CSS设计者所排除的。它变得接近于我不可能编码、规范和使用那种类型的模型。在XPATH中,可以使用父选择器,但不需要担心伪元素和类。这对他们来说是一个艰难的决定,但您不能使用CSS允许子选择器进行过滤以影响父选择器。感谢您的尝试:)但是,由于可扩展性,这对我来说不起作用。哈哈哈,谢谢,这是一个有趣的问题要解决。我以前遇到过完全相同的问题,但我认为我的解决方案是手动更改父级上没有悬停声明的类。但这对你不起作用,因为你想让你父母身上的鼠标悬停仍然有效。我的程序员认为我会因为这个丑陋的、丑陋的黑客而被严重否决。谢谢你证明他错了;)