前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文字溢出边缘羽化 CSS Mask 实现

文字溢出边缘羽化 CSS Mask 实现

作者头像
Innei
发布2021-12-28 11:09:26
1K0
发布2021-12-28 11:09:26
举报
文章被收录于专栏:静之森

在很多时候都需要处理文字的溢出,尤其是对单行网格处理时,需要避免文字过长导致容器撑坏的情况。一般会固定文字最大宽度和 overflow: hidden; text-overflow: ellipsis 让溢出的文字显示成 ...。但是现在可以用 CSS 的 mark 属性,让溢出的文字边缘羽化。

如图 Chrome 的 tab。

边缘羽化
边缘羽化

边缘羽化

首先看看 mark-image 的兼容性。

https://gitee.com/xun7788/my-imagination/raw/master/uPic/AiXPO6.png
https://gitee.com/xun7788/my-imagination/raw/master/uPic/AiXPO6.png

基本上都支持,需要注意的是我使用的 Chrome 85,还在试验性阶段,需要加上前缀 -webkit-

mask-imagebackground-image 的值一样,和蒙版一样,黑色的显示,透明的不显示。我们可以很简单的用 linear-gradient 完成边缘羽化效果。

我们来模仿一个 Chrome Tab 的样式。首先建立一个骨架。

html

代码语言:javascript
复制
1<div class="tab-wrap">
2  <div class="tab">
3    <span class="tab-text cursor"
4      >一个标题很长的标签 一个标题很长的标签 一个标题很长的标签
5      一个标题很长的标签</span
6    >
7  </div>
8  <div class="close cursor">×</div>
9</div>

COPY

确定好外层容器的宽高后,可以对 span 的父元素设置 mask

css

代码语言:javascript
复制
1.tab-wrap .tab {
2  width: 100%;
3  overflow: hidden;
4  -webkit-mask-image: linear-gradient(
5    to right,
6    rgba(0, 0, 0, 1) calc(100% - 2em),
7    transparent
8  );
9  mask-image: linear-gradient(
10    to right,
11    rgba(0, 0, 0, 1) calc(100% - 2em),
12    transparent
13  );
14}
15.tab .tab-text {
16  white-space: nowrap;
17}

COPY

最后再加亿点点小细节,大功告成啦。

https://gitee.com/xun7788/my-imagination/raw/master/uPic/tLQusO.png
https://gitee.com/xun7788/my-imagination/raw/master/uPic/tLQusO.png

当然啦,如果遇到不支持的浏览器就显示直接截断的效果,很不好看,我们还想要让他显示 ...,那么可以用 @supports 查询,是否支持这个属性,如果支持才使用,不支持就使用 text-overflow: ellipsis;

修改一下,span 的父级样式。

css

代码语言:javascript
复制
1.tab-wrap .tab {
2  width: 100%;
3  overflow: hidden;
4  text-overflow: ellipsis;
5}
6@supports (-webkit-mask-image: inherit) or (mask-image: inherit) {
7  .tab-wrap .tab {
8    text-overflow: clip;
9    -webkit-mask-image: linear-gradient(
10      to right,
11      rgba(0, 0, 0, 1) calc(100% - 2em),
12      transparent
13    );
14    mask-image: linear-gradient(
15      to right,
16      rgba(0, 0, 0, 1) calc(100% - 2em),
17      transparent
18    );
19  }
20}

COPY

如果不支持 mask
如果不支持 mask

如果不支持 mask

完整的代码请戳:

Gist

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档