Snippets Loaders CSS – Bootstrap 5

🏷️ Extraits & Composants HTML 📅 06/04/2026 21:00:00 👤 Mezgani said
Bootstrap 5 Css Loaders Loading Animation Spinner Css Snippets Html

Collection de 30 loaders CSS animés, spinners et effets de chargement compatibles Bootstrap 5.

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8" />
  <meta name="copyright" content="MEZGANI Said" />
  <meta name="author" content="AngularForAll" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Snippets Loaders CSS 01 | AngularForAll</title>
<!-- Bootstrap 5 + Icons -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
  
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
  
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      font-family: 'Inter', sans-serif;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      min-height: 100vh;
      padding: 40px 0;
    }

    .header {
      text-align: center;
      margin-bottom: 40px;
      color: white;
    }

    .header h1 {
      font-weight: 700;
      font-size: 2.8rem;
      text-shadow: 0 4px 20px rgba(0,0,0,0.2);
      letter-spacing: -0.5px;
    }

    .header p {
      font-size: 1.1rem;
      opacity: 0.95;
      font-weight: 300;
    }

    .badge-counter {
      background: rgba(255,255,255,0.2);
      backdrop-filter: blur(10px);
      padding: 8px 24px;
      border-radius: 50px;
      display: inline-block;
      margin-top: 15px;
      border: 1px solid rgba(255,255,255,0.3);
    }

    .card {
      border: none;
      border-radius: 24px;
      background: rgba(255, 255, 255, 0.95);
      backdrop-filter: blur(10px);
      box-shadow: 0 15px 35px -8px rgba(0,0,0,0.2);
      transition: all 0.3s ease;
      height: 100%;
      overflow: hidden;
    }

    .card:hover {
      transform: translateY(-5px);
      box-shadow: 0 25px 45px -10px rgba(0,0,0,0.3);
      background: white;
    }

    .card-header-custom {
      padding: 16px 20px 8px;
      border-bottom: 1px solid rgba(0,0,0,0.05);
      display: flex;
      align-items: center;
      justify-content: space-between;
    }

    .card-title {
      font-weight: 650;
      font-size: 1rem;
      color: #1e293b;
      margin: 0;
    }

    .badge-type {
      background: linear-gradient(135deg, #667eea, #764ba2);
      color: white;
      padding: 4px 12px;
      border-radius: 30px;
      font-size: 0.7rem;
      font-weight: 500;
    }

    .card-body {
      padding: 24px 20px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      min-height: 160px;
    }

    .card-footer-custom {
      padding: 12px 20px 16px;
      background: transparent;
      border-top: 1px solid rgba(0,0,0,0.03);
      color: #64748b;
      font-size: 0.8rem;
      text-align: center;
    }

    /* Styles pour les loaders personnalisés */
    .loader-wrapper {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 15px;
      width: 100%;
    }

    /* Spinner 1 : Cercle simple */
    .spinner-1 {
      width: 50px;
      height: 50px;
      border: 4px solid #e2e8f0;
      border-top-color: #667eea;
      border-radius: 50%;
      animation: spin 1s linear infinite;
    }

    /* Spinner 2 : Double cercle */
    .spinner-2 {
      width: 50px;
      height: 50px;
      border: 4px solid transparent;
      border-top-color: #764ba2;
      border-bottom-color: #764ba2;
      border-radius: 50%;
      animation: spin 1.2s linear infinite;
    }

    /* Spinner 3 : Cercle avec point */
    .spinner-3 {
      width: 50px;
      height: 50px;
      border: 3px solid #f093fb;
      border-radius: 50%;
      position: relative;
      animation: spin 1.5s linear infinite;
    }
    .spinner-3::before {
      content: '';
      position: absolute;
      top: -3px;
      left: 50%;
      transform: translateX(-50%);
      width: 12px;
      height: 12px;
      background: #f093fb;
      border-radius: 50%;
    }

    /* Spinner 4 : Trois points pulsants */
    .spinner-4 {
      display: flex;
      gap: 8px;
    }
    .spinner-4 .dot {
      width: 12px;
      height: 12px;
      background: #667eea;
      border-radius: 50%;
      animation: pulse 1.4s ease-in-out infinite;
    }
    .spinner-4 .dot:nth-child(2) { animation-delay: 0.2s; background: #764ba2; }
    .spinner-4 .dot:nth-child(3) { animation-delay: 0.4s; background: #f093fb; }

    /* Spinner 5 : Barres */
    .spinner-5 {
      display: flex;
      gap: 4px;
    }
    .spinner-5 .bar {
      width: 6px;
      height: 30px;
      background: #667eea;
      border-radius: 3px;
      animation: scale 1.2s ease-in-out infinite;
    }
    .spinner-5 .bar:nth-child(2) { animation-delay: 0.1s; background: #764ba2; }
    .spinner-5 .bar:nth-child(3) { animation-delay: 0.2s; background: #f093fb; }
    .spinner-5 .bar:nth-child(4) { animation-delay: 0.3s; background: #667eea; }
    .spinner-5 .bar:nth-child(5) { animation-delay: 0.4s; background: #764ba2; }

    /* Spinner 6 : Anneau tournant */
    .spinner-6 {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background: conic-gradient(from 0deg, #667eea, #764ba2, #f093fb, #667eea);
      animation: spin 1s linear infinite;
      mask: radial-gradient(transparent 18px, black 19px);
      -webkit-mask: radial-gradient(transparent 18px, black 19px);
    }

    /* Spinner 7 : Cube */
    .spinner-7 {
      width: 40px;
      height: 40px;
      background: #667eea;
      animation: cubeRotate 1.5s infinite ease-in-out;
    }

    /* Spinner 8 : Vague */
    .spinner-8 {
      display: flex;
      gap: 3px;
    }
    .spinner-8 .wave {
      width: 6px;
      height: 30px;
      background: #764ba2;
      border-radius: 3px;
      animation: wave 1.2s ease-in-out infinite;
    }
    .spinner-8 .wave:nth-child(2) { animation-delay: 0.1s; }
    .spinner-8 .wave:nth-child(3) { animation-delay: 0.2s; }
    .spinner-8 .wave:nth-child(4) { animation-delay: 0.3s; }
    .spinner-8 .wave:nth-child(5) { animation-delay: 0.4s; }

    /* Spinner 9 : Cercle avec ombre */
    .spinner-9 {
      width: 50px;
      height: 50px;
      border: 4px solid rgba(102, 126, 234, 0.2);
      border-top-color: #667eea;
      border-radius: 50%;
      animation: spin 0.8s linear infinite;
      box-shadow: 0 0 20px rgba(102, 126, 234, 0.3);
    }

    /* Spinner 10 : Flip */
    .spinner-10 {
      width: 40px;
      height: 40px;
      background: #f093fb;
      animation: flip 1.2s infinite ease-in-out;
    }

    /* Spinner 11 : Infinity */
    .spinner-11 {
      width: 50px;
      height: 25px;
      position: relative;
    }
    .spinner-11::before,
    .spinner-11::after {
      content: '';
      position: absolute;
      width: 18px;
      height: 18px;
      border: 3px solid #667eea;
      border-radius: 50%;
      top: 0;
    }
    .spinner-11::before {
      left: 0;
      animation: infinityLeft 1.5s infinite;
    }
    .spinner-11::after {
      right: 0;
      animation: infinityRight 1.5s infinite;
    }

    /* Spinner 12 : Growing circle */
    .spinner-12 {
      width: 30px;
      height: 30px;
      background: #764ba2;
      border-radius: 50%;
      animation: grow 1s ease-in-out infinite;
    }

    /* Spinner 13 : Dots grid */
    .spinner-13 {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 6px;
    }
    .spinner-13 .grid-dot {
      width: 10px;
      height: 10px;
      background: #667eea;
      border-radius: 2px;
      animation: fade 1.5s ease-in-out infinite;
    }
    .spinner-13 .grid-dot:nth-child(2) { animation-delay: 0.1s; }
    .spinner-13 .grid-dot:nth-child(3) { animation-delay: 0.2s; }
    .spinner-13 .grid-dot:nth-child(4) { animation-delay: 0.3s; }
    .spinner-13 .grid-dot:nth-child(5) { animation-delay: 0.4s; }
    .spinner-13 .grid-dot:nth-child(6) { animation-delay: 0.5s; }
    .spinner-13 .grid-dot:nth-child(7) { animation-delay: 0.6s; }
    .spinner-13 .grid-dot:nth-child(8) { animation-delay: 0.7s; }
    .spinner-13 .grid-dot:nth-child(9) { animation-delay: 0.8s; }

    /* Spinner 14 : Progress bar */
    .spinner-14 {
      width: 100%;
      height: 6px;
      background: #e2e8f0;
      border-radius: 10px;
      overflow: hidden;
    }
    .spinner-14 .progress-fill {
      width: 30%;
      height: 100%;
      background: linear-gradient(90deg, #667eea, #764ba2, #f093fb);
      border-radius: 10px;
      animation: progressMove 1.5s ease-in-out infinite;
    }

    /* Spinner 15 : Text loader */
    .spinner-15 {
      font-size: 18px;
      font-weight: 600;
      color: #667eea;
    }
    .spinner-15::after {
      content: '...';
      animation: dots 1.5s steps(4, end) infinite;
    }

    /* Spinner 16 : Square rotate */
    .spinner-16 {
      width: 40px;
      height: 40px;
      border: 3px solid #f093fb;
      animation: squareRotate 2s infinite;
    }

    /* Spinner 17 : Circle fill */
    .spinner-17 {
      width: 50px;
      height: 50px;
      border: 3px solid #e2e8f0;
      border-radius: 50%;
      position: relative;
      overflow: hidden;
    }
    .spinner-17::before {
      content: '';
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      height: 0%;
      background: #667eea;
      animation: fill 2s ease-in-out infinite;
    }

    /* Spinner 18 : Bouncing ball */
    .spinner-18 {
      width: 20px;
      height: 20px;
      background: #764ba2;
      border-radius: 50%;
      animation: bounce 0.8s ease-in-out infinite;
    }

    /* Spinner 19 : Rainbow border */
    .spinner-19 {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      border: 4px solid;
      border-color: #667eea #764ba2 #f093fb #e2e8f0;
      animation: spin 1.5s linear infinite;
    }

    /* Spinner 20 : Fading squares */
    .spinner-20 {
      display: flex;
      gap: 5px;
    }
    .spinner-20 .square {
      width: 15px;
      height: 15px;
      background: #f093fb;
      animation: fadeSquare 1.2s ease-in-out infinite;
    }
    .spinner-20 .square:nth-child(2) { animation-delay: 0.2s; }
    .spinner-20 .square:nth-child(3) { animation-delay: 0.4s; }

    /* Spinner 21 : Clock */
    .spinner-21 {
      width: 50px;
      height: 50px;
      border: 3px solid #667eea;
      border-radius: 50%;
      position: relative;
    }
    .spinner-21::before {
      content: '';
      position: absolute;
      width: 3px;
      height: 20px;
      background: #667eea;
      top: 5px;
      left: 50%;
      transform-origin: bottom;
      animation: clock 2s linear infinite;
    }

    /* Spinner 22 : Zigzag */
    .spinner-22 {
      width: 60px;
      height: 20px;
      background: repeating-linear-gradient(90deg, #764ba2 0px, #764ba2 8px, transparent 8px, transparent 16px);
      animation: zigzag 1s linear infinite;
    }

    /* Spinner 23 : Circle pulse */
    .spinner-23 {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background: radial-gradient(circle, #f093fb, #667eea);
      animation: circlePulse 1.5s ease-in-out infinite;
    }

    /* Spinner 24 : Ring rotate */
    .spinner-24 {
      width: 50px;
      height: 50px;
      border: 3px solid transparent;
      border-top-color: #667eea;
      border-right-color: #667eea;
      border-radius: 50%;
      animation: spin 0.7s linear infinite;
    }

    /* Spinner 25 : Orbit */
    .spinner-25 {
      width: 60px;
      height: 60px;
      position: relative;
    }
    .spinner-25 .orbit {
      position: absolute;
      width: 15px;
      height: 15px;
      background: #764ba2;
      border-radius: 50%;
      top: 0;
      left: 50%;
      transform: translateX(-50%);
      animation: orbit 1.5s linear infinite;
    }

    /* Spinner 26 : Neon */
    .spinner-26 {
      width: 50px;
      height: 50px;
      border: 3px solid #f093fb;
      border-radius: 50%;
      box-shadow: 0 0 15px #f093fb, 0 0 30px #f093fb inset;
      animation: spin 1s linear infinite;
    }

    /* Spinner 27 : Minimal dots */
    .spinner-27 {
      width: 8px;
      height: 8px;
      background: #667eea;
      border-radius: 50%;
      box-shadow: 15px 0 #667eea, -15px 0 #667eea;
      animation: minimalDots 1s ease-in-out infinite;
    }

    /* Spinner 28 : Circle dash */
    .spinner-28 {
      width: 50px;
      height: 50px;
      border: 4px dashed #764ba2;
      border-radius: 50%;
      animation: spin 2s linear infinite;
    }

    /* Spinner 29 : Half circle */
    .spinner-29 {
      width: 50px;
      height: 25px;
      overflow: hidden;
    }
    .spinner-29::before {
      content: '';
      display: block;
      width: 50px;
      height: 50px;
      border: 4px solid #f093fb;
      border-radius: 50%;
      border-bottom-color: transparent;
      animation: spin 1s linear infinite;
    }

    /* Spinner 30 : Morph */
    .spinner-30 {
      width: 40px;
      height: 40px;
      background: #667eea;
      animation: morph 1.5s ease-in-out infinite;
    }

    /* Animations */
    @keyframes spin {
      to { transform: rotate(360deg); }
    }

    @keyframes pulse {
      0%, 60%, 100% { transform: scale(1); opacity: 0.5; }
      30% { transform: scale(1.3); opacity: 1; }
    }

    @keyframes scale {
      0%, 40%, 100% { transform: scaleY(0.4); }
      20% { transform: scaleY(1); }
    }

    @keyframes cubeRotate {
      0% { transform: perspective(120px) rotateX(0deg) rotateY(0deg); }
      50% { transform: perspective(120px) rotateX(-180deg) rotateY(0deg); }
      100% { transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); }
    }

    @keyframes wave {
      0%, 40%, 100% { transform: scaleY(0.4); }
      20% { transform: scaleY(1); }
    }

    @keyframes flip {
      0% { transform: perspective(120px) rotateX(0deg); }
      50% { transform: perspective(120px) rotateX(-180deg); }
      100% { transform: perspective(120px) rotateX(-360deg); }
    }

    @keyframes infinityLeft {
      0%, 100% { transform: translateX(0); }
      50% { transform: translateX(15px); }
    }

    @keyframes infinityRight {
      0%, 100% { transform: translateX(0); }
      50% { transform: translateX(-15px); }
    }

    @keyframes grow {
      0%, 100% { transform: scale(1); opacity: 0.5; }
      50% { transform: scale(1.5); opacity: 1; }
    }

    @keyframes fade {
      0%, 100% { opacity: 0.3; }
      50% { opacity: 1; }
    }

    @keyframes progressMove {
      0% { width: 10%; margin-left: 0; }
      50% { width: 70%; margin-left: 15%; }
      100% { width: 10%; margin-left: 90%; }
    }

    @keyframes dots {
      0%, 20% { content: ''; }
      40% { content: '.'; }
      60% { content: '..'; }
      80%, 100% { content: '...'; }
    }

    @keyframes squareRotate {
      0% { transform: rotate(0deg); }
      25% { transform: rotate(90deg); }
      50% { transform: rotate(180deg); }
      75% { transform: rotate(270deg); }
      100% { transform: rotate(360deg); }
    }

    @keyframes fill {
      0% { height: 0%; }
      50% { height: 100%; }
      100% { height: 0%; }
    }

    @keyframes bounce {
      0%, 100% { transform: translateY(0); }
      50% { transform: translateY(-20px); }
    }

    @keyframes fadeSquare {
      0%, 100% { opacity: 0.2; transform: scale(0.8); }
      50% { opacity: 1; transform: scale(1); }
    }

    @keyframes clock {
      from { transform: rotate(0deg); }
      to { transform: rotate(360deg); }
    }

    @keyframes zigzag {
      0% { background-position: 0 0; }
      100% { background-position: 16px 0; }
    }

    @keyframes circlePulse {
      0%, 100% { transform: scale(1); opacity: 0.8; }
      50% { transform: scale(1.2); opacity: 1; }
    }

    @keyframes orbit {
      from { transform: rotate(0deg) translateX(25px) rotate(0deg); }
      to { transform: rotate(360deg) translateX(25px) rotate(-360deg); }
    }

    @keyframes minimalDots {
      0%, 100% { opacity: 0.3; }
      50% { opacity: 1; }
    }

    @keyframes morph {
      0% { border-radius: 0; transform: rotate(0deg); }
      50% { border-radius: 50%; transform: rotate(180deg); }
      100% { border-radius: 0; transform: rotate(360deg); }
    }

    /* Bootstrap spinner override */
    .spinner-border-custom {
      width: 3rem;
      height: 3rem;
    }
  </style>
</head>
<body>
  <div class="container">
    <!-- Header -->
    <div class="header">
      <h1>🎨 30 Loaders CSS</h1>
      <p>Collection de spinners et animations de chargement</p>
      <div class="badge-counter">
        <i class="bi bi-collection me-2"></i>30 exemples · Bootstrap 5 · CSS Pur
      </div>
    </div>

    <!-- Grille de loaders -->
    <div class="row g-4">
      <!-- Loader 1 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-arrow-repeat me-1"></i>Spinner Classique</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-1"></div>
            </div>
          </div>
          <div class="card-footer-custom">Cercle simple avec bordure</div>
        </div>
      </div>

      <!-- Loader 2 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-arrow-repeat me-1"></i>Double Cercle</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-2"></div>
            </div>
          </div>
          <div class="card-footer-custom">Bordure haut et bas</div>
        </div>
      </div>

      <!-- Loader 3 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-dot me-1"></i>Cercle + Point</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-3"></div>
            </div>
          </div>
          <div class="card-footer-custom">Anneau avec point mobile</div>
        </div>
      </div>

      <!-- Loader 4 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-three-dots me-1"></i>Points Pulsants</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-4">
                <div class="dot"></div>
                <div class="dot"></div>
                <div class="dot"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Trois points animés</div>
        </div>
      </div>

      <!-- Loader 5 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-soundwave me-1"></i>Barres</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-5">
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Égaliseur audio</div>
        </div>
      </div>

      <!-- Loader 6 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-palette me-1"></i>Conic Gradient</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-6"></div>
            </div>
          </div>
          <div class="card-footer-custom">Dégradé conique</div>
        </div>
      </div>

      <!-- Loader 7 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-box me-1"></i>Cube 3D</span>
            <span class="badge-type">CSS 3D</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-7"></div>
            </div>
          </div>
          <div class="card-footer-custom">Cube en rotation</div>
        </div>
      </div>

      <!-- Loader 8 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-water me-1"></i>Vague</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-8">
                <div class="wave"></div>
                <div class="wave"></div>
                <div class="wave"></div>
                <div class="wave"></div>
                <div class="wave"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Effet de vague</div>
        </div>
      </div>

      <!-- Loader 9 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-brightness-high me-1"></i>Ombre Portée</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-9"></div>
            </div>
          </div>
          <div class="card-footer-custom">Avec box-shadow</div>
        </div>
      </div>

      <!-- Loader 10 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-arrow-left-right me-1"></i>Flip</span>
            <span class="badge-type">CSS 3D</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-10"></div>
            </div>
          </div>
          <div class="card-footer-custom">Retournement 3D</div>
        </div>
      </div>

      <!-- Loader 11 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-infinity me-1"></i>Infinity</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-11"></div>
            </div>
          </div>
          <div class="card-footer-custom">Symbole infini</div>
        </div>
      </div>

      <!-- Loader 12 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-circle me-1"></i>Growing</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-12"></div>
            </div>
          </div>
          <div class="card-footer-custom">Cercle qui grossit</div>
        </div>
      </div>

      <!-- Loader 13 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-grid-3x3 me-1"></i>Grille</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-13">
                <div class="grid-dot"></div><div class="grid-dot"></div><div class="grid-dot"></div>
                <div class="grid-dot"></div><div class="grid-dot"></div><div class="grid-dot"></div>
                <div class="grid-dot"></div><div class="grid-dot"></div><div class="grid-dot"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">9 points en grille</div>
        </div>
      </div>

      <!-- Loader 14 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-bar-chart me-1"></i>Progress Bar</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-14">
                <div class="progress-fill"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Barre de progression</div>
        </div>
      </div>

      <!-- Loader 15 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-chat-dots me-1"></i>Text Loader</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-15">Chargement</div>
            </div>
          </div>
          <div class="card-footer-custom">Texte avec points</div>
        </div>
      </div>

      <!-- Loader 16 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-square me-1"></i>Square Rotate</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-16"></div>
            </div>
          </div>
          <div class="card-footer-custom">Carré tournant</div>
        </div>
      </div>

      <!-- Loader 17 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-droplet-half me-1"></i>Circle Fill</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-17"></div>
            </div>
          </div>
          <div class="card-footer-custom">Remplissage progressif</div>
        </div>
      </div>

      <!-- Loader 18 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-basketball me-1"></i>Bouncing</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-18"></div>
            </div>
          </div>
          <div class="card-footer-custom">Balle rebondissante</div>
        </div>
      </div>

      <!-- Loader 19 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-rainbow me-1"></i>Rainbow</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-19"></div>
            </div>
          </div>
          <div class="card-footer-custom">Bordure multicolore</div>
        </div>
      </div>

      <!-- Loader 20 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-square-fill me-1"></i>Fading Squares</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-20">
                <div class="square"></div>
                <div class="square"></div>
                <div class="square"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Carrés en fondu</div>
        </div>
      </div>

      <!-- Loader 21 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-clock me-1"></i>Clock</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-21"></div>
            </div>
          </div>
          <div class="card-footer-custom">Aiguille tournante</div>
        </div>
      </div>

      <!-- Loader 22 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-activity me-1"></i>Zigzag</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-22"></div>
            </div>
          </div>
          <div class="card-footer-custom">Motif répétitif</div>
        </div>
      </div>

      <!-- Loader 23 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-circle-half me-1"></i>Circle Pulse</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-23"></div>
            </div>
          </div>
          <div class="card-footer-custom">Pulsation radiale</div>
        </div>
      </div>

      <!-- Loader 24 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-arrow-clockwise me-1"></i>Ring Rotate</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-24"></div>
            </div>
          </div>
          <div class="card-footer-custom">Anneau partiel</div>
        </div>
      </div>

      <!-- Loader 25 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-globe me-1"></i>Orbit</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-25">
                <div class="orbit"></div>
              </div>
            </div>
          </div>
          <div class="card-footer-custom">Satellite en orbite</div>
        </div>
      </div>

      <!-- Loader 26 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-lightning me-1"></i>Neon</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-26"></div>
            </div>
          </div>
          <div class="card-footer-custom">Effet néon lumineux</div>
        </div>
      </div>

      <!-- Loader 27 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-three-dots-vertical me-1"></i>Minimal Dots</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-27"></div>
            </div>
          </div>
          <div class="card-footer-custom">Points minimalistes</div>
        </div>
      </div>

      <!-- Loader 28 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-dash-circle me-1"></i>Circle Dash</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-28"></div>
            </div>
          </div>
          <div class="card-footer-custom">Bordure en pointillés</div>
        </div>
      </div>

      <!-- Loader 29 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-circle me-1"></i>Half Circle</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-29"></div>
            </div>
          </div>
          <div class="card-footer-custom">Demi-cercle</div>
        </div>
      </div>

      <!-- Loader 30 -->
      <div class="col-xl-3 col-lg-4 col-md-6">
        <div class="card">
          <div class="card-header-custom">
            <span class="card-title"><i class="bi bi-shape me-1"></i>Morph</span>
            <span class="badge-type">CSS</span>
          </div>
          <div class="card-body">
            <div class="loader-wrapper">
              <div class="spinner-30"></div>
            </div>
          </div>
          <div class="card-footer-custom">Transformation progressive</div>
        </div>
      </div>

      <!-- Bootstrap Spinners (exemples supplémentaires inclus dans la grille) -->
      <!-- Note: Les 30 exemples sont déjà couverts ci-dessus -->
    </div>

    <!-- Footer -->
    <div class="text-center mt-5">
      <p class="text-white-50">
        <i class="bi bi-code-square me-1"></i> 
        30 loaders CSS purs · Compatibles tous navigateurs · Bootstrap 5
      </p>
    </div>
  </div>

  <!-- Bootstrap JS -->
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Ouvrir cet aperçu dans un nouvel onglet du navigateur

🔗 Ouvrir dans le navigateur