Concorde documentation · same URL (interactive) · llms.txt

Concorde UI component — Image. sonic-image wraps a responsive <img> with aspect ratio, object-fit: cover, optional rounded corners and a load transition. The host shows a placeholder background (--sc-placeholder-bg) until the file Doc ID: core/components/ui/image/image. Keywords: Concorde, supersoniks, core/components/ui/image/image, image, Image, UI component, sonic-image, web component, , object-fit: cover, --sc-placeholder-bg, loading, lazy, loading="eager", rounded, --sc-rounded. URL: https://concorde.supersoniks.org/core/components/ui/image.

Image

sonic-image wraps a responsive <img> with aspect ratio, object-fit: cover, optional rounded corners and a load transition. The host shows a placeholder background (--sc-placeholder-bg) until the file loads. With no loading, the image is lazy; set loading="eager" for above-the-fold images.

Rounded

With no rounded, corners are square. Boolean rounded uses the theme token --sc-rounded; full draws a circle when paired with ratio="1/1".

<div class="grid gap-6 grid-cols-3 lg:grid-cols-4 items-end text-center text-xs">
      <div>
        <sonic-image ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">default</p>
      </div>
      <div>
        <sonic-image rounded="sm" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">sm</p>
      </div>
      <div>
        <sonic-image rounded ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">rounded</p>
      </div>
      <div>
        <sonic-image rounded="md" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">md</p>
      </div>
      <div>
        <sonic-image rounded="lg" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">lg</p>
      </div>
      <div>
        <sonic-image rounded="xl" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">xl</p>
      </div>
      <div>
        <sonic-image rounded="full" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
        <p class="mt-2">full</p>
      </div>
    </div>

Aspect ratio

ratio sets CSS aspect-ratio on the image (default auto). The image always fills the host width.

<div class="grid gap-8 grid-cols-2 items-center">
      <sonic-image src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
      <sonic-image ratio="16/9" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
      <sonic-image ratio="1/1" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
      <sonic-image ratio="2/3" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
    </div>

Object position

objectPosition maps to CSS object-position (default center center). Use it on wide crops when the subject sits off-center.

<div class="grid gap-8 grid-cols-2 items-center">
      <sonic-image ratio="11/4" src="/img/concorde/plane_11.jpg" alt="Concorde flying over a field"></sonic-image>
      <sonic-image objectPosition="center top" ratio="11/4" src="/img/concorde/plane_11.jpg" alt="Concorde flying over a field"></sonic-image>
    </div>

Cover

cover stretches the image over a positioned parent (position: relative with a height). ratio is ignored while cover is set.

<div class="h-96 relative rounded-lg overflow-hidden">
      <sonic-image cover src="/img/concorde/plane_10.jpg" alt="Concorde fleet parked in a star"></sonic-image>
    </div>

Load transition

Set transition to fade or fade-scale-out. The image stays transparent until the browser fires load, then animates in. Changing src on an existing element does not replay the effect: mount a new sonic-image instead (galleries, infinite scroll).

<div class="flex flex-wrap gap-2 mb-4">
      <sonic-button
        size="sm"
        onclick="(function () {
          var host = document.getElementById('sonic-image-transition-host');
          var img = document.createElement('sonic-image');
          img.transition = 'fade';
          img.ratio = '1/1';
          img.rounded = 'md';
          img.loading = 'eager';
          img.style.width = '8rem';
          var pics = ['01', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13'];
          img.src = '/img/concorde/plane_' + pics[host.childElementCount % pics.length] + '.jpg';
          host.appendChild(img);
        })()"
      >
        Add image (fade)
      </sonic-button>
      <sonic-button
        size="sm"
        variant="outline"
        onclick="(function () {
          var host = document.getElementById('sonic-image-transition-host');
          var img = document.createElement('sonic-image');
          img.transition = 'fade-scale-out';
          img.ratio = '1/1';
          img.rounded = 'md';
          img.loading = 'eager';
          img.style.width = '8rem';
          var pics = ['01', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13'];
          img.src = '/img/concorde/plane_' + pics[host.childElementCount % pics.length] + '.jpg';
          host.appendChild(img);
        })()"
      >
        Add image (fade-scale-out)
      </sonic-button>
      <sonic-button
        size="sm"
        variant="ghost"
        onclick="document.getElementById('sonic-image-transition-host').replaceChildren()"
      >
        Clear
      </sonic-button>
    </div>
    <div id="sonic-image-transition-host" class="flex flex-wrap gap-2 min-h-[5rem]"></div>

Accessibility

Always set a meaningful alt. Use alt="" only for decorative images.

<sonic-image
      rounded="md"
      ratio="16/9"
      alt="Crowd gathered around Concorde at night"
      src="/img/concorde/plane_07.jpg"
    ></sonic-image>

API reference

Attribute Values Description
src URL Image URL passed to <img src>
alt string Accessible description; "" only for decorative images
loading lazy (default) · eager Native lazy loading
ratio CSS ratio (default auto) aspect-ratio of the image; ignored when cover is set
rounded none (default) · boolean · base · sm · md · lg · xl · full Corner radius from theme tokens
objectPosition CSS position (default center center) Maps to object-position
imageRendering CSS value (default auto) Maps to image-rendering
cover boolean Absolutely fills a positioned parent
transition fade · fade-scale-out Entrance animation after load; not replayed on src change

No slots.