搜索
首页web前端css教程详解怎么使用纯CSS实现多行文本的渐隐动画

<p>本文将探讨一下,在多行文本情形下的一些有意思的文字动效。多行文本,相对于单行文本,场景会复杂一些,但是在实际业务中,多行文本也是非常之多的,但是其效果处理比起单行文本会更困难。

<p>详解怎么使用纯CSS实现多行文本的渐隐动画

<p>【学习视频分享:css视频教程web前端

单行与多行文本的渐隐

<p>首先,我们来看这样一个例子,我们要实现这样一个单行文本的渐隐:

<p>

<p>使用 mask,可以轻松实现这样的效果,只需要:

<p>Lorem ipsum dolor sit amet consectetur.</p>
p {
    mask: linear-gradient(90deg, #fff, transparent);
}
<p>但是,如果,场景变成了多行呢?我们需要将多行文本最后一行,实现渐隐消失,并且适配不同的多行场景:

<p>

<p>这个就会稍微复杂一点点,但是也是有多种方式可以实现的。

<p>首先我们来看一下使用 background 的方式。

使用 <span style="font-size: 18px;">background</span> 实现

<p>这里会运用到一个技巧,就是 display: inline 内联元素的 background 展现形式与 display: block 块级元素(或者 inline-blockflexgrid)不一致。

<p>简单看个例子:

<p>Lorem .....</p>
<a>Lorem .....</a>
<p>这里需要注意,<p> 元素是块级元素,而 <a>内联元素

<p>我们给它们统一添加上一个从绿色到蓝色的渐变背景色:

p, a {
  background: linear-gradient(90deg, blue, green);
}
<p>看看效果:

<p>

<p>什么意思呢?区别很明显,块级元素的背景整体是一个渐变整体,而内联元素的每一行都是会有不一样的效果,整体连起来串联成一个整体。

<p>基于这个特性,我们可以构造这样一种布局:

<p><a>Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam</a></p>
p {
    position: relative;
    width: 400px;
}

a {
    background: linear-gradient(90deg, transparent, transparent 70%, #fff);
    background-repeat: no-repeat;
    cursor: pointer;
    color: transparent;
    
    &::before {
        content: "Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam";
        position: absolute;
        top: 0;
        left: 0;
        color: #000;
        z-index: -1;
    }
}
<p>这里需要解释一下:

  • <p>为了利用到实际的内联元素的 background 的特性,我们需要将实际的文本包裹在内联元素 <a>

  • <p>实际的文本,利用了 opacity: 0 进行隐藏,实际展示的文本使用了 <a> 元素的伪元素,并且将它的层级设置为 -1,目的是让父元素的背景可以盖过它

  • <p><a> 元素的渐变为从透明到白色,利用它去遮住下面的实际用伪元素展示的文字,实现文字的渐隐

<p>这样,我们就能得到这样一种效果:

<p>

<p>这里,<a> 元素的渐变为从透明到白色,利用后面的白色逐渐遮住文字。

<p>如果我将渐变改为从黑色到白色(为了方便理解,渐变的黑色和白色都带上了一些透明),你能很快的明白这是怎么回事:

a {
    background: linear-gradient(90deg, rgba(0,0,0, .8), rgba(0,0,0, .9) 70%, rgba(255, 255, 255, .9));
}
<p>

<p>完整的代码,你可以戳这里:CodePen Demo -- Text fades away

<p>当然,这个方案有很多问题,譬如利用了 z-index: -1,如果父容器设置了背景色,则会失效,同时不容易准确定位最后一行。因此,更好的方式是使用 mask 来解决。

使用 <span style="font-size: 18px;">mask</span> 实现

<p>那么,如果使用 mask 的话,问题,就会变得简单一些,我们只需要在一个 mask 中,实现两块 mask 区域,一块用于准确控制最后一行,一块用于控制剩余部分的透明。

<p>也不需要特殊构造 HTML:

<p>Lorem ipsum dolor sit amet ....</p>
p {
    width: 300px;
    padding: 10px;
    line-height: 36px;
    mask: 
        linear-gradient(270deg, transparent, transparent 30%, #000),
        linear-gradient(270deg, #000, #000);
    mask-size: 100% 46px, 100% calc(100% - 46px);
    mask-position: bottom, top;
    mask-repeat: no-repeat;
}
<p>效果如下:

<p>

<p>核心在于整个 mask 相关的代码,正如上面而言的,mask 将整个区域分成了两块进行控制:

<p>

<p>在下部分这块,我们利用 mask 做了从右向左的渐隐效果。并且利用了 mask-position 定位,以及 calc 的计算,无论文本都多少行,都是适用的!需要说明的是,这里的 46px 的意思是单行文本的行高加上 padding-bottom 的距离。可以适配任意行数的文本:

<p>

<p>完整的代码,你可以戳这里:CodePen Demo -- Text fades away 2

添加动画效果

<p>好,看完静态的,我们再来实现一种**动态的文字渐隐消失。

<p>整体的效果是当鼠标 Hover 到文字的时候,整个文本逐行逐渐消失。像是这样:

<p>

<p>这里的核心在于,需要去适配不同的行数,不同的宽度,而且文字是一行一行的进行消失。

<p>这里核心还是会运用上内联元素 background 的特性。在 妙用 background 实现花式文字效果 这篇文章中,我们介绍了这样一种技巧。

<p>实现整段文字的渐现,从一种颜色到另外一种颜色

<div class="button">Button</div>
<p><a>Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</a></p>
a {    
    background: 
        linear-gradient(90deg, #999, #999),
        linear-gradient(90deg, #fc0, #fc0);
    background-size: 100% 100%, 0 100px;
    background-repeat: no-repeat;
    background-position: 100% 100%, 0 100%;
    color: transparent;
    background-clip: text;
}
.button:hover ~ p a {
    transition: .8s all linear;
    background-size: 0 100px, 100% 100%;
}
<p>这里需要解释一下,虽然设置了 color: transparent,但是文字默认还是有颜色的,默认的文字颜色,是由第一层渐变赋予的 background: linear-gradient(90deg, #999, #999), linear-gradient(90deg, #fc0, #fc0),也就是这一层:linear-gradient(90deg, #999, #999)

<p>

<p>当 hover 触发时,linear-gradient(90deg, #999, #999) 这一层渐变逐渐消失,而另外一层 linear-gradient(90deg, #fc0, #fc0)` 逐渐出现,借此实现上述效果。

<p>CodePen -- background-clip 文字渐现效果

<p>好,我们可以借鉴这个技巧,去实现文字的渐隐消失。一层为实际的文本,而另外一层是进行动画的遮罩,进行动画的这一层,本身的文字设置为 color: transparent,这样,我们就只能看到背景颜色的变化。

<p>大致的代码如下:

<p>
    <a class="word">Mollitia nostrum placeat consequatur deserunt.</a>
    <a class="pesudo">Mollitia nostrum placeat consequatur deserunt.</a>
</p>
p {
    width: 500px;
}
.word {
    position: absolute;
    top: 0;
    left: 0;
    color: transparent;
    color: #000;
}
.pesudo {    
    position: relative;
    background: linear-gradient(90deg, transparent, #fff 20%, #fff);
    background-size: 0 100%;
    background-repeat: no-repeat;
    background-position: 100% 100%;
    transition: all 3s linear;
    color: transparent;
}
p:hover .pesudo,
p:active .pesudo{
    background-size: 500% 100%;
}
<p>其中,.word 为实际在底部,展示的文字层,而 pesudo 为叠在上方的背景层,hover 的时候,触发上方元素的背景变化,逐渐遮挡住下方的文字,并且,能适用于不同长度的文本。

<p>

<p>当然,上述方案会有一点瑕疵,我们无法让不同长度的文本整体的动画时间一致。当文案数量相差不大时,整体可以接受,文案相差数量较大时,需要分别设定下 transition-duration 的时长。

<p>完整的 DEMO,你可以戳:CodePen -- Text fades away Animation

<p>原文地址:https://www.cnblogs.com/coco1s/p/16590809.html

<p>作者:ChokCoco

<p>更多编程相关知识,请访问:编程视频!!

以上是详解怎么使用纯CSS实现多行文本的渐隐动画的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:博客园。如有侵权,请联系admin@php.cn删除
看看Jamstack的速度,按数字看看Jamstack的速度,按数字Apr 15, 2025 am 10:39 AM

人们说jamstack网站很快 - 让我们通过查看真实的性能指标来找出原因!我们将涵盖普通指标,例如时间首先字节

实用CSS自定义属性的模式使用实用CSS自定义属性的模式使用Apr 15, 2025 am 10:34 AM

我一直在与CSS自定义属性一起玩耍,以发现其功能,因为浏览器支持终于在我们可以在我们的地方使用它们的地方

jamstack工具和分类范围jamstack工具和分类范围Apr 15, 2025 am 10:31 AM

随着Jamstack的美好世界变得越来越大,所有帮助它的服务和工具都一如既往地重要。有静态网站

删除Internet Explorer的商业案例删除Internet Explorer的商业案例Apr 15, 2025 am 10:30 AM

Internet Explorer(IE)11与其他所有主要浏览器之间的距离是越来越多的鸿沟。增加对技术过时的支持

焦点戒指的动画位置焦点戒指的动画位置Apr 15, 2025 am 10:27 AM

莫里斯·马汉(Maurice Mahan)创建了FocusOverlay,这是一个“用于创建重点元素叠加的库”。该描述对您有些困惑,不需要一个库

让我们不要忘记容器查询让我们不要忘记容器查询Apr 15, 2025 am 10:25 AM

容器查询始终位于CSS请求改进的列表中。普遍的情绪是,如果我们有集装箱查询,我们将不将

使用图像管理服务的工作流注意事项使用图像管理服务的工作流注意事项Apr 15, 2025 am 10:20 AM

所有这些网站都想帮助您进行图像。他们做一些事情,例如优化您的图像并帮助您执行表演。那是一件非常好的事情。通过任何指标,图像是资源的主要部分

挖掘WordPress中的预览加载动画挖掘WordPress中的预览加载动画Apr 15, 2025 am 10:19 AM

WordPress在5.0版中运回了Block Editor(又名Gutenberg),然后带来了一个时髦的新帖子预览屏幕,显示WordPress徽标绘图

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中