2012-03-30 593 views
1

我正在開發有點alla飼料agregator爲我的客戶。我把它作爲一個完全流暢的響應式佈局,它工作的很好,但是我想做一個小小的調整。連續浮動div的自動高度?

http://www.paulhanak.com/clients/topmb/index.php

我把所有的div向左浮動。當你調整瀏覽器,你會看到它適應,迫使div的下降相應....

所以我成立了所有的div是的220px的固定高度。那麼,有時候這對於底部的很多空間來說都會很方便。有時候,標題足夠長,足以填滿它。最終,將腳本逐行比較並通過找到每個div的最大高度並相應地設置其他高度來進行適當的高度調整將是很好的...

對此有任何其他想法?

回答

0

我想你定義最小高度:220px;

+0

這不會讓所有div是同一高度或跨頁對齊。 – 2012-03-30 04:35:08

0

你可能想看看這裏上提出這一問題的答案檢查。 Vertically aligning floated DIVs with varying heights?

的人使用jQuery來添加其他的div將清除的div兩側的div來排隊叫他們像表。

.clear {clear:both;} 

上面的CSS是我通常使用的。

+0

感謝您的想法!你發送的是基於固定寬度的2列布局。我有一個沒有固定寬度的TBD列布局。雖然我會收藏書籤!謝謝! – PaulHanak 2012-03-30 12:47:13

1

我想出了以下自定義jQuery代碼來計算div如何排列成行,然後循環遍歷每行併爲行中每個div的內容計算出正確的最大高度,然後設置該行中所有div的高度。

$(window).resize(function() { 
    var $blocks = $('.block'), 
     firstBlockTop = $blocks.first().offset().top, 
     lastOffsetTop = firstBlockTop; 
    var rows = [], 
     currentRow = 0, 
     i, rowCount, j, colCount, height; 
    $blocks.each(function(index, element) { 
     var $div = $(element), 
      thisOffsetTop = $div.offset().top; 
     if (thisOffsetTop !== lastOffsetTop) { 
      currentRow++; 
     } 
     rows[currentRow] = (rows[currentRow] || []); 
     rows[currentRow].push($div); 
     lastOffsetTop = thisOffsetTop; 
    }); 
    console.log(rows); 

    function maxHeight(array) { 
     var maxHeight = -1, 
      innerHeight; 
     for (var i = 0, len = array.length; i < len; i++) { 
      // calculate the actual total height for the inner items 
      innerHeight = 0; 
      array[i].children().each(function() { 
       innerHeight += $(this).outerHeight(true); 
      }); 
      maxHeight = Math.max(innerHeight, maxHeight); 
     } 
     return maxHeight; 
    } 
    // now loop through each row and set the height of each div to the max height for the row 
    for (i = 0, rowCount = rows.length; i < rowCount; i++) { 
     height = maxHeight(rows[i]); 
     console.log('Row ' + i + ', maxHeight = ' + height); 
     for (j = 0, colCount = rows[i].length; j < colCount; j++) { 
      rows[i][j].height(height); 
     } 
    } 
});​ 

您可能會對此代碼做出輕微的性能改進,但希望它能爲您提供良好的基準。自帶權在我腦海

+0

你是從頭開始寫的嗎?神聖的comoly!非常感謝你。其中一些比我的腦袋高出一點,但我完全可以看到那裏發生了什麼!我確實有一個問題,雖然....我無法得到它的工作。大聲笑我在我的網站上實現它,並從CSS刪除所有「高度」實例,以確保...但沒有...請告訴我,我錯過了一些愚蠢的東西? :P – PaulHanak 2012-03-30 12:44:24

+0

好吧,這很奇怪,我只注意到它只適用於Firefox!當然,它也只適用於窗口大小調整。 div在第一頁加載時都很時髦,但這很容易解決。我不知道,但我更鼓舞人心的是,它似乎只在其他瀏覽器的第一行工作,或者可能只是運氣... – PaulHanak 2012-03-31 03:39:28

0

東西是讓你想比較,並獲得它們的價值這些部門的所有高度,然後確定哪些是最高或最短,這個高度適用於其他地區。例如,使用jQuery,讓我們假設它們都具有類「div_box」

$(document).ready(function(){ 
var tallest = 0;  
$('.div_box').each(function() { 
     if(tallest < this.height()){ 
      tallest = this.height() 
     } 
    }); 
}) 

那麼你可以申請同一高度個個:

$('.div_box').each(function() { 
      this.height() = tallest ; 
}); 

總之應該是這樣的:

$(document).ready(function(){ 
    var tallest = 0;  
    $('.div_box').each(function() { 
      if(tallest < this.height()){ 
       tallest = this.height() 
      } 
     }); 

     $('.div_box').each(function() { 
       this.height() = tallest ; 
    }); 
    }) 

最後,如果你想將它們都壽最短的比較:

$(document).ready(function(){ 
    var shortest = 10000; //just give a big value here 
    $('.div_box').each(function() { 
      if(shortest > this.height()){ 
       shortest = this.height() 
      } 
     }); 
    $('.div_box').each(function() { 
        this.height() = shortest ; 
     }); 


}) 
+0

這不會將每行設置爲該行的最小高度,而是它將所有div設置爲相同的高度,這不是OP希望的。 – GregL 2012-03-30 04:50:18

+0

如此接近埃迪!謝謝。就像格雷格所說,如果我有一個非常高的3行下來,整個第一行是短的,那麼所有這些將被設置爲長,而不是3行下行。謝謝一堆!我喜歡代碼的簡單性,並將其添加到我的代碼片段中。 :) – PaulHanak 2012-03-30 12:51:08

+0

沒問題,我很高興我能幫忙,我對你想要做的事情仍然有點困惑,但是如果我理解得當,如果你不給任何高度的話,他們都會自動獲得最短的高度。我關門了嗎? – multimediaxp 2012-03-31 05:26:40