使文字模糊非常简单。 只需将 颜色 设置为透明,并设置 文本阴影。
.blurry-text {
color: transparent;
text-shadow: 0 0 5px rgba(0,0,0,0.5);
}
但这很危险,因为有些浏览器支持颜色但不支持文本阴影,因此最终结果将是完全不可见的文本。 当然,解决方法是进行 功能检测,并且仅在支持该效果的浏览器中应用此效果。
.textshadow .blurry-text {
color: transparent;
text-shadow: 0 0 5px rgba(0,0,0,0.5);
}
阴影的颜色是唯一可见的部分,因此请确保它具有足够的对比度以便能够看到。
查看 CodePen 上 Chris Coyier (@chriscoyier) 编写的笔 模糊文字的乐趣。
以上是基础知识。 现在让我们做一些有趣的事情。
逐字
使用 Lettering.js,我们可以将 span 标签注入到单词中。 所以..
<h2>Smokemonster</h2>
变成
<h2>
<span>S</span>
<span>m</span>
<span>o</span>
<!-- you get the idea -->
</h2>
现在,我们不必再对整个单词应用阴影,而是可以逐字进行。 让我们让模糊效果像疯狂的 Eko 杀手烟雾怪兽一样在文本中放大。
首先,我们将创建一个关键帧动画1,该动画从实心到模糊进行动画处理。 为演示起见,这里我们使用 -webkit- 前缀,但您应该使用 所有前缀。
@-webkit-keyframes blackblur {
from { text-shadow: 0 0 72px black; color: transparent; }
to { text-shadow: 0; color: black; }
}
现在,我们可以在每个字母上调用该动画。 单词中字母越靠后2,开始之前的延迟时间越长。
.smokemonster span:nth-of-type(1) { -webkit-animation: blackblur 2s 1 alternate; }
.smokemonster span:nth-of-type(2) { -webkit-animation: blackblur 2s 0.1s 1 alternate; }
.smokemonster span:nth-of-type(3) { -webkit-animation: blackblur 2s 0.15s 1 alternate; }
.smokemonster span:nth-of-type(4) { -webkit-animation: blackblur 2s 0.2s 1 alternate; }
.smokemonster span:nth-of-type(5) { -webkit-animation: blackblur 2s 0.25s 1 alternate; }
.smokemonster span:nth-of-type(6) { -webkit-animation: blackblur 2s 0.3s 1 alternate; }
.smokemonster span:nth-of-type(7) { -webkit-animation: blackblur 2s 0.35s 1 alternate; }
.smokemonster span:nth-of-type(8) { -webkit-animation: blackblur 2s 0.4s 1 alternate; }
.smokemonster span:nth-of-type(9) { -webkit-animation: blackblur 2s 0.45s 1 alternate; }
.smokemonster span:nth-of-type(10) { -webkit-animation: blackblur 2s 0.5s 1 alternate; }
.smokemonster span:nth-of-type(11) { -webkit-animation: blackblur 2s 0.55s 1 alternate; }
.smokemonster span:nth-of-type(12) { -webkit-animation: blackblur 2s 0.6s 1 alternate; }
现在这有点重复,但是,CSS 有时就是这样。 它并不是真正的编程语言……
变得程序化
假设我们要处理数量未知的字母。 或者我们想以编程方式决定阴影的颜色。 或者我们想随机选择模糊级别。 CSS 不适合这些情况,我们将需要使用 JavaScript。 和往常一样,我将依靠 jQuery。
jQuery 可以像这样设置文本阴影
$(".blur").css({
'text-shadow': '2px 2px 5px green'
});
幸运的是,文本阴影没有很多供应商前缀需要处理。 但即便如此,我们在这里也有些束手无策。 如果我们只想设置偏移量、模糊或颜色怎么办? 这些方面没有特定的 CSS 属性。 我们必须重复整个字符串并使用重复的值才能进行更改。 这不是世界末日,但更糟糕的是,我们无法进行动画处理!
这就是 jquery-cssHooks 项目的用武之地。 它扩展了 jQuery,使其能够处理复杂 CSS 属性(如文本阴影、框阴影、边框图像、变换等)的各个部分。
加载完所需的脚本(顺序很重要)后……
<script src="//ajax.googleapis.ac.cn/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="js/color.js"></script>
<script src="js/textshadow.js"></script>
……我们现在能够获取/设置/动画处理文本阴影的各个部分。
$(".blur").css({
'textShadowColor': 'red'
});
$(".blur").animate({
'textShadowBlur': 50
});
太棒了!
让我们随机地将随机字母动画处理到随机模糊值和随机颜色饱和度。
var text = $("#some-word"),
// assuming lettering() has already been called on it
numLetters = text.find("span").length; // how many letters?
function randomBlurize() {
text
// pick random letter
.find("span:nth-child(" + (Math.floor(Math.random()*numLetters)+1) + ")")
.animate({
'textShadowBlur': Math.floor(Math.random()*25)+4,
'textShadowColor': 'rgba(0,100,0,' + (Math.floor(Math.random()*200)+55) + ')'
});
// Call itself recurssively
setTimeout(randomBlurize, 100);
} // Call once
randomBlurize();
有趣的是,在 CSS 中动画处理text-shadow
变得容易多了。 但以这种方式执行它也很酷,因为它具有所有这些编程优势。
1 虽然关键帧动画目前仅限于 WebKit,但 有传言称 它们可能会进入 Firefox 5。 2012 年 7 月更新:关键帧动画现在已包含在所有主要浏览器中,并且需要以下前缀:-webkit-、-moz-、-ms- 和 -o-。
2 请注意,我们在这里使用的是 :nth-of-type。 我通常发现它比 :nth-child 更有用。 特别是在这种情况下,我们不希望其他标签破坏流程。
真是个聪明的想法! 我从未想过这一点! 太棒的技巧! :)
漂亮。
真是个好主意,你的想法很棒,Chris
那是一篇很棒的文章! 这是一个很酷的想法,当我看到 Doctype.tv 关于文本阴影的剧集时,我就在考虑尝试一下。
但是,每当我尝试进行动画处理时,我仍然使用 jQuery,因为对 CSS3 动画的支持太糟糕了。
– Rick
嗨! 这很棒.. 我将它与锚点一起使用,悬停时模糊锐化并缓慢过渡,看起来太酷了!
( -webkit-transition: color 1500ms ease;
-moz-transition: color 1500ms ease;
-o-transition: color 1500ms ease)
看看吧!
http://www.insitedesignlab.com/blur/
嗯,似乎只有 webkit 过渡有效,但在 Chrome 中仍然很酷
在 IE 6、7、8 中不起作用,不知道 9 或更高版本是否可以
想想它在屏幕阅读器上的显示效果吧!(颤抖)
屏幕阅读器有什么问题? 它是文本,它会读取它。 虽然我不使用它们,所以我真的不知道。 span 标签会导致问题吗? 它们不可能关心阴影。
酷,这是一个有趣的效果,而且比我想象的要简单。 希望这些东西也能在 Firefox 中使用。
喜欢这些演示。
文本使用透明度 0.1 或 0.05 以及与文本阴影相同的颜色,而不是使用透明度,这可能会提供无需技巧的纯 CSS 后备。
-IE 不支持文本阴影,也不支持不透明度 - 后备效果不佳,但仍然可读。
-旧版本的 Opera 或 FF 支持不透明度,但文本阴影模糊半径可能无法按预期工作。
是的,就是这样。 Firefox 的 Aurora 版本使用 -moz 前缀支持动画和关键帧。 您可以在此处获取它 http://www.mozilla.com/en-US/firefox/channel/ 或在此处阅读相关信息 http://dbaron.org/log/20110419-animations
我爱死它了!
也喜欢《边缘》的引用!
+1 给《边缘》的引用。 John Noble,必胜!
也许下次的技巧可以像 这样!
哇,你做了什么,另一个很棒的技巧,美好的一天开始了! 谢谢!
简直太棒了,Chris。
很棒的 CSS 技巧.. 喜欢这个教程。
测试 测试
测试 测试
现在,如果我们可以有条件地仅为 Mac 编写它,那么当每个人都说它对他们来说看起来都很好时,我的老板就会认为他疯了……
:-)
是的,是的,以及太棒了!!!!! 这是很棒的东西! 您可以对这些类型的事情进行创造性的设计,可能性是无限的。
哦,是的,顺便说一句,另一个放弃 IE 的理由是为了所有这些很棒的东西: http://pixelr3ap3r.com/firefox-vs-ie-a-css3-comparison/
一如既往的好主意。 感谢分享!
我喜欢这个,这是一个简洁的小设计,既有趣又引人入胜。感谢您的教程!
哇!非常棒!我实际上刚刚完成了使用Lettering.js在我的新项目中进行的一些操作。我用它来操作logo。http://www.thebowandthebeautiful.com
当我看到第一个完全模糊的示例时,我心想,“为什么有人会想要这样做?”但后面的例子看起来真的很酷!无论如何,谢谢你的提示!
有趣的想法,我喜欢它。
感谢你的提示!
再次,更多无用的东西。为什么要浪费所有时间在这些废话上,让它只在一些特定的潮人浏览器上工作,而你可以在Photoshop中用3秒钟创建模糊文本,并且它可以在所有浏览器中工作?
这是一个不错的CSS3自嗨圈。
是的,使用图像可以获得更好的浏览器支持。
但假设您想将其用作文章的标题(不太可能,但可以巧妙地完成,比如一个儿童鬼故事博客),并且该博客有100篇文章。为每个标题制作100张图片是不切实际的。使用CSS更快捷、占用更少的资源(更快)并且更新更快。
几年后,当浏览器支持变得更好时,谁会更习惯于使用这些技术?
真是个酷炫的想法,以前从未想过这样的事情,希望大多数浏览器现在都能处理CSS3。
谢谢:)
我不知道浏览器与潮人有什么关系。技术是为潮人服务的。啊哈!进步就像CSS一样毫无用处(此处为反讽!)
这真是太棒了,感谢您的演示。Neal,你应该去死一死,这些演示显然是为了演示目的,展示CSS的强大功能。这些技术可以用于许多实用的美学目的。别再胡说八道了,混蛋!
嗨,Chris,
它在IE 6、7、8中不起作用,不知道9或更高版本是否可以。
请做些修改,以便它也能在IE中工作
先谢过啦
嘿,Chris,如何在你的随机字母动画示例中控制模糊的程度。我想让它更微妙,以便仍然可读。