2009-02-25 10 views
1

Jqueryで単純なマルチレベルのUL水平アコーディオン(またはスライドメニュー)を作成しようとしています。 Hunter Daleyは喜んでJqueryコードを提供しましたが、私はCSSを理解できないようです。私はこれがnewbだと知っていますが、私は本当に立ち往生しています。JQuery Horizo​​ntal Accordion CSS

Ul li Ulがスライドアウトすると、改行が作成されます。すべてをインラインで表示したい場合は、改行を入れないでください。私は空白を試しました:nowrap、表示インラインなどそれはそれを行うように見えません。何か案は? Glavicの答え、あたりとして

:私はに山車を使用しようとしていたが、私はSafariのバグを行うと、アニメーション中にサブレベルULを点滅している場合:

右:floatを使っ

私はフロートなしでそれをやろうとしていました。 私はアニメーション機能を利用しようとしています。

アニメーション中にSafariがバグしてサブウルを点滅させます。

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

オリジナルポスト:

<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

はこちらをご覧http://stackoverflow.com/a/27262010/1922144 – davidcondrey

答えて

1

私が正しくあなたを理解していればあなたは1行(水平)に第一及び第二のメニューレベルを持っていたいですか?しかし、アニメーション機能は、「ブロック」の代わりに「インライン」の表示を設定している - :「インライン表示」は、トリックを行うだろう

<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

おかげで、しかし、Safariのバグ出しを持って、アニメーション中にサブULが点滅します。 – stapler

+0

インラインでは使用しないでください。要素がブロックされている方がよいでしょう。他のulの高さを固定してみてください。 –

0

は私がいることを考える:

これを試してみてください。

アニメーション化ではなくプレースに「スナップ」することができれば、代わりにこれを行うことができます。

<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

ありがとうIan、しかし私はアニメーション機能に固執しようとしています。 – stapler

+0

あなたは大歓迎です - 私は表示を無効にする方法を理解できないようです:アニメーション機能が使用するブロック。あなたが火かき棒を使用してそれを変更すると、それは完全に表示されるので、そのイライラします。私はちょうどアニメーション機能は、インラインディスプレイを使用することができますとは思わない。回避策を探しています... :) –

+0

これは間違っている可能性があります。最初の場所でインライン要素をアニメートすることはできません。 –

0

あなた自身を構築するのは楽しいことです。それは、この素晴らしさを使用することも楽しいです: http://jqueryui.com/demos/accordion/

+0

jQueryのアコーディオンでコンテンツを水平に表示できますか? –

+0

いいえ、それはありません – stapler

関連する問題