Apakah mungkin menggunakan animasi transisi CSS3 pada pemuatan halaman tanpa menggunakan Javascript?
Ini adalah jenis yang saya inginkan, tetapi pada pemuatan halaman:
http://rilwis.googlecode.com/svn/trunk/demo/image-slider.html
Apa yang saya temukan sejauh ini
- CSS3 transisi-delay , cara untuk menunda efek pada elemen. Hanya berfungsi pada hover.
- CSS3 Keyframe , berfungsi pada beban tetapi sangat lambat. Tidak berguna karena itu.
- Transisi CSS3 cukup cepat tetapi jangan menghidupkan halaman memuat.
css
webkit
css-transitions
css-animations
Jens Törnell
sumber
sumber
Jawaban:
Anda dapat menjalankan animasi CSS pada pemuatan halaman tanpa menggunakan JavaScript apa pun; Anda hanya perlu menggunakan CSS3 Keyframes .
Mari Kita Lihat Contoh ...
Berikut ini demonstrasi menu navigasi yang hanya menggunakan CSS3 :
Memecahnya...
Bagian penting di sini adalah animasi keyframe yang kami sebut
slideInFromLeft
...... yang pada dasarnya mengatakan "di awal, tajuk akan berada di tepi kiri layar dengan lebar penuh dan pada akhirnya akan berada di tempat".
Bagian kedua menyebut
slideInFromLeft
animasi itu:Di atas adalah versi singkat tetapi di sini adalah versi verbose untuk kejelasan:
Anda dapat melakukan segala macam hal menarik, seperti menggeser konten, atau menarik perhatian ke area.
Inilah yang dikatakan W3C.
sumber
Diperlukan sedikit Javascript:
Sekarang CSS:
Saya tahu pertanyaan mengatakan "tanpa Javascript", tapi saya pikir ada baiknya menunjukkan bahwa ada solusi mudah yang melibatkan satu baris Javascript.
Bahkan bisa berupa Javascript sebaris, kira-kira seperti itu:
Itu semua JavaScript yang dibutuhkan.
sumber
body
kelas yang ada, gunakan:document.body.classList.add('loaded)
document.body.className += " loaded";
untuk menjadi sedikit kurang verbose untuk menambahkan iniloaded
kelas untuk kelas yang ada.Saya pikir saya telah menemukan semacam pekerjaan untuk pertanyaan OP - alih-alih transisi yang dimulai 'on.load' halaman - saya menemukan bahwa menggunakan animasi untuk opacity fade in memiliki efek yang sama, (saya mencari hal yang sama dengan OP).
Jadi saya ingin agar teks badan memudar dari putih (sama seperti latar belakang situs) ke warna teks hitam pada pemuatan halaman - dan saya hanya mengkodekan sejak Senin jadi saya mencari kode hal gaya 'on.load', tetapi belum tahu JS - jadi di sini adalah kode saya yang bekerja dengan baik untuk saya.
Dan untuk alasan apa pun, ini tidak bekerja
.class
hanya untuk#id
(paling tidak untuk saya)Semoga ini bisa membantu - karena saya tahu situs ini banyak membantu saya!
sumber
Nah, ini yang sulit.
Jawabannya adalah "tidak juga".
CSS bukan lapisan fungsional. Itu tidak memiliki kesadaran tentang apa yang terjadi atau kapan. Ini digunakan hanya untuk menambah presentasi lapisan ke "bendera" yang berbeda (kelas, id, negara bagian).
Secara default, CSS / DOM tidak menyediakan segala keadaan "saat memuat" untuk digunakan CSS. Jika Anda ingin / dapat menggunakan JavaScript, Anda akan mengalokasikan kelas untuk
body
atau sesuatu untuk mengaktifkan beberapa CSS.Yang sedang berkata, Anda dapat membuat hack untuk itu. Saya akan memberikan contoh di sini, tetapi mungkin atau mungkin tidak berlaku untuk situasi Anda.
Kami beroperasi dengan asumsi bahwa "tutup" adalah "cukup baik":
Berikut kutipan dari stylesheet CSS kami:
Kami juga pada asumsi bahwa browser modern membuat progresif, sehingga elemen terakhir kami akan membuat yang terakhir, dan CSS ini akan diaktifkan terakhir.
sumber
Mirip dengan solusi @ Rolf, tetapi lewati referensi ke fungsi eksternal atau bermain dengan kelas. Jika opacity ingin tetap menjadi 1 setelah dimuat, cukup gunakan skrip inline untuk secara langsung mengubah opacity melalui style. Sebagai contoh
di mana CSS sytle "fadein" didefinisikan per @ Rolf, mendefinisikan transisi dan mengatur opacity ke keadaan awal (mis. 0)
satu-satunya hasil adalah bahwa ini tidak bekerja dengan elemen SPAN atau DIV, karena mereka tidak memiliki event onload yang berfungsi
sumber
memulainya dengan melayang-layang dari tubuh daripada Ini akan mulai ketika mouse pertama kali bergerak di layar, yang sebagian besar dalam hitungan detik setelah kedatangan, masalahnya di sini adalah bahwa ia akan mundur ketika keluar dari layar.
itulah hal terbaik yang dapat saya pikirkan: http://jsfiddle.net/faVLX/
layar penuh: http://jsfiddle.net/faVLX/embedded/result/
Sunting lihat komentar di bawah:
Ini tidak akan berfungsi pada perangkat layar sentuh apa pun karena tidak ada kursor, sehingga pengguna tidak akan melihat konten kecuali mereka mengetuknya. - Rich Bradshaw
sumber
CSS hanya dengan penundaan 3s
beberapa poin untuk diambil di sini:
Kode:
sumber
Oke, saya berhasil membuat animasi ketika halaman memuat hanya transisi css (semacam!):
Saya telah membuat 2 style sheet css: yang pertama adalah bagaimana saya ingin html ditata sebelum animasi ... dan yang kedua adalah bagaimana saya ingin halaman terlihat setelah animasi dilakukan.
Saya tidak sepenuhnya mengerti bagaimana saya telah mencapai ini tetapi hanya berfungsi ketika dua file css (keduanya di kepala dokumen saya) dipisahkan oleh beberapa javascript sebagai berikut.
Saya telah menguji ini dengan Firefox, safari dan opera. Kadang-kadang animasi bekerja, kadang-kadang melompat langsung ke file css kedua dan kadang-kadang halaman tampaknya memuat tetapi tidak ada yang ditampilkan (mungkin hanya saya?)
Berikut ini tautan ke situs web work-in-progress saya: http://www.hankins-design.co.uk/beta2/test/index.html
Mungkin saya salah, tetapi saya pikir browser yang tidak mendukung transisi css seharusnya tidak memiliki masalah karena mereka harus langsung beralih ke file css kedua tanpa penundaan atau durasi.
Saya tertarik untuk mengetahui pandangan tentang bagaimana mesin pencari ramah metode ini. Dengan topi hitam saya, saya kira saya bisa mengisi halaman dengan kata kunci dan menerapkan penundaan 9999 pada opacity-nya.
Saya akan tertarik untuk mengetahui bagaimana mesin pencari berurusan dengan atribut transisi-delay dan apakah, menggunakan metode di atas, mereka bahkan akan melihat tautan dan informasi pada halaman.
Lebih penting lagi, saya benar-benar ingin tahu mengapa ini tidak konsisten setiap kali halaman dimuat dan bagaimana saya dapat memperbaikinya!
Saya harap ini dapat menghasilkan beberapa pandangan dan pendapat jika tidak ada yang lain!
sumber
Jika ada orang lain yang kesulitan melakukan dua transisi sekaligus, inilah yang saya lakukan. Saya membutuhkan teks untuk datang dari atas ke bawah pada pemuatan halaman.
HTML
HTML
CSS
Tidak tahu mengapa saya terus mencoba menggunakan 2 deklarasi transisi dalam 1 pemilih dan (tidak juga) berpikir itu akan menggunakan keduanya.
sumber
Bahkan solusi yang lebih sederhana (masih dengan javascript [one line inline]):
Gunakan ini sebagai tag tubuh: Perhatikan itu
body.
atauthis.
tidak berfungsi untuk saya. Hanya panjang;querySelector
memungkinkan penggunaanclassList.remove
(Linux Chromium)dan tambahkan baris ini di atas aturan css Anda yang lain.
Perhatikan bahwa ini dapat berlaku untuk opacity (seperti yang diminta oleh OP [poster lain]) hanya dengan menggunakan opacity sebagai pemicu transisi. (bahkan mungkin bekerja pada aturan css lainnya dengan cara yang sama dan Anda dapat menggunakan beberapa kelas untuk penundaan kejelasan antara pemicuan)
Logikanya sama. Menegakkan tidak ada transformasi (dengan
:none !important
pada semua elemen anakbody.onload
dan setelah dokumen dimuat menghapus kelas untuk memicu semua transisi pada semua elemen seperti yang ditentukan dalam css Anda.JAWABAN PERTAMA DI BAWAH (LIHAT EDISI DI ATAS UNTUK JAWABAN PENDEK)
Berikut ini solusi sebaliknya:
Bekerja dengan banyak transisi pada banyak elemen. Tidak mencoba kompatibilitas lintas-browser.
sumber
Tidak juga, karena CSS diterapkan sesegera mungkin, tetapi elemen-elemennya mungkin belum digambar. Anda bisa menebak penundaan 1 atau 2 detik, tetapi ini tidak akan cocok untuk kebanyakan orang, tergantung pada kecepatan internet mereka.
Selain itu, jika Anda ingin memudar sesuatu misalnya, itu akan membutuhkan CSS yang menyembunyikan konten yang akan dikirimkan. Jika pengguna tidak memiliki transisi CSS3 maka mereka tidak akan pernah melihatnya.
Saya akan merekomendasikan menggunakan jQuery (untuk kemudahan penggunaan + Anda mungkin ingin menambahkan animasi untuk UA lain) dan beberapa JS seperti ini:
Bersamaan dengan transisi yang ditambahkan dalam CSS. Ini memiliki keuntungan dengan mudah memungkinkan penggunaan animasi daripada CSS kedua di browser lama jika diperlukan.
sumber
#id_to_fade in
, meskipun saya setuju, itu tidak jelas dari jawabannya.#id_to_fade_in { -webkit-transition:opacity 0.5s ease-in-out; }
+-o-
,-moz-
awalan juga.