我有一个固定大小的父元素,它可以包含不断变化的子元素数量,所有这些子元素都需要以相同的大小和固定的 x/y 比率显示;并且所有这些都需要尽可能大地显示,而不会溢出父元素的大小。(了解?)
如果你看一下我创建的 jsfiddle 会更清楚,它的行为方式符合我的要求:
这里的关键是这个函数:
function layout(parent, parentHeight, parentWidth, children, ratio) {
var totalArea = parentHeight * parentWidth;
var elements = children.length;
var height = 0, width = 0, area = 0, cols = 0, rows = 0;
for (height = parentHeight; height > 0; height--) {
width = height * ratio;
area = width * height * elements;
cols = Math.floor(parentWidth / width);
rows = Math.ceil(elements / cols);
if (area <= totalArea && cols * width < parentWidth && rows * height < parentHeight) {
break;
}
}
$(children).width(width - 10).height(height - 10);
$(parent).width(parentWidth).height(parentHeight);
}
它有效,但看起来很笨重。我一直觉得应该有办法在 CSS 中做到这一点,但 CSS 布局规则总是让我头疼,无论如何,我无法理解它会是什么。或者失败了,似乎应该有一种方法来做到这一点,不需要在确定一个有效的值之前手动尝试一百个不同的值。
关于如何改进的建议?