1.4.2 • Published 2 years ago

@alicloud/iconfont-helper v1.4.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

@alicloud/iconfont-helper

https://www.iconfont.cn 辅助,用于注入 iconfont 或 webfont 并返回对应的 font 名,是写组件的好帮手

使用 injectIconFont

定义 Icon 组件

你需要去 https://www.iconfont.cn/manage/index?manage_type=myprojects 新建或选择一个 iconfont 项目,它会有一个固定不变的 id 和跟当前内容有关的 hash,并且在它生成的 CSS 里有一份 Base64,都可以拿来,比如:

Code Example

注意以下代码比较紧凑,实际写的时候,应该拆到 types、enum、util 以减小主题文件的复杂度。

import React, {
  HTMLAttributes
} from 'react';
import styled from 'styled-components';

import {
  IconBase,
  injectIconFont
} from '@alicloud/iconfont-helper';

enum EIconType {
  alibaba = 'e68a' // 这里仅做演示,所以只写一个,注意不用写 e 前边的斜杠
}

type TIconType = keyof typeof EIconType;

interface IPropsIcon extends HTMLAttributes<HTMLSpanElement> {
  type: TIconType; // 这样可以约束传入的 type,在 TS 的帮助下不会传错
}

const PROJECT = '2373906';
const HASH = 'qpoep7hwn3';
// const BASE64 = 'data:application/x-font-woff2;charset=utf-8;base64,...';

const fontFamily = injectIconFont(PROJECT, HASH);

function getCode(props: IPropsIcon): string {
  const code = EIconType[props.type];
  
  return code ? `\\${code}` : '';
}

const ScIcon = styled(IconBase)<IPropsIcon>`
  font-family: ${fontFamily} !important;
  
  &:before {
    content: '${props => getCode(props)}';
  }
`;

export default function Icon(props: IPropsIcon): JSX.Element {
  return <ScIcon {...props} />;
}

// export 类型是好习惯
export type {
  TIconType as IconType,
  IPropsIcon as IconProps
};

使用 Icon 组件

import React from 'react';

import Icon from '...'; // 应用内部的或你把它发布成包

// 任何需要 Icon 的地方
// OK
<Icon type="alibaba" />
// TS 报错
<Icon type="ali88" />

使用 WebFont 字体

WebFont 可以让你的页面展现一些设计师希望的「美妙」字体(尤其是中文字体)。

众所周知,中文字体包不像西方字体那样,它是很大的,不可能为了视觉上的美观而让浏览器加载全量的中文字体包。

iconfont 网站提供了 webfont 的功能,你可以根据设计师给的文案去上边「定制」你要的字体。

假设,设计师要展示这样的文案:

WebFont Example

定义 WebFont 组件

你这么做:

Copy Id

import React from 'react';
import styled from 'styled-components';

import {
  injectWebFont
} from '@alicloud/iconfont-helper';

const fontFamily = injectWebFont('kygag0sd8g');

// 如果有其他的样式要求,也可以在这里加,或者在它的容器上加也行
const ScMengziKongzi = styled.span`
  font-family: ${fontFamily}, sans-serif;
`;

export default function MengziKongzi(): JSX.Element {
  return <ScMengziKongzi>孔子曰:中午不睡,下午崩溃!孟子曰:孔子说的对!</ScMengziKongzi>;
}

使用 WebFont 组件

import React from 'react';

import MengziKongzi from ':/rc/webfont/mengzi-kongzi'; // 一般在引用内部,没有意义发布成包

// 任何需要此组件的地方
<MengziKongzi />
1.4.2

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.3.2

2 years ago

1.2.1

2 years ago

1.3.0

2 years ago

1.2.0

3 years ago

1.1.59

3 years ago

1.1.60

3 years ago

1.1.56

3 years ago

1.1.55

3 years ago

1.1.53

3 years ago

1.1.58

3 years ago

1.1.57

3 years ago

1.1.37

3 years ago

1.1.36

3 years ago

1.1.35

3 years ago

1.1.33

3 years ago

1.1.32

3 years ago

1.1.30

3 years ago

1.1.29

3 years ago

1.1.27

3 years ago

1.1.26

3 years ago

1.1.25

3 years ago

1.1.23

3 years ago

1.1.22

3 years ago

1.1.21

3 years ago

1.1.20

3 years ago

1.1.19

4 years ago

1.1.16

4 years ago

1.1.18

4 years ago

1.1.13

4 years ago

1.1.12

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.0.1

4 years ago