关于图片上显示文字的方式,相信大家已经比较是熟悉了,有时候我们需要一些特殊的效果去提升用户体验。今天给大家分享一篇关于"图片上的文字特效"的文章。走起吧!!!!
先来看张部分截图效果,我们以"Web前端之家"文字为例子咯:
看到图片后,有没有感到惊叹,文字还可以这样做特效?没错,一切只需要用css图片属性去完成。
介绍
图像背景在文本后面看起来很棒。然而,它的 CSS 实现并不是那么简单。我们可以使用该background-clip: text;
属性,但它仍然是一个没有足够浏览器支持的实验性功能。
在文本后面显示图像背景的 CSS 替代方法是使用mix-blend-mode
属性。所有现代桌面和移动浏览器都支持HTML 元素的混合模式,但少数浏览器除外,例如 Internet Explorer。
在这篇文章中,我们将看到mix-blend-mode
(特别是它的两种模式)是如何工作的,以及如何在两个用例中使用它来显示带有图像背景的文本:
-
当可以通过文本看到背景图像时
-
当背景图像围绕文本运行时
接下来我们就开始以上述截图为实例,解析如何实现。
效果解析
该mix-blend-mode
CSS属性定义如何在内容和背景中的HTML元素应该colorwise糅合在一起。
看一看在混合模式的名单,其中有我们将使用multiply
和screen
在这个岗位。
首先,让我们看看这两种特定的混合模式是如何工作的。
如何multiply
与screen
混合模式工作
从技术上讲,混合模式是使用元素及其背景的颜色分量计算最终颜色值的函数。
该multiply
混合模式
在multiply
混合模式下,元素及其背景的各个颜色相乘,产生的颜色应用于最终的混合版本。
所述multiply
混合模式根据所计算的以下公式:
B(Cb, Cs) = Cb × Cs
其中: Cb
-- 背景的 Cs
颜色成分B
--源元素的颜色成分 -- 混合函数
当Cb
和Cs
相乘时,产生的颜色是这两种颜色成分的混合,并且与两种颜色中最暗的颜色一样深。
要创建我们的文本图像背景,我们需要关注Cs
(源元素的颜色分量)是black 或 white 的情况。
如果Cs
是黑色,其值为0
,则输出颜色也将为黑色,因为Cb × 0 = 0
。因此,当元素着色为黑色时,背景是什么颜色并不重要,混合后我们只能看到黑色。
如果Cs
是白色,则其值为1
,则输出颜色为任意颜色Cb
,因为Cb × 1 = Cb
。所以在这种情况下,我们直接看到的大背景下,因为它是。
该screen
混合模式
该screen
混合模式的工作方式类似于multiply
混合模式,但有相反的结果。因此,黑色前景显示背景原样,白色前景显示白色背景。
让我们快速看看它的公式:
B(Cb, Cs) = Cb + Cs - (Cb × Cs)
当Cs
为黑色(0) 时,混合后将显示背景颜色,如下所示:
Cb + 0 - (Cb × 0) = Cb + 0 - 0 = Cb
当Cs
是白色(1) 时,任何背景下的结果都是白色的,如:
Cb + 1 -(Cb × 1) = Cb + 1 - Cb = 1
通过文字显示的图像
通过其背景图像表示显示文本中,我们使用screen
混合模式与黑色文本和白色周围空间。例子走起。。。
<div class="backdrop">
<p class="text">Web前端之家</p>
</div>
.backdrop {
width: 800px;
height: 210px;
background-image: url(https://images.unsplash.com/reserve/AXx3QORhRDKAMrbb8pX4_photo%202.JPG);
background-size: 100%;
margin: auto;
white-space: nowrap;
}
.text {
color: black;
background-color: white;
mix-blend-mode: screen;
width: 100%;
height: 100%;
font-size: 80pt;
font-weight: bolder;
text-align: center;
line-height: 210px;
margin: 0;
}
目前我们的文本如下所示,在下一步中,我们将为背景添加自定义颜色。
添加颜色
正如您现在可能已经猜到的那样,使用混合模式让我们在文本周围的区域只有两种颜色选择------黑色或白色。但是对于白色,如果覆盖颜色与使用的图像很好地匹配,则可以使用覆盖为其添加一些颜色。
要为周围区域添加颜色,请<div>
在 HTML 中为叠加层添加,并为其指定具有高透明度的背景色。还可以使用mix-blend-mode: multiply
叠加层的属性,因为它有助于叠加层的背景颜色与出现在文本中的图像更好地融合。
<div class="backdrop">
<p class="text">Web前端之家</p>
<div class="overlay"></div>
</div>
.overlay {
background-color: rgba(0,255,255,.1);
mix-blend-mode: multiply;
width: 100%;
height: 100%;
position: absolute;
top: 0;
}
效果有变化了。如下图:
请注意,该技术仅适用于微妙的透明颜色。如果您使用完全不透明的颜色,或与图像不匹配的颜色,则出现在文本内的图像将具有所用颜色的非常明显的色调,因此除非您想要这种外观,否则请避免使用不透明的颜色。
文字被图片背景包围
尽管在图像背景上放置普通文本需要相同的技术,但我将向您展示当效果反转时上述演示的外观示例,即当文本颜色为白色而背景为黑色时。
.text {
color: white;
background-color: black;
mix-blend-mode: screen;
width: 100%;
height: 100%;
font-size: 160pt;
font-weight: bolder;
text-align: center;
line-height: 210px;
margin: 0;
}
您可以使用相同的叠加层为文本添加一些颜色,除非您想将其保持为白色。
.overlay {
background-color: rgba(0,255,255,.1);
mix-blend-mode: multiply;
width: 100%;
height: 100%;
position: absolute;
top: 0;
}
效果如下:
请注意,在 Internet Explorer 或任何其他不支持该
mix-blend-mode
属性的浏览器中,图像背景不会出现,文本将保持黑色(或白色)。
终于最上面截图的效果,我们可以换成背景图既可以实现了,谈到这里可能有些童鞋对于原理还是不懂,那么把DEMO弄出来对照就很清晰了。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>如何使用CSS3混合模式在图像上显示酷炫“Web前端之家”文字 | Web前端之家www.jiangweishan.com</title>
<style>
.backdrop {
width: 1000px;
height: 300px;
position: relative;
background-size: 100%;
margin: 40px auto;
}
.text {
color: black;
background-color: white;
mix-blend-mode:screen;
width: 100%; height: 100%;
font-weight: bolder;
text-align: center;
line-height: 300px;
margin: 0;
}
.inverse {
color: white;
background-color: black;
}
.backdrop
,.text {
border-radius: 2px;
}
.overlay {
width: 100%; height: 100%;
position: absolute;
top: 0;
mix-blend-mode:multiply;
}
/* water */
.water.backdrop {
background-image: url(https://images.unsplash.com/reserve/AXx3QORhRDKAMrbb8pX4_photo%202.JPG);
}
.water.overlay {
background-color: rgba(0,255,255,.1);
}
.water.text {
font-size: 60pt;
}
/* fire */
.fire.backdrop {
background-image: url(https://66.media.tumblr.com/e454398961e0203f2aad001cf7d177bf/tumblr_mrztj7GFJA1sdyj9lo1_1280.jpg);
}
.fire.overlay{
background-color: rgba(255,0,0,.1);
}
.fire.text{
font-size: 100pt;
}
</style>
</head>
<body>
<div class="backdrop fire">
<p class="text fire">Web前端之家</p>
<div class="overlay fire"></div>
</div>
<div class="backdrop fire">
<p class="text fire inverse">Web前端之家</p>
<div class="overlay fire inverse"></div>
</div>
<div class="backdrop water">
<p class="text water">Web前端之家</p>
<div class="overlay water"></div>
</div>
<div class="backdrop water">
<p class="text water inverse">Web前端之家</p>
<div class="overlay water"></div>
</div>
</body>
</html>
运行试试吧。
总结
如果你觉得不错的话,留言吧,如果想学习更多的效果和技术,请加QQ群一起探讨。