Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在材质ui中本地使用材质字体和图标?_Reactjs_Webpack_Material Ui - Fatal编程技术网

Reactjs 如何在材质ui中本地使用材质字体和图标?

Reactjs 如何在材质ui中本地使用材质字体和图标?,reactjs,webpack,material-ui,Reactjs,Webpack,Material Ui,运行材质ui应用程序时,我没有Internet访问权限,因此我希望在本地安装材质设计图标和字体。我一直无法做到这一点。例如,我尝试通过以下方式使用图标: 下载图标字体并将其复制到“我的样式”文件夹 参考应用程序main.css中的字体,如 在我的应用程序中导入main.css(我正在使用webpack) 但是,FontIcon组件不显示图标 在my main.css中,我有: @font-face { font-family: 'Material Icons'; font-style:

运行材质ui应用程序时,我没有Internet访问权限,因此我希望在本地安装材质设计图标和字体。我一直无法做到这一点。例如,我尝试通过以下方式使用图标:

  • 下载图标字体并将其复制到“我的样式”文件夹
  • 参考应用程序main.css中的字体,如
  • 在我的应用程序中导入main.css(我正在使用webpack)

    但是,FontIcon组件不显示图标

  • 在my 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";
    

    根据
    css加载程序

    @导入和url(…)的解释类似于require(),将由css加载程序解析

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

    { test: /\.css$/, loader: "style-loader!css-loader" }
    
    所以如果你已经这么做了。。 由于您使用的是webpack,您可以查看一下。您需要将其包含在网页配置中
    模块
    对象的
    加载程序
    数组中

    要在没有文件加载器的情况下安装该文件加载器,请执行以下操作:

    npm安装文件加载器--保存开发文件

    和一个样本加载器:

    {
        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编码的数据uri blob。要做到这一点,请安装
    url加载程序
    ,并使用以下加载程序。这一次,您需要指定一个mime类型,因此每个文件都需要自己的加载程序及其各自的mime类型

    { 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的数据uri blob的支持不是很好,尽管您可以删除它

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

    如果你仍然有问题。。 您应该能够
    在CSS中要求
    您的文件。与上面的文件加载器结合使用。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');
      /* .... */
    }