나는 고정 된 너비와 높이를 가진 div가 여러 개 있습니다 (기사 사진이있는 일종의 카탈로그보기를 생각해보십시오). 이제 나는 float : left의 동작과 유사하게 보여주고 싶습니다. 이렇게하면 브라우저 창이 커질수록 더 많은 div가 한 행에 표시됩니다.CSS에서 동적 열과 행 수와 함께 부유 요소를 균등하게 분배하는 방법은 무엇입니까?
부동 소수점의 단점은 왼쪽에있는 해결책은 다른 div가 맞을 때까지 오른쪽에 커다란 흰색 틈이 있다는 것입니다. 이제 div를 페이지 하나에 균등하게 분배하는 작업이 있으며 오른쪽에 큰 흰색 틈 대신 단일 div간에 균등하게 틈이 분산되어야합니다. http://dl.dropbox.com/u/2719942/css/columns.html
브라우저 창 크기를 조정하면 당신은 볼 수가 떠 유사한 동작 :
자바 스크립트의 해결책은 간단 남아 있지만, 공간이 고르게 상자 사이에 분배된다. 열과 행 수는 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가없는 솔루션이 있는지 궁금합니다. 한 페이지에 수백 개의 div가 있기 때문에 CSS 전용 솔루션을 선호합니다.
나는 CSS3 Flexible Box Layout을 들여다 보았지만 고정 열 레이아웃에만 유용 할 것으로 보인다. 필자의 예에서는 열 개수가 동적으로 계산됩니다. 그런 다음 비슷한 작업을 수행 할 수있는 CSS3 Multi-column Layout을 시도했지만 div가 세로로 정렬되어 내부가 잘리고 브라우저 지원이 아직 없습니다. 이것은 텍스트에 더 유용하게 보이지만 제 경우에는 차단하지 말아야 할 그림으로 div를 수정했습니다.
내 질문은 : JavaScript없이 이것을 실현할 수 있습니까?
조금 해킹되었지만 보이지 않는 상자를 몇 개 추가하고 자바 스크립트를 전혀 사용하지 않아도됩니다. 참조 : http://jsfiddle.net/UxxJD/3/ :) – trapper
@ trapper : 감사. 왜 그런 생각을하지 않았습니까! 보이지 않는 상자를 추가하는 것은 해킹이지만, 기존 JavaScript 수정보다 * 많이 * 좋습니다. 보이지 않는 상자가 컨테이너의 높이를 높이 지 않도록 일부 JavaScript가 여전히 필요하다고 생각합니다. 내 대답을 편집했습니다. – thirtydot
hacky-boxes가 다음 줄로 뜨면 여분의 높이를 피하기 위해 두 개의 상자를 0 (1px) 높이로 추가 할 수 없습니까? –