悬停大师 Jenn Lukas 给我发送了一个指向 PizzaTime.com 的链接。我们一致认为 1) 这些悬停效果非常棒!以及 2) 在像 PizzaTime.com 这样的域名下居然有一个高质量的网站,这一点非常酷——Jenn 在随机输入域名时希望能够找到一个网站。
他们有一组导航框,看起来像这样

然后它们会经历一个整洁的多步骤过渡过程,最终变成红色

图标所在的红色方块会左右扩展以填充父级框,然后上下扩展。文本和边框会更改颜色,以便在扩展的红色框上保持可见。
HTML 代码
我们将使用这个
<a href="#0" class="pizza-link">
<span class="icon maki-embassy"></span>
<h3>Find a Store</h3>
<p>We've got a location near you! As far as Bellingham and Lewiston and Yakima and South to Olympia.</p>
</a>
如果您还没有收到通知,现在将任何内容包装在锚点标签中都很酷,因此很容易将整个框变成链接。在我们的例子中,我们将使用该锚点来设置实际框的样式。
仅用于此演示,我使用了 We Love Icon Fonts 并选择了一些随机图标来使用。该站点让您使用具有预定类的跨度来显示图标。如果我要将此概念投入生产,在这种情况下,我可能会改用伪元素,因为这些图标不包含任何内容值。或者,如果我使用跨度系统,我会使用 data-icon
属性和 aria-hidden
应用它。阅读更多。
CSS 代码
这是 Sass 中嵌套的一个不错的用例。我们在这里处理的所有内容都与 .pizza-time 链接相关,因此让我们只嵌套在该链接下。一些无聊的 CSS 已移除……
.pizza-link {
display: block;
float: left;
/* yadda yadda yadda */
h3 {
border-bottom: 1px solid #eee;
/* relative positioning keeps it on top of :before */
position: relative;
}
p {
/* relative positioning keeps it on top of :before */
position: relative;
}
h3, p {
/* "ease" and "all" are implied */
@include transition(0.2s);
}
.icon {
position: absolute;
color: white;
/* position in middle on top */
}
&:before {
content: "";
background: #D62121;
/* position in middle on top */
/* BELOW icon and other content */
/* :before makes this easier than :after */
position: absolute;
width: 50px;
height: 50px;
top: 20px;
left: 50%;
margin-left: -25px;
@include transition(
/* FIRST STEP */
width 0.2s,
left 0.2s,
margin-left 0.2s,
/* SECOND STEP */
top 0.2s 0.2s,
height 0.2s 0.2s
);
}
&:hover, &:active {
h3 {
color: white;
border-bottom-color: #E14646;
}
p {
color: white;
}
&:before {
width: 230px;
left: 0;
top: 0;
margin-left: 0;
/* hacky, but the parent element */
/* doesn't have explicit height */
/* so can't use 100% */
height: 320px;
}
}
}
三个值得注意的要点
- “红色框”是一个伪元素。过去我会在这里使用 span 或其他东西,但现在我们可以 对伪元素进行过渡,所以不妨试试。
- 因为“红色框”是一个绝对定位的 :before,所以我们只需要对内部的其他内容设置
position: relative
,它就会按照自然的文档堆叠顺序位于红色框的顶部。 - 我们通过用逗号分隔所有要过渡的值来使过渡“多步骤”。水平相关的属性放在前面:width、left、margin-left。然后垂直相关的属性放在“后面”:top、height。通过指定一个等于第一步值的持续时间的延迟值,它们将在“第一步”属性之后按顺序发生。
演示
Check out this Pen!
我想我们现在都意识到大多数触摸屏没有悬停状态。也许这些设备的用户将看不到我们的小巧精致的悬停效果。没关系。它们是链接。它们仍然有效。
非常酷。此外,您可以通过将悬停时的过渡直接应用于伪元素来反转过渡,但将反向过渡应用于悬停的伪元素:codepen 分支。
我在 Safari 上没有看到缓慢的过渡,但在 Firefox 上看到了。我只会立即得到一个大大的红色框。
pizza time.com 网站在两者上都能正常工作。
Safari 尚未支持伪元素过渡。因此这是一个语义权衡。在其中放置一个垃圾 span 并进行过渡,或者使用伪元素保持整洁但支持性较差。Safari 是最后一个加入的浏览器,所以我建议使用伪元素。
我认为实际的网站只是使用了 jQuery 动画。
很酷的想法,但在其当前的呈现方式中有点过于激进。它已经是红色的了,所以动作可以更慢更平滑,这样就不会给人一种突兀的感觉……尽管如此,仍然非常酷,并且写得很好!
酷酷的——创建一个分支!
太棒了 :-)
不错的技巧,但页面的徽标不太好看,尤其是灰色的背景。这是有意为之还是忘记删除了?:-)
我猜想这可能是一个网页开发者制作了一个不错的网站,但不得不使用某个与所有者关系密切且所有者非常喜欢的亲戚设计的徽标,并且永远不会想到要更改它。
徽标是客户的,正如我在下面提到的,将更改为白色……别担心,我的朋友!:)
不错的效果!
我知道我们只是在研究如何而不是谁,但我想礼貌地指出,PizzaTime 看起来不像是应该重点突出的网站,http://codecanyon.net/user/Laborator 应该被重点突出。他们是真正应该获得认可的艺术家/编码员,因为他们创建了 WP 主题。
我不想听起来像个脾气暴躁的人,但在 WordPress 时代,我看到太多人声称自己是“开发者”,他们花在搜索主题上的时间比花在学习 CSS/HTML/JS 基础知识上的时间还要多。
我只是想把赞美之词送给我认为应该获得赞美的人。CSS-Tricks 非常棒,是学习如何自己动手的好地方!感谢所有有益的提示和知识!哦,PizzaTime 确实是一个很酷的域名!
Charles,我有一种感觉,这是一个主题!感谢您提供链接。
我完全同意,我与一家机构以合同形式合作。起初,他们只在“预算紧张”或“时间限制极其严格”的情况下使用 WP 主题。现在,他们出于纯粹的懒惰而使用它们,并收取全价(最近一个项目的参考价格为 2600 美元)。
对于机构和主题开发者来说,这是一种双赢的局面,因为他们都能获得收益。而缺乏知识的客户认为这是一个很好的交易,他们可以浏览一些设计精美的主题并进行选择。
虽然这些主题看起来很棒,并且可以轻松自定义以使其看起来不那么容易识别,但应该优先考虑完全优化的自定义设计来解决特定的客户问题,并且不附带任何额外内容。我想这正在慢慢地只保留给支付最高费用的客户。
不过悬停效果很棒,;)
是的,我的第一个谷歌搜索是“wp-content themes silicon” :-)
哇……我不知道以前是否有多步骤过渡。这真的很酷。比只垂直滑动的纯色更高级。无论如何,这个 Sass 版本是否在所有浏览器上都能正常工作?是否有可用的纯 CSS 版本?
进入 Codepen,点击 CSS 标题,它会转换为 CSS。但是,我强烈建议切换到预处理器工作流程……Sass 或 Less。
哈……!!谢谢 Armstrongest。我真是太羞愧了。我不知道在 CodePen 中点击 CSS 面板标题是否可以立即显示编译版本。是否有其他预处理器工作流程可以在不安装 ruby 的情况下将 SASS 编译为 CSS?我有点不太热衷于在 Windows 上安装 ruby/进行 gem 操作 :)
PizzaTime 网站在 IE9 中似乎完全无法工作。
我喜欢悬停效果,简单易用的交互性。看看我为我的作品集制作的悬停效果吧。 http://nicovanzyl.com 你可能会喜欢它。
哇,我喜欢它!!!
如果水平和垂直过渡同时发生,看起来会好很多。
fork it
我喜欢你努力重现你在网络上发现的所有有趣的东西。这表明你对这项工作充满热情。
无论如何,只是一件小事:在他们的网站上,文本颜色只有在红色背景扩展到文本后面时才会变成白色。我将Art的补充和我自己的补充放在一起: Codepen链接
你能告诉我他们是如何动画化标题的下边框的吗?它只有1像素厚,我以为top/bottom/right/left过渡不会以亚像素的方式工作。
我非常确定这是在jQuery中完成的。
我喜欢这个,因为你可以用很少的钱获得很多效果。我根据需要使用悬停效果,并且我真的很想让用户知道哪些内容是可点击的。至于移动交互,它是一个链接;它仍然会将用户带到他们想要去的地方。
我的朋友April Smith实际上为她的客户华盛顿州的Pizza Time制作了这个网站,我为他们托管该网站。我相信该网站使用了Silicon Responsive WordPress主题。
我今天晚上早些时候和她谈过网站带宽增加的问题。我偶然发现了这个网站,是在周末参加西雅图的WordPress WordCamp时,在Twitter上看到了一个链接。真是奇怪。
感谢Dennis找到这篇文章。该网站正在通过ThemeForest使用Silicon Responsive。
当我浏览一些评论时,是的,我们意识到一些小问题(灰色徽标等),这个网站版本几天前才上线,仍在进行修订和过渡。:)
感谢css-tricks.com的推荐和特色!
真是一个惊喜,这个悬停效果。它很好地提醒我们,即使是最简单的事情,也要为用户做出有趣、特别或经过精心设计的体验。感谢Chris发布这篇文章,并扩展了大家的讨论。
非常棒!即使拉伸和扩展过渡没有应用到其他浏览器,但只要稍微调整一下,它仍然是一个不错的交互。
性感的悬停效果!但你知道什么会很棒吗?文章结尾处有一个分享按钮,以便能够轻松地从我的iPad上发布到Twitter……
您可以通过在h3和p标签的过渡中添加延迟来增强效果。
CodePen Fork
非常棒的效果!我喜欢CSS动画。我总是希望用最少的代码实现最多的效果。也就是说,我不明白为什么:before元素需要左外边距?相应地调整左值的百分比,就可以删除它。如果链接(a)元素没有固定宽度,我会看到需要声明左外边距,以确保图标始终居中。
尽管如此,很棒的东西。喜欢阅读这个博客。继续努力,Chris!
多年来,能够在我的脑海中想象盒子模型一直都非常有价值,但我对
::before
和::after
总是不太确定。我需要多尝试一下这些。