✨ Skeleton Loader Studio

Visually create & customize SCSS skeleton loading mixins
🛠️ Canvas Drag & Drop Editor
380px × 185px
Avatar
20px, 20px | r: 25px
User Name
Role / Bio
Text Line 1
Text Line 2
Text Line 3
.custom-skeleton {
  position: relative;
  width: 380px;
  height: 185px;
  overflow: hidden;
  opacity: 0.85;
  --base-color: #e2e8f0;
  --shimmer-color: rgba(255, 255, 255, 0.75);
}

.custom-skeleton::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(circle 25px at 25px 25px, var(--base-color, #e2e8f0) 100%, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 16px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 12px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0);
  background-size:
    calc(25px * 2) 180px,
    180px 180px,
    120px 180px,
    90% 180px,
    75% 180px,
    50% 180px;
  background-position:
    left 20px top 20px,
    left 85px top 25px,
    left 85px top 50px,
    left 20px top 95px,
    left 20px top 120px,
    left 20px top 145px;
  background-repeat: repeat-y;
  z-index: 1;
}

.custom-skeleton::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0) 0%,
    var(--shimmer-color, rgba(255, 255, 255, 0.75)) 50%,
    rgba(255, 255, 255, 0) 100%
  );
  background-size: 200% 100%;
  background-repeat: repeat-y;
  mask-image:
    radial-gradient(circle 25px at 25px 25px, var(--base-color, #e2e8f0) 100%, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 16px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 12px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0);
  mask-size:
    calc(25px * 2) 180px,
    180px 180px,
    120px 180px,
    90% 180px,
    75% 180px,
    50% 180px;
  mask-position:
    left 20px top 20px,
    left 85px top 25px,
    left 85px top 50px,
    left 20px top 95px,
    left 20px top 120px,
    left 20px top 145px;
  mask-repeat: repeat-y;
  -webkit-mask-image:
    radial-gradient(circle 25px at 25px 25px, var(--base-color, #e2e8f0) 100%, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 16px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 12px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0),
    linear-gradient(var(--base-color, #e2e8f0) 10px, transparent 0);
  -webkit-mask-size:
    calc(25px * 2) 180px,
    180px 180px,
    120px 180px,
    90% 180px,
    75% 180px,
    50% 180px;
  -webkit-mask-position:
    left 20px top 20px,
    left 85px top 25px,
    left 85px top 50px,
    left 20px top 95px,
    left 20px top 120px,
    left 20px top 145px;
  -webkit-mask-repeat: repeat-y;
  animation: shimmer-effect 1.5s infinite linear;
}

@keyframes shimmer-effect {
  0% {
    background-position: 200% 0;
  }
  100% {
    background-position: -200% 0;
  }
}