2017-10-25 1 views
1

Ich baue ein Menü mit verschachtelten Listen. Ich habe einen Kind-Selektor (#menu-novo li:hover > ul) verwendet, um nur unmittelbare Nachkommen anzuzeigen/zu verbergen, aber es zeigt immer noch alle. Irgendwelche Hilfe dabei?CSS-Kindselektor funktioniert nicht - alle Abkömmlinge des betroffenen Typs

#menu-novo-container { 
 
    font-family: tahoma, Arial, helvetica, Serif; 
 
    border: 1px solid red; 
 
} 
 

 
#menu-novo { 
 
border: 3px solid green; 
 
} 
 

 
.menu-novo-item { 
 
    border: 3px solid white; 
 
    cursor: pointer; 
 
} 
 

 
.menu-novo-link { 
 
    border: 3px solid yellow; 
 
} 
 

 
.menu-novo-submenu { 
 
    border: 3px solid red; 
 
    display: none; 
 
} 
 

 
#menu-novo li:hover > ul { 
 
    display: block; 
 
} 
 

 
.menu-novo-link { 
 
    display: block; 
 
}
<div id="menu-novo-container"> 
 
    <ul id="menu-novo"> 
 
     <li class="menu-novo-item"> 1 
 
      <ul class="menu-novo-submenu"> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.1</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.2</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.3</a></li> 
 
      <li class="menu-novo-item">1.4 
 
       <ul class="menu-novo-sumbenu"> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.1</a></li> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.2</a></li> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.3</a></li> 
 
       </ul> 
 
      </li>    
 
      </ul> 
 
     </li> 
 
    </ul> 
 
</div>

Ich denke, das eine Tonne downvotes erhalten, weil sie bereits gefragt worden ist, aber auch andere Beiträge meinem Fall nicht helfen, und ich bin immer verzweifelter hier :)

+1

Bitte geben Sie Ihren Code in der Frage. –

Antwort

2

Wenn ich Ihre Frage verstanden, müssen Sie zuerst display: none für die zweite Ebene ul setzen und dann display: block auf schweben der zweiten Ebene li

#menu-novo li ul li ul { 
    display: none; 
} 

#menu-novo li ul li:hover ul{ 
    display: block; 
} 

#menu-novo-container { 
 
    font-family: tahoma, Arial, helvetica, Serif; 
 
    border: 1px solid red; 
 
} 
 

 
#menu-novo { 
 
    border: 3px solid green; 
 
} 
 

 
.menu-novo-item { 
 
    border: 3px solid white; 
 
    cursor: pointer; 
 
} 
 

 
.menu-novo-link { 
 
    border: 3px solid yellow; 
 
} 
 

 
.menu-novo-submenu { 
 
    border: 3px solid red; 
 
    display: none; 
 
} 
 

 
#menu-novo li:hover > ul { 
 
    display: block; 
 
} 
 

 
.menu-novo-link { 
 
    display: block; 
 
} 
 
#menu-novo li ul li ul { 
 
    display: none; 
 
} 
 

 
#menu-novo li ul li:hover ul{ 
 
    display: block; 
 
}
<div id="menu-novo-container"> 
 
    <ul id="menu-novo"> 
 
     <li class="menu-novo-item"> 1 
 
      <ul class="menu-novo-submenu"> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.1</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.2</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.3</a></li> 
 
      <li class="menu-novo-item">1.4 
 
       <ul class="menu-novo-sumbenu"> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.1</a></li> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.2</a></li> 
 
        <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.3</a></li> 
 
       </ul> 
 
      </li>    
 
      </ul> 
 
     </li> 
 
    </ul> 
 
</div>

this helps

+2

Bitte verlinken Sie nicht auf Websites von Drittanbietern, da diese Links im Laufe der Zeit verloren gehen können. Gib einfach ein Code-Snippet in deine Antwort ein. –

+1

Sorry @ScottMarcus eigentlich hatte die Frage den Link der dritten Partei darin, also habe ich den Code dort selbst aktualisiert. Übrigens macht dein Ratschlag wirklich Sinn. +1 dafür. –

+0

@RajanBenipuri Danke für die Antwort. Aber könnte ich dafür sorgen, dass es für jede Verschachtelungsebene funktioniert? Mit deinem Code, wenn ich richtig liege, würden nur die erste und die zweite Ebene funktionieren. – dzenesiz

1

Sie haben dieselben Klassen für verschachtelte li und ul hinzugefügt, so dass verschiedene Klassen hinzu, dass

ul { 
 
    list-style: none; 
 
    padding-left:0; 
 
} 
 
#menu-novo-container { 
 
    font-family: tahoma, Arial, helvetica, Serif; 
 
    border: 1px solid red; 
 
} 
 
#menu-novo { 
 
    border: 3px solid green; 
 
} 
 
.menu-novo-item { 
 
    border: 3px solid white; 
 
    cursor: pointer; 
 
} 
 
.menu-novo-link { 
 
    border: 3px solid yellow; 
 
} 
 
.menu-novo-submenu { 
 
    border: 3px solid red; 
 
} 
 
.menu-novo-submenu.child1, 
 
#menu-novo > li:hover > ul.child1 li .child2 { 
 
    display:none; 
 
} 
 
#menu-novo > li:hover > ul.child1, 
 
#menu-novo > li:hover > ul.child1 li:hover .child2 { 
 
    display: block; 
 
} 
 
.menu-novo-link { 
 
    display: block; 
 
}
<div id="menu-novo-container"> 
 
    <ul id="menu-novo"> 
 
    <li class="menu-novo-item"> 1 
 
     <ul class="menu-novo-submenu child1"> 
 
     <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.1</a></li> 
 
     <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.2</a></li> 
 
     <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.3</a></li> 
 
     <li class="menu-novo-item">1.4 
 
      <ul class="menu-novo-sumbenu child2"> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.1</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.2</a></li> 
 
      <li class="menu-novo-item"><a href="#" class="menu-novo-link">1.4.3</a></li> 
 
      </ul> 
 
     </li>    
 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

+0

Danke für die Antwort. Aber ich suche nach einer Lösung, die mit jeder Verschachtelungsebene funktioniert. Ist das möglich? – dzenesiz

-1

Es zeigt alle von ul, weil Sie nicht verstecken (Anzeige: keine;) für Kinder ul. So fügen Sie unter CSS fehlt und funktionieren sollte:

#menu-novo li ul { 
    display:none; 
} 

#menu-novo li:hover > ul { 
    display: block; 
} 
+0

Es tut mir leid, aber ich tat es. – dzenesiz

+0

Ich habe dein CSS aktualisiert und es funktioniert. Ihr css funktioniert nicht, weil es keine mit dem Klassennamen ".menu-novo-submenu" anzeigt und mit li: hover> ul mit display: block wird für alle ul funktionieren, indem Sie die Eigenschaft ".menu-novo-submenu" außer Kraft setzen. Daher wäre es besser, die Eltern-Kind-Regeln genau zu befolgen. Ich hoffe es hilft. – rawsun

0

#menu-novo-container { 
 
    font-family: tahoma, Arial, helvetica, Serif; 
 
    border: 1px solid red; 
 
} 
 

 
#menu-novo { 
 
    border: 3px solid green; 
 
} 
 

 
.menu-novo-item { 
 
    border: 3px solid white; 
 
    cursor: pointer; 
 
} 
 

 
.menu-novo-link { 
 
    border: 3px solid yellow; 
 
} 
 

 
#menu-novo li>ul { 
 
    border: 3px solid red; 
 
    display: none; 
 
} 
 

 
#menu-novo li:hover>ul { 
 
    display: block; 
 
} 
 

 
.menu-novo-link { 
 
    display: block; 
 
}

Verwandte Themen