Generate skeleton loading placeholders for better UX
export function CardSkeleton() {
return (
<div className="skeleton-card">
<div className="skeleton-image" />
<div className="skeleton-card-content">
<div className="skeleton-line" style={{ width: '100%' }} />
<div className="skeleton-line" style={{ width: '90%' }} />
<div className="skeleton-line" style={{ width: '70%' }} />
</div>
</div>
);
}.skeleton-card {
border: 1px solid #e5e7eb;
border-radius: 8px;
overflow: hidden;
background: white;
}
.skeleton-image {
width: 100%;
height: 200px;
background: #E5E7EB;
animation: skeleton-wave 1.5s ease-in-out infinite;
}
.skeleton-card-content {
padding: 16px;
}
.skeleton-line {
height: 16px;
margin-bottom: 12px;
background: #E5E7EB;
border-radius: 4px;
animation: skeleton-wave 1.5s ease-in-out infinite;
}
@keyframes skeleton-wave {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
.skeleton-line,
.skeleton-circle,
.skeleton-image,
.skeleton-element {
background: linear-gradient(
90deg,
#E5E7EB 0%,
#F3F4F6 50%,
#E5E7EB 100%
);
background-size: 200% 100%;
animation: skeleton-wave 1.5s ease-in-out infinite !important;
}Help others discover this tool!