Snippets Card Team – Material Design

🏷️ Extraits & Composants HTML 📅 10/04/2026 22:00:00 👤 Mezgani said
Material Design Card Card Team Template Ui Snippets Html

Snippet de carte de l'équipe avec design moderne en responsive avec Material Design.

<!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 Card Team Material Design 2026 0420225 | AngularForAll</title>
<!-- Material Symbols & Fonts -->
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0,1" />
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">

  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      font-family: 'Roboto', sans-serif;
      background: #f5f5f5;
      min-height: 100vh;
      padding: 40px 20px;
    }

    /* Material Design Container */
    .container {
      max-width: 1280px;
      margin: 0 auto;
    }

    /* Header Material */
    .md-headline {
      font-size: 2.5rem;
      font-weight: 400;
      letter-spacing: 0;
      color: #1d1b20;
      margin-bottom: 8px;
    }

    .md-subhead {
      font-size: 1rem;
      font-weight: 400;
      color: #49454f;
      margin-bottom: 40px;
    }

    .md-chip {
      display: inline-block;
      background: #e8def8;
      color: #1d1b20;
      padding: 4px 16px;
      border-radius: 8px;
      font-size: 0.875rem;
      font-weight: 500;
      margin-top: 12px;
    }

    /* Grille Material */
    .team-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 24px;
    }

    /* Material Card - Élévation */
    .md-card {
      background: #fffbfe;
      border-radius: 28px;
      overflow: hidden;
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
      box-shadow: 0 1px 2px 0 rgba(0,0,0,0.3), 0 1px 3px 1px rgba(0,0,0,0.15);
      position: relative;
    }

    .md-card:hover {
      box-shadow: 0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px 0 rgba(0,0,0,0.3);
      transform: translateY(-4px);
    }

    /* Surface teintée */
    .md-card-header {
      background: linear-gradient(135deg, #6750a4 0%, #7b61ff 100%);
      padding: 24px 24px 40px;
      text-align: center;
      position: relative;
    }

    /* Avatar Material */
    .md-avatar {
      width: 120px;
      height: 120px;
      border-radius: 60px;
      border: 4px solid #fffbfe;
      box-shadow: 0 4px 8px rgba(0,0,0,0.2);
      object-fit: cover;
      transition: transform 0.2s;
      background: #e7e0ec;
    }

    .md-card:hover .md-avatar {
      transform: scale(1.03);
    }

    /* Contenu de la carte */
    .md-card-content {
      padding: 16px 24px 24px;
      margin-top: -20px;
      background: #fffbfe;
      border-radius: 28px 28px 28px 28px;
      position: relative;
    }

    /* Nom - Title Large */
    .md-title-large {
      font-size: 1.5rem;
      font-weight: 400;
      letter-spacing: 0;
      color: #1d1b20;
      margin-bottom: 4px;
      line-height: 1.2;
    }

    /* Job - Title Small */
    .md-title-small {
      font-size: 0.875rem;
      font-weight: 500;
      letter-spacing: 0.1px;
      color: #6750a4;
      margin-bottom: 16px;
      text-transform: uppercase;
    }

    /* Liste d'informations Material */
    .md-list {
      list-style: none;
      margin-bottom: 20px;
    }

    .md-list-item {
      display: flex;
      align-items: center;
      gap: 16px;
      padding: 8px 0;
      color: #49454f;
      font-size: 0.875rem;
      border-bottom: 1px solid #e7e0ec;
    }

    .md-list-item:last-child {
      border-bottom: none;
    }

    .md-list-item .material-symbols-outlined {
      color: #6750a4;
      font-size: 20px;
      width: 24px;
      text-align: center;
      font-variation-settings: 'FILL' 0, 'wght' 400;
    }

    .md-list-item span:last-child {
      flex: 1;
      line-height: 1.4;
    }

    /* Chips / Badges Material */
    .md-chips {
      display: flex;
      flex-wrap: wrap;
      gap: 8px;
      margin-bottom: 20px;
    }

    .md-chip-small {
      background: #e8def8;
      color: #1d1b20;
      padding: 4px 12px;
      border-radius: 8px;
      font-size: 0.75rem;
      font-weight: 500;
      display: inline-flex;
      align-items: center;
      gap: 6px;
    }

    /* Actions Material */
    .md-card-actions {
      display: flex;
      justify-content: flex-end;
      gap: 8px;
      margin-top: 8px;
      padding-top: 8px;
      border-top: 1px solid #e7e0ec;
    }

    /* Material Button */
    .md-button {
      background: transparent;
      border: none;
      padding: 10px 16px;
      border-radius: 100px;
      font-family: 'Roboto', sans-serif;
      font-weight: 500;
      font-size: 0.875rem;
      letter-spacing: 0.1px;
      color: #6750a4;
      cursor: pointer;
      transition: background 0.2s;
      display: inline-flex;
      align-items: center;
      gap: 8px;
    }

    .md-button:hover {
      background: rgba(103, 80, 164, 0.08);
    }

    .md-button-filled {
      background: #6750a4;
      color: white;
      box-shadow: 0 1px 2px rgba(0,0,0,0.3);
    }

    .md-button-filled:hover {
      background: #7b61ff;
      box-shadow: 0 1px 3px rgba(0,0,0,0.3);
    }

    /* Icon Button */
    .md-icon-button {
      width: 40px;
      height: 40px;
      border-radius: 20px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      background: transparent;
      border: none;
      cursor: pointer;
      color: #49454f;
      transition: background 0.2s;
    }

    .md-icon-button:hover {
      background: rgba(73, 69, 79, 0.08);
    }

    /* Material Elevation Levels */
    .elevation-1 { box-shadow: 0 1px 2px 0 rgba(0,0,0,0.3), 0 1px 3px 1px rgba(0,0,0,0.15); }
    .elevation-2 { box-shadow: 0 1px 2px 0 rgba(0,0,0,0.3), 0 2px 6px 2px rgba(0,0,0,0.15); }
    .elevation-3 { box-shadow: 0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px 0 rgba(0,0,0,0.3); }

    /* Responsive */
    @media (max-width: 992px) {
      .team-grid {
        grid-template-columns: repeat(2, 1fr);
      }
    }

    @media (max-width: 600px) {
      .team-grid {
        grid-template-columns: 1fr;
      }
      body { padding: 24px 16px; }
      .md-headline { font-size: 2rem; }
    }

    /* Material Ripple Effect */
    .md-ripple {
      position: relative;
      overflow: hidden;
    }

    /* Animation */
    @keyframes material-fade-in {
      from { opacity: 0; transform: translateY(20px); }
      to { opacity: 1; transform: translateY(0); }
    }

    .md-card {
      animation: material-fade-in 0.4s ease-out forwards;
    }

    .md-card:nth-child(2) { animation-delay: 0.05s; }
    .md-card:nth-child(3) { animation-delay: 0.1s; }
    .md-card:nth-child(4) { animation-delay: 0.15s; }
    .md-card:nth-child(5) { animation-delay: 0.2s; }
    .md-card:nth-child(6) { animation-delay: 0.25s; }

    /* Surface colors */
    .surface-primary { background: #fffbfe; }
    .surface-secondary { background: #f7f2fa; }
  </style>
</head>
<body>
  <div class="container">
    <!-- Header Material Design -->
    <header style="margin-bottom: 32px;">
      <span class="md-chip">
        <span class="material-symbols-outlined" style="font-size: 16px;">groups</span>
        Équipe
      </span>
      <h1 class="md-headline">Notre équipe</h1>
      <p class="md-subhead">Des professionnels passionnés à votre service</p>
    </header>

    <!-- Grille de cartes Material Design -->
    <div class="team-grid">

      <!-- Carte 1 -->
      <div class="md-card">
        <div class="md-card-header">
          <img src="public/avatar.png" alt="Sophie Martin" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Sophie Martin</h2>
          <div class="md-title-small">Directrice Générale</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>123 Av. des Champs-Élysées, Paris</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 1 23 45 67 89</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>sophie.martin@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">star</span>
              Leadership
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">strategy</span>
              Stratégie
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Sophie Martin', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Sophie Martin', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" onclick="contactPerson('Sophie Martin', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

      <!-- Carte 2 -->
      <div class="md-card">
        <div class="md-card-header" style="background: linear-gradient(135deg, #006c4c 0%, #009688 100%);">
          <img src="public/avatar.png" alt="Thomas Dubois" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Thomas Dubois</h2>
          <div class="md-title-small" style="color: #006c4c;">Responsable Technique</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>45 Rue de la République, Lyon</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 4 78 90 12 34</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>thomas.dubois@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">code</span>
              DevOps
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">cloud</span>
              Cloud
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">security</span>
              Sécurité
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Thomas Dubois', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Thomas Dubois', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" style="background: #006c4c;" onclick="contactPerson('Thomas Dubois', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

      <!-- Carte 3 -->
      <div class="md-card">
        <div class="md-card-header" style="background: linear-gradient(135deg, #b3261e 0%, #e53935 100%);">
          <img src="public/avatar.png" alt="Marie Lambert" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Marie Lambert</h2>
          <div class="md-title-small" style="color: #b3261e;">Designer UX/UI</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>78 Boulevard Haussmann, Paris</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 1 87 65 43 21</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>marie.lambert@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">brush</span>
              UI Design
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">palette</span>
              UX Research
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Marie Lambert', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Marie Lambert', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" style="background: #b3261e;" onclick="contactPerson('Marie Lambert', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

      <!-- Carte 4 -->
      <div class="md-card">
        <div class="md-card-header" style="background: linear-gradient(135deg, #f57c00 0%, #fb8c00 100%);">
          <img src="public/avatar.png" alt="Pierre Moreau" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Pierre Moreau</h2>
          <div class="md-title-small" style="color: #f57c00;">Développeur Senior</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>12 Rue Sainte-Catherine, Bordeaux</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 5 56 43 78 90</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>pierre.moreau@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">javascript</span>
              React
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">data_object</span>
              Node.js
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Pierre Moreau', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Pierre Moreau', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" style="background: #f57c00;" onclick="contactPerson('Pierre Moreau', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

      <!-- Carte 5 -->
      <div class="md-card">
        <div class="md-card-header" style="background: linear-gradient(135deg, #0b5e7c 0%, #0288d1 100%);">
          <img src="public/avatar.png" alt="Julie Renard" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Julie Renard</h2>
          <div class="md-title-small" style="color: #0b5e7c;">Chef de Projet</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>34 Rue du Vieux Marché, Nantes</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 2 40 98 76 54</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>julie.renard@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">schedule</span>
              Agile
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">task</span>
              Scrum
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Julie Renard', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Julie Renard', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" style="background: #0b5e7c;" onclick="contactPerson('Julie Renard', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

      <!-- Carte 6 -->
      <div class="md-card">
        <div class="md-card-header" style="background: linear-gradient(135deg, #5e35b1 0%, #7e57c2 100%);">
          <img src="public/avatar.png" alt="Lucas Bernard" class="md-avatar">
        </div>
        <div class="md-card-content">
          <h2 class="md-title-large">Lucas Bernard</h2>
          <div class="md-title-small" style="color: #5e35b1;">Support Client</div>

          <ul class="md-list">
            <li class="md-list-item">
              <span class="material-symbols-outlined">location_on</span>
              <span>56 Rue de la Paix, Marseille</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">call</span>
              <span>+33 4 91 12 34 56</span>
            </li>
            <li class="md-list-item">
              <span class="material-symbols-outlined">mail</span>
              <span>lucas.bernard@entreprise.fr</span>
            </li>
          </ul>

          <div class="md-chips">
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">headset_mic</span>
              Support 24/7
            </span>
            <span class="md-chip-small">
              <span class="material-symbols-outlined" style="font-size: 14px;">language</span>
              Français/English
            </span>
          </div>

          <div class="md-card-actions">
            <button class="md-icon-button" onclick="contactPerson('Lucas Bernard', 'email')">
              <span class="material-symbols-outlined">mail</span>
            </button>
            <button class="md-icon-button" onclick="contactPerson('Lucas Bernard', 'call')">
              <span class="material-symbols-outlined">call</span>
            </button>
            <button class="md-button md-button-filled" style="background: #5e35b1;" onclick="contactPerson('Lucas Bernard', 'message')">
              <span class="material-symbols-outlined">chat</span>
              Message
            </button>
          </div>
        </div>
      </div>

    </div>
  </div>

  <!-- Material Snackbar -->
  <div id="snackbar" style="
    position: fixed;
    bottom: 24px;
    left: 50%;
    transform: translateX(-50%) translateY(100px);
    background: #313033;
    color: #f2f2f2;
    padding: 14px 24px;
    border-radius: 4px;
    display: flex;
    align-items: center;
    gap: 16px;
    box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px 0 rgba(0,0,0,0.14), 0 1px 18px 0 rgba(0,0,0,0.12);
    transition: transform 0.25s cubic-bezier(0.4, 0, 1, 1);
    z-index: 1000;
    font-family: 'Roboto', sans-serif;
    font-size: 0.875rem;
    max-width: 90%;
  ">
    <span id="snackbar-message">Message envoyé</span>
    <button onclick="hideSnackbar()" style="
      background: none;
      border: none;
      color: #d0bcff;
      font-weight: 500;
      cursor: pointer;
      padding: 8px;
      margin: -8px;
      font-family: 'Roboto', sans-serif;
      font-size: 0.875rem;
    ">OK</button>
  </div>

  <script>
    // Material Design Snackbar
    let snackbarTimeout;
    const snackbar = document.getElementById('snackbar');
    const snackbarMessage = document.getElementById('snackbar-message');

    function showSnackbar(message) {
      snackbarMessage.textContent = message;
      snackbar.style.transform = 'translateX(-50%) translateY(0)';

      clearTimeout(snackbarTimeout);
      snackbarTimeout = setTimeout(() => {
        hideSnackbar();
      }, 4000);
    }

    function hideSnackbar() {
      snackbar.style.transform = 'translateX(-50%) translateY(100px)';
    }

    // Fonction de contact Material
    function contactPerson(name, action) {
      let message = '';

      switch(action) {
        case 'email':
          message = `📧 Email à ${name} : ouverture du client mail...`;
          break;
        case 'call':
          message = `📞 Appel de ${name} en cours...`;
          break;
        case 'message':
          message = `💬 Message envoyé à ${name}`;
          break;
        default:
          message = `Contact avec ${name}`;
      }

      showSnackbar(message);

      // Simulation d'action
      console.log(`Action: ${action} - Contact: ${name}`);
    }

    // Material Ripple Effect (simplifié)
    document.querySelectorAll('.md-button, .md-icon-button').forEach(button => {
      button.addEventListener('click', function(e) {
        const ripple = document.createElement('span');
        ripple.style.position = 'absolute';
        ripple.style.borderRadius = '50%';
        ripple.style.background = 'rgba(0,0,0,0.1)';
        ripple.style.width = ripple.style.height = '100px';
        ripple.style.transform = 'scale(0) translate(-50%, -50%)';
        ripple.style.transformOrigin = '0 0';
        ripple.style.animation = 'ripple 0.4s ease-out';
        ripple.style.pointerEvents = 'none';

        this.style.position = 'relative';
        this.style.overflow = 'hidden';
        this.appendChild(ripple);

        setTimeout(() => ripple.remove(), 400);
      });
    });

    // Ajout style ripple
    const style = document.createElement('style');
    style.textContent = `
      @keyframes ripple {
        to { transform: scale(4); opacity: 0; }
      }
    `;
    document.head.appendChild(style);

    // Fermer snackbar au clic extérieur (optionnel)
    document.addEventListener('click', function(e) {
      if (!snackbar.contains(e.target) && !e.target.closest('.md-button') && !e.target.closest('.md-icon-button')) {
        // hideSnackbar(); // Optionnel
      }
    });
  </script>
</body>
</html>

Ouvrir cet aperçu dans un nouvel onglet du navigateur

🔗 Ouvrir dans le navigateur