「CSS3」渐变文字效果

343 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

前言

最近在看张老师写的CSS新世界这本书,内容写的很不错,推荐大家看一下。 今天我看到了一个关于渐变文字小结,恰巧前段时间看同事在项目中实现了这个效果,当时就很好奇,但是当时在忙别的事,也就没有看了,今天看到了正好总结记录一下。

渐变文字实现方案一: background-clip: text

background-clip:设置背景是否延伸到盒子区域,他还有一个特殊的值,background-clip:text;背景被裁剪成文字的前景色,即实现文字渐变的方案

.content {
    background:linear-gradient(60deg, red, yellow, red, yellow, red);
    background-clip: text;
    -webkit-background-clip:text;
    width: 100px;
    color: transparent;
}

<div class="content">渐变文字</div>

这里注意了要设置文字的颜色为透明,否则会失效的。

简单的效果就实现了,如果设计师说想要这个文字的颜色有一个动画,比如说那种一闪一闪的或者流动,但是文字不能动。

我思考了一会,就现在这种实现方式好像是有点麻烦的,animation 不支持我们指定某一个属性进行动画,而且这里的文字颜色和背景是紧紧结合在一起的。暂时我想不到一个好的实现方式,等我想到了,或者有朋友和我说了,我再来更新

总的来说,实现静态效果没有任何问题,但是要实现动效就有点难了,因为background-cli 实现的本质是背景图填充文字

渐变文字实现方案二: mix-blend-mode:lighten

这也就是我在张老师的书里面看到的一种实现方式,利用的原理是文字和背景的一种混合。mix-blend-mode:lighten 混合的效果是变亮,只要设置文字为黑色,然后在文字上覆盖一层颜色,设置混合模式mix-blend-mode:lighten,因为任何颜色和黑色进行变亮之后都会保留当前的颜色。从而实现了文字渐变的效果

.content{
    margin-top:40px;
    width: 100px;
    position: relative;
    font-size: 3rem;
    color: black;
    font-weight: bold;
    background-color: #fff;
}
.content::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    background: linear-gradient(to right, deepskyblue, deeppink);
    mix-blend-mode: lighten;
}

<div class="content">渐变文字</div>

CSS新世界DEMO

这里要注意了,一定要设置父元素为白色,否者实现不了这个效果的,我当时没有设置,弄了好长一段时间才弄好。


到这里呢,我们就实现了文字渐变的效果了。如果你想要加动效也很简单了,就是伪元素上面加上就是了,具体的可以看张老师的代码。