2012-01-17 2 views
2

나는 플로팅하려는 항목이 많지만 이상적으로는 왼쪽에서 오른쪽으로 위에서 아래로 쌓아두기를 원합니다. 떠 다니는 왼쪽은 오른쪽에서 왼쪽에서 오른쪽으로 쌓입니다.float을 시뮬레이트하는 방법 : javacript의 상단

네이티브 코드 또는 jQuery의 javascript에서 css float : top 속성을 시뮬레이트 할 수 있습니까?

예제 코드 :

<style> 
*{margin:0;padding:0;} 
ul { 
    height:80px; 
    width:350px; 
    margin:10px; 
    padding:0; 
    outline:1px solid; 
} 
li{ 
    float:left; 
    list-style:none; 
    margin:0; 
    padding:3px 5px; 
} 
</style> 
<ul> 
    <li>1679</li> 
    <li>1682</li> 
    <li>1732</li> 
    <li>1761</li> 
    <li>1773</li> 
    <li>1781</li> 
    <li>1788</li> 
    <li>1791</li> 
    <li>1797</li> 
    <li>1799</li> 
    <li>1832</li> 
    <li>1861</li> 
    <li>1873</li> 
    <li>1879</li> 
    <li>1881</li> 
    <li>1882</li> 
    <li>1888</li> 
    <li>1891</li> 
    <li>1897</li> 
    <li>1899</li> 
    <li>1932</li> 
    <li>1932</li> 
    <li>1961</li> 
    <li>1961</li> 
</ul> 

비슷한 질문 here가 있지만, 오히려 솔루션을 기반으로 JS보다 CSS 솔루션의 더 찾고있는 것 같다. 또한 this question은 레이아웃 수정의보다 구체적인 구현입니다.

+0

나는 당신의 질문이 무엇인지에 대한 혼란 스러워요의 창 크기 조정/변경 촉구, 나를 위해 잘 작동합니다. 당신은 당신이 위에서 아래로, 왼쪽에서 오른쪽으로 원하는 것을 말합니다. 그것은 정확히 떠있는 것이 할 것입니다. 문제가 무엇입니까? – Geuis

+0

'float : top'은 무엇입니까? 왼쪽, 오른쪽, 없음 또는 상속 중에서 선택할 수있는 옵션은 4 가지뿐입니다. – Sang

+0

@Sang - 플로트 톱이 없으며, 그는 * 존재하는 것이 무엇인지에 대한 설명 일뿐입니다. – mrtsherman

답변

0

그래서, 당신이 할 수있는 일이 .. 조금 도움이 될 것입니다

var origionalX = 100; 
var origionalY = 200; 
var columns = 10; 
$("li").each(function(i){ 
    var x = origionalX+parseInt(i/columns)*$(this).width(); 
    var y = origionalY+(i%columns)*$(this).height(); 
    $(this).css({position : "absolute", left : x, top : y}); 
}); 

희망 리튬의 모든 이상 루프 당신이 원하는 위치에 배치합니다. 좀 더 구체적인 것을 원한다면 자유롭게 의견을 말하면 내가 도울 수 있는지 알게 될 것입니다. :]

+0

미리 열 수를 설정하지 않고이 작업을 수행 할 수있는 방법을 생각해 볼 수 있습니까? –

+0

당신의 signifier로 당신은 무엇을 사용하고 싶습니까? 당신은 쉽게 열을 = total_width_of_area/width_of_each_item – BananaNeil

+0

설정할 수 있습니다 그래, 그보다 합리적인 소리. 폭은 실제로 정확한 상황에서 가변적 일 수 있습니다. 높이 고정. –

1

하면 스마트 columms을 만들 수 있습니다 자바 스크립트 사용. 여기에 부드러운 열을 보장 서로 다른 높이와 각 리튬의 폭에 적응하는 jsfiddle는 다음과 같습니다 http://jsfiddle.net/rgthree/hAeQ2/

var list, currentColLeft, currentColTop, nextColWidth; 
currentColLeft = currentColTop = nextColWidth = 0; 
list = $('ul#list'); 
$('ul > li').each(function(i, el){ 
    var h, w; 
    h = $(el).outerHeight(); 
    w = $(el).outerWidth(); 
    if(currentColLeft + w > nextColWidth){ 
     nextColWidth = currentColLeft + w; 
    } 
    if(currentColTop + h > list.innerHeight()){ 
     currentColTop = 0; 
     currentColLeft = nextColWidth; 
     nextColWidth = 0; 
    } 
    $(el).css({'float':'none','position':'absolute','top':currentColTop,'left':currentColLeft}); 
    currentColTop += h; 
}); 
+0

유망 해 보입니다. 감사! –

3

가 바퀴를 재발견하지 마십시오!

http://masonry.desandro.com/

jQuery를 벽돌은 설명하는지 정확히 않습니다. 또한 구현하기가 쉽습니다. 그래도 마크 업을 약간 변경해야 할 수도 있습니다.

+0

전에 jQuery Masonry를 보았습니다. 내가 필요한 것을 할 수 있는지 확실히 확인해 볼 것입니다. –

2

이 목록

function layout(oList) { 
    var column = 0, 
     top = 0, 
     bottomMargin=20, 
     width = 300; 

     $(oList).each(function() { 
      if (top !=0 && $(this).height() + top > $(window).height()) { 
       top = 0; 
       column += 1; 
      } 
      $(this).css("top", top + "px"); 
      $(this).css("left", (column * width) + "px"); 
      top = top + $(this).height() + bottomMargin; 
     } 
    ); 

} 
관련 문제