【问题标题】:duplicate the Bootstrap flexbox grid system with media breakpoints使用媒体断点复制 Bootstrap flexbox 网格系统
【发布时间】:2018-09-11 12:47:29
【问题描述】:

我希望从 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>

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

【问题讨论】:

  • 为什么不直接使用Bootstrap 4 grid only CSS
  • 因为我正在尝试制作自己的框架,该框架更针对我的自定义控件(标签助手)。唯一剩下的就是 flexbox 网格

标签: css sass bootstrap-4


【解决方案1】:

您在另一个 css 规则中拥有媒体查询声明。

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

编辑:

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

除此之外,要知道引导程序首先是移动设备。你原来的例子不是。我在下面添加的是flex-wrap 和通配符* 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%;
  }
}
<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-md-4" style="background-color:crimson;">MyColumn 3</div>
</div>

【讨论】:

  • 嗯,是的。但是所有的孩子不会水平堆叠吗?或者我可以在单个元素上设置方向吗?
  • 修改了我的答案。
  • 感谢这是朝着正确方向迈出的一步。我想我必须尝试一些事情。我正在考虑使用 jQuery 从媒体断点上的 flex 容器中删除元素,并将它们插入行下方。不性感,但我想它会做的工作
  • 我强烈反对这样做,但我真的不知道你的目标是什么。
  • 例如,我希望所有带有 MD 断点的 col 都垂直堆叠在 flexbox 中所有较低断点的元素下方。 Wrap 有点用,但并不完美。我想保持 flex-wrap: nowrap 所以剩下的 col 保持一致。解释得很糟糕,但是是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2019-03-28
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多