Я видел этот вопрос несколько раз, и в результате всегда кажется, что css (пока) не поддерживает распределение элементов по динамической ширине. Есть хаки, но, честно говоря, я считаю, что самый быстрый способ обойти это - использовать javascript для позиционирования.
что-то вроде этого (записанное в библиотеке prototype ) должно делать то, что вы хотите:
$(document).observe('dom:loaded',function(){
spaceSquares();
});
window.onresize = function(){spaceSquares();}
function spaceSquares(){
// this is the minimum margin per square.
var minMargin = 20;
// this tells you how many squares will fit on the top row
var topRowSquares = Math.floor(document.viewport.getWidth() / ($$('.test')[0].getWidth()+minMargin));
// this will tell you how much space is left over
var remainderWidth = document.viewport.getWidth() - (($$('.test')[0].getWidth()+minMargin)*topRowSquares);
// this will tell you how much margin to put on each item
var marginWidth = (remainderWidth / topRowSquares) + minMargin;
// this will put the margin on the top row
for(var i=0;i<topRowSquares;i++){
$$('.test')[i].setStyle({'margin-left':marginWidth/2+'px','margin-right':marginWidth/2+'px'});
}
}
Я уверен, что есть более элегантные способы сделать это, но по сути я просто вычисляю оставшееся пространство и делю его на квадраты. Я обернул первый вызов функции в обозревателе, чтобы она не пыталась сработать до загрузки dom, и я вызываю его для события window.onresize, чтобы при изменении размера окна всегда будет держать верхний ряд идеально распределенным.
Надеюсь, это направит вас в правильном направлении!