2011-12-19 12 views
1

は、私は複数のレベルを持つメニューがあることを言いたいHTML構造隣の子供を選択する...どのように? ... CSSでの隣接する子要素を選択するために、これを するかどうかは本当にわからないようにしよう

<ul> 
    <li> 
     <a href="#"> 
      <span class="icon"></span> 
      First level 
     </a> 
     <ul> 
      <li> 
       <a href="#">Second level</a> 
      </li> 
     </ul> 
    </li> 
</ul> 

です。 LI内に既存のULが存在する場合、ドロップダウン/アイコンを展開する必要があります。隣接するセレクタを使用すると、このレベルに拡張する子供がいるかどうかを判断できます。これが動作すると思ったものですが、didn 「T:

ul li a ~ ul .icon { 
    // doesnt work 
} 
ul li a .icon ~ ul { 
    // doesnt work 
} 

ul li a ~ ul { 
    // works 
} 

をこの作品が、私は.iconをターゲットにする必要がある乾杯、ドム

+1

残念ながら、あなたはCSSセレクタに後戻りすることはできません。それは後でなければならない。それは前にすることはできません。 – Ryan

+0

HTMLはどのように生成されますか?それとも静的ですか? DOMの生成方法を制御できれば、リスト項目にサブメニューがある場合、 'class =" has-submenu "やそれに類するものを外側liに付けるのがよいでしょう。それを使って選択します。 –

+0

上記の解答の例を回答として追加しました。 –

答えて

1

あなたの質問にはコメントができます。メニューのHTMLの生成方法を制御できる場合は、サブメニューを持つ各li要素に余分なクラスを追加することで回避できます。このように:

<ul> 
    <li class="has-submenu"> 
     <a href="#"> 
      <span class="icon"></span> 
      First level 
     </a> 
     <ul> 
      <li> 
       <a href="#">Second level</a> 
      </li> 
     </ul> 
    </li> 
</ul> 

は、その後、あなたは、このようにセレクタを使用することができます。

.has-submenu .icon { 
    /* Do your stuff here */ 
} 
+0

ありがとう、私は答えはそれが可能ではないと思います:Dは提案としてクラスを追加する必要があります –

+0

@DominicWatsonええ、私はあなたがそれにこだわっていることを恐れています。 CSSはときどき少し限られています。 –

0

ULは、Liの子ではなく、アンカーです。だからul li ul
兄弟として選択したい場合はul li a + ul

+0

これは分かりましたが、実際には、要素( 'li')を対象にしていました(ツリーの深さに関係なく)前にいくつかの要素を操作する他の' ul'を持っています( '.icon') –

+0

私は恐れていますそれはそれをしないでしょう。 CSSのif文(存在しない)のようなものを探していると思う。 li要素に別のulが含まれている場合は、アンカー内の.iconスパンを変更したいと考えます。 –

関連する問題