Drag & Drop Ghost
Use Drag & Drop Ghost when the user is rearranging real items; use Hover Lift when you only need to show clickability.
Use
Showing that an item is actively being moved while preserving its original list position and drop target.
Avoid
Avoid it when the item is only clickable, when order cannot change, or when the dragged preview would cover critical nearby data.
Safer Alternative
Swipe Gesture HintRisk Level
High attention
Timing
120-180ms lift on drag start, direct pointer tracking while dragging, 160-240ms settle on drop.
Easing
Use a stiff spring for lift/drop and no delayed easing for pointer tracking.
Risk
Live Demo
What It Is
When dragging an item, the original item remains lowered in opacity as a placeholder while a slightly scaled-up, shadowed ghost follows the pointer.
Decision Guidance
Use Drag & Drop Ghost when the user is rearranging real items; use Hover Lift when you only need to show clickability.
Best For
Showing that an item is actively being moved while preserving its original list position and drop target.
Avoid When
Avoid it when the item is only clickable, when order cannot change, or when the dragged preview would cover critical nearby data.
Timing
120-180ms lift on drag start, direct pointer tracking while dragging, 160-240ms settle on drop.
Easing
Use a stiff spring for lift/drop and no delayed easing for pointer tracking.
Risk Tags
✓When to Use
- Kanban boards and task lanes
- Reorderable lists
- File upload queues or asset managers
✕When NOT to Use
- Non-draggable items
- Static lists where users cannot change order
- Dense tables where the ghost would hide nearby rows
Configuration Tips
- 01Keep the source slot visible with a dashed placeholder or 30-50% opacity
- 02Scale the dragged ghost only to 1.02-1.06 so it feels lifted without changing hit expectations
- 03Use a stronger shadow while dragging, then return quickly on drop
- 04Pair with keyboard reorder controls for accessibility
You've Seen It In
AI Implementation Prompts
Move from a fast scaffold to production details, then tune timing and edge states.
Create a reorderable task list item that lifts into a shadowed drag ghost while the original slot remains visible as a dashed placeholder. On release, settle the item back into the list quickly.
Code Example (Tailwind CSS)
A focused implementation sketch you can adapt to your product state.
'use client';
import { motion } from 'framer-motion';
import { GripVertical } from 'lucide-react';
export function DragDropGhost({ isDragging = false }: { isDragging?: boolean }) {
return (
<div className="w-full max-w-sm space-y-3">
<div className="rounded-xl border border-stone-200 bg-white p-4 shadow-sm">
Review roadmap
</div>
<div className="relative h-14">
<div className="absolute inset-0 rounded-xl border-2 border-dashed border-stone-200 bg-stone-50 opacity-60" />
<motion.div
animate={
isDragging
? { y: -18, x: 8, scale: 1.04, boxShadow: '0 18px 32px rgba(15,23,42,.16)' }
: { y: 0, x: 0, scale: 1, boxShadow: '0 1px 2px rgba(15,23,42,.08)' }
}
transition={{ type: 'spring', stiffness: 420, damping: 30 }}
className="absolute inset-x-0 flex cursor-grab items-center gap-3 rounded-xl border border-stone-200 bg-white p-4"
>
<GripVertical className="h-4 w-4 text-stone-400" aria-hidden />
<span className="text-sm font-medium text-stone-800">Update pricing copy</span>
</motion.div>
</div>
</div>
);
}Related Effects
Swipe Gesture Hint
A subtle, bouncing horizontal nudge on a list item indicating that it can be swiped to reveal hidden actions (like delete or archive).
Hover Lift Effect
A card or button smoothly translates upwards by a few pixels and increases its shadow cast, creating the illusion of moving closer to the user on hover.
Fluid Swipe-to-Action
A list item that can be dragged horizontally with high elasticity. Dropping it reveals under-the-fold action buttons (like Delete/Archive) with an elastic rubber-band snap.