2009-02-25 30 views
1

Jquery'de basit bir çok seviyeli UL Yatay Akordeon (veya slayt menüsü) oluşturmaya çalışıyorum. Hunter Daley, Jquery kodunu nezaketle verdi, ancak css'i anlayamıyorum. Bunun yeni olduğunu biliyorum ama gerçekten sıkışıp kaldım.JQuery Yatay Akordeon CSS

Ul li Ul dışarıya doğru kaydığı zaman, bir çizgi çizgisi oluşturur, ben herşeyi satır içi, satır sonu olmadan görüntülemek isterim. Ben beyaz boşluk denedim: nowrap, ekran satır içi vb. Sadece bunu yapmak görünmüyor. Herhangi bir fikir? Glavić cevabı, gereğince

: Ben yüzen kullanmaya çalışıyor, ama ben Safari böcek dışarı yapmak ve animasyon sırasında alt düzey UL flaş eğer edildi:

Sağ:

Şamandıralar kullanma Şamandıra olmadan yapmaya çalışıyordum. Animasyon işleviyle uğraşmaya çalışıyorum.

Safari, animasyonu sırasında yankılanır ve yanıp söner.

<style type="text/css"> 
<!-- 
body { 
    font-size: 1em; 
    line-height: 1em; 
} 
ul { 
    background-color: yellow; 
    list-style: none; 
    margin: 0; 
    padding: 0; 
    height: 1em; 
    float: left; 
} 
ul li { 
    background-color: aqua; 
    float: left; 
} 
ul li ul { 
    background-color: blue; 
} 
ul li ul li { 
    background-color: green; 
} 
a, a:link, a:hover, a:visited, a:active { 
    color: black; 
    text-decoration: none; 
    float: left; 
} 
--> 
</style> 

Orijinal Mesaj:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 

    <title>untitled</title> 
     <style type="text/css"> 
    <!-- 
    ul{ 
     list-style: none; 
     background-color: yellow; 
     margin: 0; 
     padding: 0; 
       white-space: nowrap; 
      } 

    ul li { 
     background-color: aqua; 
     display: inline; 


    } 

    ul li ul { 
     background-color: blue; 
       } 


    ul li ul li { 
     background-color: green;  
    } 

    a, a:link, a:hover, a:visited, a:active { 
      color: black; 
      text-decoration: none; 

    } 
    --> 
    </style> 

    <script type="text/javascript"> 
      var $current = null; 
     $(document).ready(function(){ 
      $("ul li ul").hide(); // hide submenus by default on load 

      $("ul li a").click(function(){ 
       var $sub = $(this).next(); 
       if ($sub.css("display") == "none") 
       { 
       if ($current != null) 
        $current.animate({ width: 'hide' }); // if you want to only show one sub at a time 
       $sub.animate({ width: 'show' }); 
       $current = $sub; 
       } 
       else 
       { 
       $sub.animate({ width: 'hide' }); 
       $current = null; 
       } 
      }); 
     }); 

    </script> 

</head> 

<body> 
    <ul> 
      <li> 
        <a href="#">Top-level 1</a> 
      </li> 
      <li> 
        <a href="#">Top-level 2</a> 

        <ul> 
          <li><a href="#">Bottom Level A1</a></li> 
          <li><a href="#">Bottom Level A2</a></li> 
          <li><a href="#">Bottom Level A3</a></li> 
          <li><a href="#">Bottom Level A4</a></li> 
        </ul> 
      </li> 

      <li> 
        <a href="#">Top-level 3</a> 
        <ul> 
          <li><a href="#">Bottom Level B1</a></li> 
          <li><a href="#">Bottom Level B2</a></li> 
        </ul> 
      </li> 

      <li> 
        <a href="#">Top-level 4</a> 
      </li> 
    </ul> 


</body> 
</html> 
+0

buraya bir göz http://stackoverflow.com/a/27262010/1922144 – davidcondrey

cevap

1

seni doğru anladıysam Eğer bir satır (yatay) birinci ve ikinci menü seviyesine sahip istersiniz? ama hareketlendirmek fonksiyonu için "blok" yerine "satır içi" görüntülenmesini ayarlıyor -: "satır içi ekran" hile yapacağını

<style type="text/css"> 
    ul{ 
     list-style: none; 
     background-color: yellow; 
     margin: 0; 
     padding: 0; 
     float: left; 
    } 
    ul li { 
     background-color: aqua; 
     float: left; 
    } 
    ul li ul { 
     background-color: blue; 
    } 
    ul li ul li { 
     background-color: green; 
    } 
    a, a:link, a:hover, a:visited, a:active { 
     color: black; 
     text-decoration: none; 
     float: left; 
    } 
</style> 
+0

Teşekkür Var, ama Safari hata dışarı ve animasyon sırasında alt ul yanıp söner. – stapler

+0

Satır içi kullanmayın, öğeler engellendiyse daha iyidir. Diğer ul'de sabit yüksekliği deneyin. –

0

ben düşünüyorum:

bu deneyin.

Animasyon yerine yerine "oturtmak" uygun değilse, bunun yerine bunu yapabilirsiniz.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 

    <title>untitled</title> 
    <style type="text/css"> 
     ul{list-style:none;background-color:yellow;margin:0;padding:0;white-space:nowrap;display:inline;} 
     li ul{display:inline;} 
     ul li{background-color:aqua;display:inline;} 
     ul li ul{background-color: blue;} 
     ul li ul li{background-color: green;} 
     a, a:link, a:hover, a:visited, a:active{color: black;text-decoration: none;} 
    </style> 

    <script type="text/javascript"> 
     var $current = null; 
     $(document).ready(function() { 
      $("ul li ul").hide(); // hide submenus by default on load 

      $("ul li a").click(function() { 
       var $sub = $(this).next(); 
       if ($sub.css("display") == "none") { 
        if ($current != null) 
         //$current.animate({ width: 'hide' }); // if you want to only show one sub at a time 
        $current.removeAttr("display").attr({ style: "display:none;" }); 
        $sub.removeAttr("style").attr({ display: "inline" }); 
        $current = $sub; 
       } 
       else { 
        $sub.removeAttr("display").attr({ style: "display:none;" }); 
        $current = null; 
       } 
      }); 
     }); 
    </script> 
</head> 

<body> 
    <ul> 
      <li> 
        <a href="#">Top-level 1</a> 
      </li> 
      <li> 
        <a href="#">Top-level 2</a> 

        <ul> 
          <li><a href="#">Bottom Level A1</a></li> 
          <li><a href="#">Bottom Level A2</a></li> 
          <li><a href="#">Bottom Level A3</a></li> 
          <li><a href="#">Bottom Level A4</a></li> 
        </ul> 
      </li> 

      <li> 
        <a href="#">Top-level 3</a> 
        <ul> 
          <li><a href="#">Bottom Level B1</a></li> 
          <li><a href="#">Bottom Level B2</a></li> 
        </ul> 
      </li> 

      <li> 
        <a href="#">Top-level 4</a> 
      </li> 
    </ul> 


</body> 
</html> 
+0

Teşekkürler Ian, ama animasyon fonksiyonuyla uğraşmaya çalışıyorum. – stapler

+0

Bir şey değil - Ekranın nasıl geçersiz kılınacağını anlayamıyorum: canlandırma işlevinin kullandığını engelle. Onun sinir bozucu çünkü eğer ateş böceği kullanarak değiştirirseniz, mükemmel görüntüler. Ben sadece canlandırma fonksiyonunun ekran satır içi kullanımını kullanacağını düşünmüyorum. Geçici çözüm aranıyor ... :) –

+0

Bu benim için aşağı inmek için yanlış yol olabilir - ilk etapta bir satır içi öğe animasyon mümkün olmayabilir ... –

0

Kendinizi geliştirmek eğlencelidir. Bu mükemmelliğinizi kullanmak da eğlenceli: http://jqueryui.com/demos/accordion/

+0

jQuery anlaşması içeriği yatay olarak görüntülemenize izin veriyor mu? –

+0

Noope, yok – stapler