Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. HTML & CSS

Membangun Slideshow 3D CSS Keren

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Dalam tutorial ini, saya akan menunjukkan cara membuat slideshow 3D hanya dengan menggunakan HTML dan CSS. Tidak perlu JavaScript! Jalankan Safari dan mari kita mulai!


Teori

Sebelum kita menyelami ke dalam pembangunan slideshow kita, penting untuk memahami pendekatan kita. Kita akan menggunakan transformasi 3D baru yang merupakan bagian dari spesifikasi CSS3. Anda mungkin pernah melihat tutorial lain tentang cara menggunakan transformasi ini untuk membangun objek dan menganimasikannya dalam ruang 3D. Biasanya saat membuat slideshow, kami mengandalkan JavaScript untuk memicu transformasi tersebut. JavaScript akan mendeteksi event klik dan memperbarui salah satu elemen HTML kami (biasanya dengan menambahkan kelas). Elemen yang diperbarui kemudian akan menerima gaya CSS baru.

Yang berbeda dari tutorial ini adalah kita akan memotong JavaScript dengan hanya menggunakan CSS untuk memicu event klik dan memperbarui gaya elemen kita. Tip Cepat Jeffrey Way terbaru, Meniru a Event Klik dengan CSS, menjelaskan cara melakukannya dengan menggunakan pseudoclass :target. Di sini, kita akan menggunakan pseudoclass :focus dan elemen HTML5 <figcaption>, tapi idenya tetap sama.

Metode ini belum tentu "lebih baik" daripada menggunakan JavaScript, tapi hanya alternatif yang rapi yang mengambil keuntungan dari elemen HTML5 terbaru.


Langkah 0: Memulai

Mari kita mulai dengan membuat index.html dan style.css. Kita juga akan membuat folder images.

Objek 3D kita akan menjadi kotak persegi panjang dengan empat wajah 940px dengan 400px dan dua wajah 400px dengan 400px Saya telah menyertakan enam gambar dalam file sumber. Tempatkan, atau versi Anda sendiri, di folder 'images'.


Langkah 1: HTML

Berikut adalah HTML dasar kita. Kita akan membungkus semuanya dengan sebuah container dan slideshow kita, secara alami, akan berada dalam elemen div yang disebut slideshow.

Dalam slideshow, tambahkan kode berikut untuk enam gambar kita:

Perhatikan bahwa gambar kita (enam wajah objek 3D kita) dibungkus dalam sebuah <figure> dengan ID box. Elemen inilah yang akan kita putar saat menganimasikan slideshow kita.

Triknya

Kini muncul trik yang memungkinkan kita hanya menggunakan CSS untuk mendeteksi event klik. Kita akan membungkus box dengan enam elemen <figure> lainnya. Masing-masing akan mewakili rotasi yang berbeda dari objek 3D kita. Atribut tabindex memungkinkan elemen-elemen ini menerima pseudoclass :focus.

Setiap <figure> juga membutuhkan elemen <figcaption> di dalamnya. Teks ini akan berfungsi sebagai tombol kita. Saat diklik mereka akan memicu <figure> induk untuk menerima :focus. Itu akan memungkinkan kita untuk menggunakan enam transformasi CSS yang berbeda pada box.

Mungkin kedengarannya agak rumit sekarang, tapi akan masuk akal saat kita sampai di CSS. Untuk saat ini, cukup bungkus box dengan enam elemen <figure> dan berikan masing-masing tabindex dan ID yang unik. Kemudian sertakan <figcaption> untuk setiap <figure>.

HTML Akhir

Markup akhir di index.html akan terlihat seperti ini:


Langkah 2: CSS Dasar

Pertama, mari buka style.css dan sisipkan beberapa kode reset, hanya untuk pengukuran yang baik. (Menghilangkan garis tepi yang disebabkan :focus adalah penting.)

Selanjutnya, kita akan memberi halaman kita latar belakang gradien yang bagus:

Kode background-image mencakup awalan vendor Mozilla dan WebKit. Jika Anda ingin versi slideshow yang berfungsi dengan Internet Explorer, filter dan -ms-filter akan menciptakan gradien di IE6, 7 dan 8. (Saya membuat kode ini di situs yang berguna www.css3please.com.)

Sekarang, mari tambahkan beberapa kode untuk container, slideshow, dan box kita:

Container kita akan memiliki lebar 960px dan ditengahkan dengan margin: 0 auto. Div slideshow akan menjadi lebar 900px, ditengah, dan didorong turun 50px dari atas halaman. Kita juga memberikan padding 50px di bagian atas. Area padding ini akan berisi tombol slideshow kita, elemen <figcaption>, begitu kita memposisikannya.

Elemen yang benar-benar berisi slideshow, box, diatur ke ukuran yang sama dengan gambar kita. Penting juga untuk menetapkan position menjadi relative karena kita akan benar-benar memposisikan beberapa anak mereka. <figure> kita yang lain akan ditetapkan ke display: inline, tapi box harus merupakan elemen block.

Sekarang, atur gaya berikut untuk enam gambar kita:

Kita memposisikan gambar kita dengan saksama sehingga mereka semua akan menumpuk langsung di atas satu sama lain di pojok kiri atas box. (Secara default, top dan left diatur ke 0. Ini sudah disertakan demi kejelasan.)

Sekarang, slideshow kita terlihat seperti ini:

Mari tambahkan beberapa penataan untuk tombol <figcaption> kita:

Bagian pertama dari gaya ini murni estetika. Itu membuat tombolnya semi transparan dan membulat dan teks ditengah dan memiliki bayangan. Ini juga mengubah kursor mouse menjadi pointer, sehingga pengguna tahu mereka bisa klik.

Bagian kedua menampilkan tombol di atas gambar, meletakkan di tengah, dan memberi ruang pada mereka.

Pastikan Anda memposisikan tombol di luar batas enam elemen <figure>. Jika tidak, mengklik tombol akan benar-benar mendaftar sebagai klik pada <figure> paling dalam daripada yang sesuai dengan tombol itu.

Bit kode terakhir menambahkan transisi. Itu karena kita akan menambahkan penataan ke kondisi hover <figcaptions>:

Tombol dengan gaya kita akan terlihat seperti ini:


Langkah 3: Kotak 3D

Hal pertama yang perlu kita lakukan adalah memberitahu browser kita akan bekerja di ruang 3D. Kita melakukan ini dengan menggunakan properti perspective pada elemen induk. Mari kita menerapkannya (dengan awalan vendor WebKit) ke slideshow:

Nilai perspective menentukan berapa banyak piksel "viewer" berasal dari objek 3D. Semakin rendah nilainya semakin berlebihan efek 3D-nya.

Kita juga perlu menjaga ruang 3D di seluruh elemen anak kita. Untuk melakukan ini, kita akan menambahkan properti transform-style: preserve-3d ke semua <figures> kita. (Sekali lagi, kita akan menggunakan awalan vendor WebKit.)

Baiklah, sekarang saatnya transform wajah individu (enam gambar kita) untuk membuat kotak 3D. Kita akan menargetkan setiap gambar menggunakan pseudoclass nth-child(), namun memberi masing-masing <img> sebuah ID khusus juga akan bekerja. Pastikan Anda menambahkan kode ini di bawah gaya saat ini di stylesheet.

Inilah kodenya, saya akan menjelaskannya di bawah ini:

Oke, jadi inilah yang terjadi: Gambar pertama tidak di-rotate sama sekali, tapi di-translate ke depan (ke arah pemirsa) 200 piksel pada sumbu Z-nya.

Gambar kedua di-rotate di sekitar sumbu X-nya 180 derajat sehingga menghadap menjauh dari pemirsa. Ini kemudian didorong menjauh dari pemirsa 200 piksel pada sumbu Z-nya.

Perhatikan bahwa urutan transformasi itu penting -- rotation mengubah asal benda dan kemudian translation terjadi di sepanjang sumbu baru.

Gambar ketiga dan keempat masing-masing di-rotate di sekitar sumbu X untuk menghadap ke atas dan ke bawah. Kemudian keduanya di-translate 200 piksel di sepanjang sumbu Z baru mereka.

Ingat, box kita lebar 900px dengan 400px dengan kedalaman 400px. Keempat sisi (wajah 940px dengan 400px) harus berjarak 400 piksel dari satu sama lain. Itu sebabnya kita translate semuanya 200 piksel ke arah yang berlawanan. Kedua ujungnya (wajah 400px dengan 400px) kita akan translate 900 piksel dari satu sama lain.

Gambar kelima dan keenam saat ini berada di sisi kiri box dan tidak di tengah. Karena itu, gambar kelima dan keenam kita menerima translate yang berbeda. Mereka berdua memiliki asal mereka 200 piksel di sebelah kanan ujung kiri box. Gambar kelima harus di-rotate -90 derajat di sekitar sumbu Y menghadap ke kiri dan kemudian di-translate 200 piksel di sepanjang sumbu Z baru. Ini menempatkannya di ujung kiri objek 3D kita. Gambar keenam di-rotate 90 derajat di sekitar sumbu Y agar menghadap ke kanan dan kemudian di-translate 700 piksel di sepanjang sumbu Z yang baru. Ini menempatkannya di ujung kanan objek 3D kita.

Cara terbaik untuk memahami apa yang telah kita lakukan adalah melihat susunan gambar saat ini. Jika Anda melihat pratinjau slideshow di Safari, Anda saat ini akan melihat ini:

Mari kita sembunyikan wajah depan -- supaya kita bisa melihat apakah gambar kita yang lain diposisikan dengan benar:

Sekarang kita bisa melihat bagian dalam kotak kita:

Sekarang, hapus display: none dari gambar pertama kita. Anda mungkin telah memperhatikan bahwa kotak itu lebih besar di layar -- lebih dekat ke pemirsa -- daripada seharusnya. Wajah depan terutama terlihat terlalu besar dan membentang.

Untuk memperbaiki hal ini, kita perlu menjauhkan keseluruhan objek 3D dari pemirsa dengan 200 piksel. Tambahkan -webkit-transform: translateZ(-200px) ke gaya untuk box. Sementara kita berada di itu kita juga harus menambahkan properti transition:

Dengan semua itu, kita siap untuk menganimasikan kotak kita.


Langkah 4: Animasi

Tempelkan di blok akhir penataan kita. Ini akan menambahkan animasi kita. Saya akan menjelaskan secara lebih rinci di bawah ini.

Bila masing-masing elemen <figure> kita menerima pseudoclass :focus kita rotate box untuk menampilkan sisi yang benar. Perhatikan bahwa rotasi box berlawanan dengan rotasi yang kita gunakan pada setiap wajah individu. Misalnya, gambar keempat di-rotate negatif 90 derajat di sekitar sumbu X. Untuk membawanya ke tampilannya kita harus rotate seluruh objek 3D positif 90 derajat di sekitar sumbu X. Translate memastikan bahwa sisi objek 3D yang kita lihat selalu di jarak yang benar.

Itu saja! Periksa slideshow di Safari untuk memastikan semuanya bekerja.

CSS Akhir

Gaya akhir dalam style.css akan terlihat seperti ini:


Pemikiran Akhir

Mungkin tidak ada cara untuk membenarkan penggunaan sekelompok elemen <figure> dan <figcaption> bersarang sebagai tombol di bawah rekomendasi CSS3 saat ini. Eksperimen ini juga tidak menghargai perbedaan HTML untuk konten, CSS untuk gaya, dan JS untuk perilaku. Dan karena perubahan ini saat ini hanya bekerja di Safari, slideshow ini sama sekali tidak siap untuk digunakan dalam proyek klien. Namun, tujuan dari eksperimen ini adalah untuk menampilkan dan mendorong batasan fitur HTML5 dan CSS3 yang baru.

Jika Anda tertarik untuk menyesuaikan slideshow ini untuk browser yang kurang mendapat dukungan, berikut beberapa tips bermanfaatnya:

  • Gunakan Modernizr. Serius!
  • Safari hanya mendukung transformasi 3D tapi Anda bisa membuat slideshow bagus menggunakan transformasi 2D dan mendukung jangkauan browser yang jauh lebih luas.
  • Properti opacity akan membuat slideshow memudar hebat dan bekerja di hampir setiap browser. (Anda butuh filter untuk IE).
  • Tombol <figcaption> akan rusak di Firefox jika diposisikan absolut. Aneh sekali, saya tahu. Pastikan Anda menggunakan posisi relatif.

Saya harap Anda semua menikmati tutorial ini. Saya menantikan komentar Anda dan terima kasih banyak telah membaca!

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.