具有固定高度和水平滚动的HTML列布局

时间:2013-07-08 02:20:32

标签: javascript html css horizontal-scrolling fixed-width

对于一个Android项目,我需要显示一个动态加载内容的视图(WebView)。 内容项将是<div class="content-item">标记,在页面加载后由JavaScript添加到<div class="content-holder">

设计如下:

  • 列表项
  • 内容项目将以固定宽度列排列。内容项目的高度不一定相同。
  • 任何列的高度不得超过屏幕高度。如果列已满,则会在下一列中放入其他内容(如有必要,请创建列)。没有空列。列不得在内容项内部中断。
  • 页面应可水平滚动(许多固定宽度的列),但不能垂直(高度不超过页面)。

关于如何使用css,javascript实现的任何想法?

1 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/B4RPJ/

您可以遍历内容项,检查它们是否适合列,如果不符合,则创建一个新列并将其余项目移动到新列...就像这样:

$(".content-item").each( function() {
    // iterate the content items and see if the bottom is out of the container
     var bottom = $(this).position().top + $(this).height();
    if ( bottom > $(this).parent().height() ) {
        // shift it and following content items to new column
        columnShift( $(this) );
    }
} );

function columnShift( el ) {
    var parent = el.parent();
    var container = $(".content-container");

    // create a new column
    var newCol = $("<div class='content-holder'></div>");

    // get the content items that don't fit and move them to new column
    el.nextAll(".content-item").appendTo( newCol );
    el.prependTo( newCol );

    // widen the parent container
    container.width( container.width() + parent.width() );

    // add the new column to the DOM
    parent.after( newCol );
}

使用html

<div class="content-container">
    <div class="content-holder">
        <div class="content-item"></div>
        <div class="content-item"></div>
        <div class="content-item"></div>
        <div class="content-item"></div>
        <div class="content-item"></div>
    </div>
</div>

包含任意数量的.content-item div,包含任意数量的内容

的css
.content-holder {
    float: left;
    width: 300px;
    height: 300px;
    border: 1px solid #000000;
    overflow: hidden;
    margin: 5px;
    padding: 10px;
}

.content-item {
    max-height: 280px;
    overflow: hidden;
}

我确信你可以让代码更聪明,但这应该是一个开始