【问题标题】:Icon Fonts in Shadow DOMShadow DOM 中的图标字体
【发布时间】:2015-03-01 13:41:34
【问题描述】:

是否有推荐的方法让图标字体(例如 FontAwesome/Octicons)渗入 Shadow DOM?

目前,当我想在自定义元素的 Shadow DOM 中使用图标时,我必须在 Shadow DOM 中内联包含 ociticons.css 文件的部分内容:

#shadowroot
<style>
    .octicon, .mega-octicon {
      font: normal normal normal 16px/1 octicons;
      display: inline-block;
      text-decoration: none;
      text-rendering: auto;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }
    .mega-octicon { font-size: 32px; }
    .octicon-search:before { content: '\f02e'} /*  */
</style>
<button>
  <span class="mega-octicon octicon-search"></span>
</button>

(显然,@font-face 确实渗入了 Shadow DOM。)

【问题讨论】:

标签: font-face web-component shadow-dom icon-fonts octicons


【解决方案1】:

不,没有“推荐的方式”来使用图标字体,因为它们只是一堆 css 和 shadow DOM 旨在隐藏轻 css。所以你的要求与阴影的目的相矛盾。

常用的方法是构建显示字体相关图标的组件。每个自定义组件库实际上都有自己的组件来显示字体图标。只需谷歌font-awesome polymer 或类似。一个random example


旁注:@font-face不会渗入阴影。它是设置字体名称和要从中获取该字体的文件之间的关系的指令,对于那些浏览器尚不知道的字体。也就是说,您是否会尝试声明:

@font-face {
    font-family: my-octicons;
    src: url('octicons.otf');
}

然后像这样使用它:

font: normal normal normal 16px/1 my-octicons;

在阴影中,它不会被解决。在您的情况下解决它的原因是浏览器知道在哪里显示字体。一般来说,这与您声明的情况相同:

font: Helvetica;

之前没有任何@font-face

希望这会有所帮助。

【讨论】:

  • 这部分是错误的,\@font-face 显然会渗入影子 dom。您的示例是字体渗入阴影 dom。您必须在阴影外有 \@font-face 才能在阴影内使用 my-octacons 字体。
猜你喜欢
  • 2020-09-17
  • 2017-05-24
  • 2019-08-18
  • 2014-09-17
  • 2020-03-16
  • 2020-08-18
  • 2020-05-09
相关资源
最近更新 更多