Back to CSS Button Groups Ferro Toolbar Pure CSS
Share
HTML
<div
  class="cbgp-ferro"
  role="toolbar"
  aria-label="Editor tools"
  onmousemove="
    event.currentTarget.style.setProperty(
      '--mx',
      ((event.offsetX / event.currentTarget.offsetWidth) * 2 - 1).toFixed(2),
    )
  "
>
  <button type="button" aria-label="Undo" title="Undo (⌘Z)">
    <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 7v6h6M3 13a9 9 0 1 0 3-6.7L3 9" /></svg>
  </button>
  <button type="button" aria-label="Redo" title="Redo (⌘⇧Z)">
    <svg viewBox="0 0 24 24" aria-hidden="true">
      <path d="M21 7v6h-6M21 13a9 9 0 1 1-3-6.7L21 9" />
    </svg>
  </button>
  <span class="cbgp-ferro-divider" aria-hidden="true"></span>
  <button type="button" aria-label="Cut" title="Cut (⌘X)">
    <svg viewBox="0 0 24 24" aria-hidden="true">
      <circle cx="6" cy="6" r="3" />
      <circle cx="6" cy="18" r="3" />
      <line x1="20" y1="4" x2="8.12" y2="15.88" />
      <line x1="14.47" y1="14.48" x2="20" y2="20" />
    </svg>
  </button>
  <button type="button" aria-label="Copy" title="Copy (⌘C)">
    <svg viewBox="0 0 24 24" aria-hidden="true">
      <rect x="9" y="9" width="13" height="13" rx="2" />
      <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
    </svg>
  </button>
  <button type="button" aria-label="Paste" title="Paste (⌘V)">
    <svg viewBox="0 0 24 24" aria-hidden="true">
      <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" />
      <rect x="8" y="2" width="8" height="4" rx="1" />
    </svg>
  </button>
</div>
CSS
.cbgp-ferro {
  --mx: 0;
  display: inline-flex; gap: 4px; align-items: center;
  padding: 6px;
  background: linear-gradient(135deg, #0a0a14 0%, #14141d 100%);
  border: 1px solid rgba(255,255,255,0.06);
  border-radius: 10px;
  perspective: 600px;
  box-shadow: 0 8px 22px rgba(0,0,0,0.4);
}
.cbgp-ferro button {
  width: 36px; height: 36px;
  border: 0; cursor: pointer;
  background: transparent;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  transition: transform 0.4s cubic-bezier(.65,0,.35,1), background 0.2s;
  transform: rotateY(calc(var(--mx) * 18deg));
}
.cbgp-ferro button:hover { background: rgba(0,255,224,0.08); }
.cbgp-ferro button:focus-visible { outline: 2px solid #00ffe0; outline-offset: -2px; }
.cbgp-ferro svg { width: 14px; height: 14px; fill: none; stroke: rgba(220,225,230,0.65); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: stroke 0.2s; }
.cbgp-ferro button:hover svg { stroke: #00ffe0; }
.cbgp-ferro-divider {
  width: 1px; height: 22px;
  background: linear-gradient(180deg, transparent, rgba(0,255,224,0.5), transparent);
  margin: 0 4px;
}