CSS - Show/hide 当用户单击标题时折叠简单导航
CSS - Show/hide collapse simple navigation when user clicks title
我想请你帮忙。好吧,我必须创建一个非常简单的导航,但我遇到了一个问题,因为我无法重写此代码以使导航在没有复选框的情况下工作,这非常重要 - 它不应该基于复选框。
好的,首先是基于复选框的版本:http://codepen.io/anon/pen/dPaeZE
如您所见,当用户单击 TEST1 或 TEST2 时,它会展开列表。
我想做一些类似的东西,但没有我之前提到的复选框,所以这是我的第二个代码笔:http://codepen.io/anon/pen/azXGEQ
我试过这段代码:
.menu {
display: none;
}
/* show menu */
.nav-header:focus + .menu{
display: block;
}
但它不起作用,当我点击 TEST1 或 TEST2 时,ul 不显示。这里有些不对劲,但我不知道到底是什么。 :P
好了,就这些了,希望大家能帮我看看。
基本上一个span
收不到focus
.
最佳解决方案是使用 可以 接收 focus
的元素,例如锚点 link 或者,更喜欢实际的按钮。
为方便起见,我在这里使用了 link,但最好使用按钮,因为 Links are not buttons
/* basic style */
body {
margin-top: 30px;
}
a {
color: #EF9000;
text-decoration: none;
}
.container {
width: 230px;
margin: 0 auto;
}
/* nav */
.nav,
.menu {
padding: 0px;
margin: 0px;
text-align: center;
text-transform: uppercase;
list-style: none;
}
.menu li {
list-style: none;
display: list-item;
padding: 2px 0;
}
.menu li a {
display: block;
padding: 2px 0;
transition: all 0.2s ease-in-out;
}
.menu li a:hover {
background-color: #EF9000;
color: #F1F1F1;
}
/*
* Hide/show nav
*/
.nav-header {
cursor: pointer;
}
.menu {
display: none;
}
/* show menu */
.nav-header:focus + .menu {
display: block;
}
<div class="container">
<h1>Collpase menu NO checkbox</h1>
<ul class="nav">
<li>
<a href="#" class="nav-header">Test 1</a>
<ul class="menu">
<li><a href="#">Something</a>
</li>
<li><a href="#">Another element</a>
</li>
</ul>
</li>
<!--./test1-->
<li>
<a href="#" class="nav-header">Test 2</a>
<ul class="menu">
<li><a href="#">Element</a>
</li>
</ul>
</li>
<!--./test2-->
</ul>
</div>
<!--/.container-->
Stack Overflow Link 到首选答案。
不是 CSS 解决方案,而是简单的 jQuery 切换即可:
代码笔:http://codepen.io/anon/pen/yyZjdE
jQuery(document).ready(function(){
jQuery('.nav-header').click(function(){
jQuery(this).siblings('ul.menu').toggle();
});
});
我想请你帮忙。好吧,我必须创建一个非常简单的导航,但我遇到了一个问题,因为我无法重写此代码以使导航在没有复选框的情况下工作,这非常重要 - 它不应该基于复选框。
好的,首先是基于复选框的版本:http://codepen.io/anon/pen/dPaeZE
如您所见,当用户单击 TEST1 或 TEST2 时,它会展开列表。
我想做一些类似的东西,但没有我之前提到的复选框,所以这是我的第二个代码笔:http://codepen.io/anon/pen/azXGEQ
我试过这段代码:
.menu {
display: none;
}
/* show menu */
.nav-header:focus + .menu{
display: block;
}
但它不起作用,当我点击 TEST1 或 TEST2 时,ul 不显示。这里有些不对劲,但我不知道到底是什么。 :P
好了,就这些了,希望大家能帮我看看。
基本上一个span
收不到focus
.
最佳解决方案是使用 可以 接收 focus
的元素,例如锚点 link 或者,更喜欢实际的按钮。
为方便起见,我在这里使用了 link,但最好使用按钮,因为 Links are not buttons
/* basic style */
body {
margin-top: 30px;
}
a {
color: #EF9000;
text-decoration: none;
}
.container {
width: 230px;
margin: 0 auto;
}
/* nav */
.nav,
.menu {
padding: 0px;
margin: 0px;
text-align: center;
text-transform: uppercase;
list-style: none;
}
.menu li {
list-style: none;
display: list-item;
padding: 2px 0;
}
.menu li a {
display: block;
padding: 2px 0;
transition: all 0.2s ease-in-out;
}
.menu li a:hover {
background-color: #EF9000;
color: #F1F1F1;
}
/*
* Hide/show nav
*/
.nav-header {
cursor: pointer;
}
.menu {
display: none;
}
/* show menu */
.nav-header:focus + .menu {
display: block;
}
<div class="container">
<h1>Collpase menu NO checkbox</h1>
<ul class="nav">
<li>
<a href="#" class="nav-header">Test 1</a>
<ul class="menu">
<li><a href="#">Something</a>
</li>
<li><a href="#">Another element</a>
</li>
</ul>
</li>
<!--./test1-->
<li>
<a href="#" class="nav-header">Test 2</a>
<ul class="menu">
<li><a href="#">Element</a>
</li>
</ul>
</li>
<!--./test2-->
</ul>
</div>
<!--/.container-->
Stack Overflow Link 到首选答案。
不是 CSS 解决方案,而是简单的 jQuery 切换即可:
代码笔:http://codepen.io/anon/pen/yyZjdE
jQuery(document).ready(function(){
jQuery('.nav-header').click(function(){
jQuery(this).siblings('ul.menu').toggle();
});
});