首页 > 其他分享 >小技巧 | 渐变消失遮罩的多种实现方式

小技巧 | 渐变消失遮罩的多种实现方式

时间:2023-10-17 10:34:08浏览次数:34  
标签:遮罩 技巧 Button mask event pointer 渐变 CSS

我的小册 《CSS 技术揭秘与实战通关》上线了,想了解更多有趣、进阶、系统化的 CSS 内容,可以猛击 - LINK

知乎看到一题比较有意思的题目。

题目大致是如何实现下述图片的效果,如果使用 div 前置遮挡的话,会影响 div 后面的按钮,使其无法被点击。

本文将简单介绍几种这个效果的实现方案。

渐变配合 pointer-event

第一种方式,比较容易想到。使用渐变配合 pointer-event 实现。

简单模拟一下场景,假设我们有如下一个 ul 列表,超出可以滚动:

<div class="g-container">
    <ul>
        <li>Button</li>
        <li>Button</li>
        <li>Button</li>
        <li>Button</li>
        <li>Button</li>
        <li>Button</li>
    </ul>
</div>
ul {
    width: 300px;
    display: flex;
    flex-wrap: nowrap;
    border: 1px solid #999;
    padding: 5px;
    overflow-x: scroll;
}

像是这样:

首先,我们需要实现右侧的渐变消失的遮罩效果,这个最常见的,就是通过叠加一个从透明到白色的渐变层实现。

这个简单,我们借助元素的伪元素,绝对定位到右侧即可:

.g-container {
    ...
    
    &::before {
        content: "";
        position: absolute;
        right: 0;
        bottom: 0;
        top: 0;
        width: 100px;
        background: linear-gradient(90deg, transparent, #fff);
    }
}

效果如下:

这样遮罩就解决了,唯一的问题在于,叠加的这一层,确实遮挡住了其下方的按钮点击:

这个其实也好解决,只需要给叠加的这一层,添加一个 pointer-event: none 即可。

pointer-event:CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target。当值为 none 时,元素永远不会成为鼠标事件的 target,也就是我们常说的,实现了鼠标点击穿透

代码如下:

.g-container {
    ...
    
    &::before {
        content: "";
        position: absolute;
        right: 0;
        bottom: 0;
        top: 0;
        width: 100px;
        background: linear-gradient(90deg, transparent, #fff);
        pointer-event: none;
    }
}

如此一来,就能完美实现此效果,有遮罩,且遮罩不会遮挡住下方内容:

完整的代码你可以戳这里:CodePen Demo -- Linear Gradient Mask & Pointer-event

使用 mask 实现更完美的遮罩

但是,上述方法不是最完美的。

假设我们的背景,不是纯色,而是渐变色的话,效果会是这样:

我们希望,内容是真的逐渐消失,而不是通过遮罩遮挡住。所以,我们期待的结果,应该是这样:

即便是渐变背景,内容仍然可以逐渐消失。

为了解决解决这个问题,CSS 有一个专门的属性来处理这个问题,也就是 -- mask。

mask:属性允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。

使用 mask 后,代码非常简单,也不需要 pointer-event

<ul>
    <li>Button</li>
    <li>Button</li>
    <li>Button</li>
    <li>Button</li>
    <li>Button</li>
    <li>Button</li>
</ul>
ul {
    width: 300px;
    display: flex;
    flex-wrap: nowrap;
    overflow-x: scroll;
    mask: linear-gradient(90deg, #000 70%, transparent);
}

由于不存在遮挡物,也就不再需要 pointer-event 了,所有内容都是可以直接点击的:

完整的代码你可以戳这里:CodePen Demo -- Linear Gradient Mask

如果你是第一次接触 mask,这里有关于 mask 的一些基础知识及进阶用法,也许你会有兴趣:

最后

本文到此结束,希望对你有帮助

标签:遮罩,技巧,Button,mask,event,pointer,渐变,CSS
From: https://www.cnblogs.com/coco1s/p/17769130.html

相关文章

  • VSCode 小技巧 配置代码模版 vscode snippets
    第一步mac输入shift+command+p(windows输入ctrl+shift+p),输入snippets,点击如下图选项。第二步,选中新建全局代码片段文件。第三步,输入一个全局配置文件名,例如snippet.config第四步,进行配置{//Placeyour全局snippetshere.Eachsnippetisdefinedu......
  • modelsim仿真使用小技巧
    1.在sim界面可以看到仿真的模块如果想将这些模块添加到仿真界面(wave),可以选中模块再ctrl+w即可,在wave仿真界面,全选波形(ctrl+a),再ctrl+g即可将波形自动分组,再双击各个组名即可重新命名......
  • 检索及使用技巧
    检索方法:对于词组加双引号,可以固定搜索.  "quotationmarks".使用通配符,可以在单词中间、前缀、后缀使用。*表示0或者很多个字母?表示一个字母   $表示0或者1个字母对于某个单复数\后缀等形式,可以加*号来扩大搜索范围 布尔操作和近似搜索 Boole......
  • 26个CSS超实用技巧
    1.文字溢出显示省略号单行文字:一定要设置宽度p{​•width:200px;​•overflow:hidden;text-overflow:ellipsis;white-space:nowrap;​​​}多行文字溢出显示省略号p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-l......
  • 【前端开发】新版Chrome浏览器接口mock调试技巧,超实用
    给大家分享一个 Chrome117 更新中最实用的一个功能:在Network面板中发送mock请求。修改返回响应数据想要修改接口返回的数据,设置成特定的数据,首先打开 网络(Network) 面板,找到你需要Mock的接口,右键然后选择替换内容(Overridecontent): 这时候浏览器会提示:选择要用来......
  • [工具使用小技巧]1
    目录修改jupyternotebook粘贴来的图片的大小正确方法下一个修改jupyternotebook粘贴来的图片的大小本地的notebook服务器里,在文件里切成代码框(markdown模式)写笔记时,有时候会需要贴图片。jupyternotebook很方便的一点在于可以直接复制粘贴。不用像写本地markdown笔记本(某云笔......
  • CSS小技巧之单标签loader
    本文翻译自HowtocreateaCSS-onlyloaderwithoneelement,作者:TemaniAfif,略有删改。loader组件是网站的重要组成部分。它可以用在许多地方,我们需要显示的内容正在加载中。这样的组件需要尽可能简单,在这篇文章中我们将学习如何使用优化的代码创建不同的CSS加载器。所有......
  • OnTheSSH使用技巧(五)图形化用户和用户组管理
    OnTheSSh提供了图形化的用户和用户组管理功能。【用户管理】在远端主机管理界面中,点击顶部的“用户”按钮,弹出linux系统用户管理功能: 注意只有root用户可以弹出用户管理界面,普通用户只能看到自己的用户信息。在用户窗口中,可以新建、删除、修改用户主目录、修改默认登录shell,查......
  • OnTheSSH使用技巧(四)直接观看进程内存
    堆(heap)和栈(stack)是进程中的两片内存区域,这是学习编程过程中,特别是C语言这种直接操作内存的程序员必须要掌握的知识。如果能直观的看到进程运行时堆内存和栈内存的变化,相信对内存知识的掌握和程序的调试都能带来帮助。OnTheSSH是一款SSH工具,提供了图形化的进程内存的监控功能,今天我......
  • OnTheSSH使用技巧(三)向多个远端主机发送命令
    OnTheSSH提供将同一条命令发送到多台远端主机运行的功能。使用方式如下:1)勾选要运行命令的远端主机到工作区: 提示:合理将远端主机归纳入分组,可提高勾选的效率。2)在命令输入区输入命令,点击“运行”按钮执行,或使用组合键执行命令,windows中是Ctrl+Enter,MacOS中是Command(⌘)+Enter。......