2017-04-25 16 views
1

3レベル(またはそれ以上)のクリック可能なメニューを作成しようとしていますが、子供をクリックすると、親とその兄弟が隠れていることに気付きました。私は、子供たちが集中しているときに、親と兄弟が表示されたままにしておきたいと思います。それはCSSだけを使って可能ですか?私のコードは以下の通りです:子供が集中しているときに親を表示する方法?

<style> 
.menu{ 
    background: green; 
} 
.menu ul{ 
    padding: 0; 
    margin: 0;  
} 
.menu ul ul{background: rgba(0,0,0, .2);} 
.menu >ul>li>a{ line-height: 50px; } 

.menu li{ 
    list-style: none; 

    position: relative; 
    border-bottom: solid 1px #009900; 
} 

.menu a:not(:only-child):after { 
    padding-left: 5px; 
    content: '\25BC' ' '; 
} 



.menu li:last-child{border: none;} 
.menu li a{ 
    color: #fff; 
    text-decoration: none; 
    padding: 0 20px; 
    display: block; 
    text-transform: uppercase; 
} 

/* Level 2*/ 
.menu ul > li > ul > li > a{display: block; 
line-height: 0px; 
overflow:hidden; 
    -webkit-transition: all .4s ease-in-out; 

} 
.menu ul>li>a:focus +ul>li>a{ 
    color:red; 
    line-height:50px; 
     -webkit-transition: all .4s ease-in-out; 
}  

/* Level 3+ */ 
.menu li ul ul{ top:0;} 


</style> 


<html> 


<div class="menu "> 
    <!--Level 1--> 
    <ul> 
     <li><a href="#" tabindex="1">Level 1-1</a></li> 
     <li><a href="#" tabindex="1">Level 1-2</a> 
     <!--Level 2--> 
      <ul> 
      <li><a href="#" tabindex="1">Level 2-1</a></li> 
      <li><a href="#" tabindex="1">Level 2-2</a> 
      <!--Level 3--> 
       <ul> 
        <li><a href="#">Level 3-1</a></li> 
        <li><a href="#" tabindex="1">Level 3-2</a></li> 
        <li><a href="#" tabindex="1">Level 3-3</a></li> 
        </ul> 
      </li> 
      <li><a href="#" tabindex="1">Level 2-3</a></li> 
      </ul> 
     </li> 
     <li><a href="#" tabindex="1">Level 1-3</a></li> 
     <li><a href="#" tabindex="1">Level 1-4</a> 
    </ul> 
</div> 


</html> 

ここはJSfiddle exampleです。

達成したい効果は、hereです。ホバーアイテムを表示してください。

+0

以下の答えはあなたの問題を解決しましたか? – cosmoonot

答えて

0

私は以下のコードを改訂しました。 CSSセレクタにエラーがあり、レベル2の移行を削除する必要があります。

は、この行を置き換えます

.menu ul>li>a:focus+ ul>li>a{ 

へ:

.menu ul>li:hover >ul>li>a{ 

そして.menu ul > li > ul > li > a{の遷移を削除します。

-webkit-transition: all .4s ease-in-out; 

<style> 
 
.menu{ 
 
    background: green; 
 
} 
 
.menu ul{ 
 
    padding: 0; 
 
    margin: 0;  
 
} 
 
.menu ul ul{background: rgba(0,0,0, .2);} 
 
.menu >ul>li>a{ line-height: 50px; } 
 

 
.menu li{ 
 
    list-style: none; 
 

 
    position: relative; 
 
    border-bottom: solid 1px #009900; 
 
} 
 

 
.menu a:not(:only-child):after { 
 
    padding-left: 5px; 
 
    content: '\25BC' ' '; 
 
} 
 

 

 

 
.menu li:last-child{border: none;} 
 
.menu li a{ 
 
    color: #fff; 
 
    text-decoration: none; 
 
    padding: 0 20px; 
 
    display: block; 
 
    text-transform: uppercase; 
 
} 
 

 
/* Level 2*/ 
 
.menu ul > li > ul > li > a{display: block; 
 
line-height: 0px; 
 
overflow:hidden; 
 
    /*-webkit-transition: all .4s ease-in-out;*/ 
 

 
} 
 
/*.menu ul>li>a:focus+ ul>li>a{*/ 
 
.menu ul>li:hover >ul>li>a{ 
 
    color:red; 
 
    line-height:50px; 
 
     -webkit-transition: all .4s ease-in-out; 
 
}  
 

 
/* Level 3+ */ 
 
.menu li ul ul{ top:0;} 
 

 

 
</style> 
 

 

 
<html> 
 

 

 
<div class="menu "> 
 
    <!--Level 1--> 
 
    <ul> 
 
     <li><a href="#" tabindex="1">Level 1-1</a></li> 
 
     <li><a href="#" tabindex="1">Level 1-2</a> 
 
     <!--Level 2--> 
 
      <ul> 
 
      <li><a href="#" tabindex="1">Level 2-1</a></li> 
 
      <li><a href="#" tabindex="1">Level 2-2</a> 
 
      <!--Level 3--> 
 
       <ul> 
 
        <li><a href="#">Level 3-1</a></li> 
 
        <li><a href="#" tabindex="1">Level 3-2</a></li> 
 
        <li><a href="#" tabindex="1">Level 3-3</a></li> 
 
        </ul> 
 
      </li> 
 
      <li><a href="#" tabindex="1">Level 2-3</a></li> 
 
      </ul> 
 
     </li> 
 
     <li><a href="#" tabindex="1">Level 1-3</a></li> 
 
     <li><a href="#" tabindex="1">Level 1-4</a> 
 
    </ul> 
 
</div> 
 

 

 
</html>

+0

ありがとうございました。フォーカスしたときだけ表示されるメニューが必要であることを覚えておいてください。ホバリング1のJSふるいはそれがどのように見えるかの例でした...しかし、これらの修正を指摘してくれてありがとう;) – danielda2008

関連する問題