Badge

Badges are used for showing a small amount of color-categorized metadata, ideal for getting a user's attention.

installyarn add @adobe/react-spectrum
added3.22.0
usageimport {Badge} from '@adobe/react-spectrum'

Example#


<Badge variant="positive">Licensed</Badge>
<Badge variant="positive">Licensed</Badge>
<Badge variant="positive">
  Licensed
</Badge>

Content#


Badges can have a label, an icon, or both. An icon is provided by passing an icon component as a child to the Badge. A visible label can be provided by passing a string or a Text component as a child, depending on whether the Badge has an accompanying icon.

import {Text} from '@adobe/react-spectrum';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';

<Badge variant="positive">
  <CheckmarkCircle aria-label="Done" />
  <Text>Icon + Label</Text>
</Badge>
import {Text} from '@adobe/react-spectrum';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';

<Badge variant="positive">
  <CheckmarkCircle aria-label="Done" />
  <Text>Icon + Label</Text>
</Badge>
import {Text} from '@adobe/react-spectrum';
import CheckmarkCircle from '@spectrum-icons/workflow/CheckmarkCircle';

<Badge variant="positive">
  <CheckmarkCircle aria-label="Done" />
  <Text>
    Icon + Label
  </Text>
</Badge>

Accessibility#

If a visible label isn't specified, an aria-label must be provided to the icon for accessibility.

Internationalization#

To internationalize a Badge, a localized string should be set as the child content of the Badge. For languages that are read right-to-left (e.g. Hebrew and Arabic), the Badge is automatically flipped.

Props#


NameTypeDescription
childrenReactNodeThe content to display in the badge.
variant'neutral' | 'info' | 'positive' | 'negative' | 'indigo' | 'yellow' | 'magenta' | 'fuchsia' | 'purple' | 'seafoam'

The variant changes the background color of the badge. When badge has a semantic meaning, they should use the variant for semantic colors.

Layout
NameTypeDescription
flexResponsive<string | number | boolean>When used in a flex layout, specifies how the element will grow or shrink to fit the space available. See MDN.
flexGrowResponsive<number>When used in a flex layout, specifies how the element will grow to fit the space available. See MDN.
flexShrinkResponsive<number>When used in a flex layout, specifies how the element will shrink to fit the space available. See MDN.
flexBasisResponsive<number | string>When used in a flex layout, specifies the initial main size of the element. See MDN.
alignSelfResponsive<'auto' | 'normal' | 'start' | 'end' | 'center' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'stretch'>Overrides the alignItems property of a flex or grid container. See MDN.
justifySelfResponsive<'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'left' | 'right' | 'stretch'>Specifies how the element is justified inside a flex or grid container. See MDN.
orderResponsive<number>The layout order for the element within a flex or grid container. See MDN.
gridAreaResponsive<string>When used in a grid layout, specifies the named grid area that the element should be placed in within the grid. See MDN.
gridColumnResponsive<string>When used in a grid layout, specifies the column the element should be placed in within the grid. See MDN.
gridRowResponsive<string>When used in a grid layout, specifies the row the element should be placed in within the grid. See MDN.
gridColumnStartResponsive<string>When used in a grid layout, specifies the starting column to span within the grid. See MDN.
gridColumnEndResponsive<string>When used in a grid layout, specifies the ending column to span within the grid. See MDN.
gridRowStartResponsive<string>When used in a grid layout, specifies the starting row to span within the grid. See MDN.
gridRowEndResponsive<string>When used in a grid layout, specifies the ending row to span within the grid. See MDN.
Spacing
NameTypeDescription
marginResponsive<DimensionValue>The margin for all four sides of the element. See MDN.
marginTopResponsive<DimensionValue>The margin for the top side of the element. See MDN.
marginBottomResponsive<DimensionValue>The margin for the bottom side of the element. See MDN.
marginStartResponsive<DimensionValue>The margin for the logical start side of the element, depending on layout direction. See MDN.
marginEndResponsive<DimensionValue>The margin for the logical end side of an element, depending on layout direction. See MDN.
marginXResponsive<DimensionValue>The margin for both the left and right sides of the element. See MDN.
marginYResponsive<DimensionValue>The margin for both the top and bottom sides of the element. See MDN.
Sizing
NameTypeDescription
widthResponsive<DimensionValue>The width of the element. See MDN.
minWidthResponsive<DimensionValue>The minimum width of the element. See MDN.
maxWidthResponsive<DimensionValue>The maximum width of the element. See MDN.
heightResponsive<DimensionValue>The height of the element. See MDN.
minHeightResponsive<DimensionValue>The minimum height of the element. See MDN.
maxHeightResponsive<DimensionValue>The maximum height of the element. See MDN.
Positioning
NameTypeDescription
positionResponsive<'static' | 'relative' | 'absolute' | 'fixed' | 'sticky'>Specifies how the element is positioned. See MDN.
topResponsive<DimensionValue>The top position for the element. See MDN.
bottomResponsive<DimensionValue>The bottom position for the element. See MDN.
leftResponsive<DimensionValue>The left position for the element. See MDN. Consider using start instead for RTL support.
rightResponsive<DimensionValue>The right position for the element. See MDN. Consider using start instead for RTL support.
startResponsive<DimensionValue>The logical start position for the element, depending on layout direction. See MDN.
endResponsive<DimensionValue>The logical end position for the element, depending on layout direction. See MDN.
zIndexResponsive<number>The stacking order for the element. See MDN.
isHiddenResponsive<boolean>Hides the element.
Accessibility
NameTypeDescription
idstringThe element's unique identifier. See MDN.
aria-labelstringDefines a string value that labels the current element.
aria-labelledbystringIdentifies the element (or elements) that labels the current element.
aria-describedbystringIdentifies the element (or elements) that describes the object.
aria-detailsstringIdentifies the element (or elements) that provide a detailed, extended description for the object.
Advanced
NameTypeDescription
UNSAFE_classNamestringSets the CSS className for the element. Only use as a last resort. Use style props instead.
UNSAFE_styleCSSPropertiesSets inline style for the element. Only use as a last resort. Use style props instead.

Visual options#


Variant#

View guidelines

When badges have a semantic meaning, they should use semantic colors. Use the appropriate color to indicate status as follows.

import {Flex} from '@adobe/react-spectrum';

<Flex direction="column" gap={8}>
  <Badge variant="positive">
    Green: Approved, Complete, Success, New, Purchased, Licensed
  </Badge>
  <Badge variant="info">Blue: Active, In Use, Live, Published</Badge>
  <Badge variant="negative">Red: Error, Alert, Rejected, Failed</Badge>
  <Badge variant="neutral">
    Gray: Archived, Deleted, Paused, Draft, Not Started, Ended
  </Badge>
</Flex>
import {Flex} from '@adobe/react-spectrum';

<Flex direction="column" gap={8}>
  <Badge variant="positive">
    Green: Approved, Complete, Success, New, Purchased,
    Licensed
  </Badge>
  <Badge variant="info">
    Blue: Active, In Use, Live, Published
  </Badge>
  <Badge variant="negative">
    Red: Error, Alert, Rejected, Failed
  </Badge>
  <Badge variant="neutral">
    Gray: Archived, Deleted, Paused, Draft, Not Started,
    Ended
  </Badge>
</Flex>
import {Flex} from '@adobe/react-spectrum';

<Flex
  direction="column"
  gap={8}
>
  <Badge variant="positive">
    Green: Approved,
    Complete, Success,
    New, Purchased,
    Licensed
  </Badge>
  <Badge variant="info">
    Blue: Active, In
    Use, Live,
    Published
  </Badge>
  <Badge variant="negative">
    Red: Error, Alert,
    Rejected, Failed
  </Badge>
  <Badge variant="neutral">
    Gray: Archived,
    Deleted, Paused,
    Draft, Not Started,
    Ended
  </Badge>
</Flex>

When badges are used to color code categories, they use label colors. The ideal usage for these is when there are 8 or fewer categories being color coded.

import {Flex} from '@adobe/react-spectrum';

<Flex direction="column" gap={8}>
  <Badge variant="seafoam">Seafoam</Badge>
  <Badge variant="indigo">Indigo</Badge>
  <Badge variant="purple">Purple</Badge>
  <Badge variant="fuchsia">Fuchsia</Badge>
  <Badge variant="magenta">Magenta</Badge>
  <Badge variant="yellow">Yellow</Badge>
</Flex>
import {Flex} from '@adobe/react-spectrum';

<Flex direction="column" gap={8}>
  <Badge variant="seafoam">Seafoam</Badge>
  <Badge variant="indigo">Indigo</Badge>
  <Badge variant="purple">Purple</Badge>
  <Badge variant="fuchsia">Fuchsia</Badge>
  <Badge variant="magenta">Magenta</Badge>
  <Badge variant="yellow">Yellow</Badge>
</Flex>
import {Flex} from '@adobe/react-spectrum';

<Flex
  direction="column"
  gap={8}
>
  <Badge variant="seafoam">
    Seafoam
  </Badge>
  <Badge variant="indigo">
    Indigo
  </Badge>
  <Badge variant="purple">
    Purple
  </Badge>
  <Badge variant="fuchsia">
    Fuchsia
  </Badge>
  <Badge variant="magenta">
    Magenta
  </Badge>
  <Badge variant="yellow">
    Yellow
  </Badge>
</Flex>