【问题标题】:Override officeUI nav chevron icon覆盖 officeUI nav chevron 图标
【发布时间】:2018-09-07 14:35:03
【问题描述】:

在 office-ui 反应结构中,我如何超越 chevon 图标 https://developer.microsoft.com/en-us/fabric#/components/nav

在文档中有这个接口

INavStyles 

但我无法用我自己的图标覆盖它。我想用 FolderHorizo​​ntalOpenFolderHorizo​​ntal 图标替换现有的 chevron

import { AppContainer } from 'react-hot-loader';
import * as React from "react";
import * as ReactDOM from "react-dom";
import { Nav, INavProps } from 'office-ui-fabric-react/lib/Nav';

import { initializeIcons } from 'office-ui-fabric-react/lib/Icons';
initializeIcons(/* optional base url */);

....
....


public _getNavLink(): any[] {
return [
  {
    name: 'Home',
    url: '',
    links: [{
      name: 'Activity',
      url: '',
      key: 'key1'
    },
    {
      name: 'News',
      url: '',
      key: 'key2'
    }],
    isExpanded: true
  }
]}

public render() {
return (
  <div>
    <Nav
         getStyles={() => {
          return {
            chevronIcon: {
              color: 'transparent',
              transform: 'rotate(0)',
              selectors: {
                '&:before': {
                  color: 'rgb(51, 51, 51)',
                  fontFamily: "FabricMDL2Icons-7",
                  content: '"\\F12B"',
                },
                '.is-expanded > * > &:before': {
                  fontFamily: "FabricMDL2Icons-5",
                  content: '"\\ED25"',
                }
              }
            }
          }
        }}
      groups={
        [
          {
            links: this._getNavLink() 
          }
        ]
      }
      expandedStateText={ 'expanded' }
      collapsedStateText={ 'collapsed' }
      selectedKey={ 'key3' }
    />
  </div>
);

}

【问题讨论】:

标签: reactjs typescript office-ui-fabric


【解决方案1】:

您可以在 Nav 组件上设置 getStyles 属性以将 CSS 应用于 chevronIcon 插槽:

<Nav
    getStyles={ () => { return { 
        chevronIcon: { 
          color: 'transparent',
          transform: 'rotate(0)',
          selectors: {
            '&:before': { 
              color: 'rgb(51, 51, 51)', 
              fontFamily: "FabricMDL2Icons-7",
              content: '"\\F12B"',
            },
            '.is-expanded > * > &:before': { 
              fontFamily: "FabricMDL2Icons-5",
              content: '"\\ED25"',
            }
          }
        }
      }} }
      groups={...}
      expandedStateText={ 'expanded' }
      collapsedStateText={ 'collapsed' }
      selectedKey={ 'key3' }
    />

解决方案基本上是隐藏原始人字形,禁用旋转并在背景中显示所需的图标。

请注意,FolderHorizontalOpenFolderHorizontal 的图标是使用它们的 Unicode 表示设置的,可以在 Github 存储库中查找(例如 https://github.com/OfficeDev/office-ui-fabric-react/search?q=FolderHorizontal)。这两个图标位于不同的字体系列中,因此使用了 fontFamily 指令。

更新 [20180417]

确保使用initializeIcons(); 或自定义路径初始化字体。然后应该加载字体文件并出现在您的 DevTools 中:

请注意 - 与您的代码不同 - 我们使用的是

import { initializeIcons } from '@uifabric/icons';

导入initializeIcons

【讨论】:

  • 感谢您帮助我。但看起来 Unicode 没有被渲染。我在我的答案中添加了一张图片,请检查第一个 Node.js。我究竟做错了什么? :(
  • 您确定字体已加载吗?还要注意导入initializeIcons 的路径。我们相应地更新了我们的帖子以澄清问题。
  • 由于方法 getStyles 不再存在,是否有其他解决方案可以解决此功能?
猜你喜欢
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2010-12-30
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多