一个项目在开发中,经常需要用到小图标,怎么管理和维护它们呢?

  1. 建议每个项目都要有一个独立的图标库,这样可以按需引入图标,也方便了以后的维护。
  2. 图标库的所有者可以是UI设计师,他们在切图的时候,可以随便把图标上传到图标库。
  3. 在国内,可以使用阿里图库来存放你的项目图标库 https://www.iconfont.cn

选择哪种类型的图标

图标有很多种,图片形式,unicode,font-class和symbol。

<!-- 图片形式-->
<img src='xxx.png' /><!-- unicode -->
<i class="iconfont">3</i><!-- font-class-->
<i class="iconfont icon-xxx"></i><!-- symbol-->
<svg class="icon" aria-hidden="true"><use xlink:href="#icon-xxx"></use>
</svg>

图片形式已经不推荐使用,缺点很多,比如难以维护,无法修改颜色,多次http请求等等。

unicode的最大缺点是语义化差,无法通过代码了解一个图标。

font-class其实是对unicode进行一层封装,把对unicode的使用隐藏在内部,通过className表现出来,所以它相对比unicode的优点是提高了可读性,font-class是业内常见的使用方式之一,但缺点是在低分辨率下会失真。

svg支持多色图标,且是矢量图标,在任何分辨率下都可以不失真。svg的缺点是渲染开销会相对高一点点,但这点小缺点在优秀的表现面前,几乎可以被忽略。所以,推荐使用svg。

怎么在React中优雅的使用svg呢

这种推荐一种方法,就是封装成组件,把svg的使用细节隐藏起来,通过暴露props.type的方式来使用svg icon。如下:

import React from 'react';
import classnames from 'classnames';
import propsTypes from 'prop-types';
import './SuperIcon.scss';const scriptElem = document.createElement('script');
scriptElem.src = '//at.alicdn.com/t/font_1195834_vd9m25b5wje.js';
document.body.appendChild(scriptElem);function SuperIcon({ className, type, ...restProps }) {return (<svgclassName={classnames('super-icon', className)}aria-hidden="true"{...restProps}><use xlinkHref={`#${type}`} /></svg>);
}SuperIcon.propsTypes = {type: propsTypes.string.isRequired,style: propsTypes.object,
};export default SuperIcon;
.super-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor; overflow: hidden;}

关于这段css的解释:
Q: 为什么super-icon没有定义font-size和color?
A: 因为font-size和color都是可以继承的css属性,它们的默认都会继承父级的属性值。

Q: 为什么width和height都为1em?
A: em是相对单位,与当前的font-size相等,这样可以让icon只会占用它所需的那部分位置。

Q: 为什么要写fill: currentColor?
A: 可以让对元素的color属性的定义也自动影响到fill属性。

使用方式:

<SuperIcononClick={() => onSearch(this.value)}className="search-icon"type="dataasset-sousuo"/>

为什么我对svg icon的颜色定义失效了

如果你碰到这个问题,那么你的svg大概率是带了一些行内样式。比如fill: xxxx。

解决方法是:手动删掉svg元素的行内样式,或者通过阿里巴巴图库的批量去色功能,去掉icon的颜色。

charts引入icon图片_如何在React中优雅的使用icon相关推荐

  1. boost::unorder_map如何插入元素_「React」如何在React中优雅的实现动画

    最简单的动画组件实现 动画的本质,无非就是一个状态样式到另一个状态样式的过渡.最简单的动画组件,我们只需要指定两个状态的样式(进入的样式,离开的样式),以及一个开关(控制状态),即可完成. codep ...

  2. react网格生成_如何在React中构建实时可编辑数据网格

    react网格生成 by Peter Mbanugo 彼得·姆巴努戈(Peter Mbanugo) 如何在React中构建实时可编辑数据网格 (How to Build a Real-time Edi ...

  3. easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

    如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...

  4. react前端显示图片_如何在react项目中引用图片?

    如何在react项目中引用图片?本文码云笔记将为大家整理在react项目中插入图片以及背景图片的方法,希望对需要的小伙伴提供一些参考. 在react项目中插入图片以及背景图片的方法共有2种: 1.im ...

  5. qgis 图片_如何在QGIS中添加自定义的Mapbox底图?

    MapBox提供的底图产品是我目前最喜欢的两个地图源之一.他们除了Studio供用户自定义底图外,还提供了一个更为简单的Cartogram站点,用户只需上传一张图片,系统会自动根据图片色系定义一份特色 ...

  6. react中使用构建缓存_如何在React中构建热图

    react中使用构建缓存 Heat maps are a great way of visualizing correlations among two data sets.  With colors ...

  7. react页面保留_如何在React中保留已登录的用户

    react页面保留 If you run a quick Google search for persisting a logged-in user in React (or keeping a us ...

  8. 选下拉框的的值对应上传相应的图片_如何在excel中实现,选择下拉菜单某一项,该表格中就出现选项对应的数据?(excel表格制作选择数据)...

    怎样从多个excel表格中提取数据,做数据分析图呢 1. 数据的.录入.表格的设置,效果如示. 2.如图所示,选进行分析的图据范围 3.如图所示,点击菜单栏目上的"插入",选择&q ...

  9. python异步加载图片_如何在PyQt5中正确异步加载图像?

    我在尝试如何在pyqtqlistview中正确地完成异步映像加载.在 我的主小部件由一个Qlistview和一个QLineEdit文本框组成. 我有一个参与者数据库,我使用QAbstractListM ...

  10. kylin版本_如何在 Kylin 中优雅地使用 Spark

    前言 Kylin 用户在使用 Spark的过程中,经常会遇到任务提交缓慢.构建节点不稳定的问题.为了更方便地向 Spark 提交.管理和监控任务,有些用户会使用 Livy 作为 Spark 的交互接口 ...

最新文章

  1. [错误收录] the pyflakes.vim plugin requires Vim to be compiled with +python
  2. TensorFlow for Hackers (Part VII) - Credit Card Fraud Detection using Autoencoders in Keras
  3. 中文课程!台大李宏毅机器学习公开课2019版上线
  4. ThemeResolver
  5. ES6---箭头函数()={} 与function的区别(转载)
  6. 当时我就震惊了:无穷带来的各种悖论
  7. 静态页面实现include
  8. R-CNN目标检测第三弹(Faster R-CNN)
  9. 小型空仓库图片_大中型的食品企业为何都青睐自动化立体仓库?
  10. 如何插卡虚拟机 mysql_怎么在虚拟机中搭建mysql服务器
  11. mysql5.7 systemctl启动_CentOS 7上配置MySQL5.7开机自启动方法
  12. 这也许是史上最有趣的破解软件合集
  13. 【Driver Booster 9 PRO】 驱动更新工具 提升游戏性能
  14. anylogic第三课—多层建筑行人疏散仿真讲解
  15. 2023年全国最新工会考试精选真题及答案46
  16. chrome android 功能大全,Android版Chrome 55 大更新,多个新功能袭来
  17. 解决tar (child): gzip: Cannot exec: Too many levels of symbolic links
  18. java 结束循环_java中结束循环的方法
  19. 采轩服饰工业园选择飞鱼星完成无线覆盖
  20. Win10 UWP应用发布流程

热门文章

  1. Android学习笔记(17):文本框TextView类
  2. Linux服务器配置多台虚拟主机
  3. 直接选择排序(Straight Selection Sort)
  4. tornado autoreload 模式
  5. 消息队列中间件的技术选型分析
  6. 使用 Python SimpleHTTPServer 快速共享文件
  7. Oracle中常用的to_Char用法详解(有FMT的详细列表)
  8. [iphone-Game]物理引擎-资源整理贴 (3.14 更新)
  9. .net 面试题 (1)
  10. 陈小琼,你真不好等!