پیشنمایش زنده
کد HTML
<button class="tetris-btn" aria-label="Commencer">
<span class="tetris-piece t-piece">
<span class="block"></span>
<span class="block"></span>
<span class="block"></span>
<span class="block"></span>
</span>
<span class="tetris-labell">START</span>
<span class="tetris-tooltip">
<span class="falling-piece">
<span class="falling-block"></span>
<span class="falling-block"></span>
<span class="falling-block"></span>
<span class="falling-block"></span>
</span>
<span class="tetris-board">
<span class="tetris-row">
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
</span>
<span class="tetris-row">
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
</span>
<span class="tetris-row">
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
</span>
<span class="tetris-row">
<span class="board-block filled"></span>
<span class="board-block"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
</span>
<span class="tetris-row">
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
<span class="board-block filled"></span>
</span>
</span>
</span>
</button>
کد CSS
.tetris-btn {
--btn-bg: linear-gradient(180deg, #36396a 0%, #181c2b 100%);
--btn-glow: 0 0 24px 2px #7f5cff, 0 2px 16px 2px #181c2b inset;
--btn-border: 4px solid #7f5cff;
--btn-shadow: 0 8px 0 #2e2459, 0 0 32px #7f5cff;
background: var(--btn-bg);
border: var(--btn-border);
border-radius: 16px;
padding: 28px 48px 34px 48px;
box-shadow: var(--btn-shadow), var(--btn-glow);
cursor: pointer;
outline: none;
position: relative;
display: inline-flex;
flex-direction: column;
align-items: center;
transition:
box-shadow 0.18s cubic-bezier(0.4, 1.5, 0.6, 1),
transform 0.14s cubic-bezier(0.5, 2, 0.5, 1.5),
border-color 0.18s;
z-index: 1;
overflow: visible;
user-select: none;
}
.tetris-btn:before {
content: "";
display: block;
pointer-events: none;
position: absolute;
inset: 0;
border-radius: 12px;
opacity: 0.13;
background: repeating-linear-gradient(
to bottom,
transparent 0 2px,
#fff 2px 3px,
transparent 3px 5px
);
z-index: 4;
transition: opacity 0.2s;
}
.tetris-btn:focus-visible {
border-color: #ffe866;
box-shadow:
0 0 0 4px #ffe86699,
0 8px 0 #2e2459,
0 0 32px #ffe866;
}
.tetris-btn:active {
transform: scale(0.96) translateY(2px);
box-shadow:
0 3px 0 #2e2459,
0 0 24px #7f5cff;
}
.tetris-labell {
color: #fffaf6;
font-family: "Press Start 2P", monospace, monospace;
margin-top: 22px;
font-size: 1.1rem;
letter-spacing: 2px;
text-align: center;
display: block;
z-index: 3;
position: relative;
pointer-events: none;
user-select: none;
text-shadow:
2px 2px 0 #2e2459,
-2px 2px 0 #2e2459,
2px -2px 0 #2e2459,
-2px -2px 0 #2e2459,
0 0 8px #7f5cff,
0 0 12px #ffe866;
animation: text-glow 2s ease-in-out infinite alternate;
}
.tetris-btn:hover .tetris-labele {
color: #ffe866;
text-shadow:
2px 2px 0 #2e2459,
-2px 2px 0 #2e2459,
2px -2px 0 #2e2459,
-2px -2px 0 #2e2459,
0 0 12px #ffe866,
0 0 18px #ffe866,
0 0 24px #ffe866;
transform: scale(1.05);
letter-spacing: 3px;
}
@keyframes text-glow {
from {
filter: brightness(1);
transform: scale(1);
}
to {
filter: brightness(1.2);
transform: scale(1.03);
}
}
@keyframes start-text-glow {
from {
text-shadow: 0 0 8px #7f5cff;
color: #fffaf6;
}
to {
text-shadow:
0 0 12px #ffe866,
0 0 20px #7f5cff;
color: #fff;
}
}
.tetris-btn:hover .tetris-label {
animation: start-text-glow-hover 1s ease-in-out infinite alternate;
}
@keyframes start-text-glow-hover {
from {
text-shadow:
0 0 12px #ffe866,
0 0 20px #7f5cff;
color: #fff;
}
to {
text-shadow:
0 0 16px #ffe866,
0 0 24px #7f5cff;
color: #fff;
}
}
.tetris-piece {
display: grid;
grid-template-columns: repeat(3, 24px);
grid-template-rows: repeat(2, 24px);
gap: 3px;
width: 81px;
height: 51px;
position: relative;
margin: 0 auto;
z-index: 2;
filter: drop-shadow(0 4px 5px #000a);
transition: filter 0.2s;
}
.tetris-btn:hover .block,
.tetris-btn:focus-visible .block {
animation: tetris-fall 0.32s cubic-bezier(0.3, 1.6, 0.6, 1.1);
animation-fill-mode: forwards;
box-shadow:
0 0 16px #ffe866cc,
0 4px 0 #000a;
filter: brightness(1.12) drop-shadow(0 1px 8px #ffe86699);
}
@keyframes tetris-fall {
0% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(14px) scale(1.1);
}
70% {
transform: translateY(8px) scale(1.03);
}
100% {
transform: translateY(0) scale(1);
}
}
.tetris-btn:hover,
.tetris-btn:focus-visible {
box-shadow:
0 0 0 8px #ffe86644,
0 12px 0 #2e2459,
0 0 38px #ffe866cc,
0 0 64px #7f5cff;
border-color: #ffe866;
}
.t-piece .block {
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
border: 2px solid #fff;
border-radius: 6px;
box-shadow:
0 4px 0 #2e2459,
0 0 0 1.5px #fff4 inset;
transition:
background 0.2s,
box-shadow 0.18s,
filter 0.2s,
transform 0.18s;
width: 24px;
height: 24px;
position: relative;
}
.t-piece .block:after {
content: "";
position: absolute;
top: 2px;
left: 3px;
width: 7px;
height: 7px;
background: radial-gradient(circle, #fff9 60%, transparent 100%);
opacity: 0.7;
border-radius: 2px;
filter: blur(0.5px);
pointer-events: none;
}
.t-piece .block:nth-child(1) {
grid-area: 1 / 1 / 2 / 2;
}
.t-piece .block:nth-child(2) {
grid-area: 1 / 2 / 2 / 3;
}
.t-piece .block:nth-child(3) {
grid-area: 1 / 3 / 2 / 4;
}
.t-piece .block:nth-child(4) {
grid-area: 2 / 2 / 3 / 3;
}
.tetris-btn:after {
content: "";
position: absolute;
inset: -10px;
border-radius: 20px;
background: radial-gradient(circle, #ffe86633 0 60%, transparent 100%);
opacity: 0.7;
pointer-events: none;
z-index: 1;
}
@media (max-width: 600px) {
.tetris-btn {
padding: 18px 12px 18px 12px;
border-radius: 10px;
}
.tetris-label {
font-size: 0.9rem;
margin-top: 13px;
}
}
@font-face {
font-family: "Press Start 2P";
src: url("s://fonts.gstatic.com/s/pressstart2p/v12/e3t4euO8KNHUehQyT0o8fO4.woff2")
format("woff2");
font-weight: normal;
font-style: normal;
font-display: swap;
}
.tetris-btn {
position: relative;
}
.tetris-tooltip {
position: absolute;
left: 50%;
top: -140px;
transform: translateX(-50%) scale(0.96);
pointer-events: none;
opacity: 0;
transition:
opacity 0.2s,
transform 0.2s;
z-index: 100;
padding-bottom: 8px;
}
.tetris-btn:hover .tetris-tooltip,
.tetris-btn:focus-visible .tetris-tooltip {
pointer-events: auto;
opacity: 1;
transform: translateX(-50%) scale(1.08);
transition-delay: 0.12s;
}
.falling-piece {
position: absolute;
top: 8px;
left: 10px;
display: grid;
grid-template-columns: repeat(3, 16px);
grid-template-rows: repeat(2, 16px);
gap: 2px;
z-index: 20;
opacity: 0;
}
.falling-block {
width: 16px;
height: 16px;
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
border: 1px solid #fff;
border-radius: 2px;
box-shadow:
0 1px 0 #2e2459,
0 0 4px #ffe866cc;
}
.falling-piece .falling-block:nth-child(1) {
grid-area: 1 / 1 / 2 / 2;
}
.falling-piece .falling-block:nth-child(2) {
grid-area: 1 / 2 / 2 / 3;
}
.falling-piece .falling-block:nth-child(3) {
grid-area: 1 / 3 / 2 / 4;
}
.falling-piece .falling-block:nth-child(4) {
grid-area: 2 / 2 / 3 / 3;
}
.tetris-btn:hover .falling-piece {
opacity: 1;
animation: piece-fall 3s steps(4) forwards;
}
@keyframes piece-fall {
0% {
transform: translateY(0);
opacity: 1;
filter: brightness(1);
}
25% {
transform: translateY(16px);
opacity: 1;
filter: brightness(1);
}
50% {
transform: translateY(32px);
opacity: 1;
filter: brightness(1);
}
75% {
transform: translateY(38.5px);
opacity: 1;
filter: brightness(1);
}
76%,
78%,
80%,
82% {
transform: translateY(38.5px);
opacity: 1;
filter: brightness(2);
}
77%,
79%,
81%,
83% {
transform: translateY(38.5px);
opacity: 1;
filter: brightness(1);
}
84%,
100% {
transform: translateY(38.5px);
opacity: 0;
}
}
.tetris-row:nth-child(4) .board-block.filled {
animation: block-flash 1.5s steps(1) forwards;
animation-delay: 2s;
}
@keyframes block-flash {
0% {
filter: brightness(1);
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
}
20%,
40%,
60% {
filter: brightness(2);
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
}
30%,
50%,
70% {
filter: brightness(1);
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
}
100% {
background: #36396a;
border-color: #181c2b;
box-shadow: 0 1px 0 #1117;
opacity: 0.8;
}
}
.tetris-row:nth-child(4) {
animation: none;
}
.tetris-board {
background: #232448;
border: 3px solid #7f5cff;
border-radius: 8px;
box-shadow:
0 8px 18px #1b133777,
0 2px 0 #ffe86644 inset;
padding: 8px;
display: flex;
flex-direction: column;
gap: 2px;
min-width: 200px;
}
.tetris-row {
display: flex;
gap: 2px;
justify-content: flex-start;
}
.board-block {
width: 16px;
height: 16px;
border-radius: 2px;
background: #36396a;
border: 1px solid #181c2b;
box-shadow: 0 1px 0 #1117;
opacity: 0.8;
}
.board-block.filled {
background: linear-gradient(135deg, #ffe866 0%, #a259fa 85%, #7f5cff 100%);
border: 1px solid #fff;
box-shadow:
0 1px 0 #2e2459,
0 0 4px #ffe866cc;
opacity: 1;
}
.tetris-row {
opacity: 0;
transform: translateY(-24px);
}
.tetris-btn:hover .tetris-row:nth-child(1),
.tetris-btn:focus-visible .tetris-row:nth-child(1) {
animation: tetris-row-drop 0.32s 0.05s forwards;
}
.tetris-btn:hover .tetris-row:nth-child(2),
.tetris-btn:focus-visible .tetris-row:nth-child(2) {
animation: tetris-row-drop 0.32s 0.2s forwards;
}
.tetris-btn:hover .tetris-row:nth-child(3),
.tetris-btn:focus-visible .tetris-row:nth-child(3) {
animation: tetris-row-drop 0.32s 0.34s forwards;
}
.tetris-btn:hover .tetris-row:nth-child(4),
.tetris-btn:focus-visible .tetris-row:nth-child(4) {
animation: tetris-row-drop 0.32s 0.48s forwards;
}
.tetris-btn:hover .tetris-row:nth-child(5),
.tetris-btn:focus-visible .tetris-row:nth-child(5) {
animation: tetris-row-drop 0.32s 0.62s forwards;
}
@keyframes tetris-row-drop {
0% {
opacity: 0;
transform: translateY(-24px);
}
60% {
opacity: 1;
transform: translateY(6px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}