2014-11-01 116 views
3

是否有无论如何,我可以让一个div留一个黑色的背景一旦活动?切换不起作用点击

基本上,我有:

<div class="navigation-box"> 
    <div class="sidehead"><i class="lock"></i><span class="title">User Account</span> <span class="toggle">+</span></div> 
     <ul class="navLinks"> 
      <li>11SS</li> 
      <li>2</li> 
      <li>3</li> 
     </ul> 
</div> 

一旦盘旋,它显示的黑色背景。但是我想要它做的事情,点击后一直保持黑色。

Fiddle

一个完美的例子是布局http://cdn2.mosaicpro.biz/smart/php/admin/projects_grid.html?v=v1.0.0-rc1(只需点击链接“访问”,看看它是如何)

这就是我想要做的事。我认为我可以把它做成CSS,但看起来似乎并不明显。有什么建议么?

+0

我在写答案的过程中,但因为你已经在使用JavaScript的其他东西,为什么不使用JavaScript来改变颜色为黑色的onclick? – TylerH 2014-11-01 02:48:35

+0

@TylerH你的意思是'$('。blah')。click(function(){(this).css('background','black'); });' – kris 2014-11-01 02:58:41

回答

0

你必须当您单击添加活动类。如下面的代码。

$(function() { 
    $('.navigation-title').click(function() { 
     $('.navigation-item').removeClass('active');      
     $('.navgation-links').slideUp('active'); 
     $('.navigation-title .toggle').text('+'); 
     $(this).parent().addClass('active'); 
     $(this).find('.toggle').text('-'); 
     $(this).next().slideDown(); 
    }); 
}); 

我掏出小提琴并改变了一下结构。

Forked JSFiddle

+0

感到惊讶的是,它使用的是未在帖子或标签中指定的语言,并且没有给出任何评论 – ZeroRequiem 2014-11-01 20:03:34

+0

这正是我所期待的。再次感谢你@lucasBarros – kris 2014-11-01 20:08:40

+0

我刚编辑她的代码以适应她的问题。但如果是这样,我可以创建一个完整的导航步骤供您使用。 ;)不客气@kris,只是想帮助你。 – 2014-11-01 22:42:51

3

如果你只想使用CSS,那么我认为这应该是可能的使用臭名昭着的CSS复选框黑客。基本上,您将使用input[type=checkbox]作为一种“二进制”检查:是选择的列表项还是不是?

JSFiddle Example

什么,我已经改变了一个简短的说明:

  1. 添加的每个.sidehead div元素之前input[type=button]元素。
  2. 将按钮9999px向上移动并向左移动,以便它们隐藏在屏幕外。
  3. 将每个.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; 
} 
+0

我喜欢checkbox hack 。好想法! +1。 – 2014-11-01 03:19:03

+0

@TylerH爱Tut,谢谢你。不过,我在堆栈中进行了一些排序,并找到了一些有用的信息,但是当我不希望它活跃时,它仍会显示黑色条。检查出来:http://jsfiddle.net/Lfbsjxy7/2/ – kris 2014-11-01 03:22:04

+1

@kris额外的JavaScript只是改变所有元素的颜色为'sidehead'类到黑色onclick(这是做我在我的建议的前半部分前面的评论)。要成功使用此方法,您还必须将非活动元素切换回其原始CSS样式onclick(另外,您可以添加一个if语句,以便仅在之前单击它时才执行此操作)。 – TylerH 2014-11-01 03:27:31