如何进行响应式列换行?

时间:2018-10-02 13:16:49

标签: css responsive-design

我对表格设计的要求是: 像这样“在没有剩余空间的情况下,列需要换行”

a1 b1
a2 b2
.. ..
.. bm
an 

视口较小,“表格”需要包装到

a1
..
an
b1
..
bm

可以有更多列,而不仅仅是2。

我尝试使用CSS Grid和Flexbox,但无法实现我想做的事情。有任何想法吗?

此处不允许使用表标签:( CSS Grid最好。.但是....

我目前的想法是这样的:https://codepen.io/GEdelmann/pen/BqorwY 但是,当您必须处理动态内容时,它会遇到困难。

3 个答案:

答案 0 :(得分:1)

您始终可以使用Bootstrap网格系统。

OR

获取一些Flexbox snippets

概念证明here

HTML

<ul class="flex-container">
  <li class="flex-item">1</li>
  <li class="flex-item">2</li>
  <li class="flex-item">3</li>
  <li class="flex-item">4</li>
  <li class="flex-item">5</li>
  <li class="flex-item">6</li>
</ul>

CSS

.flex-container {
  padding: 0;
  margin: 0;
  list-style: none;

  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;

  -webkit-flex-flow: row wrap;
  justify-content: space-around;
}

.flex-item {
  background: tomato;
  padding: 5px;
  width: 200px;
  height: 150px;
  margin-top: 10px;

  line-height: 150px;
  color: white;
  font-weight: bold;
  font-size: 3em;
  text-align: center;
}

答案 1 :(得分:0)

根据您想要的布局,并以类似的网格模板区域格式给出示例。通过设置媒体查询以相应地更改网格模板区域,您可以完成从列出的2列到1列的操作。我注意到1列示例中缺少a2和b2,因此我假设您希望在屏幕尺寸小于X数量时将它们删除。我使用您的示例输入了一个快速的代码笔,并实现了根据您的示例描述格式化块的目标。您可以在媒体查询中随意移动块。

https://codepen.io/skazx/pen/ReWeBP

@media (max-width: 600px) {
    .wrapper{
        grid-template-columns: 1fr;
        grid-template-areas: 
        "a1"
        "."
        "an"
        "b1"
        "."
        "bm"
    }
    .a2{
        display: none;
    }
    .b2{
        display: none;
    }
}

答案 2 :(得分:0)

只需将列项目包装在div内,并将所有内容包装在flexbox或网格容器内。

示例:https://codepen.io/antekai/pen/NOGEYB?editors=1100

HTML

FLEXBOX SOLUTION

<div class="flex-container">
  <div>
    <div class="item">a1</div>
    <div class="item">a2</div>
    <div class="item">a3</div>
  </div>
  <div>
    <div class="item">b1</div>
    <div class="item">b2</div>
    <div class="item">b3</div>
  </div>
</div>

CSS GRID SOLUTION

<div class="grid-container">
  <div>
    <div class="item">a1</div>
    <div class="item">a2</div>
    <div class="item">a3</div>
  </div>
  <div>
    <div class="item">b1</div>
    <div class="item">b2</div>
    <div class="item">b3</div>
  </div>
</div>

CSS

//flexbox solution
.flex-container{
  display:flex;
  flex-flow:row wrap;
}
// CSS Grid solution
.grid-container{
  display:grid;
  grid-template-columns: repeat(auto-fit,minmax(200px,1fr))
}
//helper class
.item{
  height:100px;
  width:200px;
  background-color: black;
  color:white;
  margin:10px;
}

编辑

在以下链接中,您可以找到增强的解决方案,以解决物品高度不相等的情况。对于flexbox解决方案,基于动态JS的增强,对于CSS网格,基于静态CSS的增强。增强的逻辑是相同的:添加一个高度等于各个项目之间的高度差的空项目(例如,当a1-b1> 0时,b1之后的空项目的高度= a1-b1,这导致a2和b2的垂直对齐) )。 flexbox增强的解决方案可以扩展到CSS网格解决方案,反之亦然。

示例:https://codepen.io/antekai/pen/OBMyqv

注意:对于基于JS的增强功能(flexbox解决方案),当您在断点之间调整视口大小(400px)时,只需键入任何内容(至html,css或js面板),以便Codepen刷新实时重新加载。