POP 在其主页上组成这些盒子的方框中具有这些酷炫的悬停效果。这些方框默认情况下具有白色背景,当您将鼠标悬停在它们上面时,一个深色背景会从后面滑上来,文字颜色会发生变化,文字会“弹出”一点。当您将鼠标移开时,深色背景会滑开,文字颜色会恢复,文字会稍微“下沉”一点。我认为我会尝试复制它,因为,你知道,太棒了 悬停。
演示
Check out this Pen!
HTML
每个区域都是一个“方框”。
<a href="#" class="box">
<h2><span>Breaking news -</span> hippos are sorta dangerous</h2>
<h3>Tonight at nine</h3>
</a>
CSS(背景)
默认方框的样式非常简单。悬停效果才是有趣的。POP 通过使用一个实际的元素来实现背景滑入,他们对该元素的位置进行了动画处理。如果我们对该功能仅在支持渐变的浏览器中有效感到满意,我们可以放弃该元素,只需对背景位置进行动画处理。
一个上半部分为白色,下半部分为黑色的背景很容易。
background: linear-gradient(
white, white 50%, black 50%, black
);
然后,我们使它的高度是元素自身高度的两倍。
background-size: 100% 200%;
就像这样。

实际上,我们将背景的高度稍微超过 200%,因为正好在 200% 时,它仍然会将一小部分背景暴露到元素中(在 Chrome 中)。
.box {
background: linear-gradient(
white, white 50%, #333 50%, #333
);
transition: all 0.2s ease;
}
.box:hover {
background-position: 100% 100%;
}
CSS(颜色)
默认文字颜色为黑色,因此根本不需要任何 CSS。在悬停时,我们调整颜色。span 发生变化只是一个有趣的惊喜,为派对增添了更多活力。
.box:hover h2 {
color: #48ad26;
}
.box:hover h2 span {
color: white;
}
.box:hover h3 {
color: #999;
}
CSS(凸起)
这里棘手的地方是“凸起”发生在不同的方向,具体取决于它是悬停还是悬停离开。文字稍微移动然后恢复到原始位置的事实意味着 过渡 也无法帮助我们,这是 动画 领域。我们将为向上凸起制作一个 @keyframes,为向下凸起制作另一个。少量的填充将帮助我们,因为我们的 box-sizing 选择保持每个方框的高度相同。
@keyframes up-bump {
0% { padding-top: 2em; }
50% { padding-top: 1.5em; }
100% { padding-top: 2em; }
}
@keyframes down-bump {
0% { padding-top: 2em; }
50% { padding-top: 2.5em; }
100% { padding-top: 2em; }
}
默认情况下(在悬停离开时触发),.box
将获得向下凸起,:hover
将获得向上凸起。这与背景滑入滑出的方向相匹配。
.box {
animation: down-bump 0.4s ease;
}
.box:hover {
animation: up-bump 0.4s ease;
}
初始凸起修复
在初始状态添加该动画使其在页面加载时立即运行。这可能是一个很酷的效果,也可能很烦人。POP 网站在加载时不会运行它们。Matt Boldt 有一个好主意,那就是在鼠标悬停离开时添加离开凸起(通过一个类),这样它一开始就不会运行。
Check out this Pen!
在没有悬停功能的设备上……
它们是链接,并且没有隐藏任何重要内容,因此没什么大不了的。
很棒的效果。触摸设备不是唯一的陷阱 - 对于仅使用键盘的用户,结果似乎并不一致地出现。如果对该受众有义务,则可能需要进行更多调整才能进行实施。
您也可以在 :active 状态下添加该效果。
Loooooveeeeee。 (显然)。
您可能希望在 :focus 上向整个方框添加一个轮廓,以解决键盘问题,并完全省略动画。我一直都在思考这个问题:如果仅使用键盘的用户使用更简单更有效的效果会更好。我可以想出一些为什么这样做会更好,以及为什么这样做不会更好的用例。
实际上,是否有办法定位仅使用键盘的用户?我可以想到一个非常复杂的解决方案,但这可能不是最好的选择。
我不确定,但实际上您可以附加一个事件处理程序,并查看它是否触发了“keydown”,并为每个 div 添加 tabindex,类似于以下内容
$(“#myid”).on(“keydown”, function(event){
if (event.keyCode == 9 )
{
//等等
}
});
不错!
我认为伪类 ':before' 是一种很好的实现方式,但过渡似乎对它们不起作用。
太棒了,悬停效果真的太棒了。
但文本在连续悬停尝试后停止移动。
是的,同样的问题。如果我只是让我的鼠标在这些上面乱点,它就会崩溃,并且在悬停时不再跳起来。
有解决方案吗?
我似乎在这里无法复制它。但我不知道能做些什么。我知道在 jQuery 动画时代,这种事情很常见,你需要小心地停止之前的动画,并以更智能的方式处理事情。但这里发生的所有事情都只是一些 CSS 动画,要么应用要么不应用。我相信,如果您能获得故障的屏幕截图,那么将其作为错误报告给相关的浏览器将会是一个好主意。
我之前发布过这个。但不知何故它没有成功。我认为这可能与我使用的电子邮件地址域名有关。@gmail 工作正常,但我工作地址似乎不起作用,Chris。也许我的前一篇帖子被放入了审核队列?
无论如何,这是我制作的屏幕截图。复制了 Solomon 提到的问题。我在 FX20 上。
http://www.screenr.com/fkJ7
强烈建议任何人不要在实际场景中使用此方法。从 UX 的角度来看,1. 文本凸起效果毫无用处,没有传达任何信息,不作为任何内容的过渡 2. 文本不应该跳来跳去(尤其是在文本颜色和背景发生变化时)。就个人而言,它会让我的眼睛很疼,就像看一张失焦的照片一样。
别生气了!
当然,它没有任何作用,但这只是一个有趣的互动体验。如果网络上没有任何东西会移动或给我们带来惊喜,那就太无聊了。
当这种体验非常主观时,很难做出基于 UX 的判断。例如,您发现过渡没有实际作用。我发现它们是一种视觉上有趣的方式,可以显示页面上的项目不仅仅是静态的,而是链接到更多信息。
这种效果(对我来说)在覆盖整个容器时更具吸引力,而不是仅覆盖 1/2 时。实际上,我发现后者在视觉上有点刺眼。
我并没有看到文字跳动有任何问题。我不会说它增加了任何结构上重要的东西,但没有一个网站或应用程序纯粹是“功能”问题。一定程度的“形式”必须被允许。
虽然我理解你在说什么,但我认为,如果你把这个论点推到极致,互联网上就会充满了完全有效但非常无聊的网站。当适度使用并放置得当时,这种“为什么不呢”的态度可能是网站变得有趣所需要的。
没有人“需要”糖霜。但它味道很好,我喜欢它。
视觉上的吸引力本身就是一个目的。
这是非常真实的。
这个评论在哪里点赞?;)
嘿,很喜欢你的网站,克里斯,你的播客很棒,如果没有“小屋”,我也不会在今天的CSS/WordPress领域里取得现在的成就。只是想在网站 www.protest.eu 上说一下,他们对信息框有类似的效果,看起来像是悬停/聚焦状态下出现的盒子。我也喜欢滑块在向下滚动页面时向左滚动的效果,我认为是使用jQuery实现的,你们怎么看呢?
是的……鉴于网络的现状,并尊重“内容优先”的心态,我发现这种效果为其增添了趣味性……尤其是在这部分……
哇卡哇卡!
我最喜欢的!
喜欢它!
我一直很喜欢你用CSS来呈现/开发事物的方式,我刚开始学习CSS,并在我的新网站csshacks.org上分享我的学习成果,我实际上想知道“是否有任何方法可以使过渡效果循环?即重复过渡效果”
谢谢
再次感谢你提供了一个很酷的CSS技巧。令人惊叹的是,它可以在没有jQuery的情况下实现。有人知道这个技巧的浏览器支持情况吗?它可以在Mac上的Chrome、Safari和Firefox的最新版本中使用。我听说IE 10支持渐变。我想你可以为不支持的浏览器提供背景颜色变化。
不错的效果。我认为将其改造成触摸事件并不难。
如果初始盒子有一个视觉效果,并在悬停时显示一条消息——就像在POP上使用的效果那样——那么我会有很多用处。我如何实现它?我是个新手。
嘿,克里斯,很不错的技巧!:)
谢谢!!
你好,克里斯,
很不错的技巧。我在我的网站上尝试了大约一年,用来显示一个漂亮的菜单。初始盒子显示图标,悬停时会将初始盒子向上移动并显示相关的链接。悬停离开时,相关链接向下移动,盒子从上到下出现。我使用
-webkit-transition
来实现动画。它看起来非常漂亮,但唯一的缺点是很多人没有点击链接,因为它们隐藏在原始DIV之下。只有那些看到这种情况并且知道链接隐藏在下面的人才会点击。
刚好在Codepen上创建了一个Pen,展示了我网站zevolving.com上的实现方式。
第一次使用CodePen,它太棒了!
无法提交?
真的很棒!我认为它有一些非常棒的现实世界应用。我非常喜欢让用户体验网站,而不仅仅是看到它!我希望看到更多像这样的东西:)
我做了一个有类似效果的按钮:http://codepen.io/burnandbass/pen/dvaql
我开始怀疑“然后我们就不担心没有悬停设备的悬停问题”这种态度是否安全。
我认为在这里没问题,正如你所指出的,没有任何损失。但它确实是在做出这些决定时应该认真考虑的事情。
除此之外,感谢你对这种很棒的效果做出了全面易懂的描述,有一些细节是我会错过的,这些细节确实增添了它的效果。
你说过渡不起作用是因为“颠簸”,但也许自定义的
cubic-bezier
时间函数可以解决问题,例如 http://cubic-bezier.com/#.4,1.4,.39,1.5不错的效果,很高兴能学习更多关于CSS动画和过渡的知识。
从这段代码中,我复制了它来修改它并尝试学习更多
http://codepen.io/daveb/pen/qIikx
我在每个盒子中添加了一个“阅读更多”,只是为了尝试一下。
“阅读更多”使用了一个div(是的,我知道它不是很有语义),使用绝对定位,并且我在.box类中添加了position:relative和overflow:hidden。
但我没有得到正确的结果,它在悬停第二个盒子时出现了一个奇怪的效果:第三个盒子在过渡期间消失了。
如果没有.box:hover中的动画属性,它似乎可以正常工作,但显然效果不一样。
很棒的小技巧,老兄!
这很不错,克里斯。我会尽快寻找一个理由使用它!谢谢:)
很喜欢这个效果,克里斯。
过去我用jQuery实现过类似的技术,很高兴看到CSS的替代方案,谢谢!
我注意到文本动画丢失的问题。当你的鼠标指针变得活跃时,这种情况似乎就会发生。我还发现CSS动画在不同浏览器中的表现有点不可预测,所以我现在仍然使用jQuery。啧啧。
当你以光速移动鼠标时,jQuery可能会失效,但有一些好的解决方法可以做到克里斯所说的:在开始新操作之前,放弃上一个操作。
这里有一个Gist,包含了我在无法/不想使用:hover伪选择器时用来添加.hover类的代码。我想知道,如果使用它添加一个类,然后将动画与类更改绑定,行为是否会更可靠。
https://gist.github.com/ryanburnette/5337314
这里有一个Pen,包含了相同的代码,但使用的是更可靠的jQuery悬停效果。谁知道呢,也许它会有所帮助。
http://codepen.io/ryanburnette/pen/JxcEo
对不起,我愚昧无知,但是……锚点里面的h2?应该这么做吗?
当然可以。HTML5对此很酷。
你给的代码真的很酷。
我喜欢它!谢谢!
很酷的效果,但我认为它目前的可用性有限,如果每个人都开始使用它,那么它就不会有什么有趣/特殊之处。然而,我相信这是一个值得思考并激发新实现方式的有趣话题。它可以做很多事情。
我有一个小小的CSS形状要移动,“margin”是让我实现它的人。
不谢