2016-03-22 26 views
0

このドロップダウンメニューを作成したので、「人気の高い」タイトルにカーソルを合わせるまではうまくいきます。このイベントが発生すると、セクションの高さは370pxのときに0pxのままです。私は真剣に理由を理解していない。誰か助けてくれますか?ここでドロップダウンメニューが正しく動作しない

<!DOCTYPE html> 
<html> 
<head> 
    <title>list</title> 
    <!--links in font--> 
    <link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:400,200' rel='stylesheet' type='text/css'> 
    <!--links in jQuery--> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
</head> 
<style type="text/css"> 
/* do not include in production */ 
    * { 
     margin: 0; 
     padding: 0; 
     border: 0; 
    } 
    body { 
     background-color: whitesmoke; 
     font-family: 'Yanone Kaffeesatz', sans-serif; 
     color: white; 
    } 
    .cards { 
     background: white; 
     padding: 10px; 
     margin: 5px auto; 
     border: #DDD solid 1px; 
     box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); 
    } 
/* INCLUDE */ 
    #n-wrap { 
     max-width: 950px; 
     height: 590px; 
     overflow: hidden; 
     margin: 0 auto 10px; 
    } 
    .n-titles { 
     line-height: 50px; 
     width: 100%; 
     height: 50px; 
     text-align: center; 
     transition: background-color 0.5s ease; 
     color: black; 
    } 
    .n-titles:first-child { 
     background-color: #888; 
     color: white; 
    } 
    .n-titles:nth-child(n+2):hover { 
     background-color: rgb(96, 223, 229); 
     color: white; 
     cursor: pointer; 
    } 
    .n-titles:nth-child(n+2):hover + .n-items { 
     height: 370px; 
    } 
    .n-items { 
     height: 0px; 
     width: 100%; 
     transition: height 0.5s ease; 
     background-color: white; 
     overflow: hidden; 
     text-align: center; 
    } 
    .n-items img { 
     width: 25%; 
     padding-top: 15px; 
    } 
    .n-items img:nth-child(2) { 
     padding: 0px 40px 0px 40px; 
    } 
    .n-items:hover { 
     height: 370px; 
    } 
    #highlight { 
     background-color: rgb(96, 223, 229); 
     color: white; 
    } 
</style> 
<body> 
    <div id="n-wrap" class="cards"> 
     <div class="n-titles">FEATURED</div> 
     <div class="n-titles">Most Popular</div> 
     <div class="n-items"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
     </div> 
     <div class="n-titles">On Sale</div> 
     <div class="n-items"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
     </div> 
     <div class="n-titles">Newest</div> 
     <div class="n-items"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
      <img src="pseudo_img.jpg"> 
     </div> 
    </div> 
    <div style="height: 100vh"></div> 
</body> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      //always have first section open 
      $(".n-items:nth-child(3)").css("height", "370"); 
      //highlight specific title 
      $(".n-items, .n-titles").hover(function() { 
       $(".n-items:nth-child(3)").css("height", "0"); 
       $(".n-titles").removeAttr("id"); 
       switch ($(this).index()) { 
        case 2: 
        $(".n-items:nth-child(3)").css("height", "370"); 
        $(".n-titles:nth-child(2)").attr("id", "highlight"); 
        break; 
        case 4: 
        $(".n-items:nth-child(3)").css("height", "0"); 
        $(".n-titles:nth-child(4)").attr("id", "highlight"); 
        break; 
        case 6: 
        $(".n-items:nth-child(3)").css("height", "0"); 
        $(".n-titles:nth-child(6)").attr("id", "highlight"); 
        break; 
       } 
      }, function() { 
       for (var i = 2; i <= 6; i +=2) { 
        $(".n-titles:nth-child(" + i + ")").removeAttr("id"); 
       } 
       $(".n-items:nth-child(3)").css("height", "370"); 
      }); 
     }); 
    </script> 
</html> 

のでjsfiddle

答えて

1

で、あなたのJavaScriptで、あなたは高さを追加することは0PXまたは370pxのいずれか(マークアップに、インライン値。これらのインラインスタイルは、デフォルトでは、あなたのスタイルシートにあるものよりも優先されますこれは、CSSの特異性がどのように動作するかです:。!

...インラインスタイル規則は、常に最高の特異性を有し、CSSカスケード内でそれらを上書きする唯一の の方法は、関連するdeclarations-に重要 ステートメントを使用することです メンテナンスの悪夢を作成するアプローチ。 (Sitepoint経由)

Sitepointもあなたにこの問題の解決策を与えている

(まあ、最速修正、そうでない場合は最高)。あなたのホバー宣言に!importantフラグを追加します。

.n-titles:nth-child(n+2):hover + .n-items { 
    /* Important needed here to override inline CSS generated by JS */ 
    height: 370px!important; 
} 

を上記のコードは、あなたの最初の問題を解決するが、あなたが代わりにJSを使用して機能性の同じ種類を取得することができ、代わりにインラインスタイルの、場合探検することもできます(is-openis-closedのような)アコーディオンの状態を識別するクラスを適用すると、スタイルシート内のすべてのCSSを制御できます。

関連する問題