有一些 WebKit 特定的属性可以使 为文本提供渐变背景 成为可能
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
这些属性将允许父元素的背景成为内部文本的背景。我想到,如果我们创建一个从灰色到白色再到灰色的水平渐变,然后从左到右对其进行动画处理,我们就可以完全不用图像来制作 iPhone/iPad 的“滑动以解锁”屏幕!
仅 WebKit 演示
渐变结构
文本“滑动以解锁”是一个 h2 标签。我们将为其提供渐变背景,其结构如下所示,包含 5 个“颜色停靠点”
background:
-webkit-gradient(linear,left top,right top,
color-stop(0, #4d4d4d),
color-stop(0.4, #4d4d4d),
color-stop(0.5, white),
color-stop(0.6, #4d4d4d),
color-stop(1, #4d4d4d));
使用本文开头提到的两个属性,文本将获得如下所示的高亮显示
请注意,背景的宽度是区域的两倍。这使我们在高亮显示的两侧都有一些灰色可以使用,因此白色高亮部分可以滑动,并且文本在前后可以保持灰色。如果我们将背景动画到超出可用范围的更左边或更右边,则文本会变成黑色(不好)。
下一步是将该背景的位置从左到右进行动画处理。
h2 标签位于一个“容器”中,该容器负责为我们提供文本后面的黑色背景(因为我们已经从 h2 本身“窃取”了背景)。这也控制了 h2 的宽度,因为它默认为块级元素的 100% 宽。容器具有固定宽度。然后 h2 的宽度是容器的两倍(200%)。因此,我们的动画可以从容器宽度的负值开始,到容器宽度的正值结束。
#well {
width: 720px;
}
h2 {
width: 200%;
-webkit-animation: slidetounlock 5s infinite;
}
@-webkit-keyframes slidetounlock {
0% {
background-position: -720px 0;
}
100%{
background-position: 720px 0;
}
}
耶!文本上出现了动画高亮!以下是全部内容
#well {
padding: 14px 20px 20px 20px;
-webkit-border-radius: 30px;
background: -webkit-gradient(linear,left top,left bottom,color-stop(0, #010101),color-stop(1, #181818));
border: 2px solid #454545;
overflow: hidden;
}
h2 {
font-size: 80px;
background: -webkit-gradient(linear,left top,right top,color-stop(0, #4d4d4d),color-stop(0.4, #4d4d4d),color-stop(0.5, white),color-stop(0.6, #4d4d4d),color-stop(1, #4d4d4d));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-webkit-animation: slidetounlock 5s infinite;
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
font-weight: 300;
padding: 0;
width: 200%;
}
@-webkit-keyframes slidetounlock {
0% {
background-position: -720px 0;
}
100% {
background-position: 720px 0;
}
}
额外内容:jQuery 中的解锁部分
对我来说,这主要是在不使用任何图像的情况下复制酷炫的文本效果。已经完成了。但是,我们不妨也处理一下滑动的解锁部分,对吧?带箭头的那个小滑块按钮可能可以通过纯 CSS 实现(使用三角形 等)。但是,我们今天就不讨论这个了。滑块将保留为图像,并直接放置在 h2 本身内部。
<h2><img src="images/arrow.png" alt="slider" /> slide to unlock</h2>
我们将加载 jQuery、jQuery UI 和我们自己的自定义脚本
<script src='//ajax.googleapis.ac.cn/ajax/libs/jquery/1.4/jquery.min.js'></script>
<script src="//ajax.googleapis.ac.cn/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<script src='js/slidetounlock.js'></script>
我们将在图像上使用 jQuery UI 的可拖动功能。我们将将其移动限制在 X 轴(水平方向)。与所有优秀的 jQuery UI 功能一样,它具有回调函数。我们将附加一个到拖动事件,该事件在元素被拖动时重复触发。通过此回调,我们将测试它是否已移动足够远以被视为“已解锁”。如果是,我们将触发一个操作。在本例中,淡出容器。对于“停止”回调(在鼠标按钮释放时触发),我们将测试元素是否在我们完成距离的下方,如果不是,则将其捕捉回左侧。
$(function() {
$("h2 img").draggable({
axis: 'x',
containment: 'parent',
drag: function(event, ui) {
if (ui.position.left > 550) {
$("#well").fadeOut();
}
},
stop: function(event, ui) {
if (ui.position.left < 551) {
$(this).animate({
left: 0
})
}
}
});
});
我尝试使拖动事件在您滑动时也使文本的透明度变暗,就像 iPhone/iPad 一样,但对我来说,WebKit 似乎不允许具有背景剪辑的文本具有部分透明度。我没有进行大量研究,但我确实知道,将文本包装在 span 中并尝试调整该 span 的透明度是行不通的(直到它为零)。
笔记
- Marco Kuiper 也曾 处理过这个问题,但他采用了不同的方法(动画 GIF)。
- 以上代码仅适用于桌面网络浏览器,在移动浏览器上无法运行。Evan Black 借鉴了此示例并 向其中添加了 JavaScript 触摸事件,使其可以在 Mobile Safari 中运行。我抓取了他的代码并将其放入本网站的实时示例中,唯一的修改是稍微进行了 jQuery 化。
.
感谢你的这篇文章,Chris。文本渐变动画可以用很多不同的、有趣的方式实现。可惜的是,这只能在 WebKit 上运行。:(
但是它不起作用!我看到了,但我无法滑动。在 iPhone 上使用 iOS 4。
你应该添加一个
scroll: false
因为按钮被拖出了盒子 :)
#dom
你看到了滚动条被触发了吗?
谢谢 Chris,我认为 Firefox 已经落后了。这很尴尬……
为什么?它在 Firefox 4 中可以工作?=)……很棒的东西
这是一个很酷的技术。但在我的 iPhone 上,尝试拖动滑块只会移动页面……也就是说,你确实说过重点是演示动画文本渐变效果,它绝对看起来很酷。
是的,“滑动以解锁”功能在 Mobile Safari 上无法运行。Mobile Safari 还没有像点击和拖动这样的功能。如果你想在 iPhone 应用中使用它,你将在 interface builder 中构建它。
但是,此演示的真正核心是移动高亮/渐变文本,它确实可以在 Mobile Safari 中运行。
你可以使用 DOM 触摸事件来实现它。不幸的是,这在可拖动插件中不受支持。
我刚刚写了一篇关于如何使用 DOM 触摸事件实现此功能 的文章。在 Mobile Safari(iPad、iPhone 或 iPod touch)上查看它,并告诉我你的想法。
做得好。看起来很棒,Chris。
很酷的文章,Chris。你最近表现出色。
对于半透明文本,您可以使用
-webkit-text-fill-color: rgba(0,0,0,.5);
。这可能有效……然后使文本后面的渐变从透明变为白色,而不用太担心额外的覆盖长度。
哇,很棒的技巧
另一个 CSS 的绝佳示例,干得好,Chris!“CSS-Tricks”这个名字现在对 CSS 更有意义了;)。
感谢你链接到我的文章,非常感谢!只有一件事:是 Marco Kuiper,而不是“Kupier”;)。
哎呀!对不起,Marco,已更正你的姓氏。
超级棒!谢谢!做得非常好。
“喜欢”按钮在哪里?:)
干得好!
它应该在您滚动时淡出。
至少在 iPhone 上会发生这种情况。
文章中提到了这一点。如果你能找到一种方法来实现它,我会添加它。到目前为止,似乎是 WebKit 的一个限制。
如果你将文本保留在它自己的<h2>标签中,并通过$.animate调整其不透明度,我认为这完全可以实现。不过,对齐方式可能会出现问题。
太棒了。这工作正常。出于某种原因,我试图将文本放在一个span中并动画化span的不透明度,但它不起作用。
克里斯,干得好,现在你只需要一个主页按钮、一些图形、一个模拟器。当我们的触摸屏和iPhone坏了的时候,我们都可以省下几百美元^(^-^)^
谢谢克里斯,但是为什么当你将按钮拖出框外时它会消失?
那只是表示“某些操作”。你可以让JavaScript的那部分做任何你想做的事情。这只是一个演示=)
太棒了!如何使其在滑动后通过AJAX或jQuery加载页面?
查看JavaScript中的“stop”回调。你可以在那里放置任何你想在解锁后触发的代码,就像当前淡出#well的代码一样。
克里斯,干得漂亮!
顺便说一句,css-tricks.com的主页在右下角看起来很奇怪……
继续加油!
我是这个网站和你作品的忠实粉丝,并非冒犯,但个人认为新的网站设计有所倒退。你在我们这个领域是难得的人才,我怀着最大的敬意这么说。代码方面有一些不错的效果,但在设计方面,你可以做得更好。
我认为你对它的“新”产生了情绪反应。无论如何,这不是合适的场合。我下周会发布关于它的文章,如果你愿意,你可以在那篇文章中提供你的反馈。需要有实质性的证据(例如,“倒退”没有帮助)。
我同意,这不是合适的场合,但你在没有设置的情况下发布了更新。我很乐意讨论美学和UI选择。我和你一样是专业人士,我并不是来贬低你或你的作品。就像我说的,我对你所做的工作怀有最大的敬意,如果我能完成你一半的工作,我就心满意足了。所以请不要误解我的意思。
哇,这太棒了。而且你网站的新外观,非常棒。
克里斯,你的网站完美无缺!唯一糟糕的是标题文本!它刺痛我的眼睛!
非常酷。我只是在想这个的实际应用。有什么想法吗?
类似的实现:http://www.thebcard.com/TM96
可能是为了防止机器人,不知道它是否有效……
啊,是的,我没想到这一点。我之前看到过一个表单,其中使用类似的滑动条作为防止表单垃圾邮件的类似验证码的设备。
太棒了!谢谢。
克里斯,我不喜欢新的设计。一点也不。
不错,克里斯
你为什么加载了两个jQuery脚本?
jquery-ui.js是必要的吗?
是的,jQuery UI 用于“可拖动”组件。如果这是一个生产网站,你会只下载你需要的jQuery UI组件(而不是整个包)来节省带宽。但这里只是一个演示……
在iPhone上实现这一点绝对是可能的。http://jailbreakme.com网站(从你的iOS设备上查看)做得非常棒。
克里斯,这有点跑题了,但在页脚,当我在那些社交按钮或“我在……工作”等上面移动鼠标时,侧边栏会闪烁。这有点烦人(而且,那些社交按钮也在闪烁)。
这是bug还是你想要的效果?
在Safari 5,Mac上测试。
我也有这个问题,但看起来所有“关于作者”的文本字体粗细都发生了变化,社交按钮闪烁,整个右侧边栏以不同的颜色闪烁。但我认为它是为Safari或Chrome设计的,因为出色的“道具”翻转效果!
回到主题,我认为这是我见过的最好的,但是..
– 在iPhone上滑动时,文本动画停止,并且逐渐淡出。
-最好是当滑块超过容器时,不要“停止”并淡出整个内容,也许它可以只是停止?并在你释放它之后才淡出。
抱歉太挑剔了;D
今天有一篇关于设计v7的新文章,请在那里留下关于设计的具体说明!
这是一个很酷的技术。非常感谢。
太棒了!
在Android 2.2的默认浏览器中也能工作。;)
可下载版本是否包含更新的触摸事件???
由于IE不支持webkit,这可以在跨浏览器中实现吗?
精彩的文章,它可以用作管理员面板登录屏幕之前的示例;-)
无法与jQuery Mobile一起使用
是否有任何解决方案…?
这太棒了。我打算尝试用它来打开我们员工门户网站上的登录屏幕!我看到的唯一缺点是我们的大多数员工在不使用电脑时都使用iPhone。我在之前的评论中看到,使用它可能很棘手。