65.9K
CodeProject 正在变化。 阅读更多。
Home

精通 CSS3 7 个您不容错过的炫酷文本阴影示例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (20投票s)

2012 年 6 月 7 日

CPOL

6分钟阅读

viewsIcon

42376

着眼于如何提高我们的技能,并研究如何使用 CSS3 构建一些令人惊叹的文本阴影。

30 天开发一个 Windows 8 应用

我们一直在探索如何使用 CSS3 阴影的基础知识:box-shadowtext-shadow。今天我们将提高我们的技能,并探讨如何创建一些令人惊叹的文字阴影。

我从各种 Photoshop 教程中找到了一些关于阴影的想法——我很好奇是否可以用 text-shadow 实现类似的效果。

Internet Explorer 和 Windows 8

要亲自尝试所有这些示例并发挥您的文字阴影创意,请尝试下载 Internet Explorer 10。所有提到的技术也将适用于使用 HTML 和 JavaScript 构建的 Windows 8 的 Metro 风格应用。愿阴影与您同在!

街机之爱

在我们的第一个示例中,我们将尝试绘制一些炫酷的浮雕文字。我们将从简单的石灰绿色文本开始

color: hsl(80, 70%, 55%);

接下来,让我们添加一些浮雕效果,添加几个具有 1px 对角线偏移的阴影(注意阴影颜色与文本颜色的对比!)。

text-shadow: -1px -1px 0 hsl(80, 70%, 35%),
        
-2px -2px 1px hsl(80, 70%, 35%);

现在,我们将添加一些漂亮的细节——文本周围有一个浅白色模糊阴影,底部有一个深色阴影以柔化过渡。

text-shadow: 0 0 2px #fff, 
        
-1px -1px 0 hsl(80, 70%, 35%),
        
-2px -2px 1px hsl(80, 70%, 35%),
        
-2px -2px 2px hsl(80, 10%, 15%);

接下来,让我们为文本添加一个基底。要实现这一点,我们需要扩展我们的阴影(这里我们使用 text-shadow 规则的第四个参数——喷涂距离)。

text-shadow: ...
        
-3px -3px 0 7px hsl(60, 10%, 65%),
        
-4px -4px 0 7px hsl(60, 10%, 65%),
        
-5px -5px 0 7px hsl(60, 10%, 65%),
        
-6px -6px 0 7px hsl(60, 10%, 65%);

最后,为了将文本放在背景上,我们在基底的底部添加一个深色模糊阴影。

text-shadow: ...
        
-7px -7px 4px 8px hsl(60, 10%, 40%),
        
-8px -8px 6px 9px hsl(60, 10%, 55%);

最终结果

color: hsl(80, 70%, 55%);

text-shadow: 0 0 2px #fff, 
        
/*
embossed text */
        
-1px -1px 0 hsl(80, 70%, 35%),
        
-2px -2px 1px hsl(80, 70%, 35%),
        
/*
transition to substrate */  
        
-2px -2px 2px hsl(80, 10%, 15%), 
        
/*
substrate */                            
        
-2px -2px 0 7px hsl(60, 80%, 95%),
         -3px -3px 0 7px hsl(60, 10%, 65%),
        
-4px -4px 0 7px hsl(60, 10%, 65%),
        
-5px -5px 0 7px hsl(60, 10%, 65%),
        
-6px -6px 0 7px hsl(60, 10%, 65%),
        
/*
shadow for substrate */                            
        
-7px -7px 4px 8px hsl(60, 10%, 40%),
        
-8px -8px 6px 9px hsl(60, 10%, 55%);

色彩的幸福

在第二个示例中,我们将重用第一个示例的一些想法:我们将创建多个多彩的基底,将它们堆叠成金字塔。我们将从非常简单的粉色文本开始。

color: hsl(330, 100%, 50%);

首先,让我们将其浮雕化。这次我们的“阴影”朝下,而且非常小,所以可以通过省略中间的 1px 偏移来减少应用的规则数量——但在对角线阴影的情况下,这种方法会导致锯齿效应。此外,我还会添加一些模糊来柔化到下一个基底的过渡。

text-shadow: 0 2px 0 0px hsl(330, 100%, 25%),
        
0 3px 2px 0px hsla(330, 100%, 15%, 0.5);

接下来,让我们添加另一个具有不同色调值的扩展基底(请注意,我只更改垂直偏移、色调和喷涂距离)。

text-shadow: 0 2px 0 0px hsl(330, 100%, 25%),
        
0 3px 2px 0px hsla(330, 100%, 15%, 0.5),
        
0 3px 0 3px hsl(350, 100%, 50%),
        
0 5px 0 3px hsl(350, 100%, 25%),
        
0 6px 2px 3px hsla(350, 100%, 15%, 0.5);

现在我们只需要重复几次相同的技巧,增加基底的大小并向正确的方向调整色调。

text-shadow: ...
        
0 6px 0 9px hsl(20, 100%, 50%),
        
0 8px 0 9px hsl(20, 100%, 25%),
        
0 9px 2px 9px hsla(20, 100%, 15%, 0.5),
        
...
        
0 15px 0 45px hsl(90, 100%, 50%),
        
0 17px 0 45px hsl(90, 100%, 25%),
        
0 17px 2px 45px hsla(90, 100%, 15%, 0.5);

最终结果

color: hsl(330, 100%, 50%);

text-shadow: 0 2px 0 0px hsl(330, 100%, 25%),
        
0 3px 2px 0px hsla(330, 100%, 15%, 0.5),
        
/*
next */
        
0 3px 0 3px hsl(350, 100%, 50%),
        
0 5px 0 3px hsl(350, 100%, 25%),
        
0 6px 2px 3px hsla(350, 100%, 15%, 0.5),
        
/*
next */
        
0 6px 0 9px hsl(20, 100%, 50%),
        
0 8px 0 9px hsl(20, 100%, 25%),
        
0 9px 2px 9px hsla(20, 100%, 15%, 0.5),
        
/*
next */
        
0 9px 0 18px hsl(50, 100%, 50%)
        
0 11px 0 18px hsl(50, 100%, 25%),
        
0 12px 2px 18px hsla(50, 100%, 15%, 0.5),
        
/*
next */
        
0 12px 0 30px hsl(70, 100%, 50%),
        
0 14px 0 30px hsl(70, 100%, 25%),
        
0 15px 2px 30px hsla(70, 100%, 15%, 0.5),
        
/*
next */
        
0 15px 0 45px hsl(90, 100%, 50%),
        
0 17px 0 45px hsl(90, 100%, 25%),
        
0 17px 2px 45px hsla(90, 100%, 15%, 0.5);

巧克力

我创建的第三个示例是在尝试交替阴影时完成的。像往常一样,让我们从简单的棕色文本开始。

color: hsl(20, 100%, 20%);

第一步是实现经典的 3D 文字效果。

text-shadow: -1px 1px 0 0 hsl(20, 100%, 16%),
        
-2px 2px 0 0 hsl(20, 100%, 16%),
        
-3px 3px 0 0 hsl(20, 100%, 16%),
        
-4px 4px 0 0 hsl(20, 100%, 16%),
        
-5px 5px 0 0 hsl(20, 100%, 16%),
        
-6px 6px 0 0 hsl(20, 100%, 16%);

接下来,我决定通过降低亮度来使我的阴影变暗,并通过增加对角线偏移来增加阴影之间的空间。

text-shadow: -0px 0px 0 0 hsl(20, 100%, 16%),
        
-2px 2px 0 0 hsl(20, 100%, 14%),
        
-4px 4px 0 0 hsl(20, 100%, 12%),
        
-6px 6px 0 0 hsl(20, 100%, 10%),
        
-8px 8px 0 0 hsl(20, 100%, 8%),
        
-10px 10px 0 0 hsl(20, 100%, 6%);

下一步是收缩阴影。通过使用收缩,您可以将阴影缩小到原始字符的某些部分(这也取决于字体、字号和其他属性)。结果是锯齿状的阴影效果。此外,请注意,由于每个阴影的对角线偏移和喷涂距离不同,我们会得到轻微的扭曲效果。

text-shadow: -0px 0px 0 0 hsl(20, 100%, 16%),
        
-2px 2px 0 -1px hsl(20, 100%, 14%),
        
-4px 4px 0 -2px hsl(20, 100%, 12%),
        
-6px 6px 0 -3px hsl(20, 100%, 10%),
        
-8px 8px 0 -4px hsl(20, 100%, 8%),
        
-10px 10px 0 -5px hsl(20, 100%, 6%);

让我们稍微柔化一下我们的阴影(也可以通过使用各种模糊半径和颜色来添加一些中间线)。

text-shadow: -0px 0px 1px 0 hsl(20, 100%, 16%),
        
-2px 2px 2px -1px hsl(20, 100%, 14%),
        
-4px 4px 2px -2px hsl(20, 100%, 12%),
        
-6px 6px 3px -3px hsl(20, 100%, 10%),
        
-8px 8px 2px -4px hsl(20, 100%, 8%),
        
-10px 10px 2px -5px hsl(20, 100%, 6%);

最后,在玩了这个示例几分钟后,我得到了以下结果……

最终结果

color: hsl(20, 100%, 20%);

text-shadow: 0 0 1px hsl(20, 100%, 18%),
        
-1px 1px 0 hsl(20, 100%, 16%),                            

        
-2px 2px 2px -1px hsl(20, 100%, 14%),                            

        
-4px 4px 2px -2px hsl(20, 100%, 12%),
        
-6px 6px 3px -3px hsl(20, 100%, 10%),
        
-8px 8px 2px -4px hsl(20, 100%, 9%),
        
-10px 10px 3px -5px hsl(20, 100%, 8%),
        
-12px 12px 2px -6px hsl(20, 100%, 7%),
        
-14px 14px 2px -7px hsl(20, 100%, 6%), 
        
-15px 15px 2px -8px hsl(20, 100%, 5%),                            

        
-15px 15px 0 -8px hsla(20, 50%, 10%, 0.25);

奶油蛋糕

在第四个示例中,我们将为蛋糕制作奶油文本效果。仅文本。

color: hsl(35, 100%, 30%);

background: hsl(35, 60%, 80%);

让我们从模糊开始。我添加了两个阴影:第一个(上面的)与文本具有相同的色调值,但饱和度较低;第二个(下面的)模糊度更高,更亮,半透明,我还将其色调值移到了红色。

text-shadow: 0 0 2px 1px hsl(35, 70%, 30%),
        
0 0 4px 4px hsla(30, 100%, 55%, 0.5);

现在,让我们添加一些奶油色的基底(色调值移到黄色,亮度增加)。

text-shadow: ...
        
-1px 1px 2px 7px hsl(45, 60%, 95%);

在下一步,我们应该为基底添加一些立体感:我添加了一个新的阴影,其对角线偏移与文本颜色相同,但饱和度较低。请注意,此阴影比基底的扩展度小(4px 对 7px)。

text-shadow: ...
        
-3px 3px 1px 4px hsl(35, 70%, 30%);

最后一步:模糊基底以柔化与背景的过渡。

text-shadow: ...
        
-3px 3px 4px 8px hsla(30, 90%, 55%, 0.5);

最终结果

color: hsl(35, 100%, 30%);

background: hsl(35, 60%, 80%);

text-shadow: 0 0 2px 1px hsl(35, 70%, 30%),
        
/*
transition to substrate */
        
0 0 4px 4px hsla(30, 100%, 55%, 0.5),
        
/*
substrate */
        
-1px 1px 2px 7px hsl(45, 60%, 95%),
        
/*
adding volume */
        
-3px 3px 1px 4px hsl(35, 70%, 30%),
        
/*
transition to background */
        
-3px 3px 4px 8px hsla(30, 90%, 55%, 0.5); 

塑料

我一直在玩最后一个示例,思考我可以在它上面做什么……与许多其他示例一样,最终结果取决于文本本身(大小、字体等)和应用的阴影效果。在我的第五个示例中,我使用的是 CabinSketch 字体。所以这是我们拥有的——它只是没有特殊效果的文本。

color: hsl(65, 60%, 20%);

background: hsl(65, 60%,95%);

首先,我在文本周围添加了一些模糊(请注意,阴影比文本亮,结果文本看起来更亮、更饱和)。

text-shadow: 0 0 3px 2px hsl(65, 60%,75%);

接下来,让我们添加一些带有模糊效果的外边框(请注意,我使用了扩展和降低了亮度)。

text-shadow: 0 0 3px 2px hsl(65, 60%,75%),
        
0 0 1px 9px hsl(65, 60%, 20%);

嗯,这看起来太暗了——我将添加一个中间阴影来照亮我的文本。

text-shadow: 0 0 3px 2px hsl(65, 60%,75%),
        
0 0 1px 5px hsl(65, 60%,95%),
        
0 0 1px 9px hsl(65, 60%, 20%);

现在最有趣的一步——实际上,我不需要完整的外边框(基底),只需要其中的一部分。为了隐藏多余的细节,我将在基底之上绘制几个阴影(请注意,这些阴影尺寸较小,但对角线偏移更大)。

text-shadow: 0 0 3px 2px hsl(65, 60%,75%),
        
0 0 1px 5px hsl(65, 60%,95%),
        
6px 6px 4px 7px hsl(65, 60%,95%),
        
-4px -6px 4px 6px hsl(65, 60%,95%),
        
0 0 1px 9px hsl(65, 60%, 20%);

您也可以尝试添加一些柔化细节。

最终结果

color: hsl(65, 60%, 20%);

background: hsl(65, 60%,95%);

text-shadow: 0 0 3px 2px hsl(65, 60%,75%),
       
/*
light substrate */
       
0 0 1px 5px hsl(65, 60%,95%),
       
/*
blurring */
       
0 0 4px 4px hsla(65, 100%, 30%, 0.4),
       
/*
cutting substrate pieces */
       
6px 6px 4px 7px hsl(65, 60%,95%),
       
-4px -6px 4px 6px hsl(65, 60%,95%),
       
/*
dark outlining */
       
0 0 1px 9px hsl(65, 60%, 20%);

绘制

接下来的两个示例将为您揭示一些使用透明度的技巧。想想看:您将如何使用 text-shadow 在文本内部绘制东西?实际上,您不能使用 text-shadow 绘制内部阴影。应用于文本的所有阴影都会堆叠在一起,一个覆盖在另一个之上,而文本则绘制在所有阴影的顶部。因此,您需要以某种方式使文本消失……要做到这一点,您只需使文本透明!

color:
transparent;

background: hsl(0, 75%,45%);

现在,道路畅通无阻。请注意,我将使用白色绘制(所以唯一真正重要的是 100% 的亮度)。要在文本内部绘制,只需减小阴影的大小。

text-shadow: 3px 3px 1px -8px hsla(0, 60%, 100%, 0.75);

让我们通过改变透明度、偏移量和大小来添加更多细节。

text-shadow: 3px 3px 1px -8px hsla(0, 60%, 100%, 0.75),
        
-1px -1px 1px -4px hsla(0, 60%, 100%, 0.65),
        
1px 1px 1px -4px hsla(0, 60%, 100%, 0.65);

要加固形状,您可以添加一个扩展的模糊阴影。

text-shadow: ...
        
0 0 1px 2px hsla(0, 60%, 100%, 0.65);

您可以根据需要添加额外的细节。

最终结果

color:
transparent;

background: hsl(0, 75%,45%);

text-shadow: 3px 3px 1px -8px hsla(0, 60%, 100%, 0.75),
        
-1px -1px 1px -4px hsla(0, 60%, 100%, 0.65),
        
1px 1px 1px -4px hsla(0, 60%, 100%, 0.65),
        
/*
background */
        
0 0 1px 2px hsla(0, 60%, 100%, 0.65),
        
/*
additional details */
        
-3px -3px 1px 2px hsla(0, 60%, 100%, 0.25),
        
3px 3px 1px 2px hsla(0, 60%, 100%, 0.25);

上下

最后一个示例!我将继续玩弄透明度。我将从白色文本开始(我只是选择它使其可见)。

color:
transparent;

首先,让我们添加一个经典的 3D 文字效果(您可以在这里调整透明度)。请注意中间阴影中增加的亮度值——我发现这是强调立体感的不错方法(尝试增加亮度使其更明显)。

text-shadow: 1px -1px hsla(0, 0%, 30%, .6),
        
2px -2px hsla(0, 0%, 30%, .7),
        
3px -3px hsla(0, 0%, 32%, .8),
        
4px -4px hsla(0, 0%, 30%, .9),
        
5px -5px hsla(0, 0%, 30%, 1.0);

现在,为了增加更多立体感,我将在顶部添加一个重复原始文本形状的阴影。

text-shadow: 0px 0px hsla(0, 0%, 50%, .5),
        
1px -1px hsla(0, 0%, 30%, .6),
        
...

最后,与底部部分类似,我将添加上部的 3D 阴影,但更透明且亮度更高(为了使这一部分更锐利,最上面的阴影绘制得透明度较低)。

text-shadow: -4px 4px hsla(0, 0%, 70%, .4),
        
-3px 3px hsla(0, 0%, 60%, .2),
        
-2px 2px hsla(0, 0%, 70%, .2),
        
-1px 1px
hsla(0, 0%, 70%, .2),
        
...

最终结果

color:
transparent;

text-shadow: -4px 4px hsla(0, 0%, 70%, .4),
        
-3px 3px hsla(0, 0%, 60%, .2),
        
-2px 2px hsla(0, 0%, 70%, .2),
        
-1px 1px hsla(0, 0%, 70%, .2),
        
0px 0px hsla(0, 0%, 50%, .5),
        
1px -1px hsla(0, 0%, 30%, .6),
        
2px -2px hsla(0, 0%, 30%, .7),
        
3px -3px hsla(0, 0%, 32%, .8),
        
4px -4px hsla(0, 0%, 30%, .9),
        
5px -5px hsla(0, 0%, 30%, 1.0);

注意

本文讨论的“text-shadow”属性定义在 CSS3 Text 模块中,该模块目前处于工作草案状态。虽然它似乎相当稳定,但细节仍可能发生变化。

text-shadow 的“spread-distance”值目前定义在 css4-text 的 ED 中。

© . All rights reserved.