我有一个元素网格,点击后会展开以显示其下方的表格。它工作正常,但它按照我下面的插图重新排列 DIV 的位置。

我需要他们在他们的“专栏”中保持他们各自的位置。

为了清楚起见,下面是插图:

这是我的 HTML 代码:

<div
class="item-component"
ng-controller="CollapseCtrl"
ng-repeat="component in components.components | filter : components.filterByFilter | filter : searchText"
>

<div class="component-wrapper" ng-click="isCollapsed = !isCollapsed">
    Item - click to expand
</div>

<div class="codes-wrapper" collapse="isCollapsed">
    <table class="table table-striped table-condensed">
        Expanded content here
    </table>
</div>
</div>

这是 .item-component 类:
.item-component {
  width: 33.33333333333333%;
  float: left;
  padding-left: 15px;
}

我将如何在我的插图中达到“预期结果”?

最佳答案

display:inline-block 上使用 float:left 而不是 .item-component
Living Demo

.item-component {
  width: 33.33333333333333%;
  display: inline-block;
  padding-left: 15px;
}

或者,您可以查看 BootStrap 并通过使用 :before 元素来维护 float:left ,就像之前一样。
您还需要包装每一行:
.col{
    float:left;
    width: 32.33%;
    min-height: 50px;
    background: #ccc;
    padding: 20px;
    box-sizing: border-box;
}
.row{
    display:block;
}
/* This do the trick */
.row:before{
    content: " ";
    display: table;
    box-sizing: border-box;
    clear: both;
}

Living example

更新
如果您不想要间隙,您将不得不寻找另一个 HTML 标记。您必须首先打印每一列的每一行。

这是所需的 html 标记:
<div class="col">
    <div class="row" id="demo">1</div>
    <div class="row">4</div>
    <div class="row">7</div>
</div>

<div class="col">
    <div class="row">2</div>
    <div class="row">5</div>
    <div class="row">8</div>
</div>

<div class="col">
    <div class="row">3</div>
    <div class="row">6</div>
    <div class="row">9</div>
</div>

以及所需的 css:
.col{
    float:left;
    width: 32.33%;
}
.row{
   display:block;
   padding: 20px;
   box-sizing: border-box;
   background: #ccc;
   min-height: 50px;
}
#demo{
    height: 150px;
    background: red;
}

Living demo

关于javascript - DIV 在扩展时自行重新排序 - 我如何保持相同的顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21779673/

10-13 00:38