Skip to content

Popover Share Menu

A copy-paste social share component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.

Social ShareHTMLCSSany framework
Share

Copy into your project

HTML
<div class="nuda-shr-pop">
  <div class="nuda-shr-pop__trigger">
    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><path d="m8.59 13.51 6.83 3.98M15.41 6.51l-6.82 3.98"/></svg>
    Share
  </div>
  <div class="nuda-shr-pop__menu">
    <button class="nuda-shr-pop__item">
      <svg width="13" height="13" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.737-8.835L1.254 2.25H8.08l4.26 5.632zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
      Post to X
    </button>
    <button class="nuda-shr-pop__item">
      <svg width="13" height="13" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
      Share on Facebook
    </button>
    <button class="nuda-shr-pop__item">
      <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
      Copy link
    </button>
    <div class="nuda-shr-pop__sep"></div>
    <button class="nuda-shr-pop__item nuda-shr-pop__item--danger">
      <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/></svg>
      Delete
    </button>
  </div>
</div>
CSS
.nuda-shr-pop {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: .6rem;
}

.nuda-shr-pop__trigger {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  background: #1a1a1a;
  border: 1px solid rgba(255,255,255,.15);
  border-radius: 8px;
  padding: .45rem .75rem;
  color: #cfcfcf;
  font-size: .8rem;
  font-weight: 500;
  cursor: pointer;
}

.nuda-shr-pop__menu {
  background: #1a1a1a;
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 10px;
  padding: .3rem;
  min-width: 170px;
  box-shadow: 0 8px 32px rgba(0,0,0,.5);
  animation: _nuda-shrpopIn .18s ease-out;
}

@keyframes _nuda-shrpopIn {
  from {
    opacity: 0;
    transform: translateY(-6px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-reduced-motion:reduce) {
  .nuda-shr-pop__menu {
    animation: none;
  }
}

.nuda-shr-pop__item {
  display: flex;
  align-items: center;
  gap: .5rem;
  width: 100%;
  background: none;
  border: none;
  color: #cfcfcf;
  font-size: .8rem;
  padding: .45rem .6rem;
  border-radius: 7px;
  cursor: pointer;
  text-align: left;
  transition: background .12s;
}

.nuda-shr-pop__item:hover {
  background: rgba(255,255,255,.07);
}

.nuda-shr-pop__item--danger {
  color: #ff6b6b;
}

.nuda-shr-pop__item--danger:hover {
  background: rgba(255,107,107,.1);
}

.nuda-shr-pop__sep {
  height: 1px;
  background: rgba(255,255,255,.08);
  margin: .25rem 0;
}

How to use Popover Share Menu

Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.

Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.

More social share components

← Browse all NudaUI components