---
localeCode: en-US
order: 21
category: Basic
title: Typography
subTitle: Typography
icon: doc-typography
brief: The basic format of text, images, paragraphs, and numeric.
---
## When to Use
- To display the text content of articles, blogs, logs, etc.
- To take basic operations such as copying and omitting text.
## Demos
### How to import
```jsx import
import { Typography } from '@douyinfe/semi-ui';
```
### Title
Use `heading` to set different levels of headint title.
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Title } = Typography;
return (
`.
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
import { IconLink } from '@douyinfe/semi-icons';
function Demo() {
const { Text } = Typography;
return (
Link
Open Website
} underline>Link
);
}
```
### Paragraph
Paragraph component has two spacings. You could set`spacing='extended'` for a looser spacing.
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Paragraph, Title } = Typography;
return (
Default Spacing
{`Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
Extended Spacing
{`Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
);
}
```
### Numeral
Based on Text component, added properties: `rule`, `precision`, `truncate`, `parser`, to provide the ability to handle Numeral in text separately.
The Numeral component recursively traverses Children to detect all numeric text within it for conversion and display, taking care to control the rendering structure hierarchy.
For Numeral components with a rule of percentage, the data processing rules have changed. In v2.22.0-v2.29.0, for num whose absolute value is greater than or equal to 1, the result is num%; for num whose absolute value is less than or equal to 1, the result is (num*100)%. After the v2.30.0 version, it is unified to (num*100)%.
`precision` allows you to set the number of decimal places to be retained, used to set precision
`truncate` The truncation of the number of decimal places, optionally `ceil`, `floor`, `round`, aligned with Math.ceil, Math.floor, Math.round
`rule` for setting the parsing rules
- set to `percentages` to automatically convert numbers to percentages
- set to `bytes-decimal` to automatically convert numbers to bytes, 1 KB is defined as 1000 bytes, (B, KB, MB, GB, TB, PB, EB, ZB, YB)
- Set to `bytes-binary` automatically converts the number to the unit of display corresponding to bytes, 1 KiB is defined as equal to 1024 bytes, (B, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB)
- When set to `text`, Automatic rounding of numbers only, based on the `precision` and `truncate` attributes
- When set to `numbers`, non-numeric characters will be filtered and only numbers will be displayed
- When set to `exponential`, numbers are automatically converted to scientific notation
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Numeral } = Typography;
return (
Liked:1.6111e1 K
Views:
2.4444e2
K
Favorable rating: 0.915
My odds of winning this game are 0.6 and my odds of losing are 0.4.
Used: 1000
Available: {1024*1000}
Used: 1024
Available: {2e12}
);
}
```
Parsing rules can be customised via `parser`.
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Numeral } = Typography;
function parserTCH(oldVal) {
return oldVal.split(' ').map(item =>
Number(item) ? `${item.replace(/(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1,')}+` : item
).join(' ');
}
function Infos() {
const data = [
{ type: 'Stars', min: '7100' },
{ type: 'Fork', min: '560' },
{ type: 'Downloads', min: '5000000' },
{ type: 'Contributors', min: '100' }
];
return data.map(item =>
{item.type}:
{item.min}
);
}
return (
Semi Design value our users, any kind of contribution is welcome
{Infos}
Trusted by {1e5} users, Go to website >>
);
}
```
### Size
Paragraph and Text component support two sizes, `small`(12px) and `normal`(14px). By default it is set to `normal`。
When the paragraph component or text component are used nested, set the `size` property of the inner component to `inherit`, and the size of the inner component will inherit the size setting of the outer component.
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Paragraph, Text } = Typography;
return (
Normal
{`Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
Small
{`Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
This is a Text, size is small
This is a Text,size is inherit, inherit parent's size
);
}
```
### Copyable text
Copying of text can be supported by configuring the `copyable` property.
When copyable is configured as true, the default copied content is children itself. Note that at this time, children only support string type.
When copyable is configured as object, you can specify the content copied to the clipboard through `copyable.content`, which is no longer strongly associated with children.
At this time, children will no longer limit the type, but `copyable.content` still needs to be a string.
```jsx live=true
import React from 'react';
import { Typography, TextArea } from '@douyinfe/semi-ui';
import { IconSetting } from '@douyinfe/semi-icons';
function Demo() {
const { Paragraph, Text, Numeral } = Typography;
return (
Click the right icon to copy text.
Click to copy text.
Toast.success({ content: 'Successfully copied.' }) }}>Click the right icon to copy.
Timestamp:
{new Date().getTime()/1000}s
}}>Custom Copy Node
Paste here:
);
}
```
### Ellipsis
Show ellipsis if text is overflowed. Refer to [Ellipsis Config](#Ellipsis-Config) for detailed configuration.
1. ellipsis only supports truncation of plain text, and does not support complex types such as reactNode. Please ensure that the content type of children is string
2. To achieve abbreviation, ellipsis needs to have a clear width or maxWidth limit for comparison and judgment. If the width is not set by itself (for example, purely relying on the flex property to expand), or the width is an indefinite value such as 100%, the parent needs to have a clear width or maxWidth
3. Ellipsis needs to obtain information such as the width and height of the DOM to make basic judgments. If there is a display:none style in itself or the parent, the value will be incorrect, and the abbreviation will be invalid at this time
4. For more information on ellipsis see FAQ
```jsx live=true
import React from 'react';
import { Typography, Tooltip } from '@douyinfe/semi-ui';
function Demo() {
const { Paragraph, Text, Title } = Typography;
const customRenderTooltip = useCallback((content, children) => {
return {children};
}, []);
return (
This is a supercalifragilisticexpialidocious title
Custom tooltip text if you need
This is a supercalifragilisticexpialidocious link
{`With suffix: Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
{`Multi-line ellipsis: Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
{`With Popover: Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
console.log(bool, e) }} style={{ width: 300 }}>
{`Expandable and collapsible: Life's but a walking shadow, a poor player, that struts and frets his hour upon the stage, and then is heard no more; it is a tale told by an idiot, full of sound and fury, signifying nothing.`}
Custom tooltip with a blue background color
);
}
```
When the tooltip does not wrap in the pop-up tooltip when the long text occurs, please set it manually through
word-break or
word-wrap, more details can be found in the FAQ section of Tooltip
```jsx live=true
import React from 'react';
import { Typography } from '@douyinfe/semi-ui';
function Demo() {
const { Text } = Typography;
return (
Customized configuration can be made on demand when long text is truncated
Customized configuration can be made on demand when long text is truncated
Customized configuration can be made on demand when long text is truncated
);
}
```
```scss
// config word-break
.components-typography-demo {
word-break: break-word;
// or
word-break: break-all;
}
```
## API Reference
### Typography.Text
| Properties | Instructions | type | Default | version |
| ---------- |------------------------------------------------------------------------------------------------------------------------------------------| ----------------------------------------------------- | --------- | ------- |
| copyable | Toggle whether to be copyable | boolean \| object:[Copyable Config](#Copyable-Config) | false | 0.27.0 |
| code | wrap with `code` element | boolean | - | |
| component | Custom rendering html element | html element | span | |
| delete | Deleted style | boolean | false | 0.27.0 |
| disabled | Disabled style | boolean | false | 0.27.0 |
| ellipsis | Display ellipsis when text overflows | boolean\|object:Ellipsis Config | false | 0.34.0 |
| icon | Prefix icon. | ReactNode | - | 0.27.0 |
| link | Toggle whether to display as a link. When passing object, the attributes will be transparently passed to the a tag | boolean\|object | false | 0.27.0 |
| mark | Marked style | boolean | false | 0.27.0 |
| size | Size, one of `normal`, `small`, `inherit` | string | `normal` | 0.27.0 |
| strong | Bold style | boolean | false | 0.27.0 |
| type | Type, one of `primary`, `secondary`, `warning`, `danger`, `tertiary`(**v>=1.2.0**) , `quaternary`(**v>=1.2.0**), `success`(**v>=1.7.0**) | string | `primary` | 0.27.0 |
| underline | Underlined style | boolean | false | 0.27.0 |
| weight | set font weight | number | | 2.34.0 |
### Typography.Title
| Properties | Instructions | type | Default | version |
| ---------- |-----------------------------------------------------------------------------------------------------------------------------------------| ----------------------------------------------------- | --------- | ------- |
| copyable | Toggle whether to be copyable | boolean \| object:[Copyable Config](#Copyable-Config) | false | 0.27.0 |
| component | Custom rendering html element. The default is determined by heading prop | html element | h1~h6 | |
| delete | Deleted style | boolean | false | 0.27.0 |
| disabled | Disabled style | boolean | false | 0.27.0 |
| ellipsis | Display ellipsis when text overflows | boolean\|object:Ellipsis Config | false | 0.34.0 |
| heading | Heading level, one of 1, 2, 3,4,5,6 | number | 1 | 0.27.0 |
| link | Toggle whether to display as a link. When passing object, the attributes will be transparently passed to the a tag | boolean\|object | false | 0.27.0 |
| mark | Marked style | boolean | false | 0.27.0 |
| type | Type, one of `primary`, `secondary`, `warning`, `danger`, `tertiary`(**v>=1.2.0**), `quaternary`(**v>=1.2.0**), `success`(**v>=1.7.0**) | string | `primary` | 0.27.0 |
| underline | Underlined style | boolean | false | 0.27.0 |
| weight | set font weight, one of `light`, `regular`, `medium`, `semibold`, `bold`, `default` | string, number | | 2.34.0 |
### Typography.Paragraph
| Properties | Instructions | type | Default | version |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | --------- | ------- |
| copyable | Toggle whether to be copyable | boolean \| object:[Copyable Config](#Copyable-Config) | false | 0.27.0 |
| component | Custom rendering html element | html element | p | |
| delete | Deleted style | boolean | false | 0.27.0 |
| disabled | Disabled style | boolean | false | 0.27.0 |
| ellipsis | Display ellipsis when text overflows | boolean\|object:Ellipsis Config | false | 0.34.0 |
| link | Toggle whether to display as a link. When passing object, the attributes will be transparently passed to the a tag | boolean\|object | false | 0.27.0 |
| mark | Marked style | boolean | false | 0.27.0 |
| size | Size, one of `normal`,`small` | string | `normal` | 0.27.0 |
| spacing | paragraph spacing, one of `normal`, `extended` | string | `normal` | 0.27.0 |
| strong | Bold style | boolean | false | 0.27.0 |
| type | Type, one of `primary`, `secondary`, `warning`, `danger`, `tertiary`(**v>=1.2.0**), `quaternary`(**v>=1.2.0**), `success`(**v>=1.7.0**) | string | `primary` | 0.27.0 |
| underline | Underlined style | boolean | false | 0.27.0 |
### Typography.Numeral
| Properties | Instructions | type | Default | version |
| ---------- |-----------------------------------------------------------------------------------------------------------------------------------------|-----------------------|--------------------------------------------|---------|
| rule | Parsing rules, one of `text`, `numbers`, `bytes-decimal`, `bytes-binary`, `percentages`, `currency`, `exponential` | string | `text` | 2.22.0 |
| precision | allows you to set the number of decimal places to be retained, used to set precision | number | 0 | 2.22.0 |
| truncate | The truncation of the number of decimal places, optionally `ceil`, `floor`, `round`, aligned with Math.ceil, Math.floor, Math.round | string | `round` | 2.22.0 |
| parser | Custom numeral parsing functions | (str: string) => string | - | 2.22.0 |
| copyable | Toggle whether to be copyable | boolean \| object:[Copyable Config](#Copyable-Config) | false | 2.22.0 |
| code | wrap with `code` element | boolean | - | 2.22.0 |
| component | Custom rendering html element | html element | span | 2.22.0 |
| delete | Deleted style | boolean | false | 2.22.0 |
| disabled | Disabled style | boolean | false | 2.22.0 |
| ellipsis | Display ellipsis when text overflows | boolean \| object:Ellipsis Config | false | 2.22.0 |
| icon | Prefix icon. | ReactNode | - | 2.22.0 |
| link | Toggle whether to display as a link. When passing object, the attributes will be transparently passed to the a tag | boolean \| object | false | 2.22.0 |
| mark | Marked style | boolean | false | 2.22.0 |
| size | Size, one of `normal`,`small` | string | `normal` | 2.22.0 |
| strong | Bold style | boolean | false | 2.22.0 |
| type | Type, one of `primary`, `secondary`, `warning`, `danger`, `tertiary`(**v>=1.2.0**) , `quaternary`(**v>=1.2.0**), `success`(**v>=1.7.0**) | string | `primary` | 2.22.0 |
| underline | Underlined style | boolean | false | 2.22.0 |
### Ellipsis Config
**v >= 0.34.0**
| Properties | Instructions | type | Default |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------- |
| collapseText | Displayed text to collapse | string | `Collapse` |
| collapsible | Toggle whether text is collapsible | boolean | false |
| expandText | Displayed text to expand | string | `Expand` |
| expandable | Toggle whether text is expandable | boolean | false |
| pos | Position to start ellipsis, one of `end`, `middle` | string | `end` |
| rows | Number of rows that should not be truncated | number | 1 |
| showTooltip | Toggle whether to show tooltip, if passed in as object: type,type of component to show tooltip, one of `Tooltip`, `Popover`; opts, properties that will be passed directly to the component; renderTooltip, custom rendering popup layer component | boolean\|{type: 'tooltip'\|'popover', opts: object, renderTooltip: ((content: ReactNode, children: ReactNode)) => ReactNode} | false |
| suffix | Text suffix that will not be truncated | string | - |
| onExpand | Callback when expand or collapse | function(expanded: bool, Event: e) | - |
### Copyable Config
| Properties | Instructions | Type | Default | Version |
| ---------- | --------------------------------------- | ---------------------------------------------- | ------- | ------- |
| content | Copied content | string | - | 0.27.0 |
| copyTip | Tooltip content when hovering over icon | React.node | - | 1.0.0 |
| icon | Custom Render Duplicate Node | React.node | - | 2.31.0 |
| onCopy | Callback for copy action | Function(e:Event, content:string, res:boolean) | - | 0.27.0 |
| successTip | Successful tip content | React.node | - | 0.33.0 |
## Content Guidelines
- Link
- Text links need to be clear and predictable, users should be able to predict what will happen when they click on the link
- Do not mislead users by mislabeling links
- Avoid using "Click here" or "Here" as stand-alone links
| ✅ Recommended usage | ❌ Deprecated usage |
| --- | --- |
| No spaces yet? Create space | No spaces yet? Click here |
- Avoid using entire sentences as clickable text links, and instead use text that describes where to go as the link content
| ✅ Recommended usage | ❌ Deprecated usage |
| --- | --- |
| Views user documentation for details|View user documentation for details |
- Using short terms or words as link text is more conducive to internationalization, to avoid the problem of link text being split due to different grammar and word order in different languages
| ✅ Recommended usage | ❌ Deprecated usage |
| --- | --- |
| Manage notifications to| Manage notifications to |
- When ending with a text link, there is no need to follow punctuation, except for the question mark "?"
| ✅ Recommended usage | ❌ Deprecated usage |
| --- | --- |
| No spaces yet? Create space | No spaces yet? Click here |
| Forgot password ? |Forgot password |
- Link text does not contain the articles "the, a, an"
| ✅ Recommended usage | ❌ Deprecated usage |
| --- | --- |
| View user documentation for details| View the user documentation for details |
## Design Tokens
## FAQ
- **What are the specific mechanism and precautions of Typography ellipsis?**
Semi ellipsis has two strategies, CSS ellipsis and JS ellipsis. When setting middle truncation (pos='middle')、 expandable、 suffix is not empty string、copyable, the JS ellipsis strategy is enabled. Otherwise, enable the CSS ellipsis strategy.
In general CSS truncation performance is better than JS truncation. when the children and container size remain unchanged, CSS truncation only involves 1~2 calculations, while js truncation is based on dichotomy and may require multiple calculations.
Pay attention to performance consumption when using a large number of Typography with ellipsis. For example, in Table, you can reduce performance loss by setting a reasonable pageSize for paging.