Hover Image List
A list of large headings that reveal an image on the left and shift right on hover, animated with Motion.
Installation
Pro components require registry authentication. Add your Unlumen UI Pro key as UNLUMEN_LICENSE_KEY in your .env.local file and follow the setup guide.
File Structure
Usage
import { HoverImageList } from "@/components/unlumen-ui/hover-image-list";
const items = [
{ label: "Design systems", image: "/images/design.jpg" },
{ label: "Prototyping", image: "/images/proto.jpg" },
{ label: "Motion & animation", image: "/images/motion.jpg" },
];
<HoverImageList items={items} />;API Reference
HoverImageList
itemsHoverImageListItem[]—Array of items to display.
imageWidth?number220Width of the image panel in pixels.
imageGap?number40Gap between the image panel and the text list in pixels.
className?string—Additional CSS classes.
HoverImageListItem
labelstring—Large heading text.
imagestring—Image URL shown when this item is hovered.
imageAlt?string""Alt text for the image.
Notes
- The image panel tracks the hovered item's vertical center using a Motion spring (
stiffness: 200,damping: 18,mass: 0.6) — the image slides smoothly between items. - Images are
aspect-squareandobject-coverby default. Provide square or close-to-square images for the best result. - The hovered item shifts 16px to the right, non-hovered items fade to
opacity: 0.18— both animated with a stiff spring (stiffness: 380,damping: 30). - Image transitions use
AnimatePresencewithmode="popLayout"— the outgoing image fades out while the incoming one fades in, with no layout jump. - Images use
loading="lazy"anddecoding="async"— but since they appear on hover, consider preloading critical images if the list is short. - The component uses
onHoverStart/onHoverEndfrom Motion — these fire on pointer enter/leave, not on focus. For keyboard accessibility, you may want to addonFocushandlers. - Set
imageWidthandimageGapto control the layout. The image panel isflex-shrink-0so it never collapses.
Credits
Inspired by @raul_dronca's original Design. Thanks to Raul for the initial idea!
Keep in mind
Most components on this site are inspired by or recreated from existing work across the web. I'm not here to take credit; just to learn, experiment, and sometimes push things a bit further. If something looks familiar and I forgot to mention you, reach out and I'll fix that right away.
This component is part of Unlumen UI [ Pro ]
Includes advanced motion, patterns, and premium support.