Spectrum 2 is now available! Check out the S2 Image docs and the migration docs.

Image

Image is used to insert and display an image within a component.

installyarn add @adobe/react-spectrum
added3.0.0
usageimport {Image} from '@adobe/react-spectrum'

Examples#


<Image src="https://i.imgur.com/Z7AzH2c.png" alt="Sky and roof" />
<Image
  src="https://i.imgur.com/Z7AzH2c.png"
  alt="Sky and roof"
/>
<Image
  src="https://i.imgur.com/Z7AzH2c.png"
  alt="Sky and roof"
/>

Content#


The Image component represents an image within a Spectrum container such as a Dialog. Image provides no specific styling by itself, but receives styling from the parent container. In addition, Image will be automatically placed within the container's layout according to Spectrum guidelines.

Note: Images must have an alt attribute. If the image is considered decorative and should not be announced by screen readers, then set alt="" to suppress the warning.

See Dialog for examples of how to use the Image component in the context of a Spectrum container.

Internationalization#

To internationalize an Image, a localized string should be passed to the alt prop.

Props#


NameTypeDescription
srcstringThe URL of the image.
altstringText description of the image.
objectFitanySets the Image object-fit style.
crossOrigin'anonymous''use-credentials'

Indicates if the fetching of the image must be done using a CORS request. See MDN.

Events
NameTypeDescription
onErrorReactEventHandler<HTMLImageElement>

Called if an error occurs while loading or rendering an image, see Image loading errors.

onLoadReactEventHandler<HTMLImageElement>

Called when the image has successfully loaded, see load event.

Layout
NameTypeDefaultDescription
flexResponsive<stringnumberboolean>

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<numberstring>

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.

slotstring'image'A slot to place the image in.
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
idstring

The element's unique identifier. See MDN.

Advanced
NameTypeDescription
UNSAFE_classNamestring

Sets the CSS className for the element. Only use as a last resort. Use style props instead.

UNSAFE_styleCSSProperties

Sets inline style for the element. Only use as a last resort. Use style props instead.

Visual options#


Decorative#

<Flex width="200px">
  <Image src="https://i.imgur.com/c3gTKSJ.jpg" alt="" />
</Flex>
<Flex width="200px">
  <Image src="https://i.imgur.com/c3gTKSJ.jpg" alt="" />
</Flex>
<Flex width="200px">
  <Image
    src="https://i.imgur.com/c3gTKSJ.jpg"
    alt=""
  />
</Flex>

Object Fit#

<Flex width="100%" height="200px">
  <Image
    src="https://i.imgur.com/c3gTKSJ.jpg"
    alt="Eiffel Tower at sunset"
    objectFit="cover" />
</Flex>
<Flex width="100%" height="200px">
  <Image
    src="https://i.imgur.com/c3gTKSJ.jpg"
    alt="Eiffel Tower at sunset"
    objectFit="cover" />
</Flex>
<Flex
  width="100%"
  height="200px"
>
  <Image
    src="https://i.imgur.com/c3gTKSJ.jpg"
    alt="Eiffel Tower at sunset"
    objectFit="cover"
  />
</Flex>