为元素添加悬停状态非常简单。 让我们以不透明度变化为例
div {
opacity: 1.0;
}
div:hover {
opacity: 0.5;
}
但是,如果我们希望悬停状态应用于除实际悬停的元素以外的所有内容?(例如,其他相邻同级 div)
假设我们有以下基本 HTML
<section class="parent">
<div></div>
<div></div>
<div></div>
</section>
当父元素处于悬停状态时,我们将当前 CSS 属性应用于父元素的所有子元素。
.parent:hover > div {
opacity: 0.5;
}
然后,当父元素悬停且单个 div 悬停时,我们将不透明度恢复,从而达到我们期望的最终效果。
.parent:hover > div:hover {
opacity: 1.0;
}
现实世界?
在 Mac 版 Twitter 应用的单个推文中使用类似的东西
演示
这个想法可以扩展到多个深度级别。 这是一个包含三个“列表”的示例。 所有列表项在其常规状态下的不透明度均为 100%,但当您将鼠标悬停在列表上时,当前悬停的列表的不透明度略高于其他列表,而当前悬停的列表项的不透明度为 100%。
是的,旧的你所知道的浏览器不支持除锚链接以外的任何元素的 :hover。 如果这是关键任务,请使用 JavaScript 检测鼠标进入事件并应用/删除类名。
2012 年 8 月更新: Michelle Eaton 使用此 JavaScript 完成了这项工作,如果您必须这样做
$("#all ul li").hover(function() { // Mouse over
$(this).siblings().stop().fadeTo(300, 0.6);
$(this).parent().siblings().stop().fadeTo(300, 0.3);
}, function() { // Mouse out
$(this).siblings().stop().fadeTo(300, 1);
$(this).parent().siblings().stop().fadeTo(300, 1);
});
总是有更多东西可以学习! 我以前也做过类似的事情,但没有使用相同的选择器; 使用 CSS3 美观地显示社交媒体图标。 Chris,感谢您为这个问题展示了另一种解决方案!
哎呀 - 我道歉! 您的演示比“基本”形式更深入了一层。 更好!
给了我最好的主意!
喜欢这个,谢谢。
Chris,您知道您的网站渲染效果不好吗? 至少在我的情况下(Ubuntu Linux 上的 Chromium)。 我不知道这是否适用于其他操作系统。 请查看一下,因为它已经持续很长时间了,这让我很抓狂。
“渲染效果不好”有点含糊,不是吗? :p
这有点明显.. 但我喜欢您在演示页面上所做的事情 :-)
很棒的演示!
难道只有我无法在 css-tricks 上看到东西(菜单文本和其他区域的文本)吗?
不。 我也有同样的问题。
您使用的是什么浏览器/操作系统? 我从未遇到过可见性问题
是 Chrome 问题。 将我的 Chrome 更新到版本 11 后,现在似乎没问题了。
我运行的是 Chrome 11,“语法”框几乎无法阅读,某些位置的按钮上的文本也不显示。
类似的问题。 也许 Chris 正在做一些调整?
我在我的网站上这样做。 类似的语法
这是一个不错的效果。 不适用于旧版本的 IE,但我可以接受。
Google Page Speed 声明这是一种“潜在的低效 :hover 使用方法”,已知会导致某些页面上其他悬停效果出现问题。 最显著的是 IE 版本,但我也见过这种情况蔓延并导致 FF 中的悬停出现性能问题。
请注意。
感谢您提供代码和演示。 谢谢!
这是一篇不错的帖子。 它非常有用。 感谢您分享您的想法!
非常酷,我正在做这个,以及在我的当前网站上的导航上进行更多 CSS 过渡。 我要说的是,使用 CSS 处理通常使用图像处理的事情会极大地缩短您的加载时间。
但是,是否有必要将“:hover”放在每个选择器上? 我的意思是,是否只需将其放在您感兴趣的最后一个悬停选择器上就足够了?
实际上是,我用 Web Developer 工具栏做了一个快速测试,并将那部分减少为
#all:hover a {
opacity: 0.2;
}
#all ul:hover a {
opacity: 0.5;
}
#all ul a:hover {
opacity: 1;
}
不过我只在 Firefox 中尝试过,也许它可以修复其他浏览器
这是因为,在这个例子中,我们希望我们没有悬停的一组项目发生变化,而我们实际悬停的项目保持不变。
为此,我们需要更改该组中的所有项目(即,
#.parent:hover
),然后将我们实际悬停的项目(.parent:hover > .item:hover
)更改回其原始值。没关系; 我明白你的意思了。
它似乎可以在现代浏览器中使用(我在 Fx3.6、Opera11 和 Chrome10 中尝试过)。
几年前我在自己的网站上实施这个功能时,我记得我被迫使用额外的 :hover 选择器 - 我不记得是哪些浏览器要求使用它们。
太棒了! 我一定会在我的网站上实施它。 谢谢!
非常棒的帖子!
不错的帖子! 我总是能从你那里学到一些东西,谢谢!
太好了! 我会立即使用它!
你可能有一些神秘的力量 - 我只是在寻找这个,谢谢 Chris!
非常感谢! 这很干净,也很容易!
这是一个很棒的想法!
很棒的演示! 简单技巧。 我试试..
对我有用,谢谢
演示很酷,我喜欢它。 迫不及待地想知道这个悬停功能是如何工作的。 谢谢
感谢您为我的 CSS 工具箱增添另一个功能。
旧版本的浏览器不理解 `:hover` 对 `div`、`li` 等元素的应用。对于这些浏览器,你可以写一些 JavaScript 代码来实现悬停效果。
我同意你的观点。这很酷。但考虑到浏览器目前的实现,我仍然更倾向于使用 JavaScript 来实现类似的效果。
http://www.technobits.net - 软件开发的最新资讯、技巧和窍门。
也许有人能帮忙。我的网站就像一个购物中心地图(就像去一个实体商场查看目录一样),我希望根据悬停在同一类别的图例条目上,更改一组商店(类别)的不透明度。由于你可以通过各种方式搜索和过滤商店,商店的结构和顺序是流动的,但我使用类别来对背景图像进行颜色编码。
基本结构如下。我可以将图例作为另一个 `div` 包含在商场内,如果这对你有帮助,但问题是:
我可以悬停在图例中的 "shoes" 类上,并根据它们的类别突出显示 "store_1" 和 "store_4"(以及任何其他鞋店)吗?
(顺便说一句,如果你能做到这一点,我强烈建议写一篇单独的博客文章 - 我敢肯定很多人会对此感兴趣。)
<div id="mall_stores">
<div id="store_1" class="shoes">...</div>
<div id="store_2" class="electronics">...</div>
<div id="store_3" class="books">...</div>
<div id="store_4" class="shoes">...</div>
...
</div>
<div id="legend">
<div id="class_1" class="shoes">shoes</div>
<div id="class_2" class="electronics">electronics</div>
<div id="class_3" class="books">books</div>
</div>
也许可以看看远程链接背后的概念:https://css-tricks.org.cn/remote-linking/
或者... JavaScript!
谢谢 Chris,我会看看的。如果可以的话,我会尽量避免使用 JavaScript,CSS 会更优雅也更容易。
干杯!
你好;
好吧,我在 CSS 上还处于起步阶段,所以我还有很多问题。
其中之一就是代码中使用的 ">" 符号,比如这里(来自上面):
.parent:hover > div { opacity: 0.5;} ?
">" 是子元素选择器。所以在你使用的示例中,它只会选择那些作为类名为 "parent" 的元素的子元素的 `div` 标签,而且该元素正在被悬停。
它与通常的 "祖先后代" 选择器不同,因为它只选择直接子元素,而不是树中更深层的后代。
所以像 "div a" 这样的选择器将选择 `div` 中的所有 `` 标签,而 "div > a" 不会选择 `div` 中 `p` 中的 `` 标签。
啊,HTML 是解释性的。所以我的最后一段应该是:
所以像 "div a" 这样的选择器将选择 `div` 中的所有 `` 标签,而 "div > a" 不会选择 `div` 中 `p` 中的 `` 标签。
我喜欢这个!这种教程让我想要重新设计大约 1000 件东西。
哇,这看起来真的很酷,我看到了很多潜力。但这在 Internet Explorer 中似乎不起作用!
我也注意到 Netscape 也不行。
嘿 Chris,
就像 $(‘every #day > .hour: first’).educateMe(‘http://feeds2.feedburner.com/CssTricks’)
让我不要使用像amazing、love或aaaaawsaaaam* :hover这样的词 { 如此多的能量、如此多的热情、如此不可思议的、如此多的时间用来做真正需要的社会工作(-> 分享) - 这就是它(如果我想想,当我开始学习的时候,尝试 -> 不断地在 google 上搜索一些东西后来到你的网站)! }
这种技术在我的几乎所有样式表中都找到了应用。很高兴看到更多这种技巧 -> 发布在这个 “显赫/著名” 的网站上 - 这就是它!因为 FireFoxyBaby - 这就是它 - 已经不再令人满意了。所以,如果你还有更多这类 “简单” 的技巧,我通常会使用
if(!$.browser.mozilla) JS
否则,谢谢!
.a.hover strong: { border:1px solid black; }
.a:hover strong.no_border { border:0; }
.a:hover > strong:first-child:hover { border:1px solid blue; }
c:hover .a:hover > strong:first-child:hover { border:1px solid red; }
你真是个好人!这就是人们回来的原因:你没有把它做成教程。:)
希望有一天能和你一起工作... “自己的” 网站现在正在关闭(但你可以看到电子邮件地址) - 这可能会很好,真的会很好。
通常不评论 - 第一次评论,几乎(这就是它) - > 厌倦了空洞的词语。
*smash_mag
* 悬停在所有元素上,如果
很棒且实用的文章。谢谢
不错的教程,但你在 Chrome 中测试过你的网站吗?
看看 css3 伪类 " :not() "
http://www.w3.org/TR/css3-selectors/#negation
干得好。
:hover 伪类在旧版本的 IE 中存在问题。
IE 太烂了!
很棒。真正让用户专注于目标区域 - 我一定会在我的下一个网站项目中使用它。谢谢。
不!IE 对这类方法有很大影响。
我可以在图片库中使用它... 很酷... :)
很棒的文章
你可以用 :not 更快地做到这一点
div:not(:hover){opacity:0.5}
或者使用你的演示
#all:hover a:not(:hover) {
opacity: 0.5;
}
而不是
#all:hover ul:hover a {
opacity: 0.5;
}
#all:hover ul:hover a:hover {
opacity: 1;
}
我们刚刚在新 Hiker 上实现了这一点,并使用了一些你的代码。(左侧栏中的社交媒体图标)
感谢你的提示!
看起来不错,感谢分享。
这对我帮助很大,非常感谢!
很棒的文章。如果图片是我们可以将其他图片灰度化。