IE下实现类似CSS3 text-shadow文字阴影的几种方法


Posted in HTML / CSS onMay 11, 2011

一、开始的擦边话
为了测试IE9浏览器,下午晃晃荡荡把系统换成window7的了。果然,正如网上所传言的一样,IE9浏览器确实不支持CSS3 text-shadow属性,且根据最近的IE10 preview版的反馈,IE10浏览器也是不支持text-shadow属性的。至于为何不支持,就像女孩的心思一样,我也是百思不得其解。

不过考虑到text-shadow的更多的是效果性质的属性,且潜力有限,所以,就我个人而言,最近版本的IE浏览器不支持该属性我还是相对比较淡然的。虽然IE浏览器不支持text-shadow文字阴影属性,但是我们可以使用一些特殊的手段,或是方法实现类似于文字阴影的效果,而本文就将简单展示几种我所知的方法。

二、glow滤镜下的文字阴影效果
IE滤镜中有个名叫glow的滤镜,用来实现光晕效果,于是,我们可以用来实现无方向的文字阴影效果。

该滤镜最简单的使用类似下面:

filter:glow(color=black,strength=5);
上面实现的效果就是5像素扩散大小的黑色光晕,效果类似下面(截自IE9浏览器):
IE下实现类似CSS3 text-shadow文字阴影的几种方法

demo页面中效果想对应的CSS代码如下:

复制代码
代码如下:

.bg{width:512px; height:340px; margin:1em auto; background:url(http://image.zhangxinxu.com/image/study/s/s512/mm19.jpg);}
.font{margin:0; padding:1em; color:#fff; text-shadow:0 0 5px rgb(0, 0, 0); font-size:36px; font-family:"微软雅黑"; float:left; filter:glow(color=black, strength=5);

对应HTML代码如下:
复制代码
代码如下:

<div class="bg">
<h4 class="font">张小姐长大了!</h4>
</div>

不足
1. 虽然IE浏览器的glow光晕滤镜可以实现勉强可以称为的文字阴影效果,但是其效果相比原生的text-shadow属性就是玄彬和郭德纲的区别,如下firefox4下的text-shadow属性效果:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

并且对不同颜色的支持效果大相径庭,例如,我们把光晕的黑色改成灰色,看看IE9浏览器下的效果:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

可以看到不仅光晕颜色不纯(杂色丛生),且文字边缘也有不和谐的黑色糙边,让人不仅感叹:你能不能再丑一点。

2. 既然是光晕滤镜,就决定了此方法实现的文字阴影效果是无方向性的,就四周均匀扩散性质的。这是该方法一个较大的局限性。
三、MotionBlur滤镜下的文字阴影效果
IE滤镜中有个名叫MotionBlur的滤镜,用术语称呼其为“动感模糊滤镜”。该滤镜使用的示例如下:

filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=5, direction=145);
用中文释义就是:145度方向上5像是大小的动感模糊。产生的效果基本上就是下面这幅模样:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

demo页面中相关的CSS代码如下:

复制代码
代码如下:

.bg{width:512px; height:340px; margin:1em auto; background:url(http://image.zhangxinxu.com/image/study/s/s512/mm19.jpg);}
.font{margin:0; padding:1em; color:#fff; font-size:36px; font-family:"微软雅黑"; text-shadow:1px 1px 5px #fff; filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=5, direction=145); float:left;}

对应HTML代码与上面一致,如下:

<div class="bg">
<h4 class="font">张小姐长大了!</h4>
</div>
不足
1. MotionBlur滤镜虽然有了方向性,也可以设定大小,但是,其模糊出来的投影颜色却只能是文字本身的颜色。也就是说,单单一个标签,一个滤镜是无法实现类似于文字白色,投影黑色这种效果的。但是,这种先天性的不足也是可以通过某些手段修复的。

2. 此滤镜在应用动感模糊的同时本身也被模糊了,相对于挖自己身上的肉填饱自己饥饿的肚子。这种实现效果显然是会大打折扣的,看看正经八百text-shadow属性下的白色投影效果(图片截自chrome浏览器):

IE下实现类似CSS3 text-shadow文字阴影的几种方法

正所谓人比人,气死人啊。两者的效果差距可以赶上凤姐和志玲姐的差距了。然而,通过某些小手段,我们也可以让MotionBlur滤镜下的文字阴影效果爷变得很赞,这就是下面一节的内容。
四、MotionBlur滤镜下文字阴影效果进一步优化
路上有坑怎么办?很简单,填上就好,如果没有实物填充,盖个盖子什么的也是好的。所以,正如上面说到,文字应用动感滤镜实现投影效果好比割肉补疮,现在,我们只要在被割掉的那块肉上再补上一块不就OK了吗?

您可以狠狠地点击这里:MotionBlur滤镜下文字阴影效果优化demo

结果在IE9浏览器的兼容模式下(貌似是IE7 的核)的效果如下图:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

效果看上去要舒服多了。效果实现的原理是两端一模一样的文字相互重叠,背后的文字动感模糊,前面的文字就是很纯洁的文字了。

CSS代码如下:

复制代码
代码如下:

.bg{width:512px; height:340px; margin:1em auto; background:url(http://image.zhangxinxu.com/image/study/s/s512/mm19.jpg);}
.font{margin:0; padding:1em; font-size:36px; font-family:"微软雅黑";}
.text{color:#fff; position:absolute;}
.sh{color:#000; text-shadow:1px 1px 5px #000; filter:progid:DXImageTransform.Microsoft.MotionBlur(strength=5, direction=145); *zoom:1;}

HTML代码如下:
复制代码
代码如下:

<div class="bg">
<h4 class="font"><span class="text">张小姐长大了!</span><div class="sh">张小姐长大了!</div></h4>
</div>

考虑到不同IE浏览器下的兼容性问题,作为阴影效果的文字标签需要使用block水平的标签,且需要在IE6/IE7浏览器下haslayout。另外,这里的文字重叠是借助了absolute绝对定位元素的无高度性和无宽度性实现的。具体可参见我之前的“CSS 相对/绝对(relative/absolute)定位系列(二)”以及相关系列的文章。

不足
由于要借助于两段不同的文字实现效果,所以,此方法不使用与长篇大论文字处的投影效果实现,像是标题啊,导航啊这些文字不是很多的地方就可以使用使用。
五、远离text-shadow和滤镜的文字阴影实现
这里实现的原理的精髓其实跟上面的其实一致,两段一模一样的文字,重叠显示,不过,投影效果是通过两段文字的错位差实现的,例如通过margin负值让上下的文字出现1像素的偏移。

您可以狠狠地点击这里:margin错位下的文字投影效果demo

在IE下的效果如下图:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

在FireFox浏览器下效果为:
IE下实现类似CSS3 text-shadow文字阴影的几种方法

可以发现,此方法实现的效果是真正意义上的兼容,基本上像素毫厘不差。

相关CSS代码如下:

复制代码
代码如下:

.bg{width:512px; height:340px; margin:1em auto; background:url(http://image.zhangxinxu.com/image/study/s/s512/mm19.jpg);}
.font{margin:0; padding:1em; font-size:36px; font-family:"微软雅黑"; float:left;}
.sh{margin:-1px 0 0 -1px; color:#fff; position:absolute;}

HTML代码如下:
复制代码
代码如下:

<div class="bg">
<h4 class="font"><span class="sh">张小姐长大了!</span><div>张小姐长大了!</div></h4>
</div>

不足
文字阴影效果的大小有限,且无法很好的实现透明度变化的投影效果。1像素的偏移投影是其最适用的情况。

六、快速的结语
就当文章写到这儿的时候,我突然想到,IE下还有个模糊滤镜,如果结合文字重叠技术,岂不第一个例子的四周扩散型投影效果有了较好的UI表现。不过碍于自己精力有限,门卫师傅也要休息,这里就不折腾了,有兴趣您可以尝试下IE模糊滤镜(blur)下的文字投影效果。
当然,一个人的智慧毕竟有限。如果您有比较好的实现文字阴影效果的方法,欢迎分享。
另外,由于重装系统的原因,IE8,IE6等浏览器暂时没有机会测试,所以,自己不确定这些浏览器下的表现是否令人满意。如果有什么糟糕的地方,欢迎指正。文中要是有表述不准确的地方也欢迎指正。

感谢阅读。 原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活

HTML / CSS 相关文章推荐
目前不被任何主流浏览器支持的CSS3属性汇总
Jul 21 HTML / CSS
CSS3制作圆角图片和椭圆形图片
Jul 08 HTML / CSS
用css3写出气球样式的示例代码
Sep 11 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
Mar 17 HTML / CSS
HTML5实现视频直播功能思路详解
Nov 16 HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
Apr 26 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
Apr 22 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
Jun 24 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
Nov 18 HTML / CSS
HTML5进度条特效
Dec 18 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
Mar 13 HTML / CSS
HTML5实现视频弹幕功能
Aug 09 HTML / CSS
CSS3 Backgrounds属性相关介绍
May 11 #HTML / CSS
深入浅出CSS3 background-clip,background-origin和border-image教程
Jan 27 #HTML / CSS
css3 background属性调整增强介绍
Dec 18 #HTML / CSS
利用CSS3的checked伪类实现OL的隐藏显示的方法
Dec 18 #HTML / CSS
CSS3实战第一波 让我们尽情的圆角吧
Aug 27 #HTML / CSS
彻底弄明白CSS3的Media Queries(跨平台设计)
Jul 27 #HTML / CSS
让IE6、IE7、IE8支持CSS3的脚本
Jul 20 #HTML / CSS
You might like
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python读写docx文件的方法
2018/05/08 Python
python 常用的基础函数
2018/07/10 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
甜点店创业计划书
2014/01/27 职场文书
岗位职责怎么写
2014/03/14 职场文书
父母对孩子说的话
2014/04/12 职场文书
空气的环保标语
2014/06/12 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
教导主任个人总结
2015/03/03 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
零基础学java之循环语句的使用
2022/04/10 Java/Android
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android