Nếu bạn đang muốn tạo một gallery hình ảnh 3D độc đáo cho website của mình, bài viết này sẽ hướng dẫn bạn từng bước với mã nguồn HTML, CSS, và JavaScript chi tiết. Hãy cùng tìm hiểu cách thực hiện với đoạn code dưới đây.

1. Giới Thiệu Về Gallery 3D
Gallery này được tạo với hiệu ứng 3D khi click vào từng hình ảnh. Sử dụng HTML, CSS và JavaScript đơn giản, bạn có thể tạo một hiệu ứng chuyển động ấn tượng, phù hợp cho việc hiển thị bộ sưu tập hình ảnh trên website.
2. Mã HTML Cơ Bản
Mã HTML dưới đây sẽ tạo ra các thẻ chứa hình ảnh và áp dụng các lớp CSS để định dạng gallery:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <div class="muathemewpgiare-dev scene-new"> <div class="muathemewpgiare-dev gallery-new" style="--total: 7"> <div class="muathemewpgiare-dev image-new" style="--i: 1"> <img src="https://picsum.photos/300/300" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 2"> <img src="https://picsum.photos/301/301" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 3"> <img src="https://picsum.photos/302/302" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 4"> <img src="https://picsum.photos/303/303" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 5"> <img src="https://picsum.photos/304/304" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 6"> <img src="https://picsum.photos/305/305" alt="image"> </div> <div class="muathemewpgiare-dev image-new" style="--i: 7"> <img src="https://picsum.photos/306/306" alt="image"> </div> </div> </div> |
3. CSS Tạo Hiệu Ứng 3D Cho Gallery
CSS được sử dụng để tạo bố cục và hiệu ứng 3D cho từng hình ảnh trong gallery:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | .scene-new { display: flex; justify-content: center; align-items: center; height: 300px; /* Căn giữa gallery theo chiều dọc */ } .gallery-new { position: relative; perspective: 1500px; transform-style: preserve-3d; width: 200px; aspect-ratio: 1; background: silver; transform: rotate(45deg); } .image-new { position: absolute; width: 100%; height: 100%; border: 4px solid white; box-sizing: border-box; transition: 1s ease; overflow: hidden; display: flex; justify-content: center; align-items: center; cursor: pointer; z-index: calc(var(--total) - var(--i)); } .image-new img { --rotate: rotate(-45deg); transform: var(--rotate); transition: .3s ease; } .image-new:nth-of-type(odd) { --hovermove: -100px, 100px; --translate: calc((var(--i) - 1) * -70px), calc((var(--i) - 1) * 70px); --tZ: calc((var(--i) - 1) * -350px); animation: deploy-new 1.5s ease forwards; } .image-new:nth-of-type(even) { --hovermove: 100px, -100px; --translate: calc(var(--i) * 70px), calc(var(--i) * -70px); --tZ: calc(var(--i) * -350px); animation: deploy-new 1.5s ease forwards; } .image-new:hover img, .image-new.only-hover-new img { transform: var(--rotate) scale(1.1); } .image-new.only-hover-new { animation: clickAnimation-new 1s ease; z-index: 9; } .hidden-gallery-new .image-new { animation: close-new 1.5s ease forwards; } @keyframes deploy-new { from { transform: translate(0px, 0px) translateZ(0px); } to { transform: translate(var(--translate)) translateZ(var(--tZ)); } } @keyframes close-new { from { transform: translate(var(--translate)) translateZ(var(--tZ)); } to { transform: translate(0px, 0px) translateZ(0px); } } @keyframes clickAnimation-new { 0% { transform: translate(var(--translate)) translateZ(var(--tZ)); } 20% { transform: translate(var(--hovermove)) translateZ(0px); } 100% { transform: translate(calc(var(--i) * 0px), calc(var(--i) * 0px)); } } |
4. JavaScript Xử Lý Sự Kiện Click
JavaScript dưới đây được dùng để thay đổi trạng thái của hình ảnh khi người dùng nhấp vào:
1 2 3 4 5 6 7 8 9 10 | document.querySelectorAll('.image-new').forEach(image => { image.addEventListener('click', () => { // Xóa lớp 'only-hover-new' khỏi tất cả các hình ảnh document.querySelectorAll('.image-new').forEach(img => { img.classList.remove('only-hover-new'); }); // Thêm lớp 'only-hover-new' vào hình ảnh được nhấp image.classList.add('only-hover-new'); }); }); |
5. Cách Hoạt Động
- HTML: Tạo cấu trúc gallery với 7 hình ảnh được bọc trong các phần tử
<div>
. Mỗi ảnh được gán một lớpimage-new
để áp dụng hiệu ứng CSS. - CSS: Sử dụng
perspective
vàtransform
để tạo hiệu ứng 3D. Các@keyframes
định nghĩa các hiệu ứng chuyển động khi hình ảnh được click hoặc hover. - JavaScript: Gắn sự kiện
click
vào mỗi hình ảnh. Khi người dùng nhấp vào, lớponly-hover-new
sẽ được thêm vào ảnh đó, kích hoạt hiệu ứng đã được định nghĩa trong CSS.
Demo code:
See the Pen
Gallery – click by Daniel Muñoz (@daniel-mu-oz)
on CodePen.
- Sharecode cách code chống spam đơn hàng bằng OTP gmail vào WooCommerce
- Hướng Dẫn Tích Hợp Plyr Video Player Trong WordPress
- Cách Tạo Popup Thông Báo Cookie Chuẩn SEO Cho WordPress
- Tất Tần Tật về File functions.php và Những Lưu Ý Quan Trọng Cần Biết
- Hướng dẫn cách Chặn Index Subpages Trong WordPress Để Tối Ưu SEO