谷歌修改了它的材质设计图标,有4个新的预设主题:

除了常规的填充/基线主题之外,概述,圆形,双色和锐:


但是,不幸的是,它没有说明如何使用新的主题。


我一直在通过谷歌Web字体使用它,包括链接:

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

然后使用文档中建议的所需图标:

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

但它总是显示“填充/基线”版本。


我尝试了以下方法来使用outline主题:

<i class="material-icons">account_balance_outlined</i>
<i class="material-icons material-icons-outlined">account_balance</i>

并且,更改Web字体链接为:

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

等。但这并不奏效。


这样瞎猜是没有意义的。


有人尝试过使用新的主题吗?它甚至像基线版本(内联html标签)一样工作吗?或者,它只能以SVG或PNG格式下载吗?


当前回答

我最终使用IcoMoon应用程序创建了一个自定义字体,只使用我最近的web应用程序构建所需的新主题图标。它不是完美的,但你可以模仿现有的谷歌字体功能非常好,只需一点点设置。这里是一个总结:

https://medium.com/@leemartin/how-to-use-material-icon-outlined-rounded-two-tone-and-sharp-themes-92276f2415d2

如果有人胆子大,他们可以用IcoMoon转换整个主题。IcoMoon可能有一个内部流程,因为他们已经在他们的库中设置了原始的材质图标。

不管怎样,这不是一个完美的解决方案,但对我来说很有效。

其他回答

我最终使用IcoMoon应用程序创建了一个自定义字体,只使用我最近的web应用程序构建所需的新主题图标。它不是完美的,但你可以模仿现有的谷歌字体功能非常好,只需一点点设置。这里是一个总结:

https://medium.com/@leemartin/how-to-use-material-icon-outlined-rounded-two-tone-and-sharp-themes-92276f2415d2

如果有人胆子大,他们可以用IcoMoon转换整个主题。IcoMoon可能有一个内部流程,因为他们已经在他们的库中设置了原始的材质图标。

不管怎样,这不是一个完美的解决方案,但对我来说很有效。

对我来说有用的是在图标名称后使用_outline而不是_outline。

<mat-icon>info</mat-icon>

vs

<mat-icon>info_outline</mat-icon>

更新(2019年3月31日):现在所有图标主题都通过谷歌Web字体工作。

正如Edric所指出的,这只是在你的文档头部添加谷歌web字体链接的问题,就像这样:

<link href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp" rel="stylesheet">

然后添加正确的类来输出特定主题的图标。

<i class="material-icons">donut_small</i>
<i class="material-icons-outlined">donut_small</i>
<i class="material-icons-two-tone">donut_small</i>
<i class="material-icons-round">donut_small</i>
<i class="material-icons-sharp">donut_small</i>

图标的颜色也可以使用CSS来改变。

注意:双色主题图标目前有点小故障。


更新(2018年11月14日):与“_outline”后缀一起工作的16个大纲图标的列表。

下面是最新的16个与常规材质图标Webfont一起使用的大纲图标列表,使用_outline后缀(经过测试和确认)。

(可以在github的material-design-icons页面上找到。搜索:"_outline_24px.svg")

<i class="material-icons">help_outline</i>
<i class="material-icons">label_outline</i>
<i class="material-icons">mail_outline</i>
<i class="material-icons">info_outline</i>
<i class="material-icons">lock_outline</i>
<i class="material-icons">lightbulb_outline</i>
<i class="material-icons">play_circle_outline</i>
<i class="material-icons">error_outline</i>
<i class="material-icons">add_circle_outline</i>
<i class="material-icons">people_outline</i>
<i class="material-icons">person_outline</i>
<i class="material-icons">pause_circle_outline</i>
<i class="material-icons">chat_bubble_outline</i>
<i class="material-icons">remove_circle_outline</i>
<i class="material-icons">check_box_outline_blank</i>
<i class="material-icons">pie_chart_outlined</i>

注意,pie_chart需要是“pie_chart_outlines”而不是outline。


这是一个黑客测试使用内联标签的新图标主题。这不是官方的解决方案。

截至今天(2018年7月19日),自新的图标主题引入2个多月以来,没有办法使用内联标签<i class="material-icons"></i>来包含这些图标。

+马丁指出,Github上也有一个问题:https://github.com/google/material-design-icons/issues/773

所以,直到谷歌提出了一个解决方案,我已经开始使用黑客包括这些新的图标主题在我的开发环境下载适当的图标作为SVG或PNG。我想和大家分享一下。


重要提示:不要在生产环境中使用此选项,因为从谷歌中包含的每个CSS文件大小都超过1MB。


谷歌使用这些样式表来展示他们的演示页面上的图标:

大纲:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/outline.css">

圆:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/round.css">

深浅不一的:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/twotone.css">

夏普:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/sharp.css">

每个文件都包含各自主题的图标作为background-images (Base64 image-data)。下面是我们如何在下载到生产环境中使用之前,使用它来测试我们设计中特定图标的兼容性。


步骤1:

包括要使用的主题的样式表。 对于'outline '主题,使用'outline.css'的样式表

步骤2:

将以下类添加到您自己的样式表中:

.material-icons-new {
    display: inline-block;
    width: 24px;
    height: 24px;
    background-repeat: no-repeat;
    background-size: contain;
}

.icon-white {
    webkit-filter: contrast(4) invert(1);
    -moz-filter: contrast(4) invert(1);
    -o-filter: contrast(4) invert(1);
    -ms-filter: contrast(4) invert(1);
    filter: contrast(4) invert(1);
}

步骤3:

通过将以下类添加到<i>标记来使用该图标:

material-icons-new类 图标名称显示在材质图标演示页面上,前缀为主题名称,后面跟着一个连字符。

前缀:

概述:大纲-

圆形:轮-

深浅不一的:twotone -

夏普:锋利的-

Eg(表示“公告”图标):

提纲式通告,圆形通告,双音式通告,尖音式通告

3)使用可选的第三类图标-白色将颜色从黑色颠倒为白色(用于深色背景)


改变图标大小:

因为这是一个背景图像而不是一个字体图标,所以使用CSS的height和width属性来修改图标的大小。在material-icons-new类中,默认设置为24px。


例子:

情况一:对于account_circle图标的outline Theme:

包括样式表:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/outline.css">

在你的页面上添加图标标签:

<i class="material-icons-new outline-account_circle"></i>

可选(对于深色背景):

<i class="material-icons-new outline-account_circle icon-white"></i>

案例二:评估图标的犀利主题:

包括样式表:

<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/sharp.css">

在你的页面上添加图标标签:

<i class="material-icons-new sharp-assessment"></i>

(对于深色背景):

<i class="material-icons-new sharp-assessment icon-white"></i>

我再怎么强调也不为过,这不是在生产环境中包含图标的正确方式。但如果你必须在开发页面上浏览多个图标,那么添加图标就非常简单,可以节省大量时间。

当涉及到网站速度优化时,下载SVG或PNG格式的图标当然是更好的选择,但字体图标在原型设计阶段和检查特定图标是否与你的设计一致时,可以节省时间。


我将更新这篇文章,如果谷歌提出了一个解决这个问题的解决方案,不涉及下载图标使用。

对于Angular用户(在v14上测试):

如果你想改变图标的全局使用主题为例如:outline,你可以在你的AppModule或任何你需要的地方这样做:

export class AppModule {
  constructor(private readonly iconRegistry: MatIconRegistry) {
    const defaultFontSetClasses = iconRegistry.getDefaultFontSetClass();
    const outlinedFontSetClasses = defaultFontSetClasses
      .filter(fontSetClass => fontSetClass !== 'material-icons')
      .concat(['material-icons-outlined']);
    iconRegistry.setDefaultFontSetClass(...outlinedFontSetClasses);
  }
}

defaultFontSetClasses还包括mat-ligatu -font类名,如果你在<mat-icon>元素中使用[fontIcon]属性绑定,为了正确呈现图标,你需要保留这个名称。

另外,记得加载Material Icons outlines样式表:

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

为了https://material.angular.io/components/icon/api # MatIconRegistry

截至2019年2月27日,新的材质图标主题有CSS字体。

但是,您必须创建CSS类来使用字体。

字体系列如下:

材料图标轮廓-轮廓图标 材质图标双色-双色图标 圆形的图标 材质图标锐利-锐利的图标

请看下面的示例代码:

body { font-family: Roboto, sans-serif; } .material-icons-outlined, .material-icons.material-icons--outlined, .material-icons-two-tone, .material-icons.material-icons--two-tone, .material-icons-round, .material-icons.material-icons--round, .material-icons-sharp, .material-icons.material-icons--sharp { 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; -webkit-font-feature-settings: 'liga'; -webkit-font-smoothing: antialiased; } .material-icons-outlined, .material-icons.material-icons--outlined { font-family: 'Material Icons Outlined'; } .material-icons-two-tone, .material-icons.material-icons--two-tone { font-family: 'Material Icons Two Tone'; } .material-icons-round, .material-icons.material-icons--round { font-family: 'Material Icons Round'; } .material-icons-sharp, .material-icons.material-icons--sharp { font-family: 'Material Icons Sharp'; } <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500|Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"> </head> <body> <section id="original"> <h2>Baseline</h2> <i class="material-icons">home</i> <i class="material-icons">assignment</i> </section> <section id="outlined"> <h2>Outlined</h2> <i class="material-icons-outlined">home</i> <i class="material-icons material-icons--outlined">assignment</i> </section> <section id="two-tone"> <h2>Two tone</h2> <i class="material-icons-two-tone">home</i> <i class="material-icons material-icons--two-tone">assignment</i> </section> <section id="rounded"> <h2>Rounded</h2> <i class="material-icons-round">home</i> <i class="material-icons material-icons--round">assignment</i> </section> <section id="sharp"> <h2>Sharp</h2> <i class="material-icons-sharp">home</i> <i class="material-icons material-icons--sharp">assignment</i> </section> </body> </html>

或者在Codepen上查看


编辑:截至2019年3月10日,似乎现在有了新的字体图标类:

body { font-family: Roboto, sans-serif; } <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500|Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"> </head> <body> <section id="original"> <h2>Baseline</h2> <i class="material-icons">home</i> <i class="material-icons">assignment</i> </section> <section id="outlined"> <h2>Outlined</h2> <i class="material-icons-outlined">home</i> <i class="material-icons-outlined">assignment</i> </section> <section id="two-tone"> <h2>Two tone</h2> <i class="material-icons-two-tone">home</i> <i class="material-icons-two-tone">assignment</i> </section> <section id="rounded"> <h2>Rounded</h2> <i class="material-icons-round">home</i> <i class="material-icons-round">assignment</i> </section> <section id="sharp"> <h2>Sharp</h2> <i class="material-icons-sharp">home</i> <i class="material-icons-sharp">assignment</i> </section> </body> </html>

编辑#2:这是一个通过使用CSS图像过滤器来着色双色图标的变通方法(代码改编自此评论):

body { font-family: Roboto, sans-serif; } .material-icons-two-tone { filter: invert(0.5) sepia(1) saturate(10) hue-rotate(180deg); font-size: 48px; } .material-icons, .material-icons-outlined, .material-icons-round, .material-icons-sharp { color: #0099ff; font-size: 48px; } <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500|Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"> </head> <body> <section id="original"> <h2>Baseline</h2> <i class="material-icons">home</i> <i class="material-icons">assignment</i> </section> <section id="outlined"> <h2>Outlined</h2> <i class="material-icons-outlined">home</i> <i class="material-icons-outlined">assignment</i> </section> <section id="two-tone"> <h2>Two tone</h2> <i class="material-icons-two-tone">home</i> <i class="material-icons-two-tone">assignment</i> </section> <section id="rounded"> <h2>Rounded</h2> <i class="material-icons-round">home</i> <i class="material-icons-round">assignment</i> </section> <section id="sharp"> <h2>Sharp</h2> <i class="material-icons-sharp">home</i> <i class="material-icons-sharp">assignment</i> </section> </body> </html>

或者在Codepen上查看