使用CSS实现“文段尾行渐变消失”

问题描述

最近在做H5的页面的时候,遇到了这样的一个需求:

在一个展示信息的页面,为了提升用户体验,希望在展示一个文段信息的时,只展示指定行数,将超出行数隐藏,并且如果有超出的行数,则展示文段的尾行渐变消失,并加上一个扩展按钮,提醒用户有未展示完整的信息。

说起来比较绕,大概就是这样一个效果

 

使用遮罩

第一眼看起来还是比较好处理,因为文段消失的感觉,就有点像一个遮罩蒙层,所以我第一反应也是,使用一个遮罩层来处理。

具体处理方式就是,在右下角放一个div,设置和背景相同的颜色,并且设置成左往右的渐变消失,盖住文字就可以,于是就有了这样的效果。

这里的expand下面盖住的是一块渐变的盒子

.mask {
		width:500px;
		height: 36px;
		position: absolute;
		background: linear-gradient(90deg, transparent 10%, rgba(84, 105, 136) 70%);
		right: 0;
		bottom: 107px;
		font-size: 22px;
		font-weight: 700;
		z-index: 332;
}
复制代码

 看起来好像比较完美的实现了,但是有个问题,渐变盒子之所以能完美覆盖最后一行文段,是因为它的颜色和背景完全相同,如果背景是渐变的,或者是一张图片,就会有问题,比如像这样。

这里我其实还想过,既然背景不能融合会导致渐变盒子浮出文段,那么我可以直接在文段对应位置切出一块能融合的背景,或者说设置对应的渐变色,这样就能够解决浮层。

但是产品告诉我,父级渐变背景是有滚动条的,所以文段的背景色还会改变,所以不能写死这块的颜色,还是需要对应的获取。

行内元素的渐变背景

 我们在给行内元素设置背景时,它不会像块级元素一样,直接获取到背景,行内元素获取背景,是默认先让整个DOM不换行,获取到背景色之后,再默认换行,所以如果对其设置渐变背景的话,就会有这种效果。

利用这个效果,我们可以在文段的上方覆盖一层文字内容和大小相同的行内元素,将其文字颜色设置为透明,然后设置一个渐变的背景色,通过调整背景色的区域来实现文段的尾行渐变,效果如下。

核心代码如下

		span {
			background: linear-gradient(90deg, transparent 80%, orange);
			background-size: 100% 100%;
			background-repeat: no-repeat;
			background-position: 100% 100%;
			cursor: pointer;

			color: transparent;
			font-size: 24px;
			z-index: 4;

		}
		span::before {  
			content: "Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi      temporibus debitis quam commodi temporibus debitis quam debitis";
			position: absolute;
			top: 0;
			left: 0;
			color: #000;
			z-index: -1;
		}
复制代码

  其实可以看到,这里的效果就会比前面的遮罩的方法要好一点,但是即使这里的颜色控制的与背景很接近,也依然会有一点浮层的感觉。

除此之外,我们用来遮罩的盒子,为了和底层文段大小一致,需要填入相同的内容,这其实看起来非常的冗余,最致命的是,这个方法直对横向的渐变起作用,所以我们需要寻求更合适的方法。

遮罩mask

 Css的mask属性是个啥呢,MDN给出的介绍是:Css 属性 mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。简言之,我们可以通过在元素上设置这个属性,来隐藏该元素的一部分。

如果我们直接用在文段上,就可以得到这样的效果。

有了这个属性,顿时感觉问题解决了一大半,在使用的时候,我们就不再需要再去添加一个用于蒙层的盒子,而是只需要在文段上使用mask加上一层遮罩。

但是mask在单独使用的时候,会默认设置100%的宽高,所以这里需要多定义一个来将另一个遮罩来占据剩下的位置,所以这里一共定义了两个遮罩,一个在上方,一个在末行。

最终的效果:

最终的代码:

p {
	margin: auto;
	width: 450px;
	line-height: 36px;
	font-size: 20px;
	-webkit-mask:linear-gradient(270deg, transparent, transparent 30%, #000),
	linear-gradient(270deg, #000, #000);
	-webkit-mask-size: 100% 66px, 100% calc(100% - 46px);
	-webkit-mask-position: bottom, top;
	-webkit-mask-repeat: no-repeat;
}
复制代码

 由于支持性不够完善,所以这里在编写的时候还需要加上前缀,这里一共定义了两个遮罩,一个在上方,一个在末行,原因是mask在单独使用的时候,会默认设置100%的宽高,所以这里需要多定义一个来将另一个遮罩推到我们需要的位置。

当然,有关于Mask,还有很多非常不错的用法

  • 比如丝滑的融合两张图片

  • 制作渐变过渡

有有兴趣的可以去看看这篇文档:www.cnblogs.com/coco1s/p/13…

最后

虽然有几种方法没能解决问题,不过倒是带给我一些场景的实现灵感,也然我学习到了一些新的css知识,本文到这里就结束了,希望我解决问题的过程对你能有所帮助,关于文本末行渐变消失的问题,如果你有比较好的方法,欢迎在评论区留言讨论

参考链接:

github.com/chokcoco/iC…


作者:Jou24
链接:https://juejin.cn/post/7124611817732571172
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vxe-Grid是一个基于Vue.js的开源表格组件。在Vxe-Grid中,尾行是指表格的最后一行,通常用于显示统计信息或合计。如果您想显示表格的尾行,您可以使用Vxe-Grid的footer-render属性,并在其中定义自己的渲染逻辑。 ### 回答2: vxe-grid尾行是指在表格或数据列表的最底部显示的一行。它通常用来显示一些汇总信息或其他相关的内容。 vxe-grid是一个功能强大的表格组件,可用于在Web应用程序中展示和管理大量的数据。在使用vxe-grid时,我们通常会将数据以行的形式展示,每行代表一个数据项。而尾行则是额外添加在最后一行用于显示特定信息的一行。 尾行的内容可以根据实际需求来定制。比如,我们可以在尾行中进行数据汇总,将某些列的数值相加或求平均值等,用于展示整个表格数据的概括信息。此外,尾行还可用于显示其他相关内容,比如数据的合计、最大值、最小值等。 在vxe-grid中,我们可以通过配置相应的属性和方法来实现尾行的功能。通过设置footer属性,我们可以指定表格底部需要显示的内容;通过合适的计算方法,我们可以对数据进行汇总并将结果显示在尾行上。 总之,vxe-grid尾行是表格或数据列表的底部额外添加的一行,用于展示汇总信息或其他相关内容。它在数据展示和分析中具有重要的作用,并通过vxe-grid组件的相应配置和方法来实现。 ### 回答3: vxe-grid尾行是指在VXE组件库中的表格组件中的一个特殊行。在vxe-grid中,我们可以使用尾行来展示表格中的汇总或合计数据。 尾行通常位于表格末尾,它可以用来显示某一列数据的汇总或其他统计信息。通过在表格设置中指定尾行的配置项,我们可以将其添加到表格中并对其进行自定义。 对于尾行的配置,我们可以设置其各列的值、样式、类名等。通过给尾行指定data属性,我们可以为每列指定特定数据,例如计算合计值并在尾行中显示。 在编写代码时,我们可以使用vxe-grid组件的footer-rows属性来设置尾行的配置项。可以将尾行的配置项放在一个数组中,每个配置项代表一个尾行,可以指定多个尾行使用尾行功能可以轻松实现表格数据的汇总和统计,方便用户进行数据分析。当表格中的数据更新时,尾行的数据也会自动更新,保持与表格数据的一致性。 总之,vxe-grid尾行是VXE组件库中表格组件的一个特殊行,用于展示表格数据的汇总或统计信息。它可以通过表格设置中的配置项进行自定义,并能够自动更新数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值