[英]Create on Click Multi Level Dropdown Menu with Pure CSS
我正在使用纯 CSS 创建一个单击多级下拉菜单。 我从这里找到了一个聪明的解决方案,它就像一个魅力。
<nav>
<ul>
<li>
<a href="#">
<span class="navtitle">Home</span>
</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle">
<span class="navtitle">More +</span>
</a>
<ul class="dropdown-menu">
<li>
<a href="#">
<span class="navtitle">Sub 1</span>
</a>
</li>
<li>
<a href="#">
<span class="navtitle">Sub 2</span>
</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle">
<span class="navtitle">Sub More +</span>
</a>
<ul class="dropdown-menu">
<li>
<a href="#">
<span class="navtitle">Sub 2 1</span>
</a>
</li>
<li>
<a href="#">
<span class="navtitle">Sub 2 2</span>
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
我的 CSS 行看起来像这样:
*, html {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul {
padding: 0;
margin: 0;
}
li {
list-style: none;
position: relative;
}
a {
text-decoration: none;
}
nav {
display: flex;
}
nav a {
display: block;
padding: 8px 10px;
}
nav > li {
margin: 0 6px
}
.dropdown {
position: relative;
}
.dropdown-menu {
display: none;
background-color: #ddd;
position: absolute;
top: 100%;
min-width: 130px;
left: 0;
z-index: 100;
}
.dropdown-menu .dropdown-menu {
left: 100%;
top: 0;
}
.dropdown .dropdown-toggle:focus + .dropdown-menu,
.dropdown-menu:hover {
display: block;
}
问题是我想保留第二级子菜单(即 Sub More +),即使我将鼠标悬停在子菜单区域之外,它仍然很快就会打开。 我知道它来自这个 css,但诀窍是什么?
.dropdown-menu:hover { display: block; }
请参阅我的jsfiddle 。 希望这是有道理的。
发生的情况是,当您单击“Sub More+”时,“More+”按钮会失去焦点,因此显示下拉列表的唯一原因是.dropdown-menu:hover
样式。
您可以通过稍微更改 HTML 并使用著名的“复选框技巧”来实现您想要的
这个怎么运作 ? 只需为该复选框添加一个复选框和一个标签。 也隐藏复选框。
然后,当您单击标签时,复选框会变为:checked
并使用该状态显示您的下拉列表。 这种方法也有其自身的局限性,但我认为它可以实现您想要的。
检查以下:
*, html { margin: 0; padding: 0; box-sizing: border-box; } ul { padding: 0; margin: 0; } li { list-style: none; position: relative; } a { text-decoration: none; } nav { display: flex; } nav a { display: block; padding: 8px 10px; } nav>li { margin: 0 6px } .dropdown { position: relative; } .dropdown-menu { display: none; background-color: #ddd; position: absolute; top: 100%; min-width: 130px; left: 0; z-index: 100; } .dropdown-menu .dropdown-menu { left: 100%; top: 0; } .dropdown .dropdown-toggle:focus { color: red; } /* .dropdown .dropdown-toggle:focus + .dropdown-menu, .dropdown-menu:hover { display: block; } */ input[type="checkbox"] { display: none } input[type="checkbox"]:checked~.dropdown-menu { display: block; }
<nav> <ul> <li> <a href="#"> <span class="navtitle">Home</span> </a> </li> <li class="dropdown"> <input type="checkbox" id="more" name="more"> <label for="more" class="dropdown-toggle"> More + </label> <ul class="dropdown-menu"> <li> <a href="#"> <span class="navtitle">Sub 1</span> </a> </li> <li> <a href="#"> <span class="navtitle">Sub 2</span> </a> </li> <li class="dropdown"> <input type="checkbox" id="sub-more" name="sub-more"> <label for="sub-more" class="dropdown-toggle">Sub more+</label> <ul class="dropdown-menu"> <li> <a href="#"> <span class="navtitle">Sub 2 1</span> </a> </li> <li> <a href="#"> <span class="navtitle">Sub 2 2</span> </a> </li> </ul> </li> </ul> </li> </ul> </nav>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.