Holidays Deal Full Access for 50% OFF. Use code lex50 at checkout.

You'll get every theme available plus future additions. That's 43 themes total. Unlimited projects. Lifetime updates. One payment.

How to build a team grid section with a cta card using Tailwind CSS

Craft a responsive team grid that mixes profile cards with a central spotlight block, complete with aspect-ratio images and inline social links—all in Tailwind CSS.

Published on November 26, 2025 by Michael Andreuzza

A team section can be more than a list of headshots. This layout uses a responsive grid, a hero card in the middle, and inline social icons so every profile feels curated. Everything below is plain HTML + Tailwind CSS utilities, making it easy to drop into any Astro component.

What makes this grid feel premium

  • ul[role="list"] keeps semantics accessible while allowing CSS grid control.
  • A hero card spans two columns on large screens and reorders on mobile, acting as the grid’s focal point.
  • Profile cards share the same vertical rhythm: portrait, name/role row, microcopy, then a short bio.
  • Inline icons stay monochrome until hovered, maintaining a professional feel.

1. Grid skeleton and semantics

Start with an unordered list so screen readers announce the number of team members. The grid grows from one column to four at md:.

<ul role="list" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-8">
  <!-- list items go here -->
</ul>
  • gap-8 gives consistent spacing between cards.
  • The role="list" hint ensures announced semantics even when you reset list styles elsewhere.

2. Spotlight (hero) card

The central storytelling block lives within the same list, but spans two columns so it reads like a pull quote.

<li class="flex flex-col items-center justify-center order-first lg:col-span-2 lg:p-12 bg-linear-180 outline outline-zinc-100 from-zinc-50 to-zinc-100 rounded-xl lg:order-none">
  <div class="text-center lg:text-balance">
    <h2 class="text-2xl md:text-3xl lg:text-4xl font-semibold tracking-tight text-zinc-900 text-balance">
      Get to know the people behind our team
    </h2>
    <p class="text-base mt-4 font-medium text-zinc-500">
      Our talented team combines creativity, expertise, and dedication to bring innovative solutions to life and empower your projects.
    </p>
  </div>
</li>
  • order-first ensures the hero stays ahead on mobile; lg:order-none returns it to the middle when there’s enough width.
  • The gradient (bg-linear-180) and outline make it feel distinct without relying on drop-shadow.

3. Profile cards with social actions

Each person card is a flex column: image → meta block → bio. Social links are inline icons that change color on hover.

<li>
  <div class="flex flex-col gap-4">
    <img class="object-cover rounded-xl aspect-[4/3]" src="/avatars/1.jpg" alt="#_" />
    <div>
      <div class="flex items-center justify-between">
        <h3 class="text-base font-semibold text-zinc-900">Michael Andreuzza</h3>
        <div class="flex items-center gap-2">
          <a class="text-base font-medium hover:text-blue-500 text-zinc-500" href="#_">
            <!-- X icon -->
          </a>
          <a class="text-base font-medium hover:text-blue-500 text-zinc-500" href="#_">
            <!-- LinkedIn icon -->
          </a>
        </div>
      </div>
      <p class="text-xs font-medium text-zinc-500">Creator of Oxbow UI.com</p>
      <p class="text-sm mt-4 font-medium text-zinc-500">
        Michael is a visionary leader with over a decade of experience in creating dynamic and user-friendly websites.
      </p>
    </div>
  </div>
</li>
  • aspect-[4/3] keeps portraits consistent, even with differing source ratios.
  • gap-4 ensures breathing room between the photo and copy.

4. SVG icon treatment

The icons are inline <svg> elements to avoid external sprite dependencies. All share the size-4 (1rem) utility and inherit the surrounding text color.

<svg
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 24 24"
  fill="none"
  stroke="currentColor"
  stroke-width="2"
  stroke-linecap="round"
  stroke-linejoin="round"
  class="icon icon-tabler-layout-brand-linkedin size-4"
>
  <!-- paths -->
</svg>
  • currentColor keeps hover states in sync with the link color.
  • Include aria-hidden="true" or readable aria-label on the link depending on your accessibility goals.

5. Copy-and-paste snippet

Drop the entire markup below into any Astro component. The section doesn’t require JavaScript—just Tailwind CSS.

<ul role="list" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-8">
  <li>
    <div class="flex flex-col gap-4">
      <img
        class="object-cover rounded-xl aspect-[4/3]"
        src="/avatars/1.jpg"
        alt="#_"
      />
      <div>
        <div class="flex items-center justify-between">
          <h3 class="text-base font-semibold text-zinc-900">
            Michael Andreuzza
          </h3>
          <div class="flex items-center gap-2">
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-x size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path d="M4 4l11.733 16h4.267l-11.733 -16z"></path>
                <path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path>
              </svg>
            </a>
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-linkedin size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path
                  d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"
                ></path>
                <path d="M8 11l0 5"></path>
                <path d="M8 8l0 .01"></path>
                <path d="M12 16l0 -5"></path>
                <path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
              </svg>
            </a>
          </div>
        </div>
        <p class="text-xs font-medium text-zinc-500">Creator of Oxbow UI.com</p>
        <p class="text-sm mt-4 font-medium text-zinc-500">
          Michael is a visionary leader with over a decade of experience in
          creating dynamic and user-friendly websites.
        </p>
      </div>
    </div>
  </li>
  <li
    class="flex flex-col items-center justify-center order-first lg:col-span-2 lg:p-12 bg-linear-180 outline outline-zinc-100 from-zinc-50 to-zinc-100 rounded-xl lg:order-none"
  >
    <div class="text-center lg:text-balance">
      <h2
        class="text-2xl md:text-3xl lg:text-4xl font-semibold tracking-tight text-zinc-900 text-balance"
      >
        Get to know the people behind our team
      </h2>
      <p class="text-base mt-4 font-medium text-zinc-500">
        Our talented team combines creativity, expertise, and dedication to
        bring innovative solutions to life and empower your projects.
      </p>
    </div>
  </li>
  <li>
    <div class="flex flex-col gap-4">
      <img
        class="object-cover rounded-xl aspect-[4/3]"
        src="/avatars/2.jpg"
        alt="#_"
      />
      <div>
        <div class="flex items-center justify-between">
          <h3 class="text-base font-semibold text-zinc-900">Juan Echanove</h3>
          <div class="flex items-center gap-2">
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-x size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path d="M4 4l11.733 16h4.267l-11.733 -16z"></path>
                <path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path>
              </svg>
            </a>
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-linkedin size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path
                  d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"
                ></path>
                <path d="M8 11l0 5"></path>
                <path d="M8 8l0 .01"></path>
                <path d="M12 16l0 -5"></path>
                <path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
              </svg>
            </a>
          </div>
        </div>
        <p class="text-xs font-medium text-zinc-500">Founder of Pay Oneeer</p>
        <p class="text-sm mt-4 font-medium text-zinc-500">
          Juan is the founder of Pay Oneeer, a leading fintech company and deep
          understanding of financial technology.
        </p>
      </div>
    </div>
  </li>
  <li class="lg:col-span-2">
    <div class="flex flex-col gap-4">
      <img
        class="object-cover rounded-xl aspect-[4/3]"
        src="/avatars/3.jpg"
        alt="#_"
      />
      <div>
        <div class="flex items-center justify-between">
          <h3 class="text-base font-semibold text-zinc-900">Anna Muska</h3>
          <div class="flex items-center gap-2">
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-x size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path d="M4 4l11.733 16h4.267l-11.733 -16z"></path>
                <path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path>
              </svg>
            </a>
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-linkedin size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path
                  d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"
                ></path>
                <path d="M8 11l0 5"></path>
                <path d="M8 8l0 .01"></path>
                <path d="M12 16l0 -5"></path>
                <path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
              </svg>
            </a>
          </div>
        </div>
        <p class="text-xs font-medium text-zinc-500">Founder of Fesla</p>
        <p class="text-sm mt-4 font-medium text-zinc-500">
          Elona is a trailblazing entrepreneur and the founder of Fesla, an
          innovative company pushing the boundaries of technology and
          sustainability. She is committed to driving change and making a
          positive impact on the world.
        </p>
      </div>
    </div>
  </li>
  <li class="lg:col-span-2">
    <div class="flex flex-col gap-4">
      <img
        class="object-cover rounded-xl aspect-[4/3]"
        src="/avatars/4.jpg"
        alt="#_"
      />
      <div>
        <div class="flex items-center justify-between">
          <h3 class="text-base font-semibold text-zinc-900">Heidi Herrera</h3>
          <div class="flex items-center gap-2">
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-x size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path d="M4 4l11.733 16h4.267l-11.733 -16z"></path>
                <path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path>
              </svg>
            </a>
            <a
              class="text-base font-medium hover:text-blue-500 text-zinc-500"
              href="#_"
            >
              <svg
                xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 24 24"
                fill="none"
                stroke="currentColor"
                stroke-width="2"
                stroke-linecap="round"
                stroke-linejoin="round"
                class="icon icon-tabler-layout-brand-linkedin size-4"
              >
                <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
                <path
                  d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"
                ></path>
                <path d="M8 11l0 5"></path>
                <path d="M8 8l0 .01"></path>
                <path d="M12 16l0 -5"></path>
                <path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
              </svg>
            </a>
          </div>
        </div>
        <p class="text-xs font-medium text-zinc-500">COO at Pff Inc</p>
        <p class="text-sm mt-4 font-medium text-zinc-500">
          Messina is the Chief Operating Officer at Pff Inc. With a keen eye for
          detail and exceptional organizational skills, she ensures the smooth
          and efficient operation of the company, driving growth and success.
        </p>
      </div>
    </div>
  </li>
</ul>

Finishing touches

  • Swap placeholder href="#_" values with actual profile links and add aria-label="Visit Michael’s LinkedIn" for clarity.
  • Tailor the list length by duplicating <li> blocks; the grid auto-wraps across rows.
  • If you need darker themes, trade text-zinc-900/zinc-500 pairs for the appropriate palette tokens.

/Michael Andreuzza