Skip to main content
Since Shoelace 2.0 Code stable

Resize Observer

<sl-resize-observer> | SlResizeObserver

The Resize Observer component offers a thin, declarative interface to the ResizeObserver API.

Examples

Resize Observer Basics

The resize observer will report changes to the dimensions of the elements it wraps through the sl-resize event. When emitted, a collection of ResizeObserverEntry objects will be attached to event.detail that contains the target element and information about its dimensions.

Resize this box and watch the console πŸ‘‰
<div class="resize-observer-overview">
  <sl-resize-observer>
    <div>Resize this box and watch the console πŸ‘‰</div>
  </sl-resize-observer>
</div>

<script>
  const container = document.querySelector('.resize-observer-overview');
  const resizeObserver = container.querySelector('sl-resize-observer');

  resizeObserver.addEventListener('sl-resize', event => {
    console.log(event.detail);
  });
</script>

<style>
  .resize-observer-overview div {
    display: flex;
    border: solid 2px var(--sl-input-border-color);
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 4rem 2rem;
  }
</style>
div.resize-observer-overview
  sl-resize-observer
    div Resize this box and watch the console πŸ‘‰

javascript:
  const container = document.querySelector(.resize-observer-overview);
  const resizeObserver = container.querySelector(sl-resize-observer);

  resizeObserver.addEventListener(sl-resize, event => {
    console.log(event.detail);
  });

css:
  .resize-observer-overview div {
    display: flex;
    border: solid 2px var(--sl-input-border-color);
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 4rem 2rem;
  }
import SlResizeObserver from '@teamshares/shoelace/dist/react/resize-observer';

const css = `
  .resize-observer-overview div {
    display: flex;
    border: solid 2px var(--sl-input-border-color);
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: 4rem 2rem;
  }
`;

const App = () => (
  <>
    <div className="resize-observer-overview">
      <SlResizeObserver onSlResize={event => console.log(event.detail)}>
        <div>Resize this box and watch the console πŸ‘‰</div>
      </SlResizeObserver>
    </div>

    <style>{css}</style>
  </>
);

Importing

If you’re using the autoloader or the traditional loader, you can ignore this section. Otherwise, feel free to use any of the following snippets to cherry pick this component.

Script Import Bundler React

To import this component from the CDN using a script tag:

<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.1.0/cdn/components/resize-observer/resize-observer.js"></script>

To import this component from the CDN using a JavaScript import:

import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.1.0/cdn/components/resize-observer/resize-observer.js';

To import this component using a bundler:

import '@shoelace-style/shoelace/dist/components/resize-observer/resize-observer.js';

To import this component as a React component:

import SlResizeObserver from '@shoelace-style/shoelace/dist/react/resize-observer';

Slots

Name Description
(default) One or more elements to watch for resizing.

Learn more about using slots.

Properties

Name Description Reflects Type Default
disabled Disables the observer. boolean false
updateComplete A read-only promise that resolves when the component has finished updating.

Learn more about attributes and properties.

Events

Name React Event Description Event Detail
sl-resize onSlResize Emitted when the element is resized. { entries: ResizeObserverEntry[] }

Learn more about events.