zoukankan      html  css  js  c++  java
  • 【CSS】526- CSS 控制图标颜色

    原文地址:http://eux.baidu.com/blog/fe/控制图标颜色

    背景

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

     

    导航栏图标的不同状态

    方法

    方法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:就好像光线照在元素上一样,元素里不透明的地方,光线无法穿透形成投影

    <span class="icon-del"></span>
    
    .icon-del {
        background: url(../images/delete.png) no-repeat center;
         20px;
        height: 20px;
        display: inline-block;
        -webkit-filter: drop-shadow(red 20px 0);
        filter: drop-shadow(red 20px 0);
    }
    

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

    <span class="icon-wrapper">
        <span class="icon-del"></span>
    </span>
    
    .icon-wrapper {
        display: inline-block;
         20px;
        height: 20px;
        overflow: hidden;
        position: relative;
    }
    .icon-del {
        background: url(../images/delete.png) no-repeat center;
         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);
    }
    

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

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

    方法4

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

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

    <span class="icon-gear"></span>
    
    .icon-gear {
        background-image: url(../images/gear.png);
        background-color: red;
        background-size: cover;
         64px;
        height: 64px;
        display: inline-block;
        background-blend-mode: lighten;
    }
    

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

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

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

    原创系列推荐

    1. JavaScript 重温系列(22篇全)

    2. ECMAScript 重温系列(10篇全)

    3. JavaScript设计模式 重温系列(9篇全)

    4. 正则 / 框架 / 算法等 重温系列(16篇全)

    5. Webpack4 入门(上)|| Webpack4 入门(下)

    6. MobX 入门(上) ||  MobX 入门(下)

    7. 59篇原创系列汇总

    回复“加群”与大佬们一起交流学习~

    点这,与大家一起分享本文吧~

    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    C语言习题(结构)
    java变量
    大咖分享 | 一文解锁首届云创大会干货——上篇(文末附演讲ppt文件免费下载)
    深入解读Service Mesh的数据面Envoy
    appium封装显示等待Wait类和ExpectedCondition接口
    Jmeter压测Thrift服务接口
    浏览器插件及好用的小工具
    Jmeter入门实例
    BugBash活动分享
    如何作缺陷分析
  • 原文地址:https://www.cnblogs.com/pingan8787/p/13069467.html
Copyright © 2011-2022 走看看