Skip to main content

Image

The image component embeds images within the interface with control over presentation and loading behavior. Use image to visually illustrate concepts, showcase products, display user content, or support tasks and interactions with visual context.

Images support responsive sizing, alt text for accessibility, aspect ratio control, and loading states for progressive enhancement. For small preview images in lists or tables, use thumbnail. For profile images, use avatar.

Support
Targets (29)

Supported targets

  • purchase.checkout.actions.render-before
  • purchase.checkout.block.render
  • purchase.checkout.cart-line-item.render-after
  • purchase.checkout.cart-line-list.render-after
  • purchase.checkout.contact.render-after
  • purchase.checkout.delivery-address.render-after
  • purchase.checkout.delivery-address.render-before
  • purchase.checkout.footer.render-after
  • purchase.checkout.header.render-after
  • purchase.checkout.payment-method-list.render-after
  • purchase.checkout.payment-method-list.render-before
  • purchase.checkout.pickup-location-list.render-after
  • purchase.checkout.pickup-location-list.render-before
  • purchase.checkout.pickup-location-option-item.render-after
  • purchase.checkout.pickup-point-list.render-after
  • purchase.checkout.pickup-point-list.render-before
  • purchase.checkout.reductions.render-after
  • purchase.checkout.reductions.render-before
  • purchase.checkout.shipping-option-item.details.render
  • purchase.checkout.shipping-option-item.render-after
  • purchase.checkout.shipping-option-list.render-after
  • purchase.checkout.shipping-option-list.render-before
  • purchase.thank-you.announcement.render
  • purchase.thank-you.block.render
  • purchase.thank-you.cart-line-item.render-after
  • purchase.thank-you.cart-line-list.render-after
  • purchase.thank-you.customer-information.render-after
  • purchase.thank-you.footer.render-after
  • purchase.thank-you.header.render-after

Anchor to accessibilityRole
accessibilityRole
'img' | 'none' | 'presentation'
Default: 'img'

Sets the semantic meaning of the component’s content. When set, the role will be used by assistive technologies to help users navigate the page.

string
Default: `''`

An alternative text description that describe the image for the reader to understand what it is about. It is extremely useful for both users using assistive technology and sighted users. A well written description provides people with visual impairments the ability to participate in consuming non-text content. When a screen readers encounters an s-image, the description is read and announced aloud. If an image fails to load, potentially due to a poor connection, the alt is displayed on screen instead. This has the benefit of letting a sighted buyer know an image was meant to load here, but as an alternative, they’re still able to consume the text content. Read considerations when writing alternative text to learn more.

Anchor to aspectRatio
aspectRatio
`${number}${optionalSpace}/${optionalSpace}${number}` | `${number}`
Default: '1/1'

The aspect ratio of the image.

The rendering of the image will depend on the inlineSize value:

  • inlineSize="fill": the aspect ratio will be respected and the image will take the necessary space.
  • inlineSize="auto": the image will not render until it has loaded and the aspect ratio will be ignored.

For example, if the value is set as 50 / 100, the getter returns 50 / 100. If the value is set as 0.5, the getter returns 0.5 / 1.

Anchor to border
border
Default: 'none' - equivalent to `none base auto`.

Set the border via the shorthand property.

This can be a size, optionally followed by a color, optionally followed by a style.

If the color is not specified, it will be base.

If the style is not specified, it will be auto.

Values can be overridden by borderWidth, borderStyle, and borderColor.

Anchor to borderRadius
borderRadius
<Extract<$1['borderRadius'], 'none' | 'small-100' | 'small' | 'base' | 'large' | 'large-100' | 'max'>>
Default: 'none'

Set the radius of the border.

1-to-4-value syntax is supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:

  • 4 values: start-start start-end end-end end-start
  • 3 values: start-start (start-end & end-start) start-end
  • 2 values: (start-start & end-end) (start-end & end-start)

For example:

  • small-100 means start-start, start-end, end-end and end-start border radii are small-100.
  • small-100 none means start-start and end-end border radii are small-100, start-end and end-start border radii are none.
  • small-100 none large-100 means start-start border radius is small-100, start-end border radius is none, end-end border radius is large-100 and end-start border radius is none.
  • small-100 none large-100 small-100 means start-start border radius is small-100, start-end border radius is none, end-end border radius is large-100 and end-start border radius is small-100.
Anchor to borderStyle
borderStyle
<> | ""
Default: '' - meaning no override

Set the style of the border.

If set, it takes precedence over the border property's style.

Like CSS, up to 4 values can be specified.

If one value is specified, it applies to all sides.

If two values are specified, they apply to the block sides and inline sides respectively.

If three values are specified, they apply to the block-start, both inline sides, and block-end respectively.

If four values are specified, they apply to the block-start, block-end, inline-start, and inline-end sides respectively.

Anchor to borderWidth
borderWidth
<> | ''
Default: '' - meaning no override

Set the width of the border.

If set, it takes precedence over the border property's width.

Like CSS, up to 4 values can be specified.

If one value is specified, it applies to all sides.

If two values are specified, they apply to the block sides and inline sides respectively.

If three values are specified, they apply to the block-start, both inline sides, and block-end respectively.

If four values are specified, they apply to the block-start, block-end, inline-start, and inline-end sides respectively.

string

A unique identifier for the element.

Anchor to inlineSize
inlineSize
'fill' | 'auto'
Default: 'fill'

The displayed inline width of the image.

  • fill: the image will takes up 100% of the available inline size.
  • auto: the image will be displayed at its natural size.
Anchor to loading
loading
'eager' | 'lazy'
Default: 'eager'

Determines the loading behavior of the image:

  • eager: Immediately loads the image, irrespective of its position within the visible viewport.
  • lazy: Delays loading the image until it approaches a specified distance from the viewport.
Anchor to objectFit
objectFit
'contain' | 'cover'
Default: 'contain'

Determines how the content of the image is resized to fit its container. The image is positioned in the center of the container.

Anchor to sizes
sizes
string

A set of media conditions and their corresponding sizes.

string

The image source (either a remote URL or a local file resource).

When the image is loading or no src is provided, a placeholder will be rendered.

Anchor to srcSet
srcSet
string

A set of image sources and their width or pixel density descriptors.

This overrides the src property.

Examples
<s-image src="https://cdn.shopify.com/YOUR_IMAGE_HERE" alt="Product image"></s-image>

Preview

  • Use high-resolution images to ensure a professional and high-quality experience.
  • Use optimized images so your app loads as fast as possible.
  • Use images intentionally, these should add clarity and lead users to the next step.
Was this page helpful?