如何使用新的材料设计图标主题:轮廓、圆形、双色和锐利?

281

Google通过4个新的预设主题:Outlined、Rounded、Two-Tone和Sharp,以及常规的Filled/Baseline主题,改进了Material Design Icons


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


我一直通过将链接包含在内,通过Google Web Fonts使用它

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

然后按照文档中建议的方式,使用所需的图标:

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

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


我尝试按照下列方式使用 轮廓 主题:

<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格式?


有人知道如何在Flutter中使用双调版本吗? - Vipin Verma
16个回答

397

更新(2019年3月31日):现在所有图标主题都可以通过Google Web字体使用。

正如Edric指出的那样,现在只需要在文档头中添加Google 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个轮廓图标列表。

这是最新的适用于常规Material-icons Webfont的16个轮廓图标列表,使用_outline后缀(已测试并确认可用)。

(在material-design-icons github页面上找到。搜索:“_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_outlined" 而不是 outline

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

截至今天(2018年7月19日),自从新的图标主题推出以来已经过去了不到2个月,没有办法 使用内联标签 <i class="material-icons"></i> 包含这些图标。

+Martin 指出在 Github 上提出了有关此问题的问题:https://github.com/google/material-design-icons/issues/773

因此,在 Google 提供解决方案之前,我开始使用 Hack 在我的开发环境中包含这些新的图标主题,然后再下载适当的 SVG 或 PNG 图标。 我想与你们分享。


重要提示:不要在生产环境中使用此方法,因为每个包含的来自 Google 的 CSS 文件大小都超过 1MB。


Google 使用这些样式表在其演示页面上展示图标:

轮廓:

<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">

Sharp:

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

每个文件都包含相应主题的图标,作为背景图片(Base64图像数据)。以下是我们如何利用它来测试特定图标在设计中的兼容性,然后再下载它以在生产环境中使用。


步骤1:

包含您想要使用的主题的样式表。例如:对于“Outlined”主题,请使用“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);
}

第三步:

将以下添加到<i>标签中使用图标:

  1. material-icons-new

  2. 图标名称,前缀为主题名称后跟连字符,在Material Icons演示页面上显示。

前缀:

Outlined: outline-

Rounded: round-

Two-Tone: twotone-

Sharp: sharp-

例如(对于“announcement”图标):

outline-announcement, round-announcement, twotone-announcement, sharp-announcement

3) 可选的第三个类别icon-white可用于反转颜色,使其从黑色变为白色(用于深色背景)


更改图标大小:

由于这是一个背景图片而不是字体图标,因此使用CSS的heightwidth属性修改图标的大小。默认设置为24px在material-icons-new类中。


例子:

情况I: 对于Outlined主题的account_circle图标:

  1. 包含样式表:
<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/outline.css">
  1. 在您的页面上添加图标标签:
<i class="material-icons-new outline-account_circle"></i>

可选(针对深色背景):

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

案例 II:针对评估图标的Sharp主题:

  1. 包括样式表:
<link rel="stylesheet" href="https://storage.googleapis.com/non-spec-apps/mio-icons/latest/sharp.css">
  1. 在你的页面上添加图标标签:
<i class="material-icons-new sharp-assessment"></i>

(对于深色背景):

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

我无法强调这不是在生产环境中包含图标的正确方法。但是,如果您必须在开发页面上浏览多个图标,则使用字体图标确实可以使图标包含变得非常容易,并节省大量时间。

将图标下载为SVG或PNG格式对于网站速度优化来说肯定是更好的选择,但是当涉及到原型设计阶段以及检查特定图标是否符合您的设计等方面时,字体图标可以节约时间。


如果谷歌提供了一个不需要下载图标进行使用的解决方案,我会更新此帖子。


1
@cucuru 谢谢,我认为你错过了步骤2。首先在您自己的样式表中添加类.material-icons-new及其属性,然后通过<i class="material-icons-new outline-screen_share"></i>调用图标。 - Ashil John
1
现在似乎有针对新的Material Icon主题的新CSS字体:https://codepen.io/Chan4077/pen/bZNyQG - Edric
太棒了!运行得像魔法一样。 - Soorya
谷歌材料图标是否智能渲染,还是渲染整个文件? - Mathijs
2
我认为这又是不同的问题,你最新的回答编辑是无关的。以warning为例,类material-icons-outlined不起作用。你需要添加一个新的导入,然后使用一个新的类然后启用类material-symbols-outlined,如下所示:warning - kydreth
显示剩余3条评论

55

对于Angular Material,您应该使用fontSet输入来更改字体系列:

<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" />

<mat-icon>edit</mat-icon>
<mat-icon fontSet="material-icons-outlined">edit</mat-icon>
<mat-icon fontSet="material-icons-two-tone">edit</mat-icon>
...

8
这是正确的答案,仅确认其适用于以后的 Angular v10 版本。 - faizanjehangir
2
顺便问一下,fontSet 的可能值是什么? - Junaid
@Junaid material-icons-outlined,material-icons-two-tone,material-icons-round,material-icons-sharp - Ron

37

截至2019年2月27日,新的Material Icon主题已提供CSS字体。

但是,您需要创建CSS类来使用这些字体。

字体系列如下:

  • Material Icons Outlined - 带轮廓的图标
  • Material Icons Two Tone - 双色图标
  • Material Icons Round - 圆角图标
  • Material Icons Sharp - 尖锐图标

请参考以下示例代码:

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 上查看。


3
目前看来,CSS属性中的 color 对新版材料设计图标主题的颜色没有影响。 - Edric
1
轮廓图标在IE上无法正常工作,有何想法? - Jismon Thomas
1
无论你在IE上运行这个页面,它都不会显示出来,你只能看到空白的区域。最终我在IE上使用了基线! - Jismon Thomas
似乎color属性在除了双色图标以外的所有图标上都被支持。(截至今天测试) - Edric

27

截至2020年12月5日,您需要

1. 包括CSS:

<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">

2. 将其使用方式如下:

<i class="material-icons">account_balance</i>
<i class="material-icons material-icons-outlined">account_balance</i>
<i class="material-icons material-icons-two-tone">account_balance</i>
<i class="material-icons material-icons-sharp">account_balance</i>
<i class="material-icons material-icons-round">account_balance</i>
注意:例如,要使用轮廓样式,您需要指定material-iconsmaterial-icons-outlined类。

1
对于Angular,请使用<mat-icon class="material-icons-two-tone">alarm</mat-icon>。将类替换为 material-icons, material-icons-outlined, material-icons-two-tone, material-icons-sharpmaterial-icons-round 中的任何一个。并将 alarm 替换为 https://material.io/resources/icons/?icon=assessment&style=baseline 中的任何图标名称。 - Quad Coders
使用 mat-icon 意味着您正在添加额外的模块,这会增加应用程序的大小(虽然它只会略微增加一些,但有时几 KB 也很重要)。 - Vano Maisuradze
@VanoMaisuradze,你能提供文档链接吗? - Mehulkumar
据我所知,这方面没有文档。 - Vano Maisuradze

15
如果您的网站项目中已经使用了material-icons,则只需要更新HTML文件中的引用和图标所使用的类即可:

HTML 引用:

更改前:

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

之后

<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 className="material-icons">weekend</i>

之后:

<i className="material-icons-outlined">weekend</i>

这对我有效... 纯生活!


12

对我有效的方法是在图标名称后面使用 _outline 而不是 _outlined

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

对比

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

啊哈,原来在Angular上是这样工作的;真不错。 - Ashil John
6
有一些图标是轮廓图,并且具有后缀"_outline"。这仅适用于那些轮廓图标。 - Sangmin Lee
@fxrxz 抱歉,这并不是我想要的答案。这可能适用于Angular,但对于我们其他人来说,如果我们通过Google Web Fonts使用它,目前还没有解决方案。 - Ashil John
1
我刚在 React.js 项目中使用了普通的 Material 网页字体。所以这与 Angular 没有任何关系。我认为这就是解决方法。 - Juuro
@Juuro。实际上,目前只支持16个图标。包括 info_outline。我已经更新了我的答案,并列出了“_outline”后缀适用的图标列表。 - Ashil John
显示剩余2条评论

8

现在,在所有浏览器中,Web字体链接都可以正常工作了!

只需通过管道符(|)将您的主题添加到字体链接中,就像这样:

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

接着像这样引用类:

// class="material-icons" or class="material-icons-outlined"

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

这个模式也适用于Angular Material:
<mat-icon>account_balance</mat-icon>
<mat-icon class="material-icons-outlined">account_balance</mat-icon>

我会一直保持这种简单的方法,直到属性解决方案出现。干得好@intergalactic - Sparker73
如果我通过应用程序的package.json中的“dependencies”获取图标而不是使用“<link>”该怎么办?我无法在URL中包含轮廓图标... - Jago
使用mat-icon时,这是正确的方法。 - SwissCoder

6

到目前为止,还没有任何答案解释如何下载该字体的各个变体,以便您可以从自己的网站(WWW服务器)上提供它们。

尽管从技术角度来看这可能似乎是一个小问题,但从法律角度来看,这是一个大问题,至少如果您打算向任何欧盟公民展示您的页面(即使是您不小心做到的)。甚至对于位于美国(或欧盟以外任何国家)的公司也是如此。

如果有人感兴趣为什么会这样,我将更新此答案并在此处提供更多详细信息,但目前我不想浪费太多篇幅离题。

话虽如此:

我已经下载了该字体的所有版本(常规、轮廓、圆角、锐利、双色),只需要两个非常简单的步骤即可完成(是@ Aj334的答案指引了我正确的方向)(例如:“outlined”变体):

  1. Get the CSS from the Google CDN by directly letting your browser fetch the CSS URL, i.e. copy the following URL into your browser's location bar:

    https://fonts.googleapis.com/css?family=Material+Icons+Outlined
    

    This will return a page which looks like this (at least in Firefox 70.0.1 at the time of writing this):

    /* fallback */
    @font-face {
      font-family: 'Material Icons Outlined';
      font-style: normal;
      font-weight: 400;
      src: url(https://fonts.gstatic.com/s/materialiconsoutlined/v14/gok-H7zzDkdnRel8-DQ6KAXJ69wP1tGnf4ZGhUce.woff2) format('woff2');
    }
    
    .material-icons-outlined {
      font-family: 'Material Icons Outlined';
      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;
    }
    
  2. Find the line starting with src: in the above code, and let your browser fetch the URL contained in that line, i.e. copy the following URL into your browser's location bar:

    https://fonts.gstatic.com/s/materialiconsoutlined/v14/gok-H7zzDkdnRel8-DQ6KAXJ69wP1tGnf4ZGhUce.woff2
    

    Now the browser will download that .woff2 file and offer to save it locally (at least, Firefox did).

最后两点:

当然,您可以使用相同的方法下载该字体的其他变体。在第一步中,只需将URL中的字符序列Outlined替换为字符序列Round(是的,确实如此,尽管此处在左侧导航菜单中称之为“圆角”),SharpTwo+Tone。每次结果页面看起来几乎都是相同的,但是源代码中的src:行的URL对于每个变体都是不同的。

最后,在第一步中,您甚至可以使用那个URL:

https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp

这将返回所有变体的CSS,其中包含五个src:行,每行都有另一个URL指定相应字体的位置。


5
新主题可能还不是Material Icons字体的一部分(尚不确定)。链接

那个项目已经两年没有发布新版本了,我不抱太大希望。 - Coderer

4

Aj334最近的编辑完美运作。

谷歌CDN

<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>

它在Angular中也可以工作, 即:<mat-icon class="material-icons-outlined">sell</mat-icon> - Hitesh Jangid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接