如何离线托管材质图标?


106

我很抱歉,如果这是一个非常简单的问题,但是您如何使用Google材料图标而不用

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 

我希望我的应用程序即使用户没有互联网连接也能够显示图标


这篇文章解释了角,想到的可能是有人帮助,thecodeframework.com/...
加甘

Answers:


112

方法2。自托管 开发人员指南

从github 下载最新版本(资产:zip文件),解压缩并将包含材料设计图标文件的iconfont文件夹复制到您的本地项目中-https: //github.com/google/material-design-icons/发布

您只需要使用档案中的iconfont文件夹:它包含不同格式的图标字体(用于多浏览器支持)和样板css。

  • 将@ font-face的url属性中的源替换为本地项目中(字体文件所在的位置)iconfont文件夹的相对路径。url(“ iconfont / MaterialIcons-Regular.ttf”)
@font-face {
   font-family: 'Material Icons';
   font-style: normal;
   font-weight: 400;
   src: url(iconfont/MaterialIcons-Regular.eot); /* For IE6-8 */
   src: local('Material Icons'),
        local('MaterialIcons-Regular'),
        url(iconfont/MaterialIcons-Regular.woff2) format('woff2'),
        url(iconfont/MaterialIcons-Regular.woff) format('woff'),
        url(iconfont/MaterialIcons-Regular.ttf) format('truetype');
}

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;

  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;

  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;

  /* Support for IE. */
  font-feature-settings: 'liga';
}

<i class="material-icons">face</i>

NPM /凉亭套餐

Google正式提供Bower和NPM依赖项选项-遵循Material Icons Guide 1

使用凉亭bower install material-design-icons --save

使用NPMnpm install material-design-icons --save

材料图标:或者,从@marella的https://marella.me/material-icons/查看材料设计图标字体和CSS框架,以自托管图标。


注意

看来Google在低维护模式下具有该项目。在撰写本文时,最新版本是3年前!

GitHub上有一些与此相关的问题,但是我想参考@cyberalien对该问题的评论,Is this project actively maintained? #951其中它引用了几个分叉并继续维护重要图标的社区项目。



对于没有域的电话GAP应用程序,您将如何处理?
卢克·谭

在@ font-face的源URL中定位本地文件夹:url(“ iconfont / MaterialIcons-Regular.woff2”-更新的答案
bfmags

嘿,能否请您对此做一个更新的答案。我已经使用npm下载了我的MDL图标。
TheBAST

1
解决了我的问题……我只想指出一点,我们只需要iconfont整个档案中的文件夹。
securecurve

对于这种类型的“将CDN资源移动到本地提供服务”,更改前后,通常会有不超过3000个请求的平均响应时间数据付诸东流-您会惊讶地发现,无论该更改是否值得,您为实现它
所做的

36

我正在为Angular 4/5进行构建,并且经常脱机工作,因此以下内容对我有用。首先安装NPM:

npm install material-design-icons --save

然后将以下内容添加到styles.css中:

@import '~material-design-icons/iconfont/material-icons.css';

10
当调用“ npm install”等待等待等待大声笑...但是很长一段时间后工作
塞尔吉奥·卡布拉尔

2
@SergioCabral幸运的是,您对等待发表了评论,因为大约有5次我认为此安装不会进行任何操作... :)
Alfa Bravo

1
谢谢你喜欢它,这是最好的解决方案,谢谢你<3
Ali Jamal

也为我工作... :)
6

3
任何想法如何添加轮廓图标?
wutzebaer

20

上层方法对我不起作用。我从github下载文件,但浏览器未加载字体。

我所做的是打开材料图标源链接:

https://fonts.googleapis.com/icon?family=Material+Icons

我看到了这个标记:

    /* fallback */
@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: local('Material Icons'), local('MaterialIcons-Regular'), url(https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');
}

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  display: inline-block;
  white-space: nowrap;
  word-wrap: normal;
  direction: ltr;
  -moz-font-feature-settings: 'liga';
  -moz-osx-font-smoothing: grayscale;
}

我打开woff字体网址链接https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2

并下载woff2文件。

然后,我用material-icons.css中的新路径替换woff2文件路径。

@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: url(iconfont/MaterialIcons-Regular.eot); /* For IE6-8 */
  src: local('Material Icons'),
       local('MaterialIcons-Regular'),
       /* Old file: url(iconfont/MaterialIcons-Regular.woff2) format('woff2'), */
       /* load new file */ 
       url(2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2'),
       url(iconfont/MaterialIcons-Regular.ttf) format('truetype');
}

那使事情对我有用。


谢谢!我有同样的问题,这为我解决了。
大卫,

我用这种方法解决了我的问题,但是后来我找到了另一个git repo,从那里我可以得到正确的发行版。
Kaloyan Stamatov

@ Kaloyan Stamatov将非常乐意分享该git repo ..因为很多人都对过时的官方repo产生了疑问:)
Grashopper

@Grashopper,我已经没有了。抱歉
Kaloyan Stamatov

1
直到2019年为止,该解决方案也对我有效。
compt

17

如果您使用webpack项目,

npm install material-design-icons --save

你只需要

import materialIcons from 'material-design-icons/iconfont/material-icons.css'

7
我不建议这样做,此存储库太大,请使用一个desc。在npmjs.com/package/material-design-icons-iconfont下面,我还注意到浏览器将缓存fonts.googleapis.com/icon?family=Material+Icons,并且可以在离线模式下运行。结帐keemor.github.io/#
keemor

我是npm的新手,能否详细说明import materialIcons from 'material-design-icons/iconfont/material-icons.css'。我们将此行添加到哪里?app.js或其他地方。我在Vue中使用framework7,并且尝试了。它对我不起作用。
Suat Atan PhD

@SuatAtanPhD,您可以像其他样式导入一样添加此导入。如果您使用的WebPack你需要的东西般的风格,装载机,CSS-器,您可以将您的js代码这个进口的任何地方,例如在index.js或app.js等
弗拉季Kosovskikh

1
建议使用这种方法来构建可在内部网络中工作而无需访问Internet的公司Web应用程序
Yurii Bratchuk '18

13

这可能是一个简单的解决方案


获取此存储库,该存储库是Google发布的原始存储库的分支。

用bower或npm安装它

bower install material-design-icons-iconfont --save

npm install material-design-icons-iconfont --save

在HTML页面上导入CSS文件

<style>
  @import url('node_modules/material-design-icons-iconfont/dist/material-design-icons.css');
</style>

要么

<link rel="stylesheet" href="node_modules/material-design-icons-iconfont/dist/material-design-icons.css">

测试:在HTML文件的body标签内添加图标

<i class="material-icons">face</i>

如果看到面部图标,就可以了。

如果不起作用,请尝试将其..作为前缀添加到node_modules路径:

<link rel="stylesheet" href="../node_modules/material-design-icons-iconfont/dist/material-design-icons.css">

即使使用Angular的标准组件,也可以使用material-design-icons-iconfont软件包mat-icon。因此过渡是无缝的。
尤里(Yuri)

这是对我有用的解决方案,除了index.html中的样式表链接不起作用-我必须将导入内容添加到我的Styles.scss文件中: @import"../node_modules/material-design-icons-iconfont/dist/material-design-icons.css"; 然后,我在本地托管的图标跃入了人们的生活
Ade

7

我的食谱包括三个步骤:

  1. 安装材料设计图标包

    npm install material-design-icons
  2. 将material-icons.css文件导入.less或.scss文件/项目

    @import "~/node_modules/material-design-icons/iconfont/material-icons.css";
  3. 将推荐的代码包含到reactjs .js文件/项目中

    <i className='material-icons' style={{fontSize: '36px'}}>close</i>

这个包已经不存在了
yehonatan yehezkel

与角度cli,做npm安装material-design-icons,然后在angular.json-> architect-> build-> styles中添加css
Wlada

6

使用material-design-icons-iconfont

完全公开,我是该软件包的作者

Google的 材料设计图标项目维护成本低, 并且过时了一段时间https://material.io/icons/中的版本与material-design-icons中的版本 之间存在差距 。

我创建了material-design-icons-iconfont来解决以下主要问题:

  • material-design-icons卡纸npm install-删除了所有不相关的svg / xml / ...文件
  • 字体文件始终是Google FontsCDN 的最新文件
  • 对SSS的支持

通过安装 npm

npm install material-design-icons-iconfont --save

这取决于您打包Web应用程序的方式(webpack/gulp / bower/ ...),需要导入.css/ .scss文件(并且可能会更改相对字体路径)


使用SCSS导入

导入您的sass文件之一

$material-design-icons-font-path: '~material-design-icons-iconfont/dist/fonts/';
@import '~material-design-icons-iconfont/src/material-design-icons';

稍后,引用所需的图标<i class="material-icons">+图标ID +</i>

<i class="material-icons">contact_support</i>

演示页面

它带有一个简短的演示页面,可帮助搜索和复制粘贴字体

图片


1
我在PWA上遇到问题。当您在浏览器中时,图标正常工作,但是一旦在主屏幕上添加快捷方式并运行该应用程序,图标便不会显示。
Wlada

4

我已经尝试在答案中编译自托管图标所需完成的所有工作。您需要遵循以下4个简单步骤。

  1. 打开物化存储库的iconfont文件夹

    链接-[ https://github.com/google/material-design-icons/tree/master/iconfont]

  2. 下载这三个图标文件->

    MaterialIcons- Regular.woff2-格式('woff2')

    MaterialIcons-Regular.woff-格式('woff')

    MaterialIcons-Regular.ttf -format('truetype');

    注意-下载后,您可以将其重命名为您喜欢的任何名称。

  3. 现在,转到您的CSS并添加此代码

@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: url(MaterialIcons-Regular.eot); /* For IE6-8 */
  src: local('Material Icons'),
       local('MaterialIcons-Regular'),
       url(MaterialIcons-Regular.woff2) format('woff2'),
       url(MaterialIcons-Regular.woff) format('woff'),
       url(MaterialIcons-Regular.ttf) format('truetype');
}

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;

  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;

  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;

  /* Support for IE. */
  font-feature-settings: 'liga';
}


注意:src:url(...)中提供的地址应相对于“ CSS文件”,而不是index.html文件。例如,它可以是src:url(../ myicons / MaterialIcons-Regular.woff2)


  1. 现在就可以使用了,这里是如何用HTML来完成的操作

<i class="material-icons">face</i>

单击此处查看所有可以使用的图标。


您链接上的404号
Welyngton DalPrá

3

完成后npm install material-design-icons,将其添加到主CSS文件中:

@font-face {
  font-family: 'Material Icons';
  font-style: normal;
  font-weight: 400;
  src: url(~/material-design-icons/iconfont/MaterialIcons-Regular.eot); /* For IE6-8 */
  src: local('Material Icons'),
       local('MaterialIcons-Regular'),
       url(~material-design-icons/iconfont/MaterialIcons-Regular.woff2) format('woff2'),
       url(~material-design-icons/iconfont/MaterialIcons-Regular.woff) format('woff'),
       url(~material-design-icons/iconfont/MaterialIcons-Regular.ttf) format('truetype');
}

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;

  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;

  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;

  /* Support for IE. */
  font-feature-settings: 'liga';
}

3

带角度的cli

npm install angular-material-icons --save

要么

npm install material-design-icons-iconfont --save

material-design-icons-iconfont是图标的最新更新版本。角材料图标长时间不更新

等待,等待,等待安装完成,然后将其添加到angular.json->项目->架构师->样式

 "styles": [
          "node_modules/material-design-icons/iconfont/material-icons.css",
          "src/styles.scss"
        ],

或者,如果您安装了material-desing-icons-iconfont,则

"styles": [
              "node_modules/material-design-icons-iconfont/dist/material-design-icons.css",
              "src/styles.scss"
            ],

3

2019更新在这里:

为了自托管您的材质图标,可以使用常规图标,圆形,锐利的所有变体。从此仓库中获取它们:https : //github.com/petergng/material-icon-font

由于某些原因,我不知道为什么这些字体无法从Google存储库中轻松访问。

但是,你走了。

下载软件包后,转到bin文件夹,您将看到四个变体。当然,这取决于您使用哪种方式。

要使用它们,请创建一个CSS文件,然后

  1. 为您需要的每个变体生成一个字体:
@font-face {
    font-family: 'Material Icons';
    font-style: normal;
    font-weight: 400;
    src: url(./icons/regular/Material-Icons-Regular.eot); /* For IE6-8 */
    src: local('Material-Icons-Regular'),
    url(./icons/regular/Material-Icons-Regular.woff2) format('woff2'),
    url(./icons/regular/Material-Icons-Regular.woff) format('woff'),
    url(./icons/regular/Material-Icons-Regular.ttf) format('truetype');
}

@font-face {
    font-family: 'Material Icons Round';
    font-style: normal;
    font-weight: 400;
    src: url(./icons/round/Material-Icons-Round.eot); /* For IE6-8 */
    src: local('Material-Icons-Round'),
    url(./icons/round/Material-Icons-Round.woff2) format('woff2'),
    url(./icons/round/Material-Icons-Round.woff) format('woff'),
    url(./icons/round/Material-Icons-Round.svg) format('svg'),
    url(./icons/round/Material-Icons-Round.ttf) format('truetype');
}

@font-face {
    font-family: 'Material Icons Sharp';
    font-style: normal;
    font-weight: 400;
    src: url(./icons/sharp/Material-Icons-Sharp.eot); /* For IE6-8 */
    src: local('Material-Icons-Sharp'),
    url(./icons/sharp/Material-Icons-Sharp.woff2) format('woff2'),
    url(./icons/sharp/Material-Icons-Sharp.woff) format('woff'),
    url(./icons/sharp/Material-Icons-Sharp.svg) format('svg'),
    url(./icons/sharp/Material-Icons-Sharp.ttf) format('truetype');
}

url将链接到图标都位于项目。

  1. 现在让我们注册图标类:
.material-icons-outlined, .material-icons {
    font-weight: normal;
    font-style: normal;
    font-size: 24px;  /* Preferred icon size */
    display: inline-block;
    line-height: 1;
    text-transform: none;
    letter-spacing: normal;
    word-wrap: normal;
    white-space: nowrap;
    direction: ltr;
}

这将使 .material-icons-outlined,.material-icons类使用相同的默认值。如果要使用.material-icons-sharp,只需将其附加到两个类名称上即可。

  1. 最后,让我们插入您从步骤1插入的字体。
.material-icons {
    font-family: 'Material Icons';
}
.material-icons-outlined {
    font-family: 'Material Icons Outline';
}

同样,要使用更多的变体,例如Sharp,只需像上面的两个一样添加其块。

完成后...转到html并使用新创建的图标。

<i class="material-icons-outlined">hourglass_empty</i>
<i class="material-icons">phone</i>

2

在页面中包含的样式标题信息http://materialize.com/icons.html上,您可以转到实际的超链接并进行本地化复制以离线使用图标。

注意:您将在全部icon.csssomefile.woff中下载两个文件。

  1. 根据标题转到所需的以下URL

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

将页面另存为what_filename.css。默认为icon.css

  1. 寻找这样的一条线

src: local('Material Icons'), local('MaterialIcons-Regular'), url(https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2)

  1. 访问以.woff结尾的URL

https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2。您的浏览器将自动下载它。将其保存在CSS文件夹中。

  1. 现在,您应该拥有两个文件icon.css2fcrYFNa .... mY.wof22,将它们都保存在CSS中。现在,在css标头位置中对目录中的icon.css进行编辑。只要确保.woff2文件始终与icon.css放在同一文件夹中即可。随意编辑长文件名。


2

该问题的标题问如何主机材料图标脱机但身体澄清,目的是利用材料的图标离线(重点煤矿)

使用您自己的材料图标文件副本是一种有效的方法/实现。对于那些可以使用服务人员的人,另一个是让服务人员来照顾它。这样,您就不必麻烦地获取副本并保持最新。

例如,使用Workbox生成服务人员,使用最简单的方法运行workbox-cli并接受默认值,然后将以下文本附加到生成的服务人员中:

workboxSW.router.registerRoute('https://fonts.googleapis.com/(.*)',
workboxSW.strategies.cacheFirst({
  cacheName: 'googleapis',
  cacheExpiration: {
    maxEntries: 20
  },
  cacheableResponse: {statuses: [0, 200]}
})
);

然后,您可以使用F12>应用程序>存储> IndexedDB来检查它是否已缓存在Chrome中,并在名称中查找带有googleapis的条目。


我做了一些小的改动也可以使用它。我将“ workboxSW”更改为“ workbox”。我将“路由器”更改为“路由”,并将此代码添加到使用workbox cli向导生成的sw_config.js文件中。
詹森·阿斯霍恩

2

从2020年开始,我的方法是使用material-icons-font程序包。它简化了Google的material-design-icons包和基于社区的material-design-icons-iconfont的使用

  1. 安装软件包。 npm install material-icons-font --save

  2. 将包的CSS文件的路径添加到项目的angular.json文件的style属性中。

    ... "styles": [ "./node_modules/material-icons-font/material-icons-font.css" ], ...

  3. 如果使用SCSS,请将下面的内容复制到styles.scss文件的顶部。

    @import '~material-icons-font/sass/variables'; @import '~material-icons-font/sass/mixins'; $MaterialIcons_FontPath: "~material-icons-font/fonts"; @import '~material-icons-font/sass/main'; @import '~material-icons-font/sass/Regular';

  4. 使用项目的HTML文件中的图标。

    // Using icon tag
    <i class="material-icons">face</i>
    <i class="material-icons md-48">face</i>
    <i class="material-icons md-light md-inactive">face</i>
    
    // Using Angular Material's <mat-icon> tag
    <mat-icon>face</mat-icon>
    <mat-icon>add_circle</mat-icon>
    <mat-icon>add_circle_outline</mat-icon>

离线开发时,@ angular / material中的图标往往会损坏。与@ angular / material一起添加material-icons-font包,可以在脱机开发时使用标记。


0

安装npm软件包

npm install material-design-icons --save

将CSS文件路径放入styles.css文件

@import "../node_modules/material-design-icons-iconfont/dist/material-design-icons.css";

0

Kaloyan Stamatov方法是最好的。首先转到https://fonts.googleapis.com/icon?family=Material+Icons。并复制css文件。内容看起来像这样

/* fallback */
@font-face {
    font-family: 'Material Icons';
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialicons/v37/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
}
    
.material-icons {
    font-family: 'Material Icons';
    font-weight: normal;
    font-style: normal;
    font-size: 24px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -moz-font-feature-settings: 'liga';
    -moz-osx-font-smoothing: grayscale;
}

将字体的源粘贴到浏览器以下载woff2文件 https://fonts.gstatic.com/s/materialicons/v37/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 然后替换原始源中的文件。您可以重命名它,而无需从github下载60MB文件。死了简单我的代码看起来像这样

@font-face {
    font-family: 'Material Icons';
    font-style: normal;
    font-weight: 400;
    src: url(materialIcon.woff2) format('woff2');
}

.material-icons {
    font-family: 'Material Icons';
    font-weight: normal;
    font-style: normal;
    font-size: 24px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -moz-font-feature-settings: 'liga';
    -moz-osx-font-smoothing: grayscale;
}

而materialIcon.woff2是下载并替换的woff2文件。


1
并非在所有浏览器上都有效,请参见以下SO解答以获取更多信息:stackoverflow.com/questions/11002820/…–
xaviert

-1
npm install material-design-icons

@import '~material-design-icons/iconfont/material-icons.css';

Angular Material 8也为我工作


-1

将此添加到Web配置中,错误消失了

<system.webServer>
    <staticContent>
      <remove fileExtension=".woff" /> 
      <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
      <remove fileExtension=".woff2" /> 
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
    </staticContent>

-1

顺便说一句,YouTube上有视频,并提供分步说明。

https://youtu.be/7j6eOkhISzk

  1. 这些是步骤。从https://github.com/google/material-design-icons/releases下载实现图标包

  2. 复制图标字体文件夹并将其重命名为图标。

  3. 打开materialize.css文件并更新以下路径:

一个。从url(MaterialIcons-Regular.eot)到url(../ fonts / MaterialIcons-Regular.eot)b。从url(MaterialIcons-Regular.woff2)格式('woff2')到url(../ fonts / MaterialIcons-Regular.woff2)格式('woff2')c。从url(MaterialIcons-Regular.woff)格式('woff')到url(../ fonts / MaterialIcons-Regular.woff)格式('woff')d。从url(MaterialIcons-Regular.ttf)格式('truetype')到url(../ fonts / MaterialIcons-Regular.ttf)格式('truetype')

  1. 将materialize-icon.css复制到您的css文件夹,并在您的html文件中引用它。

一切都会像魔术一样起作用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.