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.