메뉴 제목을 클릭하지 않고 마우스 포인터로 Bootstrap 메뉴가 자동으로 드롭 다운되도록하고 싶습니다. 메뉴 제목 옆에있는 작은 화살표를 잃고 싶습니다.
답변
여러 하위 메뉴를 지원하는 최신 (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>
답변
메뉴가 자동으로 호버링되도록하려면 기본 CSS를 사용하면됩니다. 숨겨진 메뉴 옵션에 대해 선택기를 실행 한 다음 적절한 li
태그를 가리킬 때 블록으로 표시되도록 설정해야합니다 . 트위터 부트 스트랩 페이지에서 예제를 선택하면 선택기는 다음과 같습니다.
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
그러나 Bootstrap의 반응 형 기능을 사용하는 경우 축소 된 탐색 표시 줄 (더 작은 화면)에서이 기능을 원하지 않습니다. 이를 피하려면 위 코드를 미디어 쿼리로 감싸십시오.
@media (min-width: 979px) {
ul.nav li.dropdown:hover > ul.dropdown-menu {
display: block;
}
}
화살표 (캐럿)를 숨기려면 Twitter Bootstrap 버전 2 이하를 사용하는지 또는 버전 3을 사용하는지에 따라 다른 방식으로 수행됩니다.
부트 스트랩 3
버전 3에서 캐럿을 제거하려면 anchor 요소 <b class="caret"></b>
에서 HTML을 제거하면됩니다 .dropdown-toggle
.
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
Dropdown
<b class="caret"></b> <-- remove this line
</a>
부트 스트랩 2 이하
버전 2에서 캐럿을 제거하려면 CSS에 대한 통찰력이 필요하며 :after
의사 요소가 어떻게 작동하는지 자세히 살펴 보는 것이 좋습니다 . 트위터 부트 스트랩 예제에서 화살표를 대상으로하고 제거하기 위해 이해하기 시작하려면 다음 CSS 선택기 및 코드를 사용하십시오.
a.menu:after, .dropdown-toggle:after {
content: none;
}
당신이 이것들이 어떻게 작동하는지 더 자세히 살펴보고 내가 당신에게 주어진 대답을 사용하지 않는다면 그것은 당신에게 유리할 것입니다.
부모 호버에 하위 메뉴가 표시되지 않도록하기 위해 “>”하위 콤비 네이터가 누락되었음을 지적한 @CocaAkat에게 감사합니다.
답변
“나의 머리가 아프다”(대단한)의 답변 외에도 :
ul.nav li.dropdown:hover ul.dropdown-menu{
display: block;
}
남아있는 두 가지 문제가 있습니다.
- 드롭 다운 링크를 클릭하면 드롭 다운 메뉴가 열립니다. 그리고 사용자가 다른 곳을 클릭하거나 뒤로 마우스를 가져 가면 어색한 UI가 생성되지 않는 한 열려 있습니다.
- 드롭 다운 링크와 드롭 다운 메뉴 사이에 1 픽셀의 여백이 있습니다. 드롭 다운 메뉴와 드롭 다운 메뉴 사이를 천천히 이동하면 드롭 다운 메뉴가 숨겨집니다.
(1)에 대한 해결책은 탐색 링크에서 “class”및 “data-toggle”요소를 제거하는 것입니다.
<a href="#">
Dropdown
<b class="caret"></b>
</a>
또한 기본 구현으로는 불가능했던 부모 페이지에 대한 링크를 만들 수 있습니다. “#”을 사용자를 보내려는 페이지로 바꿀 수 있습니다.
(2)에 대한 해결책은 드롭 다운 메뉴 선택기에서 여백을 제거하는 것입니다.
.navbar .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();
});
답변
여기에는 정말 좋은 솔루션이 많이 있습니다. 그러나 나는 다른 대안으로 여기에 내 것을 넣을 것이라고 생각했습니다. 단순히 클릭 대신 드롭 다운에 대한 호버를 지원하면 부트 스트랩이하는 방식을 수행하는 간단한 jQuery 스 니펫입니다. 나는 이것을 버전 3으로 만 테스트 했으므로 버전 2에서 작동하는지 알 수 없습니다. 편집기에서 코드 조각으로 저장하고 키를 눌렀을 때 사용하십시오.
<script>
$(function() {
$(".dropdown").hover(
function(){ $(this).addClass('open') },
function(){ $(this).removeClass('open') }
);
});
</script>
기본적으로 드롭 다운 클래스에 마우스를 올리면 열린 클래스가 추가됩니다. 그런 다음 작동합니다. 드롭 다운 클래스가있는 상위 li 또는 하위 ul / li에 마우스를 올리면 열린 클래스가 제거됩니다. 분명히 이것은 많은 솔루션 중 하나 일 뿐이며 특정 .dropdown 인스턴스에서만 작동하도록 추가 할 수 있습니다. 또는 부모 또는 자식으로 전환을 추가하십시오.
답변
세 줄의 코드로 CSS 스타일을 간단히 사용자 정의하십시오.
.dropdown:hover .dropdown-menu {
display: block;
}
답변
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 answer에 의존 하고 드롭 다운 메뉴가 제대로 작동하도록 변경하고 추가했습니다.