2010-11-16 115 views
1

链接下面是simpliest多级菜单的代码:添加箭头儿童

<nav> 
    <ul> 
     <li><a href="#">I am a 1st level link</a></li> 
     <li><a href="#">I am a 1st level link with children and I want to have an arrow next to me (or different background)</a> 
      <ul> 
       <li><a href="#">I am a 2nd level link</a></li> 
       <li><a href="#">I am a 2nd level link with children and I want to have an arrow next to me (or different background)</a> 
       <ul> 
        <li><a href="#">I am a 3nd level link</a></li> 
        <li><a href="#">I am a 3nd level link</a></li> 
       </ul> 
       </li> 
      <li><a href="#">I am a 2nd level link</a></li> 
      </ul> 
     </li> 
     <li><a href="#">I am a 1st level link</a></li> 
     <li><a href="#">I am a 1st level link</a></li> 
    </ul> 
</nav> 

有没有选择与孩子联系,并加入他们不同的样式(背景,列表样式类型的图标等的方法。)?菜单是动态的,因此在这种情况下给予ID或课程无济于事。

我很想在CSS3中看到它,如果不可能的话 - jQuery或PHP会好的。我希望它能够跨浏览器准备好。但目前甚至不知道从哪里开始?

非常感谢!

+0

您是否需要支持IE6? – 2010-11-16 00:21:29

回答

1

:only-child假选择器选择它们父代的唯一子元素。你可以在CSS3中使用这个来设计元素而不用箭头,用箭头覆盖那些。您可以使用例如主要选择器的:first-of-type假选择器试图阻止不支持:only-child的浏览器在所有元素上显示箭头。

例如:

nav ul a:first-of-type { 
    /* :first-of-type for CSS3-incompat browsers; can be safely removed */ 

    /* Apply arrow code */ 
    background: ...; 
} 

nav ul a:only-child { 
    /* Undo arrow code above */ 
    background: transparent; 
} 
+0

:独生子和:第一类型选择器将在5年左右(当IE8掉落时)成为跨浏览器。 – 2010-11-16 00:20:40

+0

@ŠimeVidas,OP提到了CSS3并使用了HTML5;我真的怀疑他们想要完美的IE兼容性。在我的例子中,使用':first-of-type'的目的是*防止*旧的浏览器发生意外。 – strager 2010-11-16 00:23:10

+0

@stranger OP提到了“跨浏览器就绪”。 IE6与IE8的合并市场份额目前要大到无视。 – 2010-11-16 00:38:14

1

这可能让你去:

$('li>a') 
.filter(function(){ 
    return $(this).next().is('ul') ? true : false; 
}).addClass('haveChild'); 
2

这似乎使用jQuery ...你可以定制专班为背景图像的错误工作或任何你想要的....

<script> 
    $(document).ready(function(){ 
     $('ul a + ul').each(function(){ 
      $(this).prev().addClass('special'); 
     }); 
    }); 
</script> 
<style type="text/css"> 
    .special {background-color: red;} 
</style> 
+1

+1 - 尽管你可以缩短到'$('ul a + ul')。prev()。addClass('special'); – user113716 2010-11-16 00:58:13

1

我用上面提供的代码,并创建了一个使用jsFiddle的例子。

查看示例here