【问题标题】:Stretch list items to 100% width of container将列表项拉伸到容器的 100% 宽度
【发布时间】:2014-08-26 01:48:09
【问题描述】:

我正在使用 bootstrap 3 并试图模仿 Metro ui 的步进器插件。我正在尝试使用 jQuery 放置左值,以便我的列表项均匀分布并占据容器的 100%,但控制台显示所有值均为 0。我的代码:

$(document).ready(function () {

    steps = $(".stepped li"),
    element_width = $(".stepped li").width(),
    steps_length = steps.length - 1,
    step_width = $(steps[0]).width();

    $.each(steps, function (i, step) {
        var left = i == 0 ? 0 : (element_width - step_width) / steps_length * i;

        console.log(steps);
        $(step).animate({
            left: left
        });
    });

});

我找不到我做错了什么,所有左值都返回 0px。这是我试图模仿的插件的链接:http://tinyurl.com/o6sld95。该列表是一个简单的无序列表。

<ul class="stepped">
    <li class="complete">1</li>
    <li class="complete">2</li>
    <li class="current">3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>

【问题讨论】:

    标签: jquery html css twitter-bootstrap metro-ui-css


    【解决方案1】:

    element_width = $(".stepped li").width() 更改为element_width = $(".stepped").width()

    您目前正在两次获取li 项目的宽度并将其分配给element_widthstep_width,因此当您减去它们时,您会得到0

    JSFiddle

    【讨论】:

      【解决方案2】:

      这是一个简单的 css 解决方案,如果您对此感兴趣:http://jsfiddle.net/u3w0qfaz/1/

      第一个版本是使用父容器宽度的过渡来模拟想要的效果:

      ul.stepped {
          display: flex;
          list-style: none;
          flex-wrap: nowrap;
          flex-direction: row;
          transition-duration: 1s;
          width: 1px;
      }
      ul.stepped li {
          flex: 1 1 auto;
      }
      ul.stepped.go {
          width: 100%;
      }
      

      这是另一个使用变换对项目产生缩放效果的版本:http://jsfiddle.net/u3w0qfaz/

      ul.stepped
      {
          /*...*/
          transform: scaleX(0);
          transform-origin: left;
      }
      
      ul.stepped.go
      {
         transform: scaleX(1); 
      }
      

      【讨论】:

        【解决方案3】:

        如果您使用的是 Bootstrap 3,则可以使用 Justified Button Nav

        引导 3 + 1 CSS:

        ul{
          -webkit-padding-start: 0px;
        }
        
        
        <ul class="stepped btn-group btn-group-justified">
          <li class="complete btn-group">1</li>
          <li class="complete btn-group">2</li>
          <li class="current btn-group">3</li>
          <li class="btn-group">4</li>
          <li class="btn-group">5</li>
          <li class="btn-group">6</li>
        </ul>
        

        JsFiddle Example.

        根本不需要 jQuery,除非你需要支持只有 CSS 2.x 的浏览器。

        或纯 CSS + HTML(几乎是 Bootstrap 3 的做法)

        .stepped{
            padding: 0;
            display: block;
            width: 100%;
        }
        
        .stepped > li {
            display: table-cell;
            border: 1px solid black;
            width: 1%;
        }
        
        <ul class="stepped">
          <li class="complete">1</li>
          <li class="complete">2</li>
          <li class="current">3</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
        </ul>
        

        JS Fiddle Example

        【讨论】:

        • 谢谢!呵呵,我什至没有考虑过使用合理的导航。 P.S:很好的编辑!
        • 抱歉,bootstrap 选项不起作用,因为边框表示步骤,无法像 Metro ui 那样隐藏左右两侧的边框。
        猜你喜欢
        • 2012-06-02
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 2015-02-05
        • 2011-09-17
        • 1970-01-01
        • 2019-10-30
        相关资源
        最近更新 更多