如何离线托管材质图标?

IT技术 javascript html cordova materialize
2021-02-20 12:27:04

如果这是一个非常简单的问题,我很抱歉,但是您如何在没有

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

?

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

6个回答

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

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

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

  • 将 url 属性中的源替换为@font-face本地项目中 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 / Bower 包

谷歌官方有一个 Bower 和 NPM 依赖选项——遵循 Material Icons Guide 1

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

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

Material Icons:或者查看用于自托管图标的 Material design 图标字体和 CSS 框架,来自@marella 的https://marella.me/material-icons/


笔记

似乎谷歌的项目处于低维护模式。在撰写本文时,最后一次发布是 3 年前!

GitHub 上有几个关于此的问题,但我想参考 @cyberalien 对该问题的评论,Is this project actively maintained? #951其中提到了几个分叉并继续维护材料图标的社区项目。


对于这种类型的“移动 CDN 资源以在本地提供服务”,在更改之前和之后拥有超过 3000 个稳定的请求平均响应时间数据通常会带来回报 - 您会惊讶地发现它经常不值得,无论如何你为实现它所做的努力......
2021-04-25 12:27:04
解决了我的问题……我只是想指出我们只需要iconfont整个存档中文件夹。
2021-05-10 12:27:04
在@font-face 的源 url 中定位您的本地文件夹: url( "iconfont/MaterialIcons-Regular.woff2" -- 更新的答案
2021-05-19 12:27:04
嘿,你能不能更新一下这个答案。我已经用 npm 下载了我的 mdl 图标。
2021-05-20 12:27:04
对于没有域的电话 GAP 应用程序,您将如何执行此操作?
2021-05-21 12:27:04

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

npm install material-design-icons --save

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

@import '~material-design-icons/iconfont/material-icons.css';
当调用“npm install”时等待等待大声笑...但很长时间后有效
2021-04-25 12:27:04
@SergioCabral 幸运的是你发表了关于等待的评论,因为大约有 5 次我认为这个安装不会去任何地方...... :)
2021-05-06 12:27:04
事实证明,谷歌存储库没有得到很好的维护。我找到的解决方案是使用 npm install material-design-icons-iconfont,这是 google 存储库的一个分支,具有许多修复和性能改进。
2021-05-10 12:27:04
知道如何添加轮廓图标吗?
2021-05-16 12:27:04
谢谢你喜欢它这是最好的解决方案谢谢<3
2021-05-21 12:27:04

上面的方法对我不起作用。我从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字体url链接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');
}

这让事情对我有用。

@Grashopper,我没有了。对不起
2021-04-26 12:27:04
更新到 2019 年,这个解决方案也适用于我。
2021-04-28 12:27:04
@ Kaloyan Stamatov 很高兴分享那个 git 仓库.. 因为很多人都对过时的官方仓库有问题:)
2021-05-01 12:27:04
我用这种方法解决了我的问题,但后来我找到了另一个 git repo,从那里我得到了正确的版本。
2021-05-04 12:27:04
谢谢!我有同样的问题,这为我解决了。
2021-05-19 12:27:04

到 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,请将下面的内容复制到 style.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 的图标在离线开发时往往会损坏。添加 material-icons-font 包与@angular/material 结合使用,可以在离线开发时使用标签。

有没有一种方法可以离线使用 <mat-icon>face</mat-icon> ,即,无需更改为 <i class="material-icons">face</i>
2021-05-12 12:27:04
简单而干净的实现 - 非常感谢您!作为最新和最有效的解决方案,这应该是公认的答案......
2021-05-13 12:27:04
我完全同意@Mike。这是最好的实现。感谢你的分享!
2021-05-16 12:27:04

如果你使用 webpack 项目,之后

npm install material-design-icons --save

你只需要

import materialIcons from 'material-design-icons/iconfont/material-icons.css'
我是 npm 的新手,你能详细说明一下吗import materialIcons from 'material-design-icons/iconfont/material-icons.css'我们将此行添加到何处?app.js 或其他地方。我在 Vue 中使用 framework7,我试过了。它对我不起作用。
2021-04-26 12:27:04
我不建议这样做,这个 repo 太大了,使用一个 desc。npmjs.com/package/material-design-icons-iconfont下面我还注意到浏览器会缓存fonts.googleapis.com/icon?family=Material+Icons并且它会在离线模式下工作。结帐keemor.github.io/#
2021-05-01 12:27:04
@SuatAtanPhD 您像添加任何其他样式导入一样添加此导入。如果你使用 webpack,你需要像 style-loader、css-loader 这样的东西,你可以把这个导入放在你的 js 代码的任何地方,例如在 index.js 或 app.js 等。
2021-05-06 12:27:04
这种方法推荐用于构建可以在内部网络中工作而无法访问 Internet 的企业 Web 应用程序
2021-05-13 12:27:04