Saya ingin agar menu Bootstrap saya turun secara otomatis saat mengarahkan kursor, daripada harus mengklik judul menu. Saya juga ingin kehilangan panah kecil di sebelah judul menu.
css
drop-down-menu
twitter-bootstrap
bimbang
sumber
sumber
Jawaban:
Saya membuat menu drop-down murni saat melayang berdasarkan kerangka kerja Bootstrap (v2.0.2) terbaru yang memiliki dukungan untuk beberapa submenu dan berpikir saya akan mempostingnya untuk pengguna di masa mendatang:
Demo
sumber
class="dropdown-toggle" data-toggle="dropdown"
sehingga hanya melayang, tidak klik akan memicu menu. Perhatikan bahwa ketika Anda menggunakan gaya responsif, menu masih bisa tersapu ke tombol kecil di kanan atas, yang masih dipicu oleh klik. Terima kasih banyak!@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
dan@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
Untuk mendapatkan menu agar secara otomatis drop pada hover maka ini dapat dicapai dengan menggunakan CSS dasar. Anda perlu menentukan pemilih untuk opsi menu yang tersembunyi dan kemudian mengaturnya untuk ditampilkan sebagai blok ketika
li
tag yang sesuai diletakkan di atas. Mengambil contoh dari halaman bootstrap twitter, pemilihnya adalah sebagai berikut:Namun, jika Anda menggunakan fitur responsif Bootstrap, Anda tidak akan menginginkan fungsi ini di navbar yang diciutkan (pada layar yang lebih kecil). Untuk menghindari ini, bungkus kode di atas dalam kueri media:
Untuk menyembunyikan panah (tanda sisipan) ini dilakukan dengan berbagai cara tergantung pada apakah Anda menggunakan Twitter Bootstrap versi 2 dan lebih rendah atau versi 3:
Bootstrap 3
Untuk menghapus tanda sisipan di versi 3 Anda hanya perlu menghapus HTML
<b class="caret"></b>
dari.dropdown-toggle
elemen jangkar:Bootstrap 2 & lebih rendah
Untuk menghapus tanda sisipan di versi 2 Anda perlu sedikit lebih banyak wawasan tentang CSS dan saya sarankan melihat bagaimana
:after
elemen pseudo bekerja lebih detail. Untuk membantu Anda memulai cara memahami, menargetkan, dan menghapus panah dalam contoh bootstrap twitter, Anda akan menggunakan pemilih dan kode CSS berikut:Ini akan menguntungkan Anda jika Anda melihat lebih jauh bagaimana ini bekerja dan tidak hanya menggunakan jawaban yang saya berikan kepada Anda.
Terima kasih kepada @CocaAkat karena telah menunjukkan bahwa kami melewatkan kombinasi anak ">" untuk mencegah sub-menu ditampilkan pada induk kursor
sumber
margin: 0;
, jika margin 1px di atas.dropdown-menu
menyebabkan perilaku buggy.data-toggle="dropdown"
atribut.Selain jawaban dari "My Head Hurts" (yang hebat):
Ada 2 masalah yang tersisa:
Solusi untuk (1) adalah menghapus elemen "class" dan "data-toggle" dari tautan nav
Ini juga memberi Anda kemampuan untuk membuat tautan ke halaman induk Anda - yang tidak mungkin dilakukan dengan penerapan default. Anda bisa mengganti "#" dengan halaman apa pun yang ingin Anda kirimi pengguna.
Solusi untuk (2) adalah menghapus margin-top pada pemilih .dropdown-menu
sumber
data-toggle="dropdown"
atribut, yang sepertinya berfungsi..nav-pills .dropdown-menu { margin-top: 0px; }
Saya telah menggunakan sedikit jQuery:
sumber
$('ul.nav li.dropdown').hover(function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(); }, function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut().hover(function() { $(this).stop(true, true); }); });
: Ketika submenu melayang berhenti fadeOutAda banyak solusi yang sangat bagus di sini. Tetapi saya berpikir bahwa saya akan melanjutkan dan menempatkan milik saya di sini sebagai alternatif lain. Itu hanya potongan jQuery sederhana yang melakukan seperti bootstrap jika didukung melayang-layang untuk dropdown bukan hanya klik. Saya hanya menguji ini dengan versi 3 jadi saya tidak tahu apakah itu akan berfungsi dengan versi 2. Simpan sebagai potongan di editor Anda dan memilikinya di ujung tombol.
Pada dasarnya, ini hanya mengatakan ketika Anda membawa kelas dropdown, itu akan menambah kelas terbuka untuk itu. Maka itu hanya bekerja. Ketika Anda berhenti melayang di antara kedua induk li dengan kelas dropdown atau anak-anak, itu menghapus kelas terbuka. Jelas, ini hanya salah satu dari banyak solusi, dan Anda dapat menambahkannya untuk membuatnya bekerja hanya pada contoh spesifik dari dropdown. Atau tambahkan transisi ke orang tua atau anak.
sumber
Cukup sesuaikan gaya CSS Anda dalam tiga baris kode
sumber
Jika Anda memiliki elemen dengan
dropdown
kelas seperti ini (misalnya):Kemudian Anda dapat memiliki menu tarik-turun untuk secara otomatis drop-down di atas, daripada harus mengklik judulnya, dengan menggunakan potongan kode jQuery ini:
Ini demo
Jawaban ini mengandalkan jawaban @Michael , saya telah membuat beberapa perubahan dan menambahkan beberapa tambahan untuk membuat menu dropdown berfungsi dengan baik
sumber
[Perbarui] Pengaya ada di GitHub dan saya sedang mengerjakan beberapa perbaikan (seperti hanya menggunakan dengan atribut data (tidak perlu JS). Saya telah meninggalkan kode di bawah, tetapi tidak sama dengan apa yang ada di GitHub.
Saya menyukai versi murni CSS, tetapi senang memiliki penundaan sebelum ditutup, karena biasanya pengalaman pengguna yang lebih baik (yaitu tidak dihukum karena slip mouse yang berjalan 1 px di luar dropdown, dll), dan seperti yang disebutkan dalam komentar , ada margin 1px yang harus Anda hadapi atau kadang-kadang nav ditutup secara tidak terduga ketika Anda pindah ke dropdown dari tombol asli, dll.
Saya membuat plugin kecil cepat yang saya gunakan di beberapa situs dan bekerja dengan baik. Setiap item nav ditangani secara independen, sehingga mereka memiliki timer keterlambatan mereka sendiri, dll.
JS
The
delay
parameter cukup jelas, daninstantlyCloseOthers
langsung akan menutup semua dropdown lainnya yang terbuka ketika Anda hover atas yang baru.Bukan CSS murni, tapi semoga akan membantu orang lain pada jam selarut ini (yaitu ini adalah utas lama).
Jika Anda mau, Anda dapat melihat berbagai proses yang saya lalui (dalam diskusi tentang
#concrete5
IRC) untuk membuatnya bekerja melalui langkah-langkah berbeda dalam inti ini: https://gist.github.com/3876924Pendekatan pola plugin jauh lebih bersih untuk mendukung penghitung waktu individual, dll.
Lihat posting blog untuk lebih lanjut.
sumber
Ini bekerja untuk saya:
sumber
Ini dibangun ke dalam Bootstrap 3. Cukup tambahkan ini ke CSS Anda:
sumber
Bahkan lebih baik dengan jQuery:
sumber
jQuery('ul.nav li.dropdown').hover(function() { jQuery(this).closest('.dropdown-menu').stop(true, true).show(); jQuery(this).addClass('open'); }, function() { jQuery(this).closest('.dropdown-menu').stop(true, true).hide(); jQuery(this).removeClass('open'); });
sehingga submenu tidak akan ditampilkan di hover.Anda dapat menggunakan
$().dropdown('toggle')
metode default untuk beralih menu dropdown di hover:sumber
Hanya ingin menambahkan, bahwa jika Anda memiliki beberapa dropdown (seperti yang saya lakukan), Anda harus menulis:
Dan itu akan bekerja dengan baik.
sumber
margin: 2px 0 0;
yang berarti mouseEnter lambat dari atas menyembunyikan menu sebelum waktunya.ul.dropdown-menu{ margin-top: 0; }
Menurut pendapat saya, cara terbaik adalah seperti ini:
Markup sampel:
sumber
Cara terbaik untuk melakukannya adalah dengan hanya memicu acara klik Bootstrap dengan hover. Dengan cara ini, perangkat itu harus tetap ramah sentuhan.
sumber
Saya sudah mengaturnya sebagai berikut:
Saya harap ini membantu seseorang ...
sumber
Juga menambahkan margin-top: 0 untuk mengatur ulang bootstrap css margin untuk. Dropdown-menu sehingga daftar menu tidak hilang ketika pengguna melayang perlahan dari menu drop down ke daftar menu.
sumber
Ini mungkin ide yang bodoh, tetapi untuk menghapus panah yang mengarah ke bawah, Anda dapat menghapus
Ini tidak melakukan apa pun untuk yang menunjuk ke atas, meskipun ...
sumber
Saya telah menerbitkan plugin yang tepat untuk fungsionalitas drop-down Bootstrap 3, di mana Anda bahkan dapat menentukan apa yang terjadi ketika mengklik
dropdown-toggle
elemen (klik dapat dinonaktifkan):https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
Mengapa saya membuatnya ketika ada banyak solusi?
Saya memiliki masalah dengan semua solusi yang ada sebelumnya. CSS sederhana tidak menggunakan
.open
kelas pada.dropdown
, jadi tidak akan ada umpan balik pada elemen sakelar drop-down ketika drop-down terlihat.Js yang mengganggu mengklik
.dropdown-toggle
, sehingga dropdown muncul di hover, kemudian menyembunyikannya saat mengklik drop-down yang terbuka, dan memindahkan mouse akan memicu drop-down untuk muncul lagi. Beberapa solusi js merusak kompatibilitas iOS, beberapa plugin tidak berfungsi pada browser desktop modern yang mendukung acara sentuh.Itu sebabnya saya membuat plugin Bootstrap Dropdown Hover yang mencegah semua masalah ini hanya dengan menggunakan API javascript Bootstrap standar, tanpa peretasan apa pun . Bahkan atribut Aria bekerja dengan baik dengan plugin ini.
sumber
bootstrap-dropdown-hover
, karena sepertinya melakukan pekerjaan dan lebih kompak. Saya sedang membangun situs pendaratan dengan navbar sisi kiri.Gunakan kode ini untuk membuka submenu di mousehover (hanya desktop):
Dan jika Anda ingin menu tingkat pertama diklik, bahkan di seluler tambahkan ini:
Submenu (menu tarik-turun) akan dibuka dengan mousehover di desktop, dan dengan klik / sentuh pada ponsel dan tablet. Setelah submenu terbuka, klik kedua akan memungkinkan Anda membuka tautan. Berkat
if ($(window).width() > 767)
, submenu akan mengambil lebar layar penuh di ponsel.sumber
sumber
Ini akan menyembunyikan yang naik
sumber
Ini harus menyembunyikan drop down dan caret mereka jika lebih kecil dari tablet.
sumber
Solusi jQuery bagus, tetapi perlu menangani peristiwa klik (untuk ponsel atau tablet) karena hover tidak akan berfungsi dengan baik ... Mungkin bisa melakukan deteksi ukuran jendela kembali?
Jawaban Andres Ilich tampaknya bekerja dengan baik, tetapi harus dibungkus dengan kueri media:
sumber
Solusi yang sangat sederhana untuk versi 2, hanya CSS. Menjaga fungsi ramah yang sama untuk seluler dan tablet.
sumber
Timpa bootstrap.js dengan skrip ini.
sumber
Inilah teknik saya yang menambahkan sedikit keterlambatan sebelum menu ditutup setelah Anda berhenti melayang-layang di menu atau tombol sakelar. Yang
<button>
biasanya Anda klik untuk menampilkan menu nav adalah#nav_dropdown
.sumber
Untuk meningkatkan jawaban Sudharshan , saya membungkus ini dalam kueri media untuk mencegah melayang ketika pada lebar tampilan XS ...
Karet dalam markup tidak diperlukan, hanya kelas dropdown untuk li .
sumber
Ini berfungsi untuk WordPress Bootstrap:
sumber
Jadi, Anda memiliki kode ini:
Biasanya ini berfungsi pada acara klik, dan Anda ingin itu berfungsi pada acara hover. Ini sangat sederhana, cukup gunakan kode JavaScript / jQuery ini:
Ini bekerja dengan sangat baik dan inilah penjelasannya: kami memiliki tombol, dan menu. Ketika kami mengarahkan tombol, kami menampilkan menu, dan ketika kami keluar dari tombol, kami menyembunyikan menu setelah 100 ms. Jika Anda bertanya-tanya mengapa saya menggunakannya, itu karena Anda perlu waktu untuk menarik kursor dari tombol di atas menu. Ketika Anda berada di menu, waktu diatur ulang dan Anda dapat tetap di sana sebanyak yang Anda inginkan. Saat Anda keluar dari menu, kami akan menyembunyikan menu secara instan tanpa batas waktu.
Saya telah menggunakan kode ini di banyak proyek, jika Anda menemui masalah dalam menggunakannya, jangan ragu untuk bertanya kepada saya.
sumber