如何让图像在没有垂直空间的情况下包装?

Posted

技术标签:

【中文标题】如何让图像在没有垂直空间的情况下包装?【英文标题】:How can I get images to wrap with no vertical space? 【发布时间】:2011-07-23 17:21:46 【问题描述】:

我正在提取宽度相同但高度不同的图像。我正在尝试将它们显示在没有添加垂直空间的行中。

例如,如果第 1 行的图像分别为 100 像素、150 像素和 70 像素高,我希望第二行的图像直接出现在相应高度的每个图像下方。

现在,我将浮动设置为左侧,这适用于水平显示。添加 clear: left 会产生所需的效果,但会将所有内容放在单个列中。如何让图像向左环绕,但垂直显示在下方?

事实上,前 3 个下方的任何图像都将显示在与 150 像素图像下方相同的行高处,而 100 像素和 70 像素图像下方的垂直空间很大。

【问题讨论】:

【参考方案1】:

如果将它们显示为行,则图像将成行排列,对此您无能为力。

我认为您更愿意将它们显示在列中,这样一列中的图像不会影响其他列中的图像。只需通过浮动将列并排放置,并在其中放置图像。

html

<div class="column">
  <img ... />
  <img ... />
  <img ... />
</div>
<div class="column">
  <img ... />
  <img ... />
  <img ... />
</div>
<div class="column">
  <img ... />
  <img ... />
  <img ... />
</div>

CSS:

.column  float: left; 
.column img  display: block; 

【讨论】:

我考虑过,但是图像的数量会因页面而异(它们是动态拉出的),因此很难按列设置样式/使用 clear 使它们垂直对齐,因为我赢了事先不知道每列有多少张图片。 @user678537:只需将第一张图片放在第一列,第二张图片放在第二列,以此类推。这比将图像逐个放置要困难得多,但这就是您需要做的以摆脱水平空间。 这一切都是动态的,没有一个图像是固定的或静态的。一天我可能有 70 张图像,下一天有 100 张图像,另外这将相当于对每个图像进行单独的查询,我担心这将成为资源消耗,因为拉取它们的查询是通过几个选择器开始运行的.我只是坚持通过样式来处理它,因为我已经在网站上看到它完成了(虽然复制他们的样式元素不起作用) @user678537:如果您的服务器语言受到限制,也可以使用客户端脚本更改布局。这很可能是他们在您看到它的页面上使用的,如果是这样,那么仅复制样式不起作用的原因。您可以创建三个空列并在其后列出图像,然后在其后放置一个脚本,将图像元素移动到列中。 这与限制服务器语言无关。这是因为我正在处理大量图像,其数量每天都会变化,而现在我有一个查询可以返回给定日期的所有图像。按照您建议的方式进行操作会起作用,但如果我有 100 张图像,这也意味着 100 个不同的查询来显示每张图像,当一个查询完成这项工作时,我发现这是一种浪费。【参考方案2】:

经过更多的挖掘,它是 jQuery 和 CSS 的组合,使我正在寻找的东西成为可能。特别是 jQuery Masonry。

http://desandro.com/demo/masonry/docs/basic-single-column.html

【讨论】:

以上是关于如何让图像在没有垂直空间的情况下包装?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个没有尺寸的情况下垂直/水平居中图像

将命名空间添加到元素并在没有别名的情况下进行序列化

如何在不使用 ConstraintLayout 中的边距属性的情况下相对于屏幕宽度设置 2 个视图之间的空间

使图片行扩展以适应可用空间

如何让图像填充 div 内的剩余空间? [复制]

如何让 mat-sidenav 占据 mat-toolbar 下方的整个垂直空间?