css - 如何使一系列包装的内联 block 元素中的最后一个元素填充可用的水平空间?

标签 css

我有一个元素将包含未指定数量的内联 block 元素,如果有足够的元素,这些元素可能会换行。

我想让最后一个元素填满该行剩余的空间。如何实现?

enter image description here

enter image description here

enter image description here

示例 HTML

<div class="tags">
  <span class="tags__item">First Tag</span>
  <span class="tags__item">Another One</span>
  <span class="tags__item">Long Tag Name Here</span>
  <span class="tags__item">Last tag should fill</span>
</div>

示例 CSS

.tags { border: solid 1px #000; padding: 0; }
.tags__item {
  display: inline-block;
  margin: 2px;
  padding: 1px 5px;
  background: #eee;
  border: solid 1px #eee;
}
.tags__item:last-child {
  background: #fff;
  border: dashed 1px #eee;
}

尝试 #1(无效)

一个答案(已删除)提到尝试这样的表格单元格布局..

.tags {
  border: solid 1px #000; 
  display: table-row;
  white-space: nowrap;
}
.tags__item {
  display:table-cell;
  width:auto;
  margin: 2px;
  padding: 1px 5px;
  background: #eee;
}
.tags__item:last-child {
  background: #fff;
  border: dashed 1px #ccc;
  width:99%
}

此解决方案对于单行来说效果相当好。但是,它不允许换行。 http://cdpn.io/omFuy

尝试 #2(无效)

其他人链接到另一个 SO answer作为可能的解决方案。

.tags {
  border: solid 1px #000; 
}
.tags__item {
  display: block;
  float: left;
  margin: 2px;
  padding: 1px 5px;
  background: #eee;
}
.tags__item:last-child {
  float: none;
  display: block;
  border: dashed 1px #ccc;
  background: #fff;
}
.tags__item:last-child::after {
  clear:both;
}

但它不起作用。 See my implementation .

最佳答案

对于支持它的浏览器,自然的解决方案是使用 flexible layout module ,又名 flexbox——这正是它所针对的场景。以下是基本要素:

Demo on Dabblet

.tags {
    display: flex;
    flex-wrap: wrap;
}

.tags__item:last-child {
    flex: auto;
}

这种方法的(并非微不足道的)缺点是 lack of browser support如果你需要支持旧的浏览器,那么随之而来的是一堆乱七八糟的前缀和回退。根据 Rafael 的建议在评论中,这个 CSS Tricks article概述了所需的前缀和遗留语法。

关于css - 如何使一系列包装的内联 block 元素中的最后一个元素填充可用的水平空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126262/

相关文章:

html - 如何在 CSS 中更改复选框的边框样式?

html - 如果存在特定的 CSS 类组合,则更改另一个类的 CSS

javascript - 使用 JavaScript 更改表格的背景颜色,但它不起作用

html - 在图像链接上获得一些空间

css - 通过增加字体填充剩余空间

jquery - 结合图像映射和悬停

html - 悬停仅在 flexbox 中的文本下划线

css - 可以连接打印机的设备的媒体查询

html - 填充/边距的原因是什么?

javascript - 如何在 JavaScript 中将 className 添加到 div 标签?