【问题标题】:Bootstrap Using Row & Col with Angular List OrderingBootstrap 使用 Row & Col 和 Angular 列表排序
【发布时间】:2018-04-14 02:11:17
【问题描述】:

在 bootstrap 和 angular 中是否有办法将列表拆分为这样的列,请注意它会将前 4 个条目放入第一列,然后再填充第二列。

a     e
b     f
c     g
d     h

这是我的示例代码,它没有按所需的顺序排列它们:

<div class="row">
    <div class="col-6" *ngFor="let item of ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']">
        {{ item }}
    </div>
</div>

像这样的输出,你可以看到字母的顺序不正确,它是逐行做的:

a     b
c     d
e     f
g     h

【问题讨论】:

    标签: angular bootstrap-4


    【解决方案1】:

    响应式地拆分阵列将非常困难。一种更简单的方法是使用 Bootstrap 4 card-columns 而不是网格列。这将使数据从上到下排序并分成列。那么你只需要一个 CSS 媒体查询就可以在更大的屏幕上拥有 3 列而不是 2 列。

    <div class="card-columns">
         <div ng-repeat='item in items'>
             {{$index+1}} {{ item.name }}
         </div>    
    </div>
    
    .card-columns {
        column-count: 2;
    }
    
    @media (min-width: 768px) {
        .card-columns {
            column-count: 3;
        }
    }
    

    https://www.codeply.com/go/3UBWN6Hc3k

    【讨论】:

      【解决方案2】:

      您不希望列上的 for 循环,您只需要 两个 列。

      因此,您希望在列 inside 的内容上使用 for 循环,而在 first 列中您想要列表的前半部分 (i &lt;= items.length / 2)

      second 列中您想要列表的后半部分 (i &gt; items.length / 2)

      let items: Array<string> = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
      
      <div class="row">
          <div class="col-md-6">
              <div  *ngFor="let item of items; let i = index">
                  <span *ngIf="i < items.length/2">{{ item }}</span>
              </div>
          </div>
              <div class="col-md-6">
                  <div  *ngFor="let item of items; let i = index">
                      <span *ngIf="i >= items.length/2">{{ item }}</span>
                  </div>
              </div>
          </div>
      </div>
      

      更新 - 响应式

      PLUNKER DEMO

      HTML

      <ul>
        <li *ngFor="let item of items">{{item}}</li>
      </ul>
      

      CSS

      /* Any media less than 300px screen width will shrink into a 1 column list  */
      
      @media screen and (min-width: 300px) {
        ul {
          column-count: 2;
          column-gap: 0;
          width: 100%;
          list-style-type: none;
          padding: 0;
        }
      }
      @media screen and (min-width: 992px) {
        ul {
          column-count: 3;
          column-gap: 0;
          width: 100%;
          list-style-type: none;
          padding: 0;
        }
      }
      
      li {
        display: inline-block;
        width: 100%;
        text-align: center;
      }
      

      【讨论】:

      • 这很好用,谢谢 :) 知道如何让它也响应,所以在较小的设备上我想要 2 列 col-6 和更大的我想要对 3 列使用 col-4?
      • 当然没问题很乐意帮忙。是的,给我一点时间来更新我的答案
      • @Smartie 所以那个人是个思想家,但我还在努力
      • @Smartie 我相信我有您的响应答案,请查看更新后的答案。我什至在 Plunker 上发布了它的演示并将其链接到我的答案中。一个缺点是这是一个 css 解决方案,而不是使用引导程序的网格系统
      • 非常感谢,这正是我所需要的,我已经使用了 media-breakpoint-only(md) 等,而不是确切的大小:)
      【解决方案3】:
      let listItems: string[] = ['a', 'b', 'c', 'd', 'e', 'f','g'];
      
      <div class="row">
        <ng-container *ngFor="let item of listItems; let i = index">
          <div *ngIf="i < listItems.length/2" class="col-6">
              {{ item }}
          </div>
          <div *ngIf="i >= listItems.length/2" class="col-6">
              {{ item }}
          </div>
        </ng-container>
      </div>
      

      【讨论】:

      • 这与我给出的示例的输出相同,但不是所需的顺序。
      • 您之前编辑过那里的内容?为什么要改变你的问题然后告诉我我错了?
      • 您的早期代码中没有任何模运​​算符,而且您在 ngFor 循环中使用了一个数组
      • 阅读编辑历史,我只是更改了措辞以尝试更好地解释我的问题,基本问题是相同的。感谢您尝试帮助我:)
      • 我已经更新了这个应该有效的答案,我误读了你想要的
      猜你喜欢
      • 2015-12-20
      • 2021-09-17
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2018-05-20
      • 2016-11-09
      相关资源
      最近更新 更多