我正在准备这个菜单...
最初,"level-2“将出现在"level-1”之下。我已经能够把它移到第二列,总是贴在顶部。据我所知,它正在工作!
我遇到的问题是添加更多的列,因为我至少需要另一个级别,可能是两个级别。
我想我已经处理好了HTML部分(参见第2项-第2-1项-第2-1-1项),现在问题是脚本。我试着复制当前的版本,但就是不能正常工作...
任何帮助都将不胜感激。谢谢
Fiddle
HTML:
<div class="wrapper">
<ul>
<li class="level-1"><a href="#">Item 1</a>
<ul class="level-2">
<li><a href="#">Item 1-1</a></li>
<li><a href="#">Item 1-2</a></li>
</ul>
</li>
<li class="level-1"><a href="#">Item 2</a>
<ul class="level-2">
<li><a href="#">Item 2-1</a>
<ul class="level-3">
<li><a href="#">Item 2-1-1</a></li>
</ul>
</li>
</ul>
</li>
<li class="level-1"><a href="#">Item 3</a>
<ul class="level-2">
<li><a href="#">Item 3-1</a></li>
<li><a href="#">Item 3-2</a></li>
<li><a href="#">Item 3-3</a></li>
</ul>
</li>
<li class="level-1"><a href="#">Item 4</a>
<ul class="level-2">
<li><a href="#">Item 4-1</a></li>
<li><a href="#">Item 4-2</a></li>
</ul>
</li>
</ul>
</div>JS:
$('.level-2').hide();
$('.level-1').on('click', function(){
if(!($(this).children('.level-2').is(':visible'))){
$('.level-2').slideUp();
$(this).children('.level-2').slideDown();
} else {
$('.level-2').slideUp();
}
});
$('.level-2').on('click', function(e){
e.stopPropagation();
});CSS:
body{
margin: 0px;
border: 0;
overflow: hidden;
}
ul {
list-style: none;
margin: 0;
padding: 0;
color: #000000;
}
ul li {
position: relative;
}
li ul {
position: absolute;
left: 120px;
top: 0;
display: none;
}
ul li a {
text-decoration: none;
color: #000000;
}
.level-1 {
position: relative;
top: 20px;
left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-2 {
position: fixed;
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-3 {
position: fixed;
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}发布于 2015-02-12 19:01:48
我已经更新了CSS,请尝试一下。它会帮到你的。
body{
margin: 0px;
border: 0;
overflow: hidden;
}
ul {
list-style: none;
margin: 0;
padding: 0;
color: #000000;
}
ul li {
position: relative;
}
li ul {
position: absolute;
left: 120px;
top: 0px;
display: none;
}
ul li a {
text-decoration: none;
color: #000000;
}
.level-1 {
position: relative;
top: 20px;
left: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
background:#f5f5f5;
width:220px;
}
.level-2, .level-3 {
top: 20px;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 15px;
letter-spacing: 0em;
text-transform: uppercase;
}
.level-1 > .level-2, .level-1 .level-2 > .level-3{position:absolute; right:10px; top:0px; left:220px; width:220px; background:#f8f8f8;}
谢谢
发布于 2015-02-13 00:45:11
仔细看看你的小提琴,我发现有两个问题:
:visible,但CSS在li ul规则display:none当可见时,第三个菜单级别将出现在第二个级别的下面(这更多的是一个UX/设计问题,而不是JS的问题)第二个问题很容易用一些CSS解决,例如:
.level-3 { left: 200px; }我认为第一个问题是因为您在CSS中使用'display‘将一个元素设置为隐藏,但试图在JS中检查:visible而不是display规则的值来切换它。This stackoverflow answer explains why this can cause problems可能比我更好,但我认为问题在于JS无法找到使用CSS设置为display:none的对象。
我已经created a fiddle which gives an example了如何通过替换JS中的这一行来避免这个问题:
if(!($(this).children('.level-2').is(':visible'))){有了这个:
if($('.level-3').css('display') === 'none'){ (我保留了单击.level-1的逻辑,但更改了单击.level-2的逻辑以便于比较。)
在我的示例中,我还向不同的列表项添加了彩色背景,以提高可见性--这样可以更容易地查看项是否以这种方式出现在另一个列表项之上。我希望这能对你有所帮助!
https://stackoverflow.com/questions/28475128
复制相似问题