使用介质断点复制Bootstrap flexbox网格系统

时间:2018-09-11 12:47:29

标签: css sass bootstrap-4

我希望从Bootstrap复制flexbox网格系统。除了媒体查询部分之外,其他所有功能都很好。 这些列很好地水平堆叠,但是当激活特定的媒体断点时,我想将div堆叠在新行上。

我想我可以使用jQuery来做到这一点,但我想尝试首先使用纯css来实现。我试图查看Bootstrap的源文件,但没有太多意义。

.row {
  overflow: hidden;
  display: flex;
  width: 100%;
  background-color: burlywood;
  height: auto; 
}

.row > .col {
  padding: 14px;
  border: 2px solid black;
  flex: 1 1 auto; 
}

.col-md-4 {
  padding: 14px;
  border: 2px solid black;
  flex: 1 1 33.33333%; 
  
  @media (max-width: 768px) {
    .col-md-4 {
      //code wanted
  }
}
<div class="row">
    <div class="col-md-4" style="background-color:burlywood;">MyColumn 1</div>
    <div class="col-md-4" style="background-color:chartreuse;">MyColumn 2</div>
    <div class="col" style="background-color:crimson;">MyColumn 3</div>
    <div class="col" style="background-color:crimson;">MyColumn 4</div>
</div>

内联样式仅用于测试目的。

1 个答案:

答案 0 :(得分:2)

您在另一个css规则中包含了媒体查询声明。

一个简单的解决方案是更改.row本身的堆叠方向。

编辑:

如果您只是想学习,那很好。但是,如果要在生产环境中使用它,我建议您从引导程序中仅复制网格定义,而不要重新发明轮子。

此外,要知道引导程序首先是移动的。您最初的示例不是。我在下面添加的是flex-wrap和通配符*的{​​{1}}属性。那是最神奇的东西。

box-sizing
*{box-sizing: border-box;} /* borders will break your layout without this */
.row {
  display: flex;
  width: 100%;
  background-color: burlywood;
  height: auto;
  flex-wrap: wrap; /*this is how columns 'wrap' on smaller devices */
}

.row>.col {
  padding: 14px;
  flex: 1 1 auto;
}

.col-md-4 {
  padding: 14px 0;
  border: 2px solid black;
  width: 100%;
}

@media (min-width: 768px) {/*bootstrap uses media queries for larger screens, not smaller */
  .col-md-4 {
    -webkit-box-flex: 0;
    -ms-flex: 0 0 33.333333%;
    flex: 0 0 33.333333%;
    max-width: 33.333333%;
  }
}