html图标颜色,CSS 控制图标颜色

背景

实际项目中,一般都会遇到不同颜色的图标,例如

f14577fb3af6d0e88c7567c195f544fd.png

26737d5e8653696513189e8a43f524c8.png

导航栏图标的不同状态

方法

方法1

需要UI设计师给出不同颜色的图标,在不同状态下设置不同的元素背景。.icon {

background-image: url(./home.png);

}

.icon.active {

background-image: url(./home-active.png);

}

缺点是:当状态改变后,浏览器才去拉取active状态的图片,所以视觉上会有闪动,体验不好

方法2

将两张图标合成雪碧图.icon {

background-image: url(./sprite.png);

background-position: 0 0;

}

.icon.active {

background-image: url(./home-active.png);

background-position: -20px -20px;

}

优点:解决第一个方法闪动的问题缺点:1. 合成雪碧图需要工作量;2.多了个图标,增加雪碧图的体积

方法3

CSS3投影---filter:drop-shadow(color, X-offset, Y-offset)

color:投影的颜色X-offset: X轴偏移量Y-offset:Y轴偏移量

drop-shadow:就好像光线照在元素上一样,元素里不透明的地方,光线无法穿透形成投影.icon-del {

background: url(../images/delete.png) no-repeat center;

width: 20px;

height: 20px;

display: inline-block;

-webkit-filter: drop-shadow(red 20px 0);

filter: drop-shadow(red 20px 0);

}

375165439b1a2a0379dda71784d812e9.png

我们可以看到在原图标的右侧,出现红色的投影。现在需要做的是把原来图标隐藏起来

.icon-wrapper {

display: inline-block;

width: 20px;

height: 20px;

overflow: hidden;

position: relative;

}

.icon-del {

background: url(../images/delete.png) no-repeat center;

width: 100%;

height: 100%;

position: absolute;

left: -20px;

display: inline-block;

border-right: 20px solid transparent;

-webkit-filter: drop-shadow(red 20px 0);

filter: drop-shadow(red 20px 0);

}

07f51943ba123d232bcb235c1ad4ce25.png

注意:图标的增加了个和本身宽度一致的右侧透明边框,让阴影投射在边框上。如果没有右侧边框,则元素完全处于不可见状态,drop-shadow不能生效(设想下,看不见的东西,自然没有投影)

优点:不需要额外的图标缺点:需要两层DOM结构

方法4

background-blend-mode: 背景混合模式

简单来说,元素可以设置多个背景,这些背景按某种模式混合.icon-gear {

background-image: url(../images/gear.png);

background-color: red;

background-size: cover;

width: 64px;

height: 64px;

display: inline-block;

background-blend-mode: lighten;

}

图标(注意要求是黑色的图标)设置图片背景和颜色背景,然后按照lighten模式混合

lighten模式可以简单理解为:当背景叠加时,显示亮色。本例子中,黑色的图标和其他颜色的背景色叠加,自然显示背景色

621e8edeba9d3cf26c84e87414417fe3.png

优点:写法简洁缺点:兼容性不好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值