Bài viết này sẽ hướng dẫn bạn tạo hiệu ứng button 3D với CSS từ A–Z, kèm demo trực tiếp để bạn có thể copy & dùng ngay trong dự án.
HTML – Tạo cấu trúc Button đơn giản
Phần HTML chỉ cần những thẻ <button> bình thường với class riêng để chúng ta style bằng CSS.
Bạn có thể dùng trong form, popup, hay bất kỳ nơi nào cần nút CTA.
<div class="button-3d-demo">
<button class="btn-3d btn-3d-primary">Nhấn mình đi</button>
<button class="btn-3d btn-3d-success">Xác nhận</button>
<button class="btn-3d btn-3d-danger">Xóa luôn</button>
</div>
CSS – Tạo hiệu ứng Button Press 3D bằng box-shadow
Ý tưởng chính:
- Dùng
box-shadowđể tạo phần “chân” cho nút, giúp nó trông như đang nổi lên khỏi nền. - Khi nhấn (pseudo-class
:active), giảmtranslateYvàbox-shadowđể tạo cảm giác nút bị ấn xuống. - Thêm
transitionđể hiệu ứng mượt mà, cảm giác tự nhiên hơn.
/* Container demo nút 3D */
.button-3d-demo {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
align-items: center;
padding: 16px 0;
}
/* Base style cho button 3D */
.btn-3d {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 120px;
padding: 10px 18px;
border-radius: 999px;
border: none;
font-size: 14px;
font-weight: 600;
letter-spacing: 0.02em;
cursor: pointer;
color: #fff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15);
outline: none;
user-select: none;
-webkit-tap-highlight-color: transparent;
transform: translateY(0);
box-shadow: 0 6px 0 rgba(0, 0, 0, 0.2), 0 10px 18px rgba(0, 0, 0, 0.18);
transition:
transform 0.12s ease-out,
box-shadow 0.12s ease-out,
filter 0.15s ease-out,
background 0.15s ease-out;
}
/* Các biến thể màu */
.btn-3d-primary {
background: linear-gradient(135deg, #2f80ed, #1c64f2);
}
.btn-3d-success {
background: linear-gradient(135deg, #00b894, #019874);
}
.btn-3d-danger {
background: linear-gradient(135deg, #e63946, #c71f2d);
}
/* Hover: nổi hơn, sáng hơn một chút */
.btn-3d:hover {
filter: brightness(1.05);
box-shadow: 0 7px 0 rgba(0, 0, 0, 0.22), 0 12px 20px rgba(0, 0, 0, 0.2);
}
/* Active: hiệu ứng nhấn xuống 3D */
.btn-3d:active {
transform: translateY(4px);
box-shadow: 0 3px 0 rgba(0, 0, 0, 0.25), 0 6px 12px rgba(0, 0, 0, 0.22);
}
/* Focus: dành cho keyboard users, tăng accessibility */
.btn-3d:focus-visible {
box-shadow:
0 0 0 3px rgba(255, 255, 255, 0.8),
0 0 0 5px rgba(47, 128, 237, 0.6),
0 6px 0 rgba(0, 0, 0, 0.2),
0 10px 18px rgba(0, 0, 0, 0.18);
}
/* Optional: disable state */
.btn-3d:disabled {
cursor: not-allowed;
opacity: 0.65;
box-shadow: 0 3px 0 rgba(0, 0, 0, 0.12), 0 6px 10px rgba(0, 0, 0, 0.15);
transform: translateY(0);
}
Giải thích nhanh hiệu ứng Button Press 3D
- Chiều sâu 3D: được tạo bởi hai lớp
box-shadow, một bóng đậm sát nút (giống phần “chân”), một bóng mờ xa hơn (giống bóng đổ dưới nền). - Hiệu ứng nhấn: khi ở trạng thái
:active, nút đượctranslateY(4px)xuống dưới và giảm độ cao củabox-shadow, khiến nó trông như bị ấn xuống. - Transition: làm cho việc chuyển giữa trạng thái thường ↔ hover ↔ active trông mượt mà, không bị “gắt”.
- Nhiều biến thể màu: các class như
.btn-3d-primary,.btn-3d-success,.btn-3d-dangergiúp bạn tái sử dụng cùng một hiệu ứng 3D nhưng với màu sắc khác nhau.
Bạn có thể dùng hiệu ứng Button Press 3D đẹp ná thở với CSS này cho nút kêu gọi hành động (CTA), form đăng ký, giao diện game, hoặc bất kỳ nơi nào cần cảm giác “đã tay” khi bấm. Chỉ với vài dòng CSS, giao diện trông xịn hẳn lên mà không cần đến JavaScript.
Bình luận