2013-05-29 32 views
0

我嘗試創建一個將其項目拉伸到窗口寬度的菜單。有人能告訴我我做錯了什麼嗎?我知道這個問題已經被問過,但我不知道我的代碼有什麼問題。JQuery伸展按鈕與窗口寬度水平相關

這就是我「米試圖實現的。紅色是窗口

http://jsfiddle.net/JdGeQ/5/

的Javascript

$(function(){ 
    $(window).resize(function (e) { 
     setTimeout(function() { 
      resizeButtons(); 
     }, 200); 
    }); 
    resizeButtons(); 
}); 

function resizeButtons() { 
    var count = $("#menu").length; 
    var itemwidth = $(window).width/count; 

    $(".item").css("background", "blue"); 
    $(".item").css("width", itemwidth); 
} 

CSS

.elementtop { 
    position: fixed; 
    top: 0; 
} 
.elementfooter { 
    position: fixed; 
    bottom: 0; 
} 
.elementright { 
    right: 0; 
} 
ul { 
    min-width:100%; 
    padding:0; 
    margin:0; 
    float:left; 
    list-style-type:none; 
    background: #000000; 
} 
li { 
    display:inline; 
} 
a { 
    overflow: hidden; 
    text-decoration:none; 
    color:white; 
    background-color:purple; 
    padding:0.2em 0.6em; 
    border-right:1px solid white; 
} 

HTML

<div> 
    <ul id="menu"> 
     <li> <a href="#" class="item"> 
       <span>Text text</span> 
      </a> 

     </li> 
     <li> <a href="#" class="item"> 
       <span>Text2</span> 
      </a> 

     </li> 
     <li> <a href="#" class="item"> 
       <span>Text3</span> 
      </a> 

     </li> 
    </ul> 
</div> 

在此先感謝。

+0

爲什麼你想用這個jQuery?你可以用純CSS來完成。 – cimmanon

+0

@cimmanon如何用純CSS實現這一目標?我嘗試過,但我無法得到理想的結果。 – Bram

回答

2

你的jQuery代碼中有幾個錯誤。您需要使用width()而不是width,因爲它是一個函數調用。另外,當您分配count時,您並未選擇菜單項,而只是選擇了#menu

function resizeButtons() { 
    var count = $("#menu .item").length; 
    var itemwidth = $(window).width(); 
    itemwidth = itemwidth/count; 
    $(".item").css(
     "width", itemwidth 
    ); 
} 

您還需要設置display:inline-blockdisplay:block你的錨,這樣就可以影響width

a { display:inline-block; } 

Updated Fiddle

注意:您還需要佔填充,等你的菜單項,以獲得正確的結果。

+0

謝謝你的回答德里克,但這並沒有改變我的結果。儘管我對這些指標非常滿意。 – Bram

+0

我更新了我的答案,包括我第一次忘記的CSS。 –

+0

我看到這些項目正在延伸。非常感謝你!現在我需要包含我的填充。 – Bram

1

以$(「#菜單」),你得到#menu元素出現的號碼長度 - 1.你應該使用下面的方法得到的菜單項的數量

var count = $("#menu li").length; 
+0

我應用此更改時看不到任何區別。儘管感謝您的評論。 – Bram

+0

德里克在你的代碼中發現了另一個問題 –

2

這可以用純CSS來實現:

http://cssdeck.com/labs/hgmvgwqc

ul { 
    min-width:100%; 
    padding:0; 
    margin:0; 
    display: table; 
    list-style-type:none; 
    background: #000000; 
} 
li { 
    display: table-cell; 
    width: 33%; 
} 
a { 
    overflow: hidden; 
    text-decoration:none; 
    color:white; 
    background-color:purple; 
    padding:0.2em 0.6em; 
    border-right:1px solid white; 
    display: block; 
} 

這種方法需要知道多少個列表項有。

+0

謝謝你展示這個選擇!我希望我能接受這兩個答案,但我不能。我提出了你的答案,並希望其他人看到這個答案也是有益的! – Bram

+0

我想說明的是,此方法可以正常工作,直到您將位置屬性更改爲絕對或相對(它更改顯示屬性)。我仍然沒有想出如何將此菜單粘貼到頁面的底部或頂部。 – Bram