Saat ini saya sedang mendesain menu 'mega dropdown' CSS - pada dasarnya menu dropdown khusus CSS saja, tetapi yang berisi berbagai jenis konten.
Saat ini, tampaknya transisi CSS 3 tidak berlaku untuk properti 'display' , yaitu, Anda tidak dapat melakukan transisi apa pun dari display: none
kedisplay: block
(atau kombinasi apa pun).
Apakah ada cara untuk menu tingkat kedua dari contoh di atas untuk 'memudar' ketika seseorang melayang di atas salah satu item menu tingkat atas?
Saya sadar bahwa Anda dapat menggunakan transisi di visibility:
properti, tetapi saya tidak bisa memikirkan cara untuk menggunakannya secara efektif.
Saya juga sudah mencoba menggunakan ketinggian, tapi itu gagal total.
Saya juga sadar bahwa ini sepele untuk mencapai ini menggunakan JavaScript, tetapi saya ingin menantang diri saya sendiri untuk menggunakan CSS saja, dan saya pikir saya akan sedikit kekurangan.
sumber
z-index:0
juga.visibility: hidden
kecuali Anda ingin pembaca layar membacanya (sedangkan browser khas tidak akan). Itu hanya mendefinisikan visibilitas elemen (seperti pepatahopacity: 0
), dan itu masih bisa dipilih, diklik, dan apa pun itu; itu tidak terlihat.pointer-events
di IE 8,9,10, jadi itu tidak selalu baikJawaban:
Anda dapat menggabungkan dua transisi atau lebih, dan
visibility
apa yang berguna saat ini.(Jangan lupa awalan vendor ke
transition
properti.)Rincian lebih lanjut ada di artikel ini .
sumber
Anda perlu menyembunyikan elemen dengan cara lain untuk membuatnya berfungsi.
Saya menyelesaikan efeknya dengan memposisikan keduanya secara
<div>
absolut dan mengatur yang tersembunyiopacity: 0
.Jika Anda bahkan mengalihkan
display
properti darinone
keblock
, transisi Anda pada elemen lain tidak akan terjadi.Untuk mengatasinya, selalu izinkan elemen tersebut berada
display: block
, tetapi sembunyikan elemen tersebut dengan menyesuaikan salah satu dari sarana ini:height
ke0
.opacity
ke0
.overflow: hidden
.Kemungkinan ada lebih banyak solusi, tetapi Anda tidak dapat melakukan transisi jika Anda beralih ke elemen
display: none
. Misalnya, Anda dapat mencoba sesuatu seperti ini:Tetapi itu tidak akan berhasil. Dari pengalaman saya, saya menemukan ini tidak melakukan apa-apa.
Karena itu, Anda harus selalu menjaga elemen
display: block
- tetapi Anda bisa menyiasatinya dengan melakukan sesuatu seperti ini:sumber
visibility:hidden; opacity:0; -webkit-transition: all .2s ease-in-out;
Tidak hanya ini tidak bertransisi dengan benar, tetapi elemen target tidak akan pernah muncul. QA akan mengecewakanmu, aku, dan ibumu.height: 0;
dan tidak mentransisikannya, transisi tidak akan berfungsi. Saya mencoba ini hanya mencoba transisi opacity. Saya harus menghapusheight: 0;
overflow: hidden
terima kasih banyak!Pada saat posting ini, semua browser utama menonaktifkan transisi CSS jika Anda mencoba mengubah
display
properti, tetapi animasi CSS masih berfungsi dengan baik sehingga kami dapat menggunakannya sebagai solusi.Contoh Kode (Anda dapat menerapkannya ke menu Anda) Demo :
Tambahkan CSS berikut ke stylesheet Anda:
Kemudian terapkan
fadeIn
animasi ke anak pada hover orang tua (dan tentu saja diaturdisplay: block
):Pembaruan 2019 - Metode yang juga mendukung fading out:
(Diperlukan beberapa kode JavaScript)
sumber
height: 0
trick (untuk transisi) yang disebutkan di atas tampaknya tidak bekerja karena ketinggian akan diatur ke 0 pada transisi fade-out, tapi trik ini tampaknya bekerja dengan baik.display
properti - tidak ada alasan untuk melakukannya. Dan bahkan jika mereka melakukannya , mengapa animasi akan berhasil? Anda tidak dapat menggunakandisplay
properti di animasi CSS.Saya menduga bahwa alasan transisi dinonaktifkan jika
display
diubah adalah karena tampilan yang sebenarnya dilakukan. Itu tidak mengubah apa pun yang mungkin bisa dianimasikan dengan lancar.display: none;
danvisibility: hidden;
dua hal yang sama sekali berbeda.Keduanya memang memiliki efek membuat elemen tidak terlihat, tetapi dengan
visibility: hidden;
itu masih ditampilkan dalam tata letak, tetapi tidak tampak begitu.Elemen tersembunyi masih membutuhkan ruang, dan masih dirender sebaris atau sebagai blok atau blok-sebaris atau tabel atau apa pun
display
elemen yang memerintahkannya untuk dirender, dan mengambil ruang yang sesuai.Elemen-elemen lain tidak secara otomatis bergerak untuk menempati ruang itu. Elemen tersembunyi tidak membuat piksel aktualnya menjadi output.
display: none
di sisi lain sebenarnya mencegah elemen dari rendering sepenuhnya .Tidak memakan ruang tata letak apa pun .
Elemen-elemen lain yang akan menempati sebagian atau seluruh ruang yang diambil oleh elemen ini sekarang menyesuaikan diri untuk menempati ruang itu, seolah-olah elemen itu sama sekali tidak ada sama sekali .
display
bukan hanya atribut visual.Ini menetapkan seluruh modus render elemen, seperti apakah itu
block
,inline
,inline-block
,table
,table-row
,table-cell
,list-item
, atau apa pun!Masing-masing memiliki konsekuensi tata letak yang sangat berbeda, dan tidak akan ada cara yang masuk akal untuk menghidupkan atau mentransisikannya dengan mulus (coba bayangkan transisi yang mulus dari atau
block
keinline
sebaliknya, misalnya!).Inilah sebabnya mengapa transisi dinonaktifkan jika perubahan tampilan (bahkan jika perubahannya ke atau dari
none
-none
bukan hanya tidak terlihat, itu adalah mode render elemennya sendiri yang berarti tidak ada render sama sekali!).sumber
display
tidak dapat ditransisikan dengan lancar seperti properti lainnya, tetapi itu tidak berarti waktunya tidak penting. Mampu mengontrol ketika transisi daridisply:block
kedisplay:none
terjadi adalah sangat penting. Sama seperti @CurtisYallop menggambarkannya. Jika saya ingin beralih dariopacity:1
keopacity:0
dan kemudian beralihdisplay:block
kedisplay:none
saya harus bisa melakukannya.Alih-alih panggilan balik, yang tidak ada dalam CSS, kita dapat menggunakan
transition-delay
properti.Jadi, apa yang terjadi di sini?
Ketika
visible
kelas ditambahkan, keduanyaheight
danopacity
mulai animasi tanpa penundaan (0 ms), meskipunheight
membutuhkan 0 ms untuk menyelesaikan animasi (setara dengandisplay: block
) danopacity
membutuhkan 600 ms.Ketika
visible
kelas dihapus,opacity
mulai animasi (penundaan 0 ms, durasi 400 ms), dan tinggi menunggu 400 ms dan hanya kemudian secara instan (0 ms) mengembalikan nilai awal (setara dengandisplay: none
dalam callback animasi).Catatan, pendekatan ini lebih baik daripada yang menggunakan
visibility
. Dalam kasus seperti itu, elemen masih menempati ruang pada halaman, dan itu tidak selalu cocok.Untuk lebih banyak contoh, silakan merujuk ke artikel ini .
sumber
height:100%
yang dapat merusak tata letak dalam beberapa kasus. Solusi bagus, jika itu tidak masalah. Salah satu dari beberapa bidirectional yang berfungsi.transition: height 0ms 0ms, opacity 600ms 0ms
, saya hanya menggunakantransition-delay: 0s
.display
bukan salah satu properti yang berfungsi transisi.Lihat Properti CSS yang dapat dianimasi untuk daftar properti CSS yang dapat menerapkan transisi padanya. Lihat Nilai CSS dan Unit Modul Level 4, Menggabungkan Nilai: Interpolasi, Penambahan, dan Akumulasi untuk bagaimana mereka diinterpolasi.
Hingga CSS 3 terdaftar di 9.1. Properti dari CSS (cukup tutup sembulan peringatan)
Terakhir kali saya harus melakukan ini, saya menggunakan itu
max-height
, yang merupakan properti animatable (meskipun itu sedikit hack, itu berhasil), tetapi berhati-hatilah karena itu mungkin sangat janky untuk halaman yang kompleks atau pengguna dengan ponsel low-end perangkat.sumber
Anda dapat menambahkan animasi khusus ke properti blok sekarang.
Demo
Dalam demo ini, sub-menu berubah dari
display:none
menjadidisplay:block
dan masih berhasil memudar.sumber
myfirst
menjadishowNav
di sini? Dan bagaimana dengan Firefox? Sayangnya saya tidak dapat menemukan sesuatu yang berhubungan dengan halaman demo yang Anda sebutkan.Menurut W3C Working Draft 19 November 2013
display
bukan properti animatable . Untungnya,visibility
ini dapat dianimasikan. Anda dapat rantai transisinya dengan transisi opacity ( JSFiddle ):HTML:
CSS:
JavaScript untuk pengujian:
Perhatikan bahwa jika Anda hanya membuat tautan transparan, tanpa pengaturan
visibility: hidden
, maka tautan itu akan tetap dapat diklik.sumber
0
ke0s
. Rupanya, di masa lalu browser yang saya gunakan untuk pengujian didukung tanpa unit nol kali. Namun, waktu tanpa unit bukan bagian dari Rekomendasi Kandidat W3C, 29 September 2016 .Sunting: tampilan tidak ada yang tidak diterapkan dalam contoh ini.
Apa yang terjadi di atas adalah bahwa melalui 99% dari tampilan animasi diatur untuk memblokir sementara opacity memudar. Pada saat terakhir properti tampilan diatur ke tidak ada.
Dan bit yang paling penting adalah mempertahankan frame terakhir setelah animasi berakhir menggunakan mode animasi-isi: ke depan
Berikut adalah dua contoh: https://jsfiddle.net/qwnz9tqg/3/
sumber
display: none
ini tidak berhasil?display: none
,, tidak pernah benar-benar diterapkan. jsfiddle.net/3e6sduqhTrik JavaScript saya yang rapi adalah memisahkan seluruh skenario menjadi dua fungsi yang berbeda !
Untuk menyiapkan sesuatu, satu variabel global dideklarasikan dan satu pengendali acara didefinisikan:
Lalu, ketika menyembunyikan elemen, saya menggunakan sesuatu seperti ini:
Untuk memunculkan kembali elemen, saya melakukan sesuatu seperti ini:
Berhasil, sejauh ini!
sumber
Saya mengalami ini hari ini, dengan
position: fixed
modal yang saya gunakan kembali. Saya tidak bisa menyimpannyadisplay: none
dan kemudian menghidupkannya, karena itu baru saja muncul, dan danz-index
(nilai negatif, dll) melakukan hal-hal aneh juga.Saya juga menggunakan
height: 0
toheight: 100%
, tetapi hanya berfungsi ketika modal muncul. Ini sama seperti jika Anda menggunakanleft: -100%
atau sesuatu.Kemudian saya tersadar bahwa ada jawaban sederhana. Et voila:
Pertama, modal tersembunyi Anda. Perhatikan
height
is0
, dan periksaheight
deklarasi dalam transisi ... ini memiliki500ms
, yang lebih panjang dariopacity
transisi saya . Ingat, ini memengaruhi transisi fade-out yang keluar: mengembalikan modal ke status default.Kedua, modal Anda yang terlihat. Katakanlah Anda sedang mengatur a
.modal-active
kebody
. Sekarangheight
ini100%
, dan transisi saya juga telah berubah. Saya inginheight
segera diubah, danopacity
untuk diambil300ms
.Itu dia, itu bekerja seperti pesona.
sumber
Mengambil dari beberapa jawaban ini dan beberapa saran di tempat lain, berikut ini cocok untuk melayang menu (saya menggunakan ini dengan Bootstrap 3, khususnya):
Anda juga dapat menggunakannya
height
sebagai penggantimax-height
jika Anda menentukan kedua nilai karenaheight:auto
tidak diizinkan dengantransition
s. Nilai hover darimax-height
kebutuhan harus lebih besar dariheight
menu mungkin.sumber
Saya menemukan cara yang lebih baik untuk masalah ini, Anda dapat menggunakan Animasi CSS dan membuat efek yang luar biasa untuk menampilkan item.
sumber
Saya telah menemukan masalah ini beberapa kali dan sekarang cukup dengan:
Dengan menambahkan kelas
block--invisible
seluruh Elemen tidak akan dapat diklik tetapi semua Elemen di belakangnya akan karenapointer-events:none
yang didukung oleh semua browser utama (tidak ada IE <11).sumber
pointer-events
Ubah
overflow:hidden
keoverflow:visible
. Itu bekerja lebih baik. Saya menggunakan seperti ini:visible
lebih baik karenaoverflow:hidden
bertindak persis sepertidisplay:none
.sumber
JavaScript tidak diperlukan, dan tidak diperlukan max-height sangat besar. Alih-alih, atur
max-height
elemen pada teks Anda, dan gunakan unit relatif font sepertirem
atauem
. Dengan cara ini, Anda dapat mengatur ketinggian maksimum lebih besar dari wadah Anda, sambil menghindari penundaan atau "muncul" ketika menu ditutup:HTML
CSS
Lihat contoh di sini: http://codepen.io/mindfullsilence/pen/DtzjE
sumber
Setelah jawaban yang diterima dari Guillermo ditulis, spesifikasi transisi CSS 2012-04-03 mengubah perilaku transisi visibilitas dan sekarang dimungkinkan untuk menyelesaikan masalah ini dengan cara yang lebih singkat , tanpa menggunakan penundaan transisi:
Waktu berjalan yang ditentukan untuk kedua transisi biasanya harus sama (walaupun waktu yang sedikit lebih lama untuk visibilitas bukan masalah).
Untuk versi yang sedang berjalan, lihat posting blog saya Visibilitas Transisi CSS .
Wrt judul pertanyaan "Transisi pada tampilan: properti" dan dalam menanggapi komentar dari Rui Marques dan josh dengan jawaban yang diterima:
Solusi ini berfungsi dalam kasus di mana tidak relevan jika tampilan atau properti visibilitas digunakan (seperti yang mungkin terjadi dalam pertanyaan ini).
Itu tidak akan sepenuhnya menghapus elemen sebagai
display:none
, hanya membuatnya tidak terlihat, tetapi masih tetap dalam aliran dokumen dan mempengaruhi posisi elemen-elemen berikut.Transisi yang benar-benar menghapus elemen yang mirip dengan
display:none
dapat dilakukan dengan menggunakan tinggi (seperti yang ditunjukkan oleh jawaban dan komentar lain), tinggi-max, atau margin-top / bawah, tetapi juga melihat Bagaimana saya bisa tinggi transisi: 0; untuk ketinggian: otomatis; menggunakan CSS? dan posting blog saya Penanganan Masalah untuk Transisi CSS pada Properti Display dan Height .Menanggapi komentar dari GeorgeMillo: Diperlukan kedua properti dan transisi: Properti opacity digunakan untuk membuat animasi fade-in dan fade-out dan properti visibilitas untuk menghindari elemen yang masih bereaksi pada peristiwa mouse. Transisi diperlukan pada opacity untuk efek visual dan visibilitas untuk menunda bersembunyi sampai fade-out selesai.
sumber
Saya akhirnya menemukan solusi untuk saya, dengan menggabungkan
opacity
denganposition absolute
(tidak menempati ruang ketika disembunyikan).sumber
Saya menduga siapa pun yang baru memulai transisi CSS dengan cepat menemukan bahwa mereka tidak berfungsi jika Anda memodifikasi properti tampilan (blok / tidak ada) pada saat yang sama. Salah satu solusi yang belum disebutkan adalah bahwa Anda dapat terus menggunakan
display:block/none
untuk menyembunyikan / menampilkan elemen, tetapi atur opacity menjadi 0 sehingga bahkan ketika itudisplay:block
, itu masih tidak terlihat.Kemudian untuk memudar, tambahkan kelas CSS lain seperti "on" yang mengatur opacity menjadi 1 dan mendefinisikan transisi untuk opacity. Seperti yang mungkin Anda bayangkan, Anda harus menggunakan JavaScript untuk menambahkan kelas "on" ke elemen, tetapi setidaknya Anda masih menggunakan CSS untuk transisi yang sebenarnya.
PS Jika Anda menemukan diri Anda dalam situasi di mana Anda perlu melakukan keduanya
display:block
, dan menambahkan kelas "on", pada saat yang sama, tunda yang terakhir menggunakan setTimeout. Kalau tidak, browser hanya melihat kedua hal itu terjadi sekaligus dan menonaktifkan transisi.sumber
display:none
.Sesederhana berikut ini :)
Dapatkan untuk memudar, dan kemudian berhasil
height 0;
. Pastikan juga untuk menggunakan ke depan agar tetap dalam kondisi akhir.sumber
Solusi ini memiliki kompatibilitas yang sangat baik, dan saya belum melihatnya:
Penjelasan : menggunakan
visibility: hidden
trik (yang kompatibel dengan "tunjukkan dan hidupkan" dalam satu langkah), tetapi menggunakan kombinasiposition: absolute; z-index: -1; pointer-events: none;
untuk memastikan bahwa wadah tersembunyi tidak memakan tempat dan tidak menjawab interaksi pengguna .sumber
position
masih akan membuat elemen brengsek di sekitar, bukan?position: absolute
berarti elemen tersebut tidak memakan tempat, seperti yang dijelaskan dalam penjelasan. Ketika beralih keposition: static
dan muncul, itu akan mengambil ruang seperti elemen normal, yang merupakan inti dari pertanyaan ini. Saya sarankan Anda mencobanya!Anda bisa membuatnya berfungsi seperti yang Anda harapkan - menggunakan tampilan - tetapi Anda harus mencekik peramban agar berfungsi, menggunakan Javascript atau yang lain menyarankan trik mewah dengan satu tag di dalam tag lain. Saya tidak peduli dengan tag batin karena semakin memperumit CSS dan dimensi, jadi inilah solusi Javascript:
https://jsfiddle.net/b9chris/hweyecu4/17/
Mulai dengan kotak seperti:
Kotak tersembunyi.
Kita akan menggunakan trik yang ditemukan di q / a terkait, memeriksa offsetHeight untuk mempercepat browser secara instan:
https://stackoverflow.com/a/16575811/176877
Pertama, perpustakaan memformalkan trik di atas:
Selanjutnya, kita akan menggunakannya untuk mengungkapkan kotak, dan memudar di:
Ini memudar kotak masuk dan keluar. Jadi,
.noTrnsn()
matikan transisi, lalu kita hapushidden
kelas, yang beralihdisplay
darinone
ke standarnyablock
,. Kami kemudian mengatur opacity ke 0 untuk bersiap-siap untuk memudar. Sekarang setelah kami mengatur panggung, kami mengaktifkan kembali transisi, dengan.resumeTrnsn()
. Dan akhirnya, mulailah transisi dengan mengatur opacity ke 1.Tanpa pustaka, baik perubahan pada tampilan maupun perubahan pada opacity akan memberi kita hasil yang tidak diinginkan. Jika kami hanya menghapus panggilan perpustakaan, kami tidak akan mendapatkan transisi sama sekali.
Perhatikan bahwa di atas tidak mengatur tampilan menjadi tidak ada lagi di akhir animasi fadeout. Kita bisa jadi pelamun. Mari kita lakukan dengan yang memudar dan tumbuh tinggi dari 0.
Mewah!
https://jsfiddle.net/b9chris/hweyecu4/22/
Kami sekarang mentransisikan tinggi dan opacity. Perhatikan bahwa kita tidak menetapkan tinggi, yang berarti itu adalah default
auto
,. Secara konvensional ini tidak dapat ditransisikan - pindah dari otomatis ke nilai piksel (seperti 0) tidak akan membuat Anda mengalami transisi. Kita akan mengatasinya dengan perpustakaan, dan satu lagi metode perpustakaan:Ini adalah metode kenyamanan yang memungkinkan kita berpartisipasi dalam antrian fx / animasi jQuery yang ada, tanpa memerlukan kerangka animasi apa pun yang sekarang dikecualikan di jQuery 3.x. Saya tidak akan menjelaskan cara kerja jQuery, tetapi cukup untuk mengatakan,
.queue()
dan.stop()
menyederhanakan yang disediakan jQuery membantu kita mencegah animasi kita saling menginjak.Mari kita menghidupkan efek slide ke bawah.
Kode ini dimulai dengan memeriksa
#box
dan apakah saat ini disembunyikan, dengan memeriksa kelasnya. Tapi itu lebih berhasil menggunakanwait()
panggilan perpustakaan, dengan menambahkanhidden
kelas pada akhir animasi slideout / fade, yang Anda harapkan untuk menemukan jika itu sebenarnya tersembunyi - sesuatu yang contoh sederhana di atas tidak bisa lakukan. Ini terjadi juga untuk mengaktifkan tampilan / menyembunyikan elemen berulang-ulang, yang merupakan bug pada contoh sebelumnya, karena kelas tersembunyi tidak pernah dipulihkan.Anda juga dapat melihat perubahan CSS dan kelas yang dipanggil
.noTrnsn()
untuk secara umum mengatur panggung untuk animasi, termasuk melakukan pengukuran, seperti mengukur apa yang akan menjadi ketinggian akhir#box
tanpa menunjukkannya kepada pengguna, sebelum memanggil.resumeTrnsn()
, dan menganimasinya dari set lengkap itu. panggung ke nilai-nilai CSS tujuannya.Jawaban Lama
https://jsfiddle.net/b9chris/hweyecu4/1/
Anda dapat memilikinya transisi pada klik dengan:
CSS adalah apa yang Anda duga:
Kuncinya adalah membatasi properti tampilan. Dengan menghapus kelas tersembunyi dan kemudian menunggu 50 ms, kemudian memulai transisi melalui kelas yang ditambahkan, kita membuatnya muncul dan kemudian berkembang seperti yang kita inginkan, alih-alih hanya melompat ke layar tanpa animasi. Serupa terjadi sebaliknya, kecuali kami menunggu sampai animasi selesai sebelum menerapkan tersembunyi.
Catatan: Saya menyalahgunakan di
.animate(maxWidth)
sini untuk menghindarisetTimeout
kondisi balapan.setTimeout
cepat untuk memperkenalkan bug tersembunyi ketika Anda atau orang lain mengambil kode yang tidak menyadarinya..animate()
dapat dengan mudah dibunuh.stop()
. Saya hanya menggunakannya untuk menempatkan penundaan 50 ms atau 2000 ms pada antrian fx standar di mana mudah ditemukan / diselesaikan oleh pembuat kode lain di atas ini.sumber
Saya memiliki masalah serupa yang tidak dapat saya temukan jawabannya. Beberapa pencarian Google kemudian membawa saya ke sini. Mengingat saya tidak menemukan jawaban sederhana yang saya harapkan, saya menemukan solusi yang elegan dan efektif.
Ternyata
visibility
properti CSS memiliki nilaicollapse
yang umumnya digunakan untuk item tabel. Namun, jika digunakan pada elemen lain, elemen itu secara efektif menjadikannya tersembunyi , hampir sama dengandisplay: hidden
tetapi dengan kemampuan tambahan bahwa elemen tersebut tidak memakan ruang apa pun dan Anda masih dapat menghidupkan elemen tersebut.Di bawah ini adalah contoh sederhana dari tindakan ini.
sumber
Solusi universal paling sederhana untuk masalah ini adalah: silakan tentukan
display:none
di CSS Anda, namun Anda harus mengubahnya keblock
(atau apa pun yang lain) menggunakan JavaScript, dan kemudian Anda juga harus menambahkan kelas ke elemen Anda dalam pertanyaan yang sebenarnya melakukan transisi dengan setTimeout () . Itu saja.Yaitu:
Ini diuji di browser waras terbaru. Jelas itu seharusnya tidak berfungsi di Internet Explorer 9 atau yang lebih lama.
sumber
Saya pikir SalmanPK memiliki jawaban terdekat. Itu memudar item masuk atau keluar, dengan animasi CSS berikut. Namun, properti tampilan tidak hidup dengan lancar, hanya opacity.
Jika Anda ingin menghidupkan elemen yang bergerak dari blok tampilan ke tampilan tidak ada, saya tidak dapat melihat bahwa saat ini hanya mungkin dengan CSS. Anda harus mendapatkan ketinggian dan menggunakan animasi CSS untuk mengurangi ketinggian. Ini dimungkinkan dengan CSS seperti yang ditunjukkan pada contoh di bawah ini, tetapi akan sulit untuk mengetahui nilai ketinggian yang tepat yang Anda butuhkan untuk menghidupkan elemen.
Contoh jsFiddle
CSS
JavaScript
sumber
Anda dapat melakukan ini dengan acara transisi, jadi Anda membangun dua kelas CSS untuk transisi, satu memegang animasi lainnya, memegang keadaan tampilan tidak ada. Dan Anda beralih setelah animasi berakhir? Dalam kasus saya, saya dapat menampilkan divs lagi jika saya menekan tombol, dan menghapus kedua kelas.
Coba cuplikan di bawah ini ...
sumber
Jika Anda menggunakan jQuery untuk mengatur kelas Anda, ini akan bekerja 100%:
Tentu saja Anda bisa menggunakan jQuery
.fadeIn()
dan.fadeOut()
fungsi, tetapi keuntungan dari pengaturan kelas sebagai gantinya jika Anda ingin beralih ke nilai tampilan selainblock
(seperti default dengan.fadeIn()
dan.fadeOut()
).Di sini saya beralih ke tampilan
flex
dengan efek pudar yang bagus.sumber
Alih-alih menggunakan
display
Anda bisa menyimpan elemen 'di luar layar' sampai Anda membutuhkannya, dan kemudian mengatur posisinya ke tempat yang Anda inginkan dan mengubahnya pada waktu yang bersamaan. Ini memunculkan sejumlah masalah desain lainnya, sehingga jarak tempuh Anda mungkin berbeda.Anda mungkin tidak ingin menggunakannya
display
, karena Anda ingin konten dapat diakses oleh pembaca layar, yang sebagian besar mencoba mematuhi aturan untuk visibilitas - yaitu, jika itu tidak boleh dilihat mata, itu tidak akan ditampilkan sebagai konten ke agen.sumber
Anda cukup menggunakan visibilitas CSS : tersembunyi / terlihat alih-alih tampilan : tidak ada / blok
sumber
Saya memulai proyek kerangka sumber terbuka yang disebut Toggle Display Animate .
Pembantu kerangka ini akan memungkinkan Anda untuk dengan mudah meniru acara jQuery / sembunyikan, tetapi dengan animasi transisi CSS 3 masuk / keluar.
Menggunakan toggle kelas sehingga Anda dapat menggunakan metode CSS apa pun yang Anda inginkan pada elemen selain tampilan: none | block | table | inline, dll. Serta penggunaan alternatif lain yang dapat dipikirkan.
Tujuan desain utamanya adalah untuk status toggle elemen, dan mendukung status pengembalian di mana menyembunyikan objek memungkinkan Anda untuk menjalankan frame kunci secara terbalik atau memainkan animasi alternatif untuk menyembunyikan elemen.
Sebagian besar markup untuk konsep yang saya kerjakan adalah CSS, dan sangat sedikit JavaScript yang benar-benar digunakan.
Ada demo di sini: http://marcnewton.co.uk/projects/toggle-display-animate/
sumber