پیش‌نمایش زنده
کد HTML
<button class="phantom-btn" aria-label="Get started">
  <div class="ptrig p-1"></div>
  <div class="ptrig p-2"></div>
  <div class="ptrig p-3"></div>
  <div class="ptrig p-4"></div>
  <div class="ptrig p-5"></div>
  <div class="ptrig p-6"></div>
  <div class="ptrig p-7"></div>
  <div class="ptrig p-8"></div>
  <div class="ptrig p-9"></div>

  <div class="phantom-wrapper">
    <div class="shard-layer layer-1"></div>
    <div class="shard-layer layer-2"></div>
    <div class="shard-layer layer-3"></div>

    <div class="action-star"></div>

    <div class="heist-content">
      <div class="ransom-row">
        <div class="note-block b-w" style="--i:0">
          <span class="txt">G</span>
        </div>
        <div class="note-block b-b" style="--i:1">
          <span class="txt">E</span>
        </div>
        <div class="note-block b-w" style="--i:2">
          <span class="txt">T</span>
        </div>
        <div class="spacer"></div>
        <div class="note-block b-b" style="--i:3">
          <span class="txt">S</span>
        </div>
        <div class="note-block b-w" style="--i:4">
          <span class="txt">T</span>
        </div>
        <div class="note-block b-b" style="--i:5">
          <span class="txt">A</span>
        </div>
        <div class="note-block b-w" style="--i:6">
          <span class="txt">R</span>
        </div>
        <div class="note-block b-b" style="--i:7">
          <span class="txt">T</span>
        </div>
        <div class="note-block b-w" style="--i:8">
          <span class="txt">E</span>
        </div>
        <div class="note-block b-b" style="--i:9">
          <span class="txt">D</span>
        </div>
      </div>

      <div class="card-socket">
        <div class="calling-card">
          <div class="card-face front">
            <svg
              class="mask-icon"
              viewBox="0 0 24 24"
              fill="none"
              xmlns="http://www.w3.org/2000/svg"
            >
              <path
                d="M2 12C2 12 5 5 12 5C19 5 22 12 22 12C22 12 19 19 12 19C5 19 2 12 2 12Z"
                stroke="black"
                stroke-width="3"
                fill="white"
              ></path>
              <circle cx="12" cy="12" r="3" fill="black"></circle>
            </svg>
          </div>
          <div class="card-face back">
            <svg
              class="star-icon"
              viewBox="0 0 24 24"
              fill="none"
              xmlns="http://www.w3.org/2000/svg"
            >
              <path
                d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z"
                fill="white"
                stroke="black"
                stroke-width="2"
              ></path>
            </svg>
          </div>
        </div>
      </div>
    </div>
  </div>
</button>
کد CSS
.phantom-btn {
  position: relative;
  appearance: none;
  border: none;
  background: none;
  padding: 80px;
  perspective: 1000px;
  cursor: pointer;
  outline: none;
  -webkit-tap-highlight-color: transparent;
  display: flex;
  justify-content: center;
  align-items: center;
  font-family: Impact, "Arial Black", sans-serif;
}

.ptrig {
  position: absolute;
  z-index: 100;
  width: 33.33%;
  height: 33.33%;
}
.p-1 {
  top: 0;
  left: 0;
}
.p-2 {
  top: 0;
  left: 33.33%;
}
.p-3 {
  top: 0;
  right: 0;
}
.p-4 {
  top: 33.33%;
  left: 0;
}
.p-5 {
  top: 33.33%;
  left: 33.33%;
}
.p-6 {
  top: 33.33%;
  right: 0;
}
.p-7 {
  bottom: 0;
  left: 0;
}
.p-8 {
  bottom: 0;
  left: 33.33%;
}
.p-9 {
  bottom: 0;
  right: 0;
}

.phantom-wrapper {
  position: relative;
  width: max-content;
  transform-style: preserve-3d;
  transition: transform 0.2s cubic-bezier(0.1, 0.9, 0.2, 1);
}

/* --- Shatter Background Layers --- */
.shard-layer {
  position: absolute;
  inset: -20px;
  transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.layer-1 {
  background: #000;
  clip-path: polygon(0% 0%, 100% 0%, 100% 80%, 80% 100%, 0% 100%);
  transform: rotate(-2deg);
  z-index: 1;
}

.layer-2 {
  background: #e60012; /* Phantom Red */
  clip-path: polygon(10% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 20%);
  transform: rotate(1deg) translate(4px, 4px);
  z-index: 2;
}

.layer-3 {
  background: #fff;
  border: 4px solid #000;
  clip-path: polygon(0% 0%, 95% 0%, 100% 15%, 100% 100%, 5% 100%, 0% 85%);
  transform: rotate(0deg);
  z-index: 3;
  /* Pattern */
  background-image: radial-gradient(#000 1px, transparent 1px);
  background-size: 8px 8px;
}

.phantom-btn:hover .layer-1 {
  transform: rotate(-4deg) scale(1.05) translate(-10px, -5px);
}

.phantom-btn:hover .layer-2 {
  transform: rotate(3deg) scale(1.05) translate(10px, 5px);
}

.phantom-btn:hover .layer-3 {
  transform: scale(1.02);
}

/* --- Ransom Note Text --- */
.heist-content {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 36px;
  gap: 20px;
  z-index: 10;
  transform-style: preserve-3d;
}

.ransom-row {
  display: flex;
  gap: 2px;
  align-items: center;
  transform-style: preserve-3d;
}

.spacer {
  width: 10px;
}

.note-block {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 4px 6px;
  border: 2px solid #000;
  transform: rotate(calc(var(--i) * 3deg - 15deg));
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  box-shadow: 2px 2px 0 #000;
}

.b-w {
  background: #fff;
  color: #000;
}
.b-b {
  background: #000;
  color: #fff;
  transform: rotate(calc(var(--i) * -2deg + 10deg)) translateY(4px);
}

.txt {
  font-size: 28px;
  font-weight: 900;
  line-height: 1;
  text-transform: uppercase;
}

.phantom-btn:hover .note-block {
  /* Chaotic Jitter */
  transform: rotate(0deg) translateY(0);
  animation: ransomShake 0.4s infinite alternate;
  animation-delay: calc(var(--i) * 0.05s);
}

.phantom-btn:hover .b-w {
  background: #e60012;
  color: #fff;
}

@keyframes ransomShake {
  0% {
    transform: translateY(0) rotate(5deg) scale(1);
  }
  100% {
    transform: translateY(-4px) rotate(-5deg) scale(1.1);
  }
}

/* --- Calling Card Chip --- */
.card-socket {
  width: 50px;
  height: 34px;
  position: relative;
  perspective: 600px;
}

.calling-card {
  width: 100%;
  height: 100%;
  position: relative;
  transform-style: preserve-3d;
  transition: transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
  transform-origin: center center;
}

.card-face {
  position: absolute;
  inset: 0;
  backface-visibility: hidden;
  border: 2px solid #000;
  display: flex;
  align-items: center;
  justify-content: center;
}

.front {
  background: #000;
  transform: rotateY(0deg);
}

.back {
  background: #e60012;
  transform: rotateY(180deg);
}

.mask-icon,
.star-icon {
  width: 24px;
  height: 24px;
}

.phantom-btn:hover .calling-card {
  transform: rotateY(180deg) scale(1.2) rotateZ(10deg);
}

/* --- Action Star Background --- */
.action-star {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 150px;
  height: 150px;
  background: #000;
  clip-path: polygon(
    50% 0%,
    61% 35%,
    98% 35%,
    68% 57%,
    79% 91%,
    50% 70%,
    21% 91%,
    32% 57%,
    2% 35%,
    39% 35%
  );
  transform: translate(-50%, -50%) scale(0) rotate(0deg);
  transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  z-index: 0;
  pointer-events: none;
}

.phantom-btn:hover .action-star {
  transform: translate(-50%, -50%) scale(1.4) rotate(180deg);
}

/* --- Parallax Tilt (Disorienting) --- */
/* The shards move opposite to the content to create depth */

.phantom-btn:has(.p-1:hover) .phantom-wrapper {
  transform: rotateX(15deg) rotateY(-15deg);
}
.phantom-btn:has(.p-1:hover) .layer-1 {
  transform: translate(15px, 15px);
}
.phantom-btn:has(.p-1:hover) .layer-2 {
  transform: translate(10px, 10px);
}

.phantom-btn:has(.p-2:hover) .phantom-wrapper {
  transform: rotateX(15deg);
}
.phantom-btn:has(.p-2:hover) .layer-1 {
  transform: translateY(15px);
}

.phantom-btn:has(.p-3:hover) .phantom-wrapper {
  transform: rotateX(15deg) rotateY(15deg);
}
.phantom-btn:has(.p-3:hover) .layer-1 {
  transform: translate(-15px, 15px);
}
.phantom-btn:has(.p-3:hover) .layer-2 {
  transform: translate(-10px, 10px);
}

.phantom-btn:has(.p-4:hover) .phantom-wrapper {
  transform: rotateY(-15deg);
}
.phantom-btn:has(.p-4:hover) .layer-1 {
  transform: translateX(15px);
}

.phantom-btn:has(.p-5:hover) .phantom-wrapper {
  transform: scale(1.05);
}

.phantom-btn:has(.p-6:hover) .phantom-wrapper {
  transform: rotateY(15deg);
}
.phantom-btn:has(.p-6:hover) .layer-1 {
  transform: translateX(-15px);
}

.phantom-btn:has(.p-7:hover) .phantom-wrapper {
  transform: rotateX(-15deg) rotateY(-15deg);
}
.phantom-btn:has(.p-7:hover) .layer-1 {
  transform: translate(15px, -15px);
}
.phantom-btn:has(.p-7:hover) .layer-2 {
  transform: translate(10px, -10px);
}

.phantom-btn:has(.p-8:hover) .phantom-wrapper {
  transform: rotateX(-15deg);
}
.phantom-btn:has(.p-8:hover) .layer-1 {
  transform: translateY(-15px);
}

.phantom-btn:has(.p-9:hover) .phantom-wrapper {
  transform: rotateX(-15deg) rotateY(15deg);
}
.phantom-btn:has(.p-9:hover) .layer-1 {
  transform: translate(-15px, -15px);
}
.phantom-btn:has(.p-9:hover) .layer-2 {
  transform: translate(-10px, -10px);
}

/* --- "Take Your Heart" Click --- */
.phantom-btn:active .phantom-wrapper {
  transform: scale(0.95) !important;
}

.phantom-btn:active .layer-1,
.phantom-btn:active .layer-2,
.phantom-btn:active .layer-3 {
  background: #000;
  border-color: #e60012;
  clip-path: none;
  border-radius: 8px;
}

.phantom-btn:active .note-block {
  background: #fff;
  color: #000;
  border-color: #000;
  animation: none;
  transform: rotate(0) !important;
}

.phantom-btn:active .calling-card {
  transform: rotateY(180deg) scale(0.8);
}
نوع: button
تاریخ ایجاد: 2026/06/05
آخرین بروزرسانی: 2026/06/05