【问题标题】:Display 3-column layout with variable-height content in fixed height box?在固定高度框中显示具有可变高度内容的 3 列布局?
【发布时间】:2013-08-10 02:16:53
【问题描述】:

这不是通常的 3 列布局问题 :-)

想象一下报纸上的分类广告部分(还记得吗?)...我有一个设计,在屏幕上我有一个固定大小的框(例如,600x200),分为 3 列,其中显示推文每一列。所以推文会开始填满第一列,它们会一直堆积在第一列,直到我们找到一条不再适合的推文,所以它会被撞到下一列……等等。

这是我所追求的模型(我不得不删除每条推文上的名字,但你明白了):

这很棘手,因为目标是将尽可能多的推文放入框中,但我不知道每条推文会有多高...可能是一个单词,也可能是全部 140 个字符,全部大写会占用很多空间。封闭的盒子总是相同的大小,不能改变。所以我需要某种智能“流”,以便它知道何时移动到下一列并填充所有可用空间。有没有办法在 CSS/HTML 中做到这一点?

【问题讨论】:

  • JavaScript 好吗?环绕文本好吗?您需要哪些浏览器支持?
  • 您将需要 javascript。另外,您是在编写脚本来显示推文还是使用插件?
  • JS 没问题,换行也没问题,它可能需要当前的浏览器,并假设我会自己获取推文提要(没有现成的插件)。谢谢

标签: html css css-float multiple-columns


【解决方案1】:

仅使用 CSS,列似乎是最好的方式。

demo

HTML

每条推文只是一对<strong> 用户名和<p> 推文正文。将这些更改为您喜欢的任何内容,但请确保更改 CSS 以匹配。

<div class="threecol">
<strong>@someone</strong>
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae.</p>  
<strong>@nextuser</strong>
<p>...</p>
</div>

CSS

此 CSS 用于容器。除了您的规范(宽度、高度、隐藏溢出)之外,它只是添加了列设置。

.threecol {
  height: 200px;
  width: 600px;
  margin: auto;
  overflow: hidden;
  -webkit-column-count: 3;
  -moz-column-count: 3;
  column-count: 3;
}

这仅适用于您希望推文符合@names 的风格。

p {
  display: inline;
  width: 30%;
}

这会导致&lt;p&gt; 和以下推文之间出现换行符。

p:after {
  display: block;
  content: '';
  margin: 10px 0;
}

浏览器兼容性

对于这个简单的设置,它应该可以在大多数浏览器上正常工作。对于旧浏览器,它们只会将所有内容堆叠起来,看起来仍然不错,并且显示几乎一样多的推文。

问题

  1. 如果一条推文包含在(隐藏的)第四列中,它可能会被截断。
  2. jQuery 报告列中元素的顶部/左侧和(看似不正确的)宽度/高度不正确。
  3. 这是基于 W3 标准的草案,语法可能会发生变化。也就是说,目前可能不会有太大变化。

替代方案

您可以搜索 Masonry 插件,并隐藏底部低于其容器底部的元素。可能是固定高度容器的最佳解决方案。

【讨论】:

  • 惊人的答案。谢谢。
  • 很好的答案。是否可以防止每个 threecol 元素分成不同的列?
  • @NielsBrinch 不确定您的意思,但它不是很灵活。它只做一件事,并且对一部分用例做得很好。
  • 在这个问题的上下文中,我想防止一条推文跨越多个列。
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多