HTML5 SVG可以制作出许多绚丽的动画和效果,在这个教程中,我们将要制作一种类似Photoshop的文字遮罩效果。如何使这种遮罩效果可以跨浏览器使用是我们的研究重点。
这个SVG文字遮罩效果的思路是在文字下面放一张图片,然后通过CSS使文字以外的区域不可见。如果单纯的使用HTML代码来完成这种效果,只有使用像Flash/Silverlight之类的工具。而使用SVG来制作则可以十分轻松的完成。
我们将使用下面的这张图片来作为文字的背景:
我们可以有两个解决方案。第一种是使用CSS来制作。通过CSS的mask
属性也可以实现文字遮罩效果:
#myImg { mask: url(#myMask); }
这个解决方案十分直接简单,但不幸的是,它不能在webkit内核的浏览器上工作,如google chrome浏览器。
第二种解决方案是使用SVG。将一个SVG对象放置在一张图片上面,SVG中包含要制作遮罩效果的文字。SVG对象可以使用z-index
属性直接放到图片的上面,或者将SVG放到一个div
中,将div
的背景设置为图像。这两种方法都可以制作出遮罩效果。
下面是最终的文字遮罩效果:
SVG文字有5像素的描边和边部100%的透明度,文字的填充使用50%的透明度。
本例的HTML代码如下:
<div id="bkDiv"> <svg width="100%" height="100%"> <defs> <mask id="theMask"> <rect width="100%" height="100%" fill="#fff" /> <text x="0" y="120" id="theText" fill="#000">Welcome</text> </mask> </defs> <rect width="100%" height="100%" mask="url(#theMask)" fill="#fff" /> </svg> </div>
CSS代码如下:
#bkDiv { background-image : url('my_image.jpg'); height:130px; width:550px; } #theText { font-size:140px; font-family:impact; stroke:#000; stroke-width:5px; fill-opacity:0.5; }
我们还可以使用CSS3来制作遮罩文字的背景动画,这将是更有趣的效果,我们将在后面的教程中讲解这些技术。