Typography

Basic text writing, including headings, body text, lists, and more.

When To Use#

  • When need to display a title or paragraph contents in Articles/Blogs/Notes.

  • When you need copyable/editable/ellipsis texts.

Examples

Introduction

In the process of internal desktop applications development, many different design specs and implementations would be involved, which might cause designers and developers difficulties and duplication and reduce the efficiency of development.
After massive project practice and summaries, Ant Design, a design language for background applications, is refined by Ant UED Team, which aims to uniform the user interface specs for internal background projects, lower the unnecessary cost of design differences and implementation and liberate the resources of design and front-end development.

Guidelines and Resources

We supply a series of design principles, practical patterns and high quality design resources (Sketch and Axure), to help people create their product prototypes beautifully and efficiently.
Press Esc to exit...

介绍

蚂蚁的企业级产品是一个庞大且复杂的体系。这类产品不仅量级巨大且功能复杂,而且变动和并发频繁,常常需要设计与开发能够快速的做出响应。同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内容。
随着商业化的趋势,越来越多的企业级产品对更好的用户体验有了进一步的要求。带着这样的一个终极目标,我们(蚂蚁金服体验技术部)经过大量的项目实践和总结,逐步打磨出一个服务于企业级产品的设计体系 Infra Design。基于『确定』和『自然』的设计价值观,通过模块化的解决方案,降低冗余的生产成本,让设计者专注于更好的用户体验

设计资源

我们提供完善的设计原则、最佳实践和设计资源文件(SketchAxure),来帮助业务快速设计出高质量的产品原型。
AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、不限可能的数据可视化最佳实践。得益于丰富的业务场景和用户需求挑战,AntV 经历多年积累与不断打磨,已支撑整个阿里集团内外 20000+ 业务系统,通过了日均千万级 UV 产品的严苛考验。 我们正在基础图表,图分析,图编辑,地理空间可视化,智能可视化等各个可视化的领域耕耘,欢迎同路人一起前行。
AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、不限可能的数据可视化最佳实践。得益于丰富的业务场景和用户需求挑战,AntV 经历多年积累与不断打磨,已支撑整个阿里集团内外 20000+ 业务系统,通过了日均千万级 UV 产品的严苛考验。
我们正在基础图表,图分析,图编辑,地理空间可视化,智能可视化等各个可视化的领域耕耘,欢迎同路人一起前行。
Esc键退出阅读……

Display the document sample.

expand codeexpand code
import { Divider, Typography } from 'infrad';
import React from 'react';

const { Title, Paragraph, Text, Link } = Typography;

const blockContent = `AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、不限可能的数据可视化最佳实践。得益于丰富的业务场景和用户需求挑战,AntV 经历多年积累与不断打磨,已支撑整个阿里集团内外 20000+ 业务系统,通过了日均千万级 UV 产品的严苛考验。
我们正在基础图表,图分析,图编辑,地理空间可视化,智能可视化等各个可视化的领域耕耘,欢迎同路人一起前行。`;

const App: React.FC = () => (
  <Typography>
    <Title>Introduction</Title>
    <Paragraph>
      In the process of internal desktop applications development, many different design specs and
      implementations would be involved, which might cause designers and developers difficulties and
      duplication and reduce the efficiency of development.
    </Paragraph>
    <Paragraph>
      After massive project practice and summaries, Ant Design, a design language for background
      applications, is refined by Ant UED Team, which aims to{' '}
      <Text strong>
        uniform the user interface specs for internal background projects, lower the unnecessary
        cost of design differences and implementation and liberate the resources of design and
        front-end development
      </Text>
      .
    </Paragraph>
    <Title level={2}>Guidelines and Resources</Title>
    <Paragraph>
      We supply a series of design principles, practical patterns and high quality design resources
      (<Text code>Sketch</Text> and <Text code>Axure</Text>), to help people create their product
      prototypes beautifully and efficiently.
    </Paragraph>

    <Paragraph>
      <ul>
        <li>
          <Link href="/docs/spec/proximity">Principles</Link>
        </li>
        <li>
          <Link href="/docs/spec/overview">Patterns</Link>
        </li>
        <li>
          <Link href="/docs/resources">Resource Download</Link>
        </li>
      </ul>
    </Paragraph>

    <Paragraph>
      Press <Text keyboard>Esc</Text> to exit...
    </Paragraph>

    <Divider />

    <Title>介绍</Title>
    <Paragraph>
      蚂蚁的企业级产品是一个庞大且复杂的体系。这类产品不仅量级巨大且功能复杂,而且变动和并发频繁,常常需要设计与开发能够快速的做出响应。同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内容。
    </Paragraph>
    <Paragraph>
      随着商业化的趋势,越来越多的企业级产品对更好的用户体验有了进一步的要求。带着这样的一个终极目标,我们(蚂蚁金服体验技术部)经过大量的项目实践和总结,逐步打磨出一个服务于企业级产品的设计体系
      Infra Design。基于<Text mark>『确定』和『自然』</Text>
      的设计价值观,通过模块化的解决方案,降低冗余的生产成本,让设计者专注于
      <Text strong>更好的用户体验</Text></Paragraph>
    <Title level={2}>设计资源</Title>
    <Paragraph>
      我们提供完善的设计原则、最佳实践和设计资源文件(<Text code>Sketch</Text><Text code>Axure</Text>),来帮助业务快速设计出高质量的产品原型。
    </Paragraph>

    <Paragraph>
      <ul>
        <li>
          <Link href="/docs/spec/proximity-cn">设计原则</Link>
        </li>
        <li>
          <Link href="/docs/spec/overview-cn">设计模式</Link>
        </li>
        <li>
          <Link href="/docs/resources-cn">设计资源</Link>
        </li>
      </ul>
    </Paragraph>

    <Paragraph>
      <blockquote>{blockContent}</blockquote>
      <pre>{blockContent}</pre>
    </Paragraph>

    <Paragraph><Text keyboard>Esc</Text>键退出阅读……
    </Paragraph>
  </Typography>
);

export default App;

h1. Infra Design

h2. Infra Design

h3. Infra Design

h4. Infra Design

h5. Infra Design

Display title in different level.

expand codeexpand code
import { Typography } from 'infrad';
import React from 'react';

const { Title } = Typography;

const App: React.FC = () => (
  <>
    <Title>h1. Infra Design</Title>
    <Title level={2}>h2. Infra Design</Title>
    <Title level={3}>h3. Infra Design</Title>
    <Title level={4}>h4. Infra Design</Title>
    <Title level={5}>h5. Infra Design</Title>
  </>
);

export default App;
Infra Design (default)
Infra Design (secondary)
Infra Design (success)
Infra Design (warning)
Infra Design (danger)
Infra Design (disabled)
Infra Design (mark)
Infra Design (code)
Infra Design (keyboard)
Infra Design (underline)
Infra Design (delete)
Infra Design (strong)
Infra Design (italic)

Provides multiple types of text and link.

expand codeexpand code
import { Space, Typography } from 'infrad';
import React from 'react';

const { Text, Link } = Typography;

const App: React.FC = () => (
  <Space direction="vertical">
    <Text>Infra Design (default)</Text>
    <Text type="secondary">Infra Design (secondary)</Text>
    <Text type="success">Infra Design (success)</Text>
    <Text type="warning">Infra Design (warning)</Text>
    <Text type="danger">Infra Design (danger)</Text>
    <Text disabled>Infra Design (disabled)</Text>
    <Text mark>Infra Design (mark)</Text>
    <Text code>Infra Design (code)</Text>
    <Text keyboard>Infra Design (keyboard)</Text>
    <Text underline>Infra Design (underline)</Text>
    <Text delete>Infra Design (delete)</Text>
    <Text strong>Infra Design (strong)</Text>
    <Text italic>Infra Design (italic)</Text>
    <Link href="https://ant.design" target="_blank">
      Infra Design (Link)
    </Link>
  </Space>
);

export default App;
This is an editable text.
Custom Edit icon and replace tooltip text.
Trigger edit with:
Text or icon as trigger - click to start editing.
Editable text with a custom enter icon in edit field.
Editable text with no enter icon in edit field.
Hide Edit tooltip.
This is an editable text with limited length.

h1. Ant Design

h2. Ant Design

h3. Ant Design

h4. Ant Design

h5. Ant Design
This is a copyable text.
Replace copy text.
Custom Copy icon and replace tooltips text.
Hide Copy tooltips.

Provide additional interactive capacity of editable and copyable.

expand codeexpand code
import { CheckOutlined, HighlightOutlined, SmileFilled, SmileOutlined } from 'infra-design-icons';
import { Divider, Radio, Typography } from 'infrad';
import React, { useState } from 'react';

const { Paragraph } = Typography;

const App: React.FC = () => {
  const [editableStr, setEditableStr] = useState('This is an editable text.');
  const [customIconStr, setCustomIconStr] = useState('Custom Edit icon and replace tooltip text.');
  const [clickTriggerStr, setClickTriggerStr] = useState(
    'Text or icon as trigger - click to start editing.',
  );
  const [chooseTrigger, setChooseTrigger] = useState<('icon' | 'text')[]>(['icon']);
  const [customEnterIconStr, setCustomEnterIconStr] = useState(
    'Editable text with a custom enter icon in edit field.',
  );
  const [noEnterIconStr, setNoEnterIconStr] = useState(
    'Editable text with no enter icon in edit field.',
  );
  const [hideTooltipStr, setHideTooltipStr] = useState('Hide Edit tooltip.');
  const [lengthLimitedStr, setLengthLimitedStr] = useState(
    'This is an editable text with limited length.',
  );

  const radioToState = (input: string): ('icon' | 'text')[] => {
    switch (input) {
      case 'text':
        return ['text'];
      case 'both':
        return ['icon', 'text'];
      case 'icon':
      default:
        return ['icon'];
    }
  };

  const stateToRadio = () => {
    if (chooseTrigger.indexOf('text') !== -1) {
      return chooseTrigger.indexOf('icon') !== -1 ? 'both' : 'text';
    }
    return 'icon';
  };

  return (
    <>
      <Paragraph editable={{ onChange: setEditableStr }}>{editableStr}</Paragraph>
      <Paragraph
        editable={{
          icon: <HighlightOutlined />,
          tooltip: 'click to edit text',
          onChange: setCustomIconStr,
        }}
      >
        {customIconStr}
      </Paragraph>
      Trigger edit with:{' '}
      <Radio.Group
        onChange={e => setChooseTrigger(radioToState(e.target.value))}
        value={stateToRadio()}
      >
        <Radio value="icon">icon</Radio>
        <Radio value="text">text</Radio>
        <Radio value="both">both</Radio>
      </Radio.Group>
      <Paragraph
        editable={{
          tooltip: 'click to edit text',
          onChange: setClickTriggerStr,
          triggerType: chooseTrigger,
        }}
      >
        {clickTriggerStr}
      </Paragraph>
      <Paragraph
        editable={{
          icon: <HighlightOutlined />,
          tooltip: 'click to edit text',
          onChange: setCustomEnterIconStr,
          enterIcon: <CheckOutlined />,
        }}
      >
        {customEnterIconStr}
      </Paragraph>
      <Paragraph
        editable={{
          icon: <HighlightOutlined />,
          tooltip: 'click to edit text',
          onChange: setNoEnterIconStr,
          enterIcon: null,
        }}
      >
        {noEnterIconStr}
      </Paragraph>
      <Paragraph editable={{ tooltip: false, onChange: setHideTooltipStr }}>
        {hideTooltipStr}
      </Paragraph>
      <Paragraph
        editable={{
          onChange: setLengthLimitedStr,
          maxLength: 50,
          autoSize: { maxRows: 5, minRows: 3 },
        }}
      >
        {lengthLimitedStr}
      </Paragraph>
      <Typography.Title editable level={1} style={{ margin: 0 }}>
        h1. Ant Design
      </Typography.Title>
      <Typography.Title editable level={2} style={{ margin: 0 }}>
        h2. Ant Design
      </Typography.Title>
      <Typography.Title editable level={3} style={{ margin: 0 }}>
        h3. Ant Design
      </Typography.Title>
      <Typography.Title editable level={4} style={{ margin: 0 }}>
        h4. Ant Design
      </Typography.Title>
      <Typography.Title editable level={5} style={{ margin: 0 }}>
        h5. Ant Design
      </Typography.Title>
      <Divider />
      <Paragraph copyable>This is a copyable text.</Paragraph>
      <Paragraph copyable={{ text: 'Hello, Infra Design!' }}>Replace copy text.</Paragraph>
      <Paragraph
        copyable={{
          icon: [<SmileOutlined key="copy-icon" />, <SmileFilled key="copied-icon" />],
          tooltips: ['click here', 'you clicked!!'],
        }}
      >
        Custom Copy icon and replace tooltips text.
      </Paragraph>
      <Paragraph copyable={{ tooltips: false }}>Hide Copy tooltips.</Paragraph>
    </>
  );
};

export default App;
Infra Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team.
Infra Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team. Ant Design, a design language for background applications, is refined by Ant UED Team.
Infra Design, a design language for background applications, is refined by Ant UED Team.

Multiple line ellipsis support. You can use tooltip to config ellipsis tooltip. Recommend expandable when have lots of content.

expand codeexpand code
import { Switch, Typography } from 'infrad';
import React, { useState } from 'react';

const { Paragraph, Text } = Typography;

const App: React.FC = () => {
  const [ellipsis, setEllipsis] = useState(true);

  return (
    <>
      <Switch
        checked={ellipsis}
        onChange={() => {
          setEllipsis(!ellipsis);
        }}
      />

      <Paragraph ellipsis={ellipsis}>
        Infra Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team.
      </Paragraph>

      <Paragraph ellipsis={ellipsis ? { rows: 2, expandable: true, symbol: 'more' } : false}>
        Infra Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team. Ant
        Design, a design language for background applications, is refined by Ant UED Team.
      </Paragraph>

      <Text
        style={ellipsis ? { width: 100 } : undefined}
        ellipsis={ellipsis ? { tooltip: 'I am ellipsis now!' } : false}
      >
        Infra Design, a design language for background applications, is refined by Ant UED Team.
      </Text>
    </>
  );
};

export default App;
In the process of internal desktop applications development, many different design specs and implementations would be involved, which might cause designers and developers difficulties and duplication and reduce the efficiency ofdevelopment.

You can ellipsis content from middle by customize ellipsis={{ suffix: ... }}.

expand codeexpand code
import { Typography } from 'infrad';
import React from 'react';

const { Text } = Typography;

const EllipsisMiddle: React.FC<{ suffixCount: number; children: string }> = ({
  suffixCount,
  children,
}) => {
  const start = children.slice(0, children.length - suffixCount).trim();
  const suffix = children.slice(-suffixCount).trim();
  return (
    <Text style={{ maxWidth: '100%' }} ellipsis={{ suffix }}>
      {start}
    </Text>
  );
};

const App: React.FC = () => (
  <EllipsisMiddle suffixCount={12}>
    In the process of internal desktop applications development, many different design specs and
    implementations would be involved, which might cause designers and developers difficulties and
    duplication and reduce the efficiency of development.
  </EllipsisMiddle>
);

export default App;
To be, or not to be, that is a question: Whether it is nobler in the mind to suffer. The slings and arrows of outrageous fortune Or to take arms against a sea of troubles, And by opposing end them? To die: to sleep; No more; and by a sleep to say we end The heart-ache and the thousand natural shocks That flesh is heir to, 'tis a consummation Devoutly to be wish'd. To die, to sleep To sleep- perchance to dream: ay, there's the rub! For in that sleep of death what dreams may come When we have shuffled off this mortal coil, Must give us pause. There 's the respect That makes calamity of so long life--William Shakespeare

add suffix ellipsis support.

expand codeexpand code
import { Slider, Typography } from 'infrad';
import React, { useState } from 'react';

const { Paragraph } = Typography;

const App: React.FC = () => {
  const [rows, setRows] = useState(1);

  const article =
    "To be, or not to be, that is a question: Whether it is nobler in the mind to suffer. The slings and arrows of outrageous fortune Or to take arms against a sea of troubles, And by opposing end them? To die: to sleep; No more; and by a sleep to say we end The heart-ache and the thousand natural shocks That flesh is heir to, 'tis a consummation Devoutly to be wish'd. To die, to sleep To sleep- perchance to dream: ay, there's the rub! For in that sleep of death what dreams may come When we have shuffled off this mortal coil, Must give us pause. There 's the respect That makes calamity of so long life";

  return (
    <>
      <Slider value={rows} min={1} max={10} onChange={setRows} />
      <Paragraph
        ellipsis={{
          rows,
          expandable: true,
          suffix: '--William Shakespeare',
          onEllipsis: ellipsis => {
            console.log('Ellipsis changed:', ellipsis);
          },
        }}
        title={`${article}--William Shakespeare`}
      >
        {article}
      </Paragraph>
    </>
  );
};

export default App;

API#

Typography.Text#

PropertyDescriptionTypeDefaultVersion
codeCode stylebooleanfalse
copyableWhether to be copyable, customize it via setting an objectboolean | copyablefalsecopyable
deleteDeleted line stylebooleanfalse
disabledDisabled contentbooleanfalse
editableIf editable. Can control edit state when is objectboolean | editablefalseeditable
ellipsisDisplay ellipsis when text overflows,can't configure expandable、rows and onExpand by using objectboolean | Omit<ellipsis, 'expandable' | 'rows' | 'onExpand'>falseellipsis
keyboardKeyboard stylebooleanfalse4.3.0
markMarked stylebooleanfalse
onClickSet the handler to handle click event(event) => void-
strongBold stylebooleanfalse
italicItalic stylebooleanfalse4.16.0
typeContent typesecondary | success | warning | danger-success: 4.6.0
underlineUnderlined stylebooleanfalse

Typography.Title#

PropertyDescriptionTypeDefaultVersion
codeCode stylebooleanfalse
copyableWhether to be copyable, customize it via setting an objectboolean | copyablefalsecopyable
deleteDeleted line stylebooleanfalse
disabledDisabled contentbooleanfalse
editableIf editable. Can control edit state when is objectboolean | editablefalseeditable
ellipsisDisplay ellipsis when text overflows, can configure rows and expandable by using objectboolean | ellipsisfalseellipsis
levelSet content importance. Match with h1, h2, h3, h4, h5number: 1, 2, 3, 4, 515: 4.6.0
markMarked stylebooleanfalse
onClickSet the handler to handle click event(event) => void-
italicItalic stylebooleanfalse4.16.0
typeContent typesecondary | success | warning | danger-success: 4.6.0
underlineUnderlined stylebooleanfalse

Typography.Paragraph#

PropertyDescriptionTypeDefaultVersion
codeCode stylebooleanfalse
copyableWhether to be copyable, customize it via setting an objectboolean | copyablefalsecopyable
deleteDeleted line stylebooleanfalse
disabledDisabled contentbooleanfalse
editableIf editable. Can control edit state when is objectboolean | editablefalseeditable
ellipsisDisplay ellipsis when text overflows, can configure rows and expandable by using objectboolean | ellipsisfalseellipsis
markMarked stylebooleanfalse
onClickSet the handler to handle click event(event) => void-
strongBold stylebooleanfalse
italicItalic stylebooleanfalse4.16.0
typeContent typesecondary | success | warning | danger-success: 4.6.0
underlineUnderlined stylebooleanfalse

copyable#

{
  text: string,
  onCopy: function(event),
  icon: ReactNode,
  tooltips: false | [ReactNode, ReactNode],
  format: 'text/plain' | 'text/html',
}
PropertyDescriptionTypeDefaultVersion
formatThe Mime Type of the text'text/plain' | 'text/html'-4.21.0
iconCustom copy icon: [copyIcon, copiedIcon][ReactNode, ReactNode]-4.6.0
textThe text to copystring-
tooltipsCustom tooltip text, hide when it is false[ReactNode, ReactNode][Copy, Copied]4.4.0
onCopyCalled when copied textfunction-

editable#

{
  icon: ReactNode,
  tooltip: boolean | ReactNode,
  editing: boolean,
  maxLength: number,
  autoSize: boolean | { minRows: number, maxRows: number },
  onStart: function,
  onChange: function(string),
  onCancel: function,
  onEnd: function,
  triggerType: ('icon' | 'text')[],
  enterIcon: ReactNode,
}
PropertyDescriptionTypeDefaultVersion
autoSizeautoSize attribute of textareaboolean | { minRows: number, maxRows: number }-4.4.0
editingWhether to be editablebooleanfalse
iconCustom editable iconReactNode<EditOutlined />4.6.0
maxLengthmaxLength attribute of textareanumber-4.4.0
tooltipCustom tooltip text, hide when it is falseboolean | ReactNodeEdit4.6.0
onStartCalled when enter editable statefunction-
onChangeCalled when input at textareafunction(value: string)-
onCancelCalled when type ESC to exit editable statefunction-
onEndCalled when type ENTER to exit editable statefunction-4.14.0
triggerTypeEdit mode trigger - icon, text or both (not specifying icon as trigger hides it)Array<icon|text>[icon]
enterIconCustom "enter" icon in the edit field (passing null removes the icon)ReactNode<EnterOutlined />4.17.0

ellipsis#

{
  rows: number,
  expandable: boolean,
  suffix: string,
  symbol: ReactNode,
  tooltip: boolean | ReactNode,
  onExpand: function(event),
  onEllipsis: function(ellipsis),
}
PropertyDescriptionTypeDefaultVersion
expandableWhether to be expandableboolean-
rowsMax rows of contentnumber-
suffixSuffix of ellipsis contentstring-
symbolCustom description of ellipsisReactNodeExpand
tooltipShow tooltip when ellipsisboolean | ReactNode-4.11.0
onEllipsisCalled when enter or leave ellipsis statefunction(ellipsis)-4.2.0
onExpandCalled when expand contentfunction(event)-

FAQ#

react-router support customize render component:

<Link to="/" component={Typography.Link} />

Note: This is not equivalent to the execution logic of react-router's Link reference