【问题标题】:How to use material fonts and icons locally with material-ui?如何通过material-ui在本地使用材质字体和图标?
【发布时间】:2016-11-19 15:51:02
【问题描述】:

我在运行 Material-ui 应用程序时无法访问 Internet,因此我想在本地安装 Material Design 图标和字体。我一直无法这样做。例如,我尝试通过以下方式使用图标:

  1. 下载图标字体并将其复制到我的样式文件夹中
  2. 按照Google 的建议,在我的应用程序的 main.css 中引用字体
  3. 在我的应用程序中导入 main.css(我正在使用 webpack)

    但是,FontIcon 组件不显示图标。

在我的 main.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';
}

在 index.js 中我有:

import "./assets/styles/main.css";

【问题讨论】:

    标签: reactjs webpack material-ui


    【解决方案1】:

    根据css-loaderdocumentation

    @import 和 url(...) 被解释为 require() 并将由 css-loader 解析。

    因此,如果您使用的是 css-loader,这应该是“开箱即用”的。确保你的 CSS 加载器看起来有点像:

    { test: /\.css$/, loader: "style-loader!css-loader" }
    

    所以..如果你已经这样做了..

    由于您使用的是 webpack,您可以查看webpack file-loader。您需要将它包含在 webpack 配置中 module 对象的 loaders 数组中。

    如果您没有文件加载器,请安装它:

    npm install file-loader --save-dev

    还有一个示例加载器:

    {
        test: /\.(eot|svg|ttf|woff|woff2)$/,
        loader: 'file?name=material-design-icons/iconfont/[name].[ext]'
    }
    

    您可能需要使用 name 属性和在 CSS 中包含字体的路径。上述加载器中的名称目录是文件加载器转储文件的位置(如果已定义,则通常是 webpack.config.js 中的 outpath.path)。运行 webpack,看看它给了你什么。

    或者..

    您还可以将字体文件嵌入为 base-64 编码的 data-uri blob。为此,请安装 url-loader 并使用类似以下加载器的东西。这次你需要指定一个 mime-type,所以每个文件都需要它自己的加载器和它各自的 mime-type

    { test: /\.svg$/, loader: 'url?limit=65000&mimetype=image/svg+xml&name=material-design-icons/iconfont/[name].[ext]' },
    { test: /\.woff$/, loader: 'url?limit=65536&mimetype=application/font-woff&name=material-design-icons/iconfont/[name].[ext]' },
    { test: /\.woff2$/, loader: 'url?limit=65536&mimetype=application/font-woff2&name=material-design-icons/iconfont/[name].[ext]' },
    { test: /\.[ot]tf$/, loader: 'url?limit=65536&mimetype=application/octet-stream&name=material-design-icons/iconfont/[name].[ext]' },
    { test: /\.eot$/, loader: 'url?limit=65536&mimetype=application/vnd.ms-fontobject&name=material-design-icons/iconfont/[name].[ext]' }
    

    但是请注意,我为每个文件设置了 64K 的限制,因为浏览器对超过 64K 的 data-uri blob 的支持不是很好,尽管您可以删除它。

    我个人建议尝试文件加载器方法。

    如果你仍然有问题..

    您应该能够在您的 CSS 中 require 您的文件。将此与上面的文件加载器结合使用。 require 返回资源的路径,因此可以在 CSS 属性的值中使用 require。最终看起来像这样:

    @font-face {
      /* .... */ 
      url(require('material-design-icons/iconfont/MaterialIcons-Regular.woff2')) format('woff2'),
      url(require('material-design-icons/iconfont/MaterialIcons-Regular.woff')) format('woff'),
      url(require('material-design-icons/iconfont/MaterialIcons-Regular.ttf')) format('truetype');
      /* .... */
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 1970-01-01
      • 2021-02-15
      • 2021-12-06
      • 2021-11-15
      • 2018-09-21
      • 2021-02-20
      • 2020-09-27
      • 2021-03-05
      相关资源
      最近更新 更多