巧用CSS遮罩
1. 用法
-webkit-mask样式是利用该属性指定的图片作为遮罩,利用这张图像的透明度来显示位于该遮罩图下方的图像。如果遮罩图某个像素点透明度为1则显示下方的图像,透明度为0则不显示,介于0-1之间则呈现相应的透明度。
详情参考 mask - CSS | MDN
可以看到,mask的语法基本上拷贝自background,可以设置遮罩的url, position, repeat, size等属性,但不能直接设置颜色(纯色的遮罩意味着用opacity就能实现)。-webkit-mask-url可以设置gradients的渐变图片,也可以设置base64编码的图片。
2. 利用mask实现图标变色
想让图标可以任意变色,常见的方案有:font-awesome, SVG等,甚至还有drop-shadow。其实可以利用background变色,而利用遮罩去绘制图标。遮罩透过的地方是图标的填色部分,而遮罩盖过的地方则没有颜色。
这种方法的优点就是转换成本极低,可以直接利用已有的图标PNG图。具体方法如下:
将图标保存为PNG图,注意非图标区域应该是透明的。如果原有图标是sprite图,没关系,不用变,因为mask支持position属性。原先输出的图标不是纯黑色的?也没关系,因为mask样式只认你图片的透明通道
设置图标的CSS,例如:
.m-mask{
width:141px;
height:141px;
-webkit-mask-image: url(mask.png);
background: #3f51b5;
}
这样就好了,效果如下
完全可以把此时的background-color理解成Photoshop中的颜色叠加
如果结合less sass,就可以做到自定义换肤了
3.利用mask修复圆角头像的毛边
在实际的开发过程中,发现在较高版本的Chrome浏览器中,我们的圆角头像出现了无法容忍的毛边,定位到问题的原因是这样的:外层div利用background设置了垫底的默认图,设置了border-radius:50%。而内层的img为实际头像图,也设置了border-radius:50%。理论上两个相等大小、相同圆角的元素,也未设置任何定位,那么应该是头像完整盖着默认图。但实际并未如此,而是头像略小于默认图,因而出现了毛边。
因此我们可以为外层div添加一个样式
-webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==')
url中设置的其实是1像素高宽的黑色图片,那么此时的遮罩就相当于外层div设置圆角区域后的一个不透明的圆形。此时就可以去掉img上的boder-radius了。最后效果如下,完美!
原文地址:https://www.cnblogs.com/homehtml/p/12936050.html
- 真实场景的双目立体匹配(Stereo Matching)获取深度图详解
- mongodb11天之屠龙宝刀(八)聚合函数与管道:sql与mongodb聚合函数对比
- Java基础-day04-基础题
- OpenCV亚像素角点cornerSubPixel()源代码分析
- mongodb11天之屠龙宝刀(十) 备份 还原 导出 导入::CSV,JSON,BOSN,解决中文乱码
- 【Go 语言社区】 golang 算法课程 第一季 第2节 洗牌算法
- 一条update语句的优化探索(r9笔记第80天)
- OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
- Java基础-day03-代码题
- mongodb11天之屠龙宝刀(九)js函数入门:MongoDB基于js的数据类型修改
- Go语言社区 APP --问答模块数据存储流程及代码
- Java基础-day09-重构随机点名器
- OpenCV3.4两种立体匹配算法效果对比
- 文件操作常用函数
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Azure给ubuntu虚拟机挂载数据盘的详细步骤
- 详解SSH 远程执行任务的方法
- Linux基础学习之文件查找find的常见用法
- Linux基础之xargs命令的入门实例
- CentOS 7.4下安装Oracle 11.2.0.4数据库的方法
- CentOS桌面环境中网卡启动失败的解决方法
- 浅谈Linux vfork与fork简单对比分析
- Linux定时任务Crontab的使用方法
- linux虚拟网络设备之vlan配置详解
- Centos7安装完后无法联网的解决方法
- Linux静态链接库与模板类的处理方式
- 深入研究RocketMQ消费者是如何获取消息的
- CentOS7下 Apache的安装配置方法
- expect命令在linux下实现批量ssh免密
- 学习Vim合并行的方法和技巧