搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 前端早读课 > 【第1157期】PNG格式小图标的CSS任意颜色赋色技术

【第1157期】PNG格式小图标的CSS任意颜色赋色技术

前端早读课 2018-02-28

前言

这是一个可以让你在不找设计师的情况下随心所欲更换小图标颜色的黑科技!今日早读文章由@张鑫旭授权分享。

本文由@仙人掌推荐编辑

正文从这里开始~

一、眼见为实


CSS可以修改图片的颜色,没错,可以,眼见为实!您可以狠狠地点击这里:png小图标CSS赋色demo

上面的不是很黑的是原始图标,是个PNG图片,下面这个是可以赋色的:


可以变色的图标


下面,我们随意选择一个颜色,例如紫色,然后:

【第1157期】PNG格式小图标的CSS任意颜色赋色技术


紫色赋色

【第1157期】PNG格式小图标的CSS任意颜色赋色技术


红色赋色


是不是感觉很厉害!以后设计师就不需要在提供几套颜色的图片了。

SVG, icon fonts等技术似乎也不是那么耀眼了。


二、原理其实很简单


原理其实很简单,使用了CSS3滤镜filter中的drop-shadowdrop-shadow滤镜可以给元素或图片非透明区域添加投影。

如果对drop-shadow不是很了解,建议先看看前些时间写的“CSS3 filter:drop-shadow滤镜与box-shadow区别应用”一文!

对于背景透明的png小图标而言,如果我们施加一个不带模糊的投影,不就等同于生成了另外一个颜色的小图标了吗?

然后,我们把原始图标隐藏在容器外面,投影图标在容器中间,不见给人感觉是赋色效果了?

比方说本文的demo,如果把icon父级的的overflow:hidden去掉,原始的图标就暴露出来啦!


去掉overflow:hidden之后

三、实现的时候实际有难度


原理如上面,我一开始实现的时候,以为很简单,因为分分钟可以实现自己的想法,后来发现有些天真了,Chrome浏览器怎么都显示不出来;FireFox浏览器却可以!咦,究竟发生了什么。

在Chrome浏览器下,drop-shadow有一个如下的呈现特性:

在Chrome浏览器下,如果一个元素的主体部分,无论以何种方式,只要在页面中不可见,其drop-shadow是不可见的;实体部分哪怕有1像素可见,则drop-shadow完全可见。

所以,我试过:

  • text-indent负值隐藏原始图,无投影,失败!

  • clip剪裁隐藏,无投影,失败!

  • margin负值隐藏原始图,无投影,失败!

  • left负值隐藏原始图,无投影,失败!

通通不行,实现遇到了巨大的阻碍。

后来,灵光一现,如果我实体部分也在可视区域内,但是是透明的,会怎样呢(反正不会有投影出来)?

于是,我就试了下曾经立下无数战功的透明边框,卧槽,又立功了,成了!

因此,下面这一个CSS声明是千万不能少的:

border-right: 20px solid transparent;

四、关于兼容性

IE13+支持,Chrome和FireFox浏览器支持,移动端iOS支持,Android4.4+支持。也就是,基本上,移动端现在可以使用这种技术了。

既节约了流量,也让我们的开发更简单,维护更方便了。

最后

  • CSS3 filter:drop-shadow滤镜与box-shadow区别应用:http://www.zhangxinxu.com/wordpress/2016/05/css3-filter-drop-shadow-vs-box-shadow/

  • png小图标CSS赋色demo:http://www.zhangxinxu.com/study/201606/png-icon-color-fill.html

这本暂时无货了,已经购买的童鞋要等一等了。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【第1157期】PNG格式小图标的CSS任意颜色赋色技术》的版权归原作者「前端早读课」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注前端早读课微信公众号

前端早读课微信公众号:FeZaoDuKe

前端早读课

手机扫描上方二维码即可关注前端早读课微信公众号

前端早读课最新文章

精品公众号随机推荐