幅と高さが固定された複数のdivがあります(記事の写真を含むある種のカタログビューについて考えてみてください)。ここで、float:leftの動作と同様にそれらを表示したいと思います。これにより、ブラウザウィンドウが大きくなるほど、1行に表示されるdivの数が増えます。
float:leftソリューションの欠点は、別のdivが収まるまで、右側に大きな白いギャップがあることです。これで、divを1ページに均等に分散する作業ができました。右側に大きな白いギャップがあるのではなく、単一のdiv間に均等に分散されたギャップがあるはずです。
JavaScriptの解決策は簡単です:http://dl.dropbox.com/u/2719942/css/columns.html
ブラウザウィンドウのサイズを変更すると、float:leftと同様に動作しますが、スペースがボックス間で均等に分散されていることがわかります。列と行の数は、JavaScriptを使用して動的に計算されます。
function updateLayout() {
var boxes = document.getElementsByClassName('box');
var boxWidth = boxes[0].clientWidth;
var boxHeight = boxes[0].clientHeight;
var parentWidth = boxes[0].parentElement.clientWidth;
// Calculate how many boxes can fit into one row
var columns = Math.floor(parentWidth / boxWidth);
// Calculate the space to distribute the boxes evenly
var space = (parentWidth - (boxWidth * columns)) / columns;
// Now let's reorder the boxes to their new positions
var col = 0;
var row = 0;
for (var i = 0; i < boxes.length; i++) {
boxes[i].style.left = (col * (boxWidth + space)) + "px";
boxes[i].style.top = (row * boxHeight) + "px";
if (++col >= columns) {
col = 0;
row++;
}
}
}
今、JavaScriptなしの解決策があるのだろうか?1ページに最大数百のdivが含まれる可能性があるため、CSSのみのソリューションをお勧めします。
CSS3フレキシブルボックスレイアウトを調べましたが、これは固定列レイアウトでのみ役立つようです。私の例では、列数は動的に計算されます。次に、 CSS3マルチカラムレイアウトを試しました。これは、同様の機能を得ることができましたが、divが垂直に配置され、内側が切り取られており、ブラウザのサポートはまだありません。これはテキストの方が便利なようですが、私の場合は、画像付きのdivを修正しました。これは、途切れてはいけません。
だから私の質問は:JavaScriptなしでこのようなことを実現できますか?