2016-03-22 57 views
0

Bu açılır menüyü oluşturdum ve "En Popüler" başlığının üzerine gelene kadar harika çalışıyor. Bu olay meydana geldiğinde, bölümün yüksekliği, 370px olması gerektiğinde 0px'de kalır. Ben ciddi olarak nedenini anlamıyorum. Birisi bana yardım edebilir mi? İşte Açılır menü düzgün çalışmıyor

<!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> 

JavaScript'inizin Yani bir jsfiddle

cevap

1

olduğunu, yükseklik ekliyoruz İşaretlemenize için satır içi değerleri (ya 0px veya 370px. Bunlar satır içi stilleri, varsayılan olarak, sizin stil ne olursa olsun geçersiz kılar

... satır içi stil kuralları her zaman en yüksek özgüllük CSS kaskatı içinde bunların üzerine tek yol var olan ilgili declarations- üzerinde önemli deyimini kullanmak:!. CSS özgüllük nasıl işliyor bakım kabusu oluşturan bir yaklaşım. (Sitepoint aracılığıyla)

SitePoint da bu problemin çözümünü vermiştir

(iyi, en hızlı düzeltme, iyi değilse); Vurgulu ilanına bir !important bayrağı ekleyin:

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

Yukarıdaki kod başlangıçtaki sorunu çözer iken, bunun yerine hiç JS kullanarak işlevselliği aynı tür alabilirsiniz yerine satır içi stilleri, eğer keşfetmek isteyebilirsiniz akordeon durumunu tanımlayan sınıfları uygulayın (is-openis-closed gibi), daha sonra tüm CSS'yi stil sayfanızdan kontrol etmenizi sağlar.