是否可以随着容器宽度的增加均匀分布图像,同时增加或减少每行中的项目数?

Posted

技术标签:

【中文标题】是否可以随着容器宽度的增加均匀分布图像,同时增加或减少每行中的项目数?【英文标题】:Is it possible to evenly distribute images as container width increases, while increasing or decreasing the number of items in each row? 【发布时间】:2013-03-11 16:32:46 【问题描述】:

我在一个流体容器中有一个图片库。在最小尺寸(980 像素)下,有 5 张图片,最后一张图片没有边距,所以所有东西都很好地适合容器。

当我增加窗口的宽度时,右边总是有额外的空间,直到有足够的空间让下一张图片出现。很典型。我尝试使用自适应图像,但它们对于手头的任务来说有点太大了。

是否可以在灵活的 div 上均匀分布图像(我知道这可能使用 justify css),直到有足够的空间容纳行中的另一个图像,此时它将被包括在内?

我目前有一个列表中的图像。

    <ul>
      <li>image</li>
      <li>image</li>
      <li>image</li>
      <li>image</li>
    </ul>

项目向左浮动,有一个左边距,除了第一个孩子,它的边距为:0;

很合身(5 个)。 http://d.pr/i/q24L

不太好(超过 6 个): http://d.pr/i/VAHi

【问题讨论】:

你有浏览器控制还是你需要它在所有/大多数浏览器中工作? 应该在大多数浏览器中工作......即8+ / ff / chrome / safari 【参考方案1】:

我会使用媒体查询来确定不同的宽度 IE:

@media screen and (max-width: 580px) 

//styles for 5 columns 


@media screen and (max-width: 650px) 

//styles for 6 columns 

显然,我选择的宽度是任意的。您需要知道每列的这些尺寸是正确的

根据您的评论,我为 JS 解决方案(在 jquery 中)做了一个小提琴。这是小提琴:http://jsfiddle.net/yEeKe/6/

JS 看起来像这样:

(function($)
    $('#myUL').width($(window).width() - ($(window).width() % $('img').first().width())); 
    $(window).resize(function()
        $('#myUL').css('width', ($(window).width() - ($(window).width() % $('img').first().width())) +'px');     
    ); 
)(jQuery);

没有媒体查询。显然,你会调整它以适应你的特定设计....

【讨论】:

是的。我可以看到这个工作,但如果可能的话,不想添加 5 或 6 个媒体查询。希望它可以用js或其他东西动态完成。 你当然可以用 JS 来做。我只是以为你想要一个 CSS 解决方案。 如果这样更容易的话,我也可以做一个 JS 答案? 如果你想走这条路,为你添加了一个 jquery 解决方案。【参考方案2】:

这可以使用display: inline-block;text-align: justify; (http://jsfiddle.net/7JZJq/2/) 来实现。但是,可能没有足够的图像来完全填充最后一行。在这种情况下,该行中图像之间的间距会有所不同。

【讨论】:

您可能会以某种方式修改它以说明最后一行是否有两个项目,然后将它们左对齐对吗?现在如果有两个项目,一个在左边,另一个在右边。这就是我想要的。 是的..最后一行与上面的行间隔不均匀。

以上是关于是否可以随着容器宽度的增加均匀分布图像,同时增加或减少每行中的项目数?的主要内容,如果未能解决你的问题,请参考以下文章

当 CSS 中的尺寸未知时如何增加图像的宽度?

如何均匀分布 JavaFX VBox 的元素

一致性Hash算法在Redis分布式中的使用

如何将元素水平均匀分布?

使用 jquery 将容器的宽度增加 10 rem

添加 BulletSpan 时 EditText 不增加宽度