2011-06-28 8 views
1

margin-rightを使用して、<ul>を含む可変サイズの水平ナビゲーションリンクを均等に配置するJQueryスクリプトを作成しています。アルゴリズムはJQuery等間隔のナビゲーションリンクの順序付けられていないリスト内での問題

A:<ul>コンテナの幅を取得します。

B:容器の内側にあるすべての<li>アイテムの幅を追加します。

C:AからBを減算し、容器内<li>アイテムの数で割ることによって最後<li>除く各項目の右マージンを計算し、マイナス1

しかし、欠陥のいずれかが私のアルゴリズムであり、または私のコードでは、リンクがコンテナをオーバーフローしているためです。ここに私のコードです。あなたは助けてもらえますか?

おかげで、 -Northk

var containerWidth = $('#main-nav ul').width(); 
    var linksWidth = 0; 
    $('#main-nav ul').children().each(function() { 
     linksWidth += $(this).width(); 
    }); 
    var linkSpacing = Math.floor((containerWidth - linksWidth)/($('#main-nav ul').children().length - 1)); 
    $('#main-nav ul').children().css('margin-right', linkSpacing + "px"); 
    $('#main-nav ul').children().filter(":last").css('margin-right', 0); 

そしてHTMLは次のようになります。

<nav id="main-nav"> 
<ul> 
<li> 
<a href="#">home</a> 
</li> 
<li> 
<a href="#">link-number-2</a> 
</li> 
</ul> 
</nav> 
+0

あなたはCSSの外観を教えていただけますか? –

答えて

2

私はちょうどいくつかのCSSルールを想定しましたが、これはあなたが探していたものだと思います。 http://jsfiddle.net/TEDhb/

$('#main-nav ul li:not(:last-child)').css('margin-right', linkSpacing + "px"); 
+0

ありがとうございますArmin、非常に巧妙な使用:しない。 –

+0

すべて、私のスクリプトの問題ではなく、CSSの問題であることが判明しました。私はdisplay:inline-blockを私のリストアイテムに使っていました。これをdisplay:blockとfloatに変更しました。うーん。 –

+0

はい。 @boyetboyも言及したように、JSがうまく動作しているように見えますが、ちょうどいくつかのCSSの調整があります。上の行は単なる提案でした:) –

0

あなたがれるLIの数だけ、ではないのLI-1の数で割る必要があります。

+0

Er、no。 LI間のギャップの数はLIの数よりも1つ少ない – jmbucknall

+0

あなたは正しいです、悪いです。問題はLI幅が異なっており、1つのLI(特に最後の1つ)が実質的により広いことができるため、単に分割が機能しないことである。 –

1

はこれを言って嫌い、それは私のために正常に動作します。それのためにHere is the jsFiddle(私は最小限のCSSを想定していました)。コードの上部はあなたのコード(動作します)、コメントアウトされた部分の下は私のバージョンです(これは何も追加しませんが、より効率的です)。

+0

ありがとうBoyetboy。あなたの助けとArminの上で、私はそれが私のスクリプトの問題ではなくCSSの問題であることを理解しました。 –

関連する問題