【问题标题】:Best practice to create such layout?创建此类布局的最佳实践?
【发布时间】:2019-04-16 00:38:03
【问题描述】:

最初我想在 bootstrap 4 中进行此布局,但现在我几乎可以肯定,如果不使用一些技巧,例如将内容加倍然后将其隐藏到移动/桌面或使用 javaScript,这是不可能的。

对于桌面:

+---+---+
| 1 |   |
+---+   +
| 3 |   |
+---+ 2 +
| 4 |   |
+---+   +
| 5 |   |
+--+----+

对于智能手机:

+---+
| 1 |
+---+
| 3 |
+---+
| 2 |
+---+
| 4 |
+---+
| 5 |
+---+

我在使用 Bootstrap 4 时面临的主要问题是列的高度相等,我不知道该怎么处理。 当然,我可以在两个嵌套列中执行此操作,但是我无法按照我想要的方式重新排列顺序。

在 bootstrap 3 中,我可以像示例 #9 中那样执行此操作: https://www.bootply.com/siUcTuNhUy 但是如何在 bootstrap 4 中做到这一点?

请告知我缺少什么。

【问题讨论】:

标签: css twitter-bootstrap


【解决方案1】:

不确定 Bootstrap 中的替代方案,但这可以使用 CSS 网格来完成。

您可以在此处找到带有解决方案的 codepen - https://codepen.io/vishwaovi/pen/RqKaMv?editors=1100


涉及的步骤:

1。将包含元素的父级定义为网格。

HTML

<div class="main">
  <div class="section section1"> 1 </div>
  <div class="section section2"> 2 </div>
  <div class="section section3"> 3 </div>
  <div class="section section4"> 4 </div>
  <div class="section section5"> 5 </div>
</div>

CSS

.main {
   display:grid;
   grid-template-columns: 1fr 1fr; // defining a two column grid
}


2。使 section2 从第 2 列开始并跨越 4 行

.section2{
  grid-column: 2;
  grid-row: span 4;
}


3。移动视图:将网格更改为列,并使 section2 从第 1 列和第 3 行开始

@media (max-width:800px){  
  .main{
    grid-template-columns: 1fr;
  }

  .section2{
    grid-column: 1;
    grid-row: 3 /span 1;
  }
}

【讨论】:

  • Bootstrap 4 将md 限制设置为768px。我认为 - 如果有其他响应式 div 使用 sm/md/lg/xl- 最好设置相同的大小。 (但这是个人意见)
  • 谢谢,我现在正试图做这样的事情,但我的版本看起来并不那么有前途。只有一个问题。我可以以某种方式将小于 800 像素的顺序更改为 1 - 3 - 2 - 4 - 5 吗?
  • 再一次,不知道引导解决方案。但是在 CSS 网格中,您可以定义 section2 和 section3 网格行分别从第 3 行和第 2 行开始
  • 您现在可以查看codepen。我已经进行了更改。(在媒体查询中,我定义了 section2 应该从第 3 行开始)
  • 我没有看到变化,抱歉。也许它在代码盘上的 url 中有一些哈希?
【解决方案2】:

也许这很有用。

为了满足您对智能手机布局的要求,我使用了 flexbox(带有 Bootstrap 4 网格):

.grid .stacked {
  width: 48%
}

.grid .section {
  background: #069;
  margin: 5px auto;
  text-align: center;
  color: #fff;
  WIDTH: 100%;
}

@media (max-width: 575px) {
  .grid .stacked {
    width: 100%
  }
  .stacked .section:nth-child(1) {
    order: 1;
  }
  .stacked .section:nth-child(2) {
    background: #c00;
    order: 3;
  }
  .stacked .section:nth-child(3) {
    order: 2;
  }
  .stacked .section:nth-child(4) {
    order: 4;
  }
  .stacked .section:nth-child(5) {
    order: 5;
  }
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">

<div class="container">
  <div class="grid d-flex flex-wrap">
    <div class="stacked d-flex flex-column">
      <div class="section col-xs-12">1</div>
      <div class="section col-xs-12 d-block d-sm-none">2</div>
      <div class="section col-xs-12">3</div>
      <div class="section col-xs-12">4</div>
      <div class="section col-xs-12">5</div>
    </div>
    <div class="section col-xs-12 col-sm-6 d-none d-sm-block">2</div>
  </div>
</div>

【讨论】:

  • 非常聪明,但如果我做对了,它需要我复制第二个块的内容
  • @Volodymyr 是的。您是否设法以不同的方式订购积木:1、3、2、4、5?
  • 接受的答案 + grid-row-start: 3;为我做这件事
  • @Volodymyr 发布包含grid-row-start: 3; 的答案,以便更多开发人员从中受益。
  • 我会,除非 user195578​​3 今天更新他的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多