使用CSS的流体宽度菜单

时间:2012-06-21 09:28:55

标签: jquery css xhtml fluid-layout

我有一个水平的CSS菜单。问题是当用户创建超过5个菜单项时,li标签移动到新行。我不希望这种情况发生。

如何设置流畅的宽度,如果用户只创建3个菜单项,那么每个标签的宽度都会增加,以便它适合全宽?

HTML:

<div class="container">
 <div id="new-menu-lower">
  <ul class="menuul">
   <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>
      <li class="menuli">
       <a href="/test.aspx">Test</a>
   </li>

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

CSS:

div.container
{
    clear: both;
    margin: 10px auto 0;
    width:960px;
    border:1px solid red;
    height:700px;
}

div#new-menu-lower {
    border-radius: 3px 3px 3px 3px;
    border-top: 0 solid lightgrey;
    margin: 0 8px 10px;
}

#new-menu-lower ul {
    border: 1px solid white;
    display: block;
    height: 27px;
}

#new-menu-lower ul li:first-child {
    border-left: 0 solid lightgrey !important;
    border-radius: 7px 0 0 7px;
}

#new-menu-lower ul li {
    background-image: url("http://i45.tinypic.com/16if95z.png");
    background-repeat: repeat;
    border-right: 0 solid lightgrey !important;
    float: left;
    height: 27px;
    padding-left: 10px;
    padding-right: 10px;
    text-align: center;
    width: 168px;
}

JSFIDDLE示例: http://jsfiddle.net/rM9MW/

7 个答案:

答案 0 :(得分:1)

像这样?

var mw = $('.menuul').width();
var ll = $('.menuli').length;
var c = mw / ll;
$('.menuli').css('width', c)

http://jsfiddle.net/rM9MW/8/

答案 1 :(得分:1)

你不喜欢javascript!

demo jsBin

只需更改CSS中的这一行:

#new-menu-lower ul {

/*display: block; //////////////////REMOVE//////////////////// */
display:table; /*  //////////////////ADD//////////////////// */

#new-menu-lower ul li {

/* float: left;      //////////////////REMOVE//////////////////// */
display:table-cell; /* //////////////////ADD//////////////////// */

答案 2 :(得分:0)

您可以使用JQuery来实现此目的,here is the jsfiddle

另请在此处找到代码: -

$(document).ready(function(){
   var liCount = $('li.menuli').length;
   var parentUlWidth = $('li.menuli').parent('ul').width(); 
   var liWidth =  Math.floor(parentUlWidth * (1/liCount)) - 10;
    $('#new-menu-lower ul li').css({
        'width':liWidth
    });    
});​

编辑:

我已经更新了小提琴,请立即查看小提琴链接。我改变了css的脚本和位。

CSS:

#new-menu-lower ul li {
    padding-left: 5px;
    padding-right: 5px;
}

答案 3 :(得分:0)

我创建了一个(我认为)有效的例子:

http://jsfiddle.net/ybmGr/2/

这取决于列表元素中的文本数量。它不适用于X元素。你不能无限制地使用X.

编辑undefined似乎发布了适用于您想要的多个元素的解决方案......

答案 4 :(得分:0)

现场演示 http://jsfiddle.net/rM9MW/29/

嘿,现在您可以在css中使用display:table-cell属性,就像这样

并根据您的布局更新您的css并更改为颜色

div.container
{
    margin: 10px auto 0;
    width:960px;
    border:1px solid red;
    height:700px;
    background:red;
}

div#new-menu-lower {
    border-radius: 3px 3px 3px 3px;
    border-top: 0 solid lightgrey;
    margin: 0 8px 10px;
    background:green;
}

#new-menu-lower ul {
    border: 10px solid yellow;
}

#new-menu-lower ul li:first-child {
    border-left: 0 solid lightgrey !important;
    border-radius: 7px 0 0 7px;
}

#new-menu-lower ul li{
display:table-cell;
    padding-left: 10px;
    padding-right: 10px;
}
#new-menu-lower ul li a{
    background: url("http://i45.tinypic.com/16if95z.png");

    border-right: 0 solid lightgrey !important;
    height: 27px;
    padding-left: 10px;
    padding-right: 10px;
    text-align: center;
    display:block;
    width: 168px;
}

现场演示 http://jsfiddle.net/rM9MW/29/


更新了演示http://jsfiddle.net/rM9MW/39/

答案 5 :(得分:0)

使用以下Jquery,您可以实现目标;

JQUERY

$ulWidth = $('.menuul').width();
$listLength = $('.menuli').length;
$('.menuli').css('width', $ulWidth / $listLength )

请参阅此演示:http://jsfiddle.net/rathoreahsan/nxurR/

答案 6 :(得分:0)

我来自未来,为未来的观众:)

你可以使用display:flex;对于ul和flex:1;对于菜单项,我认为对于最近的浏览器来说这是一个非常好的解决方案。

ul{display: flex;}
li{flex: 1;} /* modify witdh of item */