2013-05-29 26 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