【问题标题】:Dynamically change <li> width to fully fit in <ul>动态改变 <li> 宽度以完全适应 <ul>
【发布时间】:2017-09-29 02:49:58
【问题描述】:

我正在尝试显示具有这种结构的媒体库的元素:

.mail-attach-list {
    list-style: none;
    padding: 0;
}
.mail-attach-list>li {
    display: inline-block;
    width: 190px;
}
.thumbnail {
    margin-bottom: 2px;
    border-radius: 3px;
    display: block;
    padding: 4px;
    border-color: rgba(0, 0, 0, 0.09);
    background-color: #fff;
    text-decoration: none;
}
.mail-attach-list>li .mail-file-img, .mail-attach-list>li .mail-file-icon {
    height: 120px;
    overflow: hidden;
    text-align: center;
    background-color: #f8f9fa;
}
.thumbnail .caption {
    padding: 9px;
    color: #333;
}
<ul class="mail-attach-list list-ov">
    <li class="item">
        <a href="#" class="thumbnail">
            <div class="mail-file-icon">
                <i class="pli-file-excel"></i>
            </div>
            <div class="caption">
                <p class="text-primary mar-no text-overflow">Icon Example</p>
                <small class="text-muted text-overflow">
                    Added: <time data-toggle="timeago">4 days ago</time>
                </small>
            </div>
        </a>
    </li>
    <li class="item">
        <a href="#" class="thumbnail">
            <div class="mail-file-img">
                <img class="image-responsive" src="/uploads/2017/09/bg-img-7-400x300.jpg" alt="image">
            </div>
            <div class="caption">
                <p class="text-primary mar-no text-overflow">Image example</p>
                <small class="text-muted text-overflow">
                    Added: <time data-toggle="timeago">4 days ago</time>
                </small>
            </div>
        </a>
    </li>
</ul>

为了这个解释,我删除了一些标签属性

这是预览

所以我想去掉右边的空白,我用的是像素单位 在 li 元素中,因为我无法使其工作。

如何动态更改 li 元素的宽度以完全适合 ul 父级?

【问题讨论】:

    标签: jquery html css twitter-bootstrap-3


    【解决方案1】:

    您要做的就是在.mail-attached-list&gt;li 上使用基于百分比的width。您需要使用的确切值取决于您要在单行中显示的项目数。

    除此之外,您还可以在.mail-attach-list 上使用text-align-last: center,它将&lt;li&gt; 元素的集合居中:

    .mail-attach-list {
      list-style: none;
      padding: 0;
      text-align-last: center; /* Center the elements */
    }
    
    .mail-attach-list>li {
      display: inline-block;
      width: 49%; /* Dependant on the number of items per row */
    }
    
    .thumbnail {
      margin-bottom: 2px;
      border-radius: 3px;
      display: block;
      padding: 4px;
      border-color: rgba(0, 0, 0, 0.09);
      background-color: #fff;
      text-decoration: none;
    }
    
    .mail-attach-list>li .mail-file-img,
    .mail-attach-list>li .mail-file-icon {
      height: 120px;
      overflow: hidden;
      text-align: center;
      background-color: #f8f9fa;
    }
    
    .thumbnail .caption {
      padding: 9px;
      color: #333;
    }
    <ul class="mail-attach-list list-ov">
      <li class="item">
        <a href="#" class="thumbnail">
          <div class="mail-file-icon">
            <i class="pli-file-excel"></i>
          </div>
          <div class="caption">
            <p class="text-primary mar-no text-overflow">Icon Example</p>
            <small class="text-muted text-overflow">
                        Added: <time data-toggle="timeago">4 days ago</time>
                    </small>
          </div>
        </a>
      </li>
      <li class="item">
        <a href="#" class="thumbnail">
          <div class="mail-file-img">
            <img class="image-responsive" src="/uploads/2017/09/bg-img-7-400x300.jpg" alt="image">
          </div>
          <div class="caption">
            <p class="text-primary mar-no text-overflow">Image example</p>
            <small class="text-muted text-overflow">
                        Added: <time data-toggle="timeago">4 days ago</time>
                    </small>
          </div>
        </a>
      </li>
    </ul>

    希望这会有所帮助! :)

    【讨论】:

    • 是的,我知道我应该使用百分比,但是我不知道如何计算窗口大小变化时的元素数量并防止元素过大。
    • 可以使用 JavaScript 自动计算元素的数量,并在调整屏幕大小时同时调整计数和元素的 width,但我可能只是推荐使用多个媒体查询。找到项目下降到新行的宽度,并在那里设置一个新的断点width
    • 我可能更喜欢使用媒体查询,但我不知道如何计算元素的内联数,而不更改更多 div 中的 html 结构
    • 这就是美丽;你不必。您从全宽开始,然后在 F12 开发者工具的响应模式下手动缩小窗口,并观察项目何时下降到下一行。它会告诉您设置媒体查询断点的确切像素宽度。然后,您只需计算该行上的元素数量,然后将100% 除以该数字即可得到您的width(或者只需手动调整width 的值,直到它看起来不错)。如果有 3 个项目的宽度为 650px,则使用 33% (100% / 3) 设置对 650px 宽度的查询。
    • 我明白了,我会试试的。无论如何感谢您的帮助
    猜你喜欢
    • 2014-12-09
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多