画布
这不是按要求使用 CSS,而是使用 canvas 元素。
以下示例将通过文本剪切图像并为其添加阴影。
示例
LIVE DEMO HERE
这样做的结果是:
/// set some text settings
ctx.textBaseline = 'top'; /// defaults to baseline, using top makes life simpler
ctx.font = '150px impact'; /// set the font and size we want to use
ctx.textAlign = 'center'; /// center for example
/// next draw the text
ctx.fillText(txt, demo.width * 0.5, 10);
下一步是更改合成模式,以便我们使用已经绘制的文本作为我们接下来绘制的内容的剪辑:
/// change composite mode to fill text
ctx.globalCompositeOperation = 'source-in';
/// draw the image you want on top; will be clipped by text
ctx.drawImage(img, 0, 0);
现在我们绘制的图像被剪裁了。要添加阴影,我们需要多做一轮,就好像我们从一开始就添加阴影一样,图像也会被绘制到阴影区域中。
所以我们需要做的是将合成模式重置为默认值,设置阴影,然后将画布绘制回自身。因为它绘制在顶部完全相同的位置,我们不会注意到。
我们在这里使用save 和restore 来避免手动重置阴影。
/// reset composite mode to normal
ctx.globalCompositeOperation = 'source-over';
/// create a shadow by setting shadow...
ctx.save();
ctx.shadowColor = 'rgba(0,0,0,0.5)';
ctx.shadowBlur = 7;
ctx.shadowOffsetX = 3;
ctx.shadowOffsetY = 3;
/// ... and drawing it self back
ctx.drawImage(demo, 0, 0);
ctx.restore();
在演示中,我制作了一个循环来更改文本,因此您可以看到这只是提供不同文本的问题。
还要注意背景是透明的,因此您可以将画布放在其他元素之上(在演示中我更改了主体的背景颜色)。
我建议将演示代码重构为通用函数。为此,您可以将所有设置放入其中并将save 移至开头,将restore 移至末尾,以保留函数外设置的其他设置。