Usage
A simple demo is available in example/
. A more comprehensive
example could look like this:
// npm install @frameright/react-image-display-control
import { ImageDisplayControl } from '@frameright/react-image-display-control';
// npm install react-bootstrap
import Image from 'react-bootstrap/Image';
import skaterUrl from './assets/skater.jpg';
const isServer = typeof window === 'undefined';
const skaterPathOnServer = isServer
? process.cwd() + '/src/assets/skater.jpg'
: null;
export function MyApp() {
return (
<div style={{ contain: 'paint' }} data-idc-parent>
<ImageDisplayControl data-debug>
<img
id="external-img-without-ssr"
src="https://webc.frameright.io/assets/pics/skater2.jpg"
alt="Skater"
className="first-image"
width="200"
height="200"
/>
<Image
id="local-bootstrap-image-without-ssr"
src={skaterUrl}
data-avoid-no-region="off"
alt="Skater"
style={{
width: '300px',
height: '200px',
}}
/>
<img
id="local-img-with-ssr"
src={skaterUrl}
data-path-on-server={skaterPathOnServer}
alt="Skater"
width="200"
height="200"
/>
</ImageDisplayControl>
</div>
);
}
This example turns three <img>
-like elements/components into
Image Display Control web components
which are going to automatically/responsively zoom in on the most suitable
region from each image's metadata.
It touches on the following aspects.
<img>
-like direct children
The <ImageDisplayControl>
component adds
Image Display Control functionality to any of its
<img>
-like direct children. We have validated:
<img>
elements,- Next.js
<Image>
components, - React-Bootstrap
<Image>
components.
HTML attributes and React properties
- All the attributes/properties of the original
<img>
-like child are supported, e.g.src=
,alt=
,width=
, etc. - All
data-*=
attributes specific to the underlying web component are supported, e.g.data-avoid-no-region=
. See the web component's attribute reference for more details. - Additional
data-*=
attributes/properties exist:- on the children (e.g.
data-path-on-server=
for server-side rendering), - on the
<ImageDisplayControl>
component (e.g.data-debug
for debugging), - on its DOM parent (e.g.
data-idc-parent
for guiding developers).
- on the children (e.g.
See attributes and properties for more details.
CSS styling
The usual ways of styling the <img>
-like children are supported, e.g.
width:
, border:
, padding:
, etc. However some CSS properties have
limitations due to the underlying web component's implementation. See the web
component's CSS styling
documentation for more details.
HTML and CSS sizing
- The usual ways of sizing the
<img>
-like children are supported, e.g. HTMLwidth=
, CSSheight:
, etc. - The rendered child is responsive and will automatically reassess the best region to zoom in on when it gets resized, e.g. when the user turns their phone from portrait to landscape.
- A rendered child takes exactly the same space as it would if it didn't have an
<ImageDisplayControl>
parent under the same circumstances and styling.
Server-side rendering
The React component can be imported anywhere in your code with a static
import
statement, no matter if this portion of the code is to be executed on
the server, on the client, or at build time for static site generation.
See importing in your project for more details.
In order to make server-side rendering (or static site generation) possible:
- import the image file statically,
- pass the path to the image file on disk to the corresponding child.
See server-side rendering for more details.