【问题标题】:Fluid width menu using CSS使用 CSS 的流体宽度菜单
【发布时间】:2012-06-23 12:26:12
【问题描述】:

我有一个水平 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/

【问题讨论】:

  • 看到这个:jsfiddle.net/rathoreahsan/rM9MW/10你想这样做吗?
  • 不,如果有 3 个列表项,那么它需要适合整个宽度。如果菜单标题中的内容过多,则需要减小其他 LI 的大小以适应整个宽度。
  • 如果有4个应该是全宽的。

标签: jquery css xhtml fluid-layout


【解决方案1】:

喜欢这样吗?

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

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

【讨论】:

    【解决方案2】:

    您可以使用一点 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;
    }
    

    【讨论】:

    • 如果你在最后 2 里加入 10 个字符的标题,它不会调整其他 li 的大小来显示文本:(
    【解决方案3】:

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

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

    这取决于列表元素中有多少文本。它不适用于 X 元素。你不能用这个无限X。

    编辑看来undefined 发布的解决方案适用于您想要的尽可能多的元素...

    【讨论】:

      【解决方案4】:

      现场演示 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】:

      使用下面的 Jquery 可以实现你的目标;

      JQUERY

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

      查看此演示:http://jsfiddle.net/rathoreahsan/nxurR/

      【讨论】:

        【解决方案6】:

        你不讨厌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//////////////////// */
        

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2016-12-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多