【问题标题】:Always keeping 3 divs in a row?总是连续保持 3 个 div?
【发布时间】:2013-06-30 13:08:49
【问题描述】:

我在对齐 div 时遇到问题。 我在一个容器中有 5 个 div,全部向左浮动,如下图所示。

每个 div 的宽度为 425px,div 与容器之间的边距始终为 15px,容器的宽度为 1350px。

然后我还有一个 onclick JS 函数,它可以将点击的 div 扩展为看起来像第二张图片。

这适用于前两个 div,因为第三个只是被推离边缘。 但是,当我打开第三个 div 时,它会落在下一行并在右上角留下一个间隙(参见第三张图片)。

我想知道是否有人对如何用第四个 div 填补这个空白有任何想法,因为排序无关紧要,所以有一个完整的顶行。 (见第四张图)

感谢您的帮助。

【问题讨论】:

  • 为什么不制作一个偏移 div - 在这种情况下,与其他没有内容填充空间的 div 相同?
  • 这是你的设计,但如果我是用户看到这个,我会觉得奇怪的是,我点击一张图片来展开它,然后它移动到其他地方并被我没有交互的东西所取代与。

标签: css html alignment containers


【解决方案1】:

您可以测试该框是否是连续的最后一个,如果是,则将其与下一个框交换。像这样:

http://jsfiddle.net/DomDay/PExXd/

css:

.container {
    width: 340px
}

.box {
    float: left;
    width: 100px;
    height: 80px;
    border: 1px solid #000;
    margin: 0 10px 10px 0;
}

.box.expanded {
    width: 212px;
}

html:

<div class="container">
    <div class="box">content 1</div>
    <div class="box">content 2</div>
    <div class="box">content 3</div>
    <div class="box">content 4</div>
    <div class="box">content 5</div>
    <div class="box">content 6</div>
    <div class="box">content 7</div>
    <div class="box">content 8</div>
    <div class="box">content 9</div>
</div>

jquery:

$('.box').click( function() {

    // if things have been swapped about, undo it
    swapped = $('.box.swapped');
    swapped.insertBefore( swapped.prev() ).removeClass('swapped');

    //remove expanded
    $('.box.expanded').removeClass('expanded');

    // swap boxes if it's the last box in a row
    clicked = $(this);
    if ( clicked.position().left > 200 ) {
        clicked.addClass('swapped').insertAfter( clicked.next() );
    }

    clicked.addClass('expanded');

} );

【讨论】:

    【解决方案2】:

    这里有一个解决方案。我试图让它看起来像你在你提供的图像中展示它的方式。要展开单击元素,要删除展开,只需再次单击同一元素(我假设这就是您计划设计的方式)。编辑:包括限制只有一个元素在给定时刻进行扩展的功能。看看吧!

    http://jsfiddle.net/jccJs/10/

    $('#container > div').click(expand);
    
    function global_remove_expand_except(barring) {
        $('.exp').each(function (i, cur) {
            if (cur !== barring) {
                remove_expand($(cur));
            }
        });
    }
    
    function remove_expand($elem) {
        $elem.removeClass('exp');
        if ($elem.hasClass('swapped')) {
            $elem.removeClass('swapped');
            swap_back($elem);
        }
    }
    
    function expand() {
        global_remove_expand_except(this);
        var $this = $(this);
        if ($this.hasClass('exp')) {
            remove_expand($this);
        } else {
            $(this).addClass('exp');
            if (!(($.makeArray($this.parent().children()).indexOf(this) + 1) % 3)) {
                swap($this);
                $this.addClass('swapped');
            }
        }
    }
    
    function swap($elem) {
        var after = $elem.next();
        $elem.next().remove();
        $elem.before($(after).click(expand));
    }
    
    function swap_back($elem) {
        var before = $elem.prev();
        $elem.prev().remove();
        $elem.after($(before).click(expand));
    }
    

    HTML

    <div id="container" class="cf">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
    </div>
    

    CSS

    *{
        margin:0;padding:0;
    }
    
    /*clearfix credits: http://nicolasgallagher.com/micro-clearfix-hack/*/
    .cf:before,
    .cf:after {
        content: " "; /* 1 */
        display: table; /* 2 */
    }
    
    .cf:after {
        clear: both;
    }
    #container{
        width:350px;
        border:3px solid red;
    }
    
    #container > div{
        float:left;
        position:relative;
        width:100px;
        height:35px;
        border:3px solid black;
        margin:5px;
        text-align:center;
    }
    
    #container > div.exp{
        background-color:grey;
        width:216px;
        border-color:transparent;
    }
    
    #container > div.exp:after{
        position:absolute;
        top:20%;
        left:18%;
        content:"expansion";
    }
    

    【讨论】:

      【解决方案3】:

      对于容器,尝试将 CSS 显示设置为表格,如下所示:

      display:table;
      

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 2020-12-03
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 2015-09-27
        相关资源
        最近更新 更多