如果你只想使用CSS,那么我认为这应该是可能的使用臭名昭着的CSS复选框黑客。基本上,您将使用input[type=checkbox]
作为一种“二进制”检查:是选择的列表项还是不是?
JSFiddle Example
什么,我已经改变了一个简短的说明:
- 添加的每个
.sidehead
div元素之前input[type=button]
元素。
- 将按钮
9999px
向上移动并向左移动,以便它们隐藏在屏幕外。
- 将每个
.sidehead
div元素更改为链接到其前一个按钮的label
。这样你点击标签,它会检查按钮。
由于按键可以选中以及检查,这意味着你可以再次点击该标签并删除颜色的变化,实际上给人以“未选中”的样子。
这种方法唯一的缺点是,由于您的JavaScript在您点击另一个列表项时隐藏了一个列表项,因此当您点击另一个标签时会导致难以处理的非彩色标签,因此您必须将JavaScript更新为自动取消选中任何被折叠的列表项的复选框。
这是新的HTML和CSS:
HTML:
<div class="navigation-box">
<input type="checkbox" id="button1" />
<label for="button1" class="sidehead"><i class="lock"></i><span class="title">User Account</span><span class="toggle">+</span>
</label>
<ul class="navLinks">
<li>11SS</li>
<li>2</li>
<li>3</li>
</ul>
</div>
CSS:
body {
font-family: Verdana;
font-size: 11px;
color: #333;
background: #e1e0de;
margin: 0;
padding: 0;
}
#navigation-body {
clear: left;
margin-top: 40%;
position: absolute;
float: left;
left: -6%;
right: -7%;
}
.sidehead {
padding: 6px 6px 4px 0;
cursor: pointer;
display: block;
}
.sidehead:hover {
background: #191919;
}
.sidehead .lock {
background: url('../images/lock.png') no-repeat center;
display: inline-block;
width: 30px;
height: 30px;
text-align: center;
vertical-align: middle;
margin-top:-5px;
margin-left:5%;
}
.sidehead:hover .lock {
background: url("../images/lock-hover.png") no-repeat center;
}
.sidehead span.title {
font-weight: 600;
font-size: 12px;
padding-left: 4px;
}
.sidehead:hover {
color: white;
}
span.toggle {
float: right;
margin-top:3px;
display: inline-block;
right:4%;
left:90%;
position: absolute;
cursor: pointer;
}
ul.navLinks {
margin:0;
padding-left:35%;
background: #191919;
}
input[type=checkbox] {
position: absolute;
left: -9999px;
top: -9999px;
}
input[type=checkbox]:checked ~ .sidehead {
background: #191919;
color: white;
}
我在写答案的过程中,但因为你已经在使用JavaScript的其他东西,为什么不使用JavaScript来改变颜色为黑色的onclick? – TylerH 2014-11-01 02:48:35
@TylerH你的意思是'$('。blah')。click(function(){(this).css('background','black'); });' – kris 2014-11-01 02:58:41