Badge
Small numerical value or status descriptor for UI elements.
When To Use#
Badge normally appears in proximity to notifications or user avatars with eye-catching appeal, typically displaying unread messages count.
Examples
TypeScript
JavaScript
import { ClockCircleOutlined } from '@ant-design/icons';
import { Avatar, Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Badge count={5}>
<Avatar shape="square" size="large" />
</Badge>
<Badge count={0} showZero>
<Avatar shape="square" size="large" />
</Badge>
<Badge count={<ClockCircleOutlined style={{ color: '#f5222d' }} />}>
<Avatar shape="square" size="large" />
</Badge>
</>
);
export default App;
TypeScript
JavaScript
import { Avatar, Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Badge count={99}>
<Avatar shape="square" size="large" />
</Badge>
<Badge count={100}>
<Avatar shape="square" size="large" />
</Badge>
<Badge count={99} overflowCount={10}>
<Avatar shape="square" size="large" />
</Badge>
<Badge count={1000} overflowCount={999}>
<Avatar shape="square" size="large" />
</Badge>
</>
);
export default App;
TypeScript
JavaScript
import { MinusOutlined, PlusOutlined, QuestionOutlined } from '@ant-design/icons';
import { Avatar, Badge, Button, Divider, Switch } from 'antd';
import React, { useState } from 'react';
const ButtonGroup = Button.Group;
const App: React.FC = () => {
const [count, setCount] = useState(5);
const [show, setShow] = useState(true);
const increase = () => {
setCount(count + 1);
};
const decline = () => {
let newCount = count - 1;
if (newCount < 0) {
newCount = 0;
}
setCount(newCount);
};
const random = () => {
const newCount = Math.floor(Math.random() * 100);
setCount(newCount);
};
const onChange = (checked: boolean) => {
setShow(checked);
};
return (
<>
<Badge count={count}>
<Avatar shape="square" size="large" />
</Badge>
<ButtonGroup>
<Button onClick={decline}>
<MinusOutlined />
</Button>
<Button onClick={increase}>
<PlusOutlined />
</Button>
<Button onClick={random}>
<QuestionOutlined />
</Button>
</ButtonGroup>
<Divider />
<Badge dot={show}>
<Avatar shape="square" size="large" />
</Badge>
<Switch onChange={onChange} checked={show} />
</>
);
};
export default App;
TypeScript
JavaScript
import { Avatar, Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<Badge count={5} offset={[10, 10]}>
<Avatar shape="square" size="large" />
</Badge>
);
export default App;
Success
Error
Default
Processing
Warning
TypeScript
JavaScript
import { Badge, Space } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Space>
<Badge status="success" />
<Badge status="error" />
<Badge status="default" />
<Badge status="processing" />
<Badge status="warning" />
</Space>
<br />
<Space direction="vertical">
<Badge status="success" text="Success" />
<Badge status="error" text="Error" />
<Badge status="default" text="Default" />
<Badge status="processing" text="Processing" />
<Badge status="warning" text="Warning" />
</Space>
</>
);
export default App;
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
TypeScript
JavaScript
import { Badge, Card } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Badge.Ribbon text="Hippies">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="pink">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="red">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="cyan">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="green">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="purple">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="volcano">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
<Badge.Ribbon text="Hippies" color="magenta">
<Card title="Pushes open the window" size="small">
and raises the spyglass.
</Card>
</Badge.Ribbon>
</>
);
export default App;
.ant-card {
margin-bottom: 16px;
}
11
25
99+
TypeScript
JavaScript
import { ClockCircleOutlined } from '@ant-design/icons';
import { Badge, Space, Switch } from 'antd';
import React, { useState } from 'react';
const App: React.FC = () => {
const [show, setShow] = useState(true);
return (
<Space>
<Switch checked={show} onChange={() => setShow(!show)} />
<Badge count={show ? 11 : 0} showZero color="#faad14" />
<Badge count={show ? 25 : 0} />
<Badge count={show ? <ClockCircleOutlined style={{ color: '#f5222d' }} /> : 0} />
<Badge
className="site-badge-count-109"
count={show ? 109 : 0}
style={{ backgroundColor: '#52c41a' }}
/>
</Space>
);
};
export default App;
TypeScript
JavaScript
import { NotificationOutlined } from '@ant-design/icons';
import { Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Badge dot>
<NotificationOutlined style={{ fontSize: 16 }} />
</Badge>
<Badge dot>
<a href="#">Link something</a>
</Badge>
</>
);
export default App;
TypeScript
JavaScript
import { Avatar, Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<a href="#">
<Badge count={5}>
<Avatar shape="square" size="large" />
</Badge>
</a>
);
export default App;
TypeScript
JavaScript
import { Avatar, Badge } from 'antd';
import React from 'react';
const App: React.FC = () => (
<>
<Badge size="default" count={5}>
<Avatar shape="square" size="large" />
</Badge>
<Badge size="small" count={5}>
<Avatar shape="square" size="large" />
</Badge>
</>
);
export default App;
Presets
pink
red
yellow
orange
cyan
green
blue
purple
geekblue
magenta
volcano
gold
lime
Custom
#f50
rgb(45, 183, 245)
hsl(102, 53%, 61%)
hwb(205 6% 9%)
TypeScript
JavaScript
import { Badge, Divider, Space } from 'antd';
import React from 'react';
const colors = [
'pink',
'red',
'yellow',
'orange',
'cyan',
'green',
'blue',
'purple',
'geekblue',
'magenta',
'volcano',
'gold',
'lime',
];
const App: React.FC = () => (
<>
<Divider orientation="left">Presets</Divider>
<Space direction="vertical">
{colors.map(color => (
<Badge key={color} color={color} text={color} />
))}
</Space>
<Divider orientation="left">Custom</Divider>
<Space direction="vertical">
<Badge color="#f50" text="#f50" />
<Badge color="rgb(45, 183, 245)" text="rgb(45, 183, 245)" />
<Badge color="hsl(102, 53%, 61%)" text="hsl(102, 53%, 61%)" />
<Badge color="hwb(205 6% 9%)" text="hwb(205 6% 9%)" />
</Space>
</>
);
export default App;
API#
Badge#
Property | Description | Type | Default | Version |
---|---|---|---|---|
color | Customize Badge dot color | string | - | |
count | Number to show in badge | ReactNode | - | |
dot | Whether to display a red dot instead of count | boolean | false | |
offset | Set offset of the badge dot | [number, number] | - | |
overflowCount | Max count to show | number | 99 | |
showZero | Whether to show badge when count is zero | boolean | false | |
size | If count is set, size sets the size of badge | default | small | - | 4.6.0 |
status | Set Badge as a status dot | success | processing | default | error | warning | - | |
text | If status is set, text sets the display text of the status dot | ReactNode | - | |
title | Text to show when hovering over the badge | string | - |
Badge.Ribbon (4.5.0+)#
Property | Description | Type | Default | Version |
---|---|---|---|---|
color | Customize Ribbon color | string | - | |
placement | The placement of the Ribbon, start and end follow text direction (RTL or LTR) | start | end | end | |
text | Content inside the Ribbon | ReactNode | - |