Snippets Dropdown

Bootstrap 5 Profile Cards with Hover Bio Reveal

A row of team profile cards that reveal a short bio with a smooth expand on hover, or on tap for touch devices.

Bootstrap 5 No jQuery Jun 2020 2.4K views

<section class="wdw-stage">
  <div class="container" style="max-width:1000px">
    <div class="text-center mb-5"><span class="wdw-eyebrow">Our team</span><h1 class="wdw-heading h2 mt-1 mb-1">Meet the people behind the work</h1><p class="wdw-muted mb-0">Hover, focus or tap a portrait to read more.</p></div>
    <div class="row g-4 profiles">
      <div class="col-md-4">
        <article class="profile">
          <img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=640&h=800&fit=crop&q=75" alt="Portrait of Amara Okafor" width="640" height="800" loading="lazy">
          <div class="profile-over">
            <div class="d-flex align-items-end justify-content-between gap-2">
              <div><h2 class="h5 fw-bold mb-0 text-white">Amara Okafor</h2><p class="small mb-0 profile-role">Product Designer</p></div>
              <button type="button" class="profile-toggle" aria-expanded="false" aria-controls="bio-1" aria-label="About Amara Okafor"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button>
            </div>
            <div class="profile-bio" id="bio-1" inert>
              <div class="profile-bio-in">
                <p class="small mb-3 pt-3">Amara leads design systems for a team of twelve and writes about accessible interfaces, motion and the craft of small details.</p>
                <div class="d-flex flex-wrap align-items-center gap-2">
                  <span class="badge rounded-pill profile-chip">Design systems</span><span class="badge rounded-pill profile-chip">Motion</span>
                  <span class="ms-auto d-flex gap-2"><a class="profile-social" href="#" aria-label="Amara on LinkedIn"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9.75h4v11H3zM9.5 9.75h3.8v1.5h.1c.5-1 1.800-1.800 3.700-1.800 4 0 4.700 2.600 4.700 6v5.300h-4v-4.700c0-1.100 0-2.600-1.600-2.600s-1.800 1.200-1.800 2.500v4.800h-4z"/></svg></a><a class="profile-social" href="#" aria-label="Email Amara"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></a></span>
                </div>
              </div>
            </div>
          </div>
        </article>
      </div>
      <div class="col-md-4">
        <article class="profile">
          <img src="https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=640&h=800&fit=crop&q=75" alt="Portrait of Daniel Reyes" width="640" height="800" loading="lazy">
          <div class="profile-over">
            <div class="d-flex align-items-end justify-content-between gap-2">
              <div><h2 class="h5 fw-bold mb-0 text-white">Daniel Reyes</h2><p class="small mb-0 profile-role">Engineering Lead</p></div>
              <button type="button" class="profile-toggle" aria-expanded="false" aria-controls="bio-2" aria-label="About Daniel Reyes"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button>
            </div>
            <div class="profile-bio" id="bio-2" inert>
              <div class="profile-bio-in">
                <p class="small mb-3 pt-3">Daniel builds fast, dependable web platforms and mentors junior developers. A regular conference speaker on front-end performance.</p>
                <div class="d-flex flex-wrap align-items-center gap-2">
                  <span class="badge rounded-pill profile-chip">Performance</span><span class="badge rounded-pill profile-chip">Mentoring</span>
                  <span class="ms-auto d-flex gap-2"><a class="profile-social" href="#" aria-label="Daniel on LinkedIn"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9.75h4v11H3zM9.5 9.75h3.8v1.5h.1c.5-1 1.800-1.800 3.700-1.800 4 0 4.700 2.600 4.700 6v5.300h-4v-4.700c0-1.100 0-2.600-1.600-2.600s-1.800 1.200-1.800 2.500v4.800h-4z"/></svg></a><a class="profile-social" href="#" aria-label="Email Daniel"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></a></span>
                </div>
              </div>
            </div>
          </div>
        </article>
      </div>
      <div class="col-md-4">
        <article class="profile">
          <img src="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=640&h=800&fit=crop&q=75" alt="Portrait of Elena Novak" width="640" height="800" loading="lazy">
          <div class="profile-over">
            <div class="d-flex align-items-end justify-content-between gap-2">
              <div><h2 class="h5 fw-bold mb-0 text-white">Elena Novak</h2><p class="small mb-0 profile-role">Brand Strategist</p></div>
              <button type="button" class="profile-toggle" aria-expanded="false" aria-controls="bio-3" aria-label="About Elena Novak"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button>
            </div>
            <div class="profile-bio" id="bio-3" inert>
              <div class="profile-bio-in">
                <p class="small mb-3 pt-3">Elena helps young companies find their voice, turning scattered ideas into clear, memorable brands that people trust.</p>
                <div class="d-flex flex-wrap align-items-center gap-2">
                  <span class="badge rounded-pill profile-chip">Brand voice</span><span class="badge rounded-pill profile-chip">Naming</span>
                  <span class="ms-auto d-flex gap-2"><a class="profile-social" href="#" aria-label="Elena on LinkedIn"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9.75h4v11H3zM9.5 9.75h3.8v1.5h.1c.5-1 1.800-1.800 3.700-1.800 4 0 4.700 2.600 4.700 6v5.300h-4v-4.700c0-1.100 0-2.600-1.600-2.600s-1.800 1.200-1.800 2.500v4.800h-4z"/></svg></a><a class="profile-social" href="#" aria-label="Email Elena"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></a></span>
                </div>
              </div>
            </div>
          </div>
        </article>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.