角度材质图标不起作用

Posted

技术标签:

【中文标题】角度材质图标不起作用【英文标题】:Angular Material icons not working 【发布时间】:2018-09-22 14:04:49 【问题描述】:

我已经为 Angular 安装了 Material,

我已在我的应用程序模块 MatIconModule 上导入(使用 import MatIconModule from '@angular/material/icon';

我已将它添加到我的 ngmodule 导入下:

@NgModule(
    imports: [ 
//...
MatIconModule, 
//...

我已经导入了所有样式表

而且我还在我的应用程序组件中导入了它,该组件实际上(试图)使用它们(在它的开头有另一个 import MatIconModule from '@angular/material/icon'; 行)。

但是素材图标还是没有出现。

例如,用这一行:

<button mat-icon-button (click)="snav.toggle()"><mat-icon>menu</mat-icon></button>

我期待这样的事情:

但我明白了:

有什么建议吗?

【问题讨论】:

字体可能丢失。或者稍后加载。 @BasavarajBhusani 我该如何检查这个? 在执行下面的解决方案后,您应该清除浏览器缓存。它对我有用。 【参考方案1】:

为 Material Icons 添加 CSS 样式表!

将以下内容添加到您的 index.html

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

参考 - https://github.com/angular/material2/issues/7948

【讨论】:

这个答案对我有用,但我也能够将此行添加到 styles.css 并且它有效。 @import 'https://fonts.googleapis.com/icon?family=Material+Icons'; 你也可以在你的styles.css中添加:@import "~material-icons/iconfont/material-icons.css"; @PooshonBanerjee material-icons 是一个单独的项目,不由 Angular Material 团队维护。【参考方案2】:

对于 Angular 6+:

    npm 安装这个:npm install material-design-icons

    将样式添加到 angular.json:

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

【讨论】:

这是正确的角度方式! ...以及使用 Angular for Apps 时的正确方法(如 Cordova) 这对我有用。我没有使用 google api,而是安装了材料设计。【参考方案3】:

如果使用 SASS,您只需将此行添加到您的主 .scss 文件中:

@import url("https://fonts.googleapis.com/icon?family=Material+Icons");

如果您不想从 google 获取图标,您也可以按照Material Icons Guide 中的说明自行托管图标:

对于那些希望自己托管网络字体的人,一些额外的设置是 必要的。将图标字体托管在某个位置,例如 https://example.com/material-icons.woff 并添加以下 CSS 规则:

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

此外,渲染图标的 CSS 规则需要 声明正确渲染字体。这些规则通常被执行 作为 Google Web 字体样式表的一部分,但需要 自托管字体时手动包含在您的项目中:

.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';

【讨论】:

在未呈现图标而是显示关闭文本时面临问题。将上述导入附加到我的 scss 文件中,它开始显示“X”图标。谢谢:) 我有 Angular 9 项目,在 .scss 中导入材质图标字体文件后,仍然存在同样的问题,材质图标不可见,它在使用 cordova 创建的 .apk 文件中显示测试“visibility_off”。但在 localhost:4200 中同样可以正常工作 那么还有其他解决方案吗?【参考方案4】:

在我的例子中,应用了一种覆盖字体系列的样式。所以,我像这样明确地添加了字体系列样式:

.material-icons
    font-family: 'Material Icons' !important;

【讨论】:

【参考方案5】:

您必须导入 MatIconModule 并在 index.html 中使用以下网址

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

【讨论】:

【参考方案6】:

完整的解决方案可以是:

第一步

你必须在你的项目中导入MatIconModule,在我的项目中,我将必要的组件导入到一个单独的文件中,然后我将它导入到AppModule中,你可以使用它或直接导入它们:

import  NgModule  from "@angular/core";
import  MatButtonModule  from '@angular/material';
import  MatIconModule  from '@angular/material/icon';

@NgModule(
    imports: [MatIconModule, MatButtonModule], // note the imports 
    exports: [MatIconModule, MatButtonModule], // and the exports
)
export class MaterialModule  

第二步

在您的index.html 中加载图标字体:

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

【讨论】:

【参考方案7】:

在我的情况下,图标没有显示,因为我使用 !important 搞砸了我的字体。取出它会导致图标出现。

【讨论】:

【参考方案8】:

在我的例子中,我写的图标名称没有与任何图标相关联。

您可以在此处检查正确的名称: https://material.io/tools/icons/?style=baseline

【讨论】:

【参考方案9】:

您可以通过两种方式导入材质图标。一种是在项目的主 index.html 页面中导入图标。

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

另一种方法是将材质图标导入到主CSS文件中,如下所示。

 @import url("https://fonts.googleapis.com/icon?family=Material+Icons"); 

我的意见是将其添加到 CSS 文件中。

【讨论】:

【参考方案10】:

我遇到了图标不为我显示的问题。我已按照 Basavaraj Bhusani 提供的步骤进行操作,但仍然无法正常工作。

我发现问题是在我的 scss 中,我有 text-transform: uppercase,这导致图标只显示内容“arrow_forward”。我必须专门更改图标上的text-transform: none,否则它不会呈现。

                .child-item-action 

                    text-transform: uppercase;

                    &:after 

                        font-family: 'Material Icons';
                        content: "arrow_forward";
                        text-transform: none;
                        -webkit-font-feature-settings: 'liga';

                    

【讨论】:

【参考方案11】:

我意识到在将hammerJs 导入您的应用程序之前,一开始没有人谈论过安装hammerJs。对于有类似问题的人,首先需要导入hammerJs,您可以使用NPM、Yarn 或google CDN 进行安装。此答案适用于使用 NPM 或 Yarn 安装:

NPM

npm install --save hammerjs

纱线

yarn add hammerjs

安装后,将其导入应用的入口点(例如 src/main.ts)。

import 'hammerjs';

如果您更喜欢使用 Google CDN,请访问 Angular 资料以获取更多说明https://material.angular.io/guide/getting-started

【讨论】:

【参考方案12】:

图标名称错误:某些材质图标名称错误。

例如:Material Icon为

提供filter_alt

<mat-icon aria-hidden="false" aria-label=" filter icon">filter_alt</mat-icon>

但它显示出来了 ?

修复: 我们必须使用 filter_list_alt 作为漏斗类型图标

<mat-icon aria-hidden="false" aria-label="filter icon">filter_list_alt</mat-icon>

【讨论】:

【参考方案13】:

首先,请考虑您需要在项目中插入样式:

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

如果它没有解决问题,我猜是因为您使用了另一种字体并且还添加了 !important 字体,请尝试在您的 style.css(或 style.scss)中添加以下代码,即影响整个项目的通用/公共 CSS 文件:

md-icon
  font-family: 'Material Icons' !important;

参考这个答案:https://github.com/angular/components/issues/5863#issuecomment-316307387

【讨论】:

【参考方案14】:

如果您覆盖了一些现有的 Angular Material 样式或任何其他以某种方式影响图标的样式,则可能会导致问题。将图标代码移到任何样式和测试之外。

对我来说,它是 font-variant: small-caps;

所以我只是把它移到了子元素。下面是 Angular Material 网格的一部分。

  <mat-grid-tile colspan="3" rowspan="1" class='title customGlobalGrid'>
    <mat-icon aria-hidden="false" aria-label="Example home icon">home</maticon>
    <span style="font-variant: small-caps;">item['title']</span>
  </mat-grid-tile>

【讨论】:

【参考方案15】:
**Add following code to your css**

 .material-icons   
    /* 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';

【讨论】:

以上是关于角度材质图标不起作用的主要内容,如果未能解决你的问题,请参考以下文章

反应材质 UI 选择框 onBlur 事件不起作用

材质 UI 凸起按钮不起作用

Angular:使用指令禁用材质按钮不起作用

材质 UI 自动完成标签动画不起作用

Popover 组件 - onExited 回调不起作用,材质 ui

材质 UI:选择已折叠,自动宽度不起作用