मैं अपने बूटस्ट्रैप मेनू को स्वचालित रूप से होवर पर छोड़ना चाहता हूं, बजाय मेनू शीर्षक पर क्लिक करने के। मैं भी मेनू शीर्षक के बगल में छोटे तीर खोना चाहते हैं।
मैं अपने बूटस्ट्रैप मेनू को स्वचालित रूप से होवर पर छोड़ना चाहता हूं, बजाय मेनू शीर्षक पर क्लिक करने के। मैं भी मेनू शीर्षक के बगल में छोटे तीर खोना चाहते हैं।
जवाबों:
मैंने नवीनतम (v2.0.2) बूटस्ट्रैप ढांचे के आधार पर होवर ड्रॉपडाउन मेनू पर एक शुद्ध बनाया, जिसमें कई सबमेनस के लिए समर्थन है और सोचा कि मैं इसे भविष्य के उपयोगकर्ताओं के लिए पोस्ट करूंगा:
body {
padding-top: 60px;
padding-bottom: 40px;
}
.sidebar-nav {
padding: 9px 0;
}
.dropdown-menu .sub-menu {
left: 100%;
position: absolute;
top: 0;
visibility: hidden;
margin-top: -1px;
}
.dropdown-menu li:hover .sub-menu {
visibility: visible;
}
.dropdown:hover .dropdown-menu {
display: block;
}
.nav-tabs .dropdown-menu,
.nav-pills .dropdown-menu,
.navbar .dropdown-menu {
margin-top: 0;
}
.navbar .sub-menu:before {
border-bottom: 7px solid transparent;
border-left: none;
border-right: 7px solid rgba(0, 0, 0, 0.2);
border-top: 7px solid transparent;
left: -7px;
top: 10px;
}
.navbar .sub-menu:after {
border-top: 6px solid transparent;
border-left: none;
border-right: 6px solid #fff;
border-bottom: 6px solid transparent;
left: 10px;
top: 11px;
left: -6px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a href="#" class="brand">Project name</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<a href="#">2-level Dropdown <i class="icon-arrow-right"></i></a>
<ul class="dropdown-menu sub-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="nav-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="nav-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
</ul>
<form action="" class="navbar-search pull-left">
<input type="text" placeholder="Search" class="search-query span2">
</form>
<ul class="nav pull-right">
<li><a href="#">Link</a></li>
<li class="divider-vertical"></li>
<li class="dropdown">
<a class="#" href="#">Menu</a>
</li>
</ul>
</div>
<!-- /.nav-collapse -->
</div>
</div>
</div>
<hr>
<ul class="nav nav-pills">
<li class="active"><a href="#">Regular link</a></li>
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">Dropdown <b class="caret"></b></a>
<ul class="dropdown-menu" id="menu1">
<li>
<a href="#">2-level Menu <i class="icon-arrow-right"></i></a>
<ul class="dropdown-menu sub-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li class="nav-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul>
</li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#">Menu</a>
</li>
<li class="dropdown">
<a href="#">Menu</a>
</li>
</ul>
class="dropdown-toggle" data-toggle="dropdown"
ताकि केवल होवर हो, न कि क्लिक मेनू को ट्रिगर करे। ध्यान दें कि जब आप उत्तरदायी शैलियों का उपयोग कर रहे हैं, तो मेनू अभी भी शीर्ष दाईं ओर छोटे बटन में बह गया है, जो अभी भी एक क्लिक से चालू है। बहुत धन्यवाद!
@media (min-width: 768px) {.dropdown-menu li:hover .sub-menu {visibility: visible;}}
और@media (min-width: 768px) {.dropdown:hover .dropdown-menu {display: block;}}
मेनू को स्वचालित रूप से होवर पर छोड़ने के लिए फिर यह मूल CSS का उपयोग करके प्राप्त किया जा सकता है। आपको चयनकर्ता को छिपे हुए मेनू विकल्प पर काम करना होगा और फिर उपयुक्त li
टैग के ऊपर मंडराते समय इसे ब्लॉक के रूप में प्रदर्शित करने के लिए सेट करना होगा। ट्विटर बूटस्ट्रैप पेज से उदाहरण लेते हुए, चयनकर्ता निम्नानुसार होगा:
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
हालाँकि, यदि आप बूटस्ट्रैप की उत्तरदायी विशेषताओं का उपयोग कर रहे हैं, तो आप इस कार्यक्षमता को एक ढह चुके नावबार (छोटे स्क्रीन पर) पर नहीं चाहेंगे। इससे बचने के लिए, ऊपर दिए गए कोड को मीडिया क्वेरी में लपेटें:
@media (min-width: 979px) {
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
}
तीर (कैरट) को छिपाने के लिए यह अलग-अलग तरीकों से किया जाता है, जो इस बात पर निर्भर करता है कि आप ट्विटर बूटस्ट्रैप संस्करण 2 और निम्न या संस्करण 3 का उपयोग कर रहे हैं:
बूटस्ट्रैप ३
संस्करण 3 में कैरेट को हटाने के लिए आपको बस HTML निकालने की आवश्यकता है <b class="caret"></b>
.dropdown-toggle
एंकर तत्व से :
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
Dropdown
<b class="caret"></b> <-- remove this line
</a>
बूटस्ट्रैप 2 और निचला
संस्करण 2 में कैरेट को हटाने के लिए आपको सीएसएस में थोड़ी अधिक जानकारी की आवश्यकता है और मैं सुझाव देता हूं कि कैसे देखें :after
छद्म तत्व अधिक विस्तार काम करता है। आपको ट्विटर बूटस्ट्रैप उदाहरण में तीर को लक्षित करने और हटाने के लिए समझने के अपने तरीके से शुरू करने के लिए, आप निम्नलिखित सीएसएस चयनकर्ता और कोड का उपयोग करेंगे:
a.menu:after, .dropdown-toggle:after {
content: none;
}
यह आपके पक्ष में काम करेगा यदि आप आगे देखते हैं कि ये कैसे काम करते हैं और न केवल उन उत्तरों का उपयोग करें जो मैंने आपको दिए हैं।
@CocaAkat को इंगित करने के लिए धन्यवाद कि हम मूल मेनू पर दिखाए जा रहे उप मेनू को रोकने के लिए ">" चाइल्ड कॉम्बिनेटर को याद कर रहे थे
margin: 0;
, अन्यथा ऊपर 1px मार्जिन .dropdown-menu
छोटी गाड़ी व्यवहार का कारण बनता है।
data-toggle="dropdown"
विशेषता को निकालना होगा ।
"माई हेड हर्ट्स" (जो बहुत अच्छा था) से जवाब के अलावा:
ul.nav li.dropdown:hover ul.dropdown-menu{
display: block;
}
2 सुस्त मुद्दे हैं:
(1) का समाधान "लिंक" और "डेटा-टॉगल" तत्वों को नौसेना लिंक से हटा रहा है
<a href="#">
Dropdown
<b class="caret"></b>
</a>
यह आपको अपने मूल पृष्ठ का लिंक बनाने की क्षमता भी देता है - जो कि डिफ़ॉल्ट कार्यान्वयन के साथ संभव नहीं था। आप "#" को केवल उस पेज से बदल सकते हैं, जिसे आप उपयोगकर्ता को भेजना चाहते हैं।
(2) का समाधान .drop-menu चयनकर्ता पर मार्जिन-टॉप निकाल रहा है
.navbar .dropdown-menu {
margin-top: 0px;
}
data-toggle="dropdown"
विशेषता को हटा दिया , जो काम करने के लिए लग रहा था।
.nav-pills .dropdown-menu { margin-top: 0px; }
मैंने jQuery का थोड़ा उपयोग किया है:
// Add hover effect to menus
jQuery('ul.nav li.dropdown').hover(function() {
jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
}, function() {
jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();
});
$('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); }); });
: जब सबमेनू होवर स्टॉप फेडेड होता है
यहाँ वास्तव में बहुत सारे अच्छे समाधान हैं। लेकिन मुझे लगा कि मैं आगे बढ़ूंगा और दूसरे विकल्प के रूप में मुझे यहां लाऊंगा। यह सिर्फ एक साधारण jQuery स्निपेट है जो इसे बूटस्ट्रैप करता है अगर यह सिर्फ क्लिक के बजाय ड्रॉपडाउन के लिए हॉवर का समर्थन करता है। मैंने केवल संस्करण 3 के साथ इसका परीक्षण किया है इसलिए मुझे नहीं पता कि यह संस्करण 2 के साथ काम करेगा। इसे अपने संपादक में स्निपेट के रूप में सहेजें और इसे एक कुंजी के स्ट्रोक पर रखें।
<script>
$(function() {
$(".dropdown").hover(
function(){ $(this).addClass('open') },
function(){ $(this).removeClass('open') }
);
});
</script>
मूल रूप से, यह केवल यह कह रहा है कि जब आप ड्रॉपडाउन क्लास में होवर करेंगे, तो यह ओपन क्लास को इसमें जोड़ेगा। तब यह सिर्फ काम करता है। जब आप ड्रॉपडाउन क्लास या बच्चे उल / ली के साथ माता-पिता ली पर मंडराना बंद कर देते हैं, तो यह ओपन क्लास को हटा देता है। जाहिर है, यह केवल कई समाधानों में से एक है, और आप इसे .dropdown के केवल विशिष्ट उदाहरणों पर काम करने के लिए जोड़ सकते हैं। या तो माता-पिता या बच्चे के लिए एक संक्रमण जोड़ें।
यदि आपके पास dropdown
इस तरह के वर्ग के साथ एक तत्व है (उदाहरण के लिए):
<ul class="list-unstyled list-inline">
<li class="dropdown">
<a data-toggle="dropdown" href="#"><i class="fa fa-bars"></i> Dropdown 1</a>
<ul class="dropdown-menu">
<li><a href="">Item 1</a></li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
<li><a href="">Item 4</a></li>
<li><a href="">Item 5</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#"><i class="fa fa-user"></i> Dropdown 2</a>
<ul class="dropdown-menu">
<li><a href="">Item A</a></li>
<li><a href="">Item B</a></li>
<li><a href="">Item C</a></li>
<li><a href="">Item D</a></li>
<li><a href="">Item E</a></li>
</ul>
</li>
</ul>
फिर आप jQuery कोड के इस स्निपेट का उपयोग करके, इसके शीर्षक पर क्लिक करने के बजाय, ड्रॉपडाउन मेनू को अपने आप होवर पर गिरा सकते हैं:
<script>
$('.dropdown').hover(
function() {
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
},
function() {
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();
}
);
$('.dropdown-menu').hover(
function() {
$(this).stop(true, true);
},
function() {
$(this).stop(true, true).delay(200).fadeOut();
}
);
</script>
यह उत्तर @Michael के उत्तर पर निर्भर करता है , मैंने कुछ बदलाव किए हैं और ड्रॉपडाउन मेनू को ठीक से काम करने के लिए कुछ अतिरिक्त जोड़े हैं
[अद्यतन] प्लगइन GitHub पर है और मैं कुछ सुधारों पर काम कर रहा हूं (जैसे केवल डेटा-विशेषताओं के साथ उपयोग (कोई JS आवश्यक)। मैं नीचे कोड छोड़ रहा हूं, लेकिन यह GitHub पर जैसा है वैसा नहीं है।
मुझे विशुद्ध रूप से CSS संस्करण पसंद आया, लेकिन इसके बंद होने से पहले देरी होना अच्छा है, क्योंकि यह आमतौर पर एक बेहतर उपयोगकर्ता अनुभव होता है (यानी माउस पर्ची के लिए दंडित नहीं किया जाता है जो ड्रॉपडाउन के बाहर 1 px जाता है, आदि), और जैसा कि टिप्पणियों में उल्लेख किया गया है। , वहाँ है कि मार्जिन के 1px आप के साथ या कभी कभी अप्रत्याशित रूप से बंद हो जाता है जब आप मूल बटन से ड्रॉपडाउन में जा रहे हैं, आदि।
मैंने एक त्वरित थोड़ा प्लगइन बनाया है जो मैंने कुछ साइटों पर उपयोग किया है और यह अच्छी तरह से काम किया है। प्रत्येक नव-वस्तु को स्वतंत्र रूप से संभाला जाता है, इसलिए उनके पास अपनी देरी की टाइमर आदि हैं।
जे एस
// outside the scope of the jQuery plugin to
// keep track of all dropdowns
var $allDropdowns = $();
// if instantlyCloseOthers is true, then it will instantly
// shut other nav items when a new one is hovered over
$.fn.dropdownHover = function(options) {
// the element we really care about
// is the dropdown-toggle's parent
$allDropdowns = $allDropdowns.add(this.parent());
return this.each(function() {
var $this = $(this).parent(),
defaults = {
delay: 500,
instantlyCloseOthers: true
},
data = {
delay: $(this).data('delay'),
instantlyCloseOthers: $(this).data('close-others')
},
options = $.extend(true, {}, defaults, options, data),
timeout;
$this.hover(function() {
if(options.instantlyCloseOthers === true)
$allDropdowns.removeClass('open');
window.clearTimeout(timeout);
$(this).addClass('open');
}, function() {
timeout = window.setTimeout(function() {
$this.removeClass('open');
}, options.delay);
});
});
};
delay
पैरामीटर सुंदर आत्म व्याख्यात्मक है, औरinstantlyCloseOthers
होगा तुरन्त पास अन्य सभी ड्रॉपडाउन कि खुला जब आप मंडराना एक नया एक से अधिक कर रहे हैं।
शुद्ध सीएसएस नहीं, लेकिन उम्मीद है कि इस देरी के घंटे (यानी यह एक पुराना धागा है) में किसी और की मदद करेगा।
यदि आप चाहें, तो आप विभिन्न प्रक्रियाओं को देख सकते हैं, #concrete5
जिनसे मैं ( आईआरसी पर चर्चा में ) इस गैस्ट में विभिन्न चरणों के माध्यम से काम कर सकता हूं : https://gist.github.com/3876924
अलग-अलग टाइमर आदि का समर्थन करने के लिए प्लगइन पैटर्न दृष्टिकोण बहुत साफ है।
अधिक के लिए ब्लॉग पोस्ट देखें ।
JQuery के साथ और भी बेहतर:
jQuery('ul.nav li.dropdown').hover(function() {
jQuery(this).find('.dropdown-menu').stop(true, true).show();
jQuery(this).addClass('open');
}, function() {
jQuery(this).find('.dropdown-menu').stop(true, true).hide();
jQuery(this).removeClass('open');
});
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'); });
इसलिए सबमेनू को होवर पर प्रदर्शित नहीं किया जाएगा।
मेरी राय में सबसे अच्छा तरीका इस तरह है:
;(function($, window, undefined) {
// Outside the scope of the jQuery plugin to
// keep track of all dropdowns
var $allDropdowns = $();
// If instantlyCloseOthers is true, then it will instantly
// shut other nav items when a new one is hovered over
$.fn.dropdownHover = function(options) {
// The element we really care about
// is the dropdown-toggle's parent
$allDropdowns = $allDropdowns.add(this.parent());
return this.each(function() {
var $this = $(this),
$parent = $this.parent(),
defaults = {
delay: 500,
instantlyCloseOthers: true
},
data = {
delay: $(this).data('delay'),
instantlyCloseOthers: $(this).data('close-others')
},
settings = $.extend(true, {}, defaults, options, data),
timeout;
$parent.hover(function(event) {
// So a neighbor can't open the dropdown
if(!$parent.hasClass('open') && !$this.is(event.target)) {
return true;
}
if(settings.instantlyCloseOthers === true)
$allDropdowns.removeClass('open');
window.clearTimeout(timeout);
$parent.addClass('open');
}, function() {
timeout = window.setTimeout(function() {
$parent.removeClass('open');
}, settings.delay);
});
// This helps with button groups!
$this.hover(function() {
if(settings.instantlyCloseOthers === true)
$allDropdowns.removeClass('open');
window.clearTimeout(timeout);
$parent.addClass('open');
});
// Handle submenus
$parent.find('.dropdown-submenu').each(function(){
var $this = $(this);
var subTimeout;
$this.hover(function() {
window.clearTimeout(subTimeout);
$this.children('.dropdown-menu').show();
// Always close submenu siblings instantly
$this.siblings().children('.dropdown-menu').hide();
}, function() {
var $submenu = $this.children('.dropdown-menu');
subTimeout = window.setTimeout(function() {
$submenu.hide();
}, settings.delay);
});
});
});
};
$(document).ready(function() {
// apply dropdownHover to all elements with the data-hover="dropdown" attribute
$('[data-hover="dropdown"]').dropdownHover();
});
})(jQuery, this);
नमूना मार्कअप:
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="false">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a tabindex="-1" href="#">My Account</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#">Change Email</a></li>
<li><a tabindex="-1" href="#">Change Password</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#">Logout</a></li>
</ul>
</li>
इसे करने का सबसे अच्छा तरीका सिर्फ बूटस्ट्रैप के क्लिक इवेंट को एक होवर के साथ ट्रिगर करना है। इस तरह, यह अभी भी टच डिवाइस के अनुकूल रहना चाहिए।
$('.dropdown').hover(function(){
$('.dropdown-toggle', this).trigger('click');
});
बस जोड़ना चाहते हैं, कि अगर आपके पास कई ड्रॉपडाउन हैं (जैसा कि मैं करता हूं) आपको लिखना चाहिए:
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
और यह ठीक से काम करेगा।
margin: 2px 0 0;
मतलब था कि समय से पहले मेनू को ऊपर से एक धीमी गति से माउसएंटर करना। ul.dropdown-menu{ margin-top: 0; }
मैंने इसे इस प्रकार प्रबंधित किया है:
$('ul.nav li.dropdown').hover(function(){
$(this).children('ul.dropdown-menu').slideDown();
}, function(){
$(this).children('ul.dropdown-menu').slideUp();
});
मुझे उम्मीद है इससे किसी को सहायता मिलेगी...
जोड़ा गया मार्जिन-टॉप: 0। बूस्टपैड-सीएसएस मार्जिन को .dddown-मेनू के लिए रीसेट करने के लिए ताकि उपयोगकर्ता द्वारा धीरे-धीरे मेनू सूची में ड्रॉप डाउन मेनू से होवर करते समय मेनू सूची को गायब न किया जाए।
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
.nav .dropdown-menu {
margin-top: 0;
}
मैंने बूटस्ट्रैप 3 ड्रॉपडाउन होवर कार्यक्षमता के लिए एक उचित प्लगइन प्रकाशित किया है , जिसमें आप यह भी परिभाषित कर सकते हैं कि dropdown-toggle
तत्व पर क्लिक करते समय क्या होता है (क्लिक को अक्षम किया जा सकता है):
https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
मेरे पास पहले से मौजूद सभी समाधानों के साथ समस्या थी। साधारण सीएसएस वाले .open
वर्ग का उपयोग नहीं कर रहे हैं .dropdown
, इसलिए ड्रॉप-डाउन टॉगल तत्व पर कोई प्रतिक्रिया नहीं होगी जब ड्रॉप-डाउन दिखाई देता है।
Js वाले क्लिक करने में हस्तक्षेप कर रहे हैं .dropdown-toggle
, इसलिए ड्रॉपडाउन होवर पर दिखाई देता है, फिर इसे एक खुली हुई ड्रॉप-डाउन पर क्लिक करने पर छुपाता है, और माउस को हटाकर फिर से दिखाने के लिए ड्रॉप-डाउन को ट्रिगर करेगा। कुछ js समाधान iOS संगतता को तोड़ रहे हैं, कुछ प्लगइन्स आधुनिक डेस्कटॉप ब्राउज़र पर काम नहीं कर रहे हैं जो स्पर्श घटनाओं का समर्थन कर रहे हैं।
इसलिए मैंने बूटस्ट्रैप ड्रॉपडाउन होवर प्लगइन बनाया जो बिना किसी हैक के केवल मानक बूटस्ट्रैप जावास्क्रिप्ट एपीआई का उपयोग करके इन सभी मुद्दों को रोकता है । यहां तक कि Aria विशेषताएँ इस प्लगइन के साथ ठीक काम कर रही हैं।
bootstrap-dropdown-hover
, क्योंकि यह काम और अधिक कॉम्पैक्ट लगता है। मैं बाईं ओर नावबार के साथ एक लैंडिंग साइट बना रहा हूं।
इस कोड का उपयोग माउसओवर (केवल डेस्कटॉप) पर सबमेनू खोलने के लिए करें:
$('ul.nav li.dropdown').hover(function () {
if ($(window).width() > 767) {
$(this).find('.dropdown-menu').show();
}
}, function () {
if ($(window).width() > 767) {
$(this).find('.dropdown-menu').hide().css('display','');
}
});
और यदि आप चाहते हैं कि प्रथम स्तर का मेनू क्लिक करने योग्य हो, तो भी मोबाइल पर इसे जोड़ें:
$('.dropdown-toggle').click(function() {
if ($(this).next('.dropdown-menu').is(':visible')) {
window.location = $(this).attr('href');
}
});
सबमेनू (ड्रॉपडाउन-मेनू) डेस्कटॉप पर माउसओवर के साथ खोला जाएगा, और मोबाइल और टैबलेट पर क्लिक / टच के साथ। एक बार सबमेनू ओपन होने के बाद, एक दूसरा क्लिक आपको लिंक खोलने देगा। इसके लिए धन्यवाद if ($(window).width() > 767)
, सबमेनू मोबाइल पर पूरी स्क्रीन की चौड़ाई लेगा।
$('.dropdown').hover(function(e){$(this).addClass('open')})
यह ड्रॉप डाउन और उनकी देखभाल को छिपाना चाहिए यदि वे एक टैबलेट से छोटे हैं।
@media (max-width: 768px) {
.navbar ul.dropdown-menu, .navbar li.dropdown b.caret {
display: none;
}
}
JQuery का समाधान अच्छा है, लेकिन इसके लिए क्लिक इवेंट (मोबाइल या टैबलेट के लिए) के साथ सौदा करने की आवश्यकता होगी क्योंकि होवर ठीक से काम नहीं करेगा ... शायद कुछ विंडो री-साइज़ का पता लगा सके?
एंड्रेस इलिच का जवाब अच्छी तरह से काम करता है, लेकिन इसे मीडिया क्वेरी में लपेटा जाना चाहिए:
@media (min-width: 980px) {
.dropdown-menu .sub-menu {
left: 100%;
position: absolute;
top: 0;
visibility: hidden;
margin-top: -1px;
}
.dropdown-menu li:hover .sub-menu {
visibility: visible;
}
.dropdown:hover .dropdown-menu {
display: block;
}
.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu, .navbar .dropdown-menu {
margin-top: 0;
}
.navbar .sub-menu:before {
border-bottom: 7px solid transparent;
border-left: none;
border-right: 7px solid rgba(0, 0, 0, 0.2);
border-top: 7px solid transparent;
left: -7px;
top: 10px;
}
.navbar .sub-menu:after {
border-top: 6px solid transparent;
border-left: none;
border-right: 6px solid #fff;
border-bottom: 6px solid transparent;
left: 10px;
top: 11px;
left: -6px;
}
}
संस्करण 2 के लिए बहुत ही सरल समाधान, केवल सीएसएस। मोबाइल और टैबलेट के लिए समान अनुकूल कार्यक्षमता रखता है।
@media (min-width: 980px) {
.dropdown:hover .dropdown-menu {
display: block;
}
}
इस स्क्रिप्ट के साथ bootstrap.js को अधिलेखित करें।
jQuery(document).ready(function ($) {
$('.navbar .dropdown').hover(function() {
$(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
}, function() {
var na = $(this)
na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
});
$('.dropdown-submenu').hover(function() {
$(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
}, function() {
var na = $(this)
na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
});
});
यहां मेरी तकनीक है जो मेनू या टॉगल बटन पर मंडराने से रोकने के बाद मेनू बंद होने से पहले थोड़ी सी देरी करता है। <button>
आप सामान्य रूप से प्रदर्शित करने के लिए एनएवी मेनू है क्लिक करेंगे कि #nav_dropdown
।
$(function() {
var delay_close_it, nav_menu_timeout, open_it;
nav_menu_timeout = void 0;
open_it = function() {
if (nav_menu_timeout) {
clearTimeout(nav_menu_timeout);
nav_menu_timeout = null;
}
return $('.navbar .dropdown').addClass('open');
};
delay_close_it = function() {
var close_it;
close_it = function() {
return $('.navbar .dropdown').removeClass('open');
};
return nav_menu_timeout = setTimeout(close_it, 500);
};
$('body').on('mouseover', '#nav_dropdown, #nav_dropdown *', open_it).on('mouseout', '#nav_dropdown', delay_close_it);
return $('body').on('mouseover', '.navbar .dropdown .dropdown-menu', open_it).on('mouseout', '.navbar .dropdown .dropdown-menu', delay_close_it);
});
सुदर्शन के उत्तर को बढ़ाने के लिए , मैं इसे मीडिया क्वैश्चन में लपेटता हूं जब होवर को रोकने के लिए XS डिस्प्ले की चौड़ाई ...
@media (min-width:768px)
{
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
.nav .dropdown-menu {
margin-top: 0;
}
}
इसके अलावा मार्कअप में कैरेट की आवश्यकता नहीं है, बस ली के लिए ड्रॉपडाउन क्लास ।
तो आपके पास यह कोड है:
<a class="dropdown-toggle" data-toggle="dropdown">Show menu</a>
<ul class="dropdown-menu" role="menu">
<li>Link 1</li>
<li>Link 2</li>
<li>Link 3</li>
</ul>
आम तौर पर यह एक क्लिक ईवेंट पर काम करता है, और आप चाहते हैं कि यह एक हॉवर ईवेंट पर काम करे। यह बहुत सरल है, बस इस जावास्क्रिप्ट / jQuery कोड का उपयोग करें:
$(document).ready(function () {
$('.dropdown-toggle').mouseover(function() {
$('.dropdown-menu').show();
})
$('.dropdown-toggle').mouseout(function() {
t = setTimeout(function() {
$('.dropdown-menu').hide();
}, 100);
$('.dropdown-menu').on('mouseenter', function() {
$('.dropdown-menu').show();
clearTimeout(t);
}).on('mouseleave', function() {
$('.dropdown-menu').hide();
})
})
})
यह बहुत अच्छी तरह से काम करता है और यहाँ स्पष्टीकरण है: हमारे पास एक बटन है, और एक मेनू है। जब हम बटन दबाते हैं तो हम मेनू को प्रदर्शित करते हैं, और जब हम बटन को दबाते हैं तो हम मेनू को 100 एमएस के बाद छिपाते हैं। यदि आपको आश्चर्य है कि मैं इसका उपयोग क्यों कर रहा हूं, तो इसलिए कि आपको मेनू पर बटन से कर्सर को खींचने के लिए समय चाहिए। जब आप मेनू पर होते हैं, तो समय रीसेट हो जाता है और आप जितनी बार चाहें वहां रह सकते हैं। जब आप मेनू से बाहर निकलते हैं, तो हम बिना किसी टाइमआउट के तुरंत मेनू को छिपा देंगे।
मैंने कई परियोजनाओं में इस कोड का उपयोग किया है, अगर आपको इसका उपयोग करने में कोई समस्या आती है, तो मुझसे प्रश्न पूछने में संकोच न करें।