Material-UI-React-图标

React+Electron桌面应用开发文章索引

这篇文章继续之前的文章,介绍如何添加图标元素。


SVG图标

官方实例中我们得到,只要引入import SvgIcon from 'material-ui/SvgIcon',然后render()中增加下面的代码就可以生成一个SVG主页图标

            h(SvgIcon, {
                color: "primary"
            }, [
                h('path', {
                    d: 'M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'
                })
            ]),
SVG图标

这里使用了path标记,规范文档看这里

如何得到各种图标的d后面的长串值?我们可以从很多网站下载到svg格式文件。
Material Icons 900+图标
IconFont阿里图标库 200W+图标

打开svg文件看起来像这个样子:

<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
    <path d="M0 0h24v24H0z" fill="none"/>
    <path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"/>
</svg>

我们只需要第二行path中引号中M19...的部分。
为了统一使用,我们把所有图标的d值都放入一个文件Utilities/Myicons.js,在需要的时候引用它:

import h from 'react-hyperscript'
import SvgIcon from 'material-ui/SvgIcon'

const icon = (iconName, props) => {
    return h(SvgIcon, props, [
        h('path', {
            d: datas[iconName] || ''
        })
    ])
}

const datas = {
    'favorite': 'M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z',
    'favorite border': 'M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z',
}

const MyIcons = {
    icon,
    datas,
}

export default MyIcons

在这里我们还添加了icon函数快速生成图标icon(iconName,props),这样我们在任意页面中引入import MyIcons from '../../Utilities/MyIcons',然后render()中添加下面代码就可以生成图标了:

            h('h1', this.state.title),
            MyIcons.icon('favorite', {
                color: 'primary'
            }),
            MyIcons.icon('favorite border', {
                color: 'primary'
            }),
SVG数据图标

MaterialDesign图标

可以从网上下载到几乎所有希望的SVG图标,也可以使用PS等画图软件来制作新的SVG图标。SVG可以任意变色,我们把图标都整合到一起也更加精简。但SVG使用起来确实不方便。

其实可以直接引入MaterialDesign的900+图标的,比如引入闹钟图标import AccessAlarmIcon from '@material-ui/icons/AccessAlarm',全部图标名称看这里

然后使用它:

            h(AccessAlarmIcon, {
                color: 'primary'
            }),

其他图标

FontAwasome

FontAwasome 600+字体图标

这也是网页开发者常用的另外一套图标。参照它的教程可以使用,先要在index.html中引用css文件...font-awesome.min.css,其他页面元素才能使用class:'fa fa-heart'。它有自己的变色方法,并不能直接使用'primary'这个值。
我建议还是下载FontAwasome单个图标的svg文件,参照我们上面的方法使用。

从这里可以点击进入FontAwasome的SVG下载页面

图片图标

我们经常使用设计精美的图片作为图标,你可以直接把图片放在dist/imgs文件夹下面,然后像使用图片那样使用它,注意这里src路径开始不需要添加点或斜杠:

            h('img', {
                src: 'icons/heart-red.png'
            }),

要知道,图片是不能通过代码直接变色的。


致力于让一切变得简单

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,213评论 25 707
  • 年轻,狂妄!绝对的自信,认为保留着与众不同才是真实的自己!然后慢慢的被同化,曾经所认定的事一点一点的被世俗同化,最...
    脸狺阅读 208评论 0 0
  • 046期四肖特 四肖:牛狗羊鸡 三肖;牛狗羊 二肖:狗羊 一肖:羊 平特一肖 鸡 平特两肖 鸡虎 平特三肖 鸡虎猴...
    聚才发财阅读 5,345评论 0 0
  • 早上好 学会在人群中保持一定程度上的孤独,不要有什么想法就立马告诉别人。另外,对别人所说的话千万不要太过当真。不能...
    我是旅行猫阅读 256评论 0 0