考虑以下 css 和 html。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Hover Test</title>
<style>
div {
min-height: 20px;
margin:20px;
border: 1px solid #000;
background-color: #fff;
}
div:hover {
background-color: #000;
}
</style>
</head>
<body>
<div>
<div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
</div>
</div>
<div>
<div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
</div>
</div>
</body>
</html>
产生的效果是它在鼠标悬停的所有节点上显示悬停效果,而不 pipe 节点。
我锁定的效果是只在鼠标直接悬停的节点上显示悬停效果。当鼠标悬停在子节点上时,不会在元素上显示悬停效果。
有没有办法仅在 CSS 中做到这一点?
如果不是,我想我总是可以使用 onmouseover 和 onmouseout 事件处理程序并使用 css 类 .hover 或类似的。但我最好找到一个解决方案,它不会改变受影响的 dom 节点,并且可以很容易地使用 CSS 设置样式。
最佳答案
如果只想让叶子节点的背景色为黑色,并且可以保证只有三层节点,可以这样做:
div > div > div:hover {
background-color: #000;
}
否则你必须使用JavaScript来设置叶节点及其父节点的背景颜色。
这里有一些使用 jQuery 的东西:
$('div').hover(function() {
$(this).css('background-color', '#000');
$(this).parents('div').css('background-color', '#fff');
}, function() {
$(this).css('background-color', '#fff');
$(this).parent('div').css('background-color', '#000');
});
关于javascript - 防止递归 CSS :hover effect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4837123/