【问题标题】:Four items in two columns两列四项
【发布时间】:2018-08-15 21:15:05
【问题描述】:

我有这个 HTML

<div class='wrapper'>
 <div class='item-1'>One</div>
 <div class='item-2'>Two</div>
 <div class='item-3'>Three</div>
 <div class='item-4'>Four</div>
</div>

在 CSS 中,我是否可以创建一个两列网格,其中 item-1 和 item-2 位于第一列,而 item-3 和 item-4 位于第二列?

div 的高度是可变的,所以这不是严格的 2x2 网格。

基本上,我希望它看起来像下面的示例,但我没有包装我的物品的奢侈。

谢谢!

.wrapper {
  display:grid;
  grid-template-columns: 1fr 1fr;
}
    <div class='wrapper'>
      <div class='wrapper-1'>
       <div class='item-1' style='height:100px;background-color:red;'>One</div>
       <div class='item-2' style='height:80px;background-color:blue;'>Two</div>
     </div>
     <div class='wrapper-2'>
       <div class='item-3' style='height:40px;background-color:orange;'>Three</div>
       <div class='item-4' style='height:40px;background-color:green;'>Four</div>
      </div>
    </div>

【问题讨论】:

  • 其他SO question 可能会有所帮助,但我的直觉是 flex 布局比网格布局更容易实现这一点……你有这个选项吗? (我都不擅长尝试实际答案,因此发表评论)
  • 这不可能单独使用 CSS 网格,因为它在二维中工作,除非您创建了微型行并且知道您的内容将跨越 N 行。
  • 感谢大家的快速回复。我不相信砌体网格重复的答案是正确的。在那种情况下,声明一个元素可以跨越多少行,但这不是我的情况。我的同事指给我看这个页面。 css-tricks.com/…。我让它使用概述的 flexbox 方法工作......但它确实涉及为容器指定最大高度和为元素指定一些宽度。使用 flex-wrap 它将包裹元素并且看起来正确。感觉有点脏,但在我的情况下确实有效,因为我可以设置最大宽度。
  • @dippas 您能否反映您引用的答案是否真的回答了这个问题?我不相信它有。谢谢。

标签: css css-grid


【解决方案1】:

包装器的 CSS 是正确的。您唯一需要指定的是每个项目应从网格的哪一行开始和结束。

.item-1, 
.item-2{
grid-column: 1/2;
width: 100%;
}

.item-3, 
.item-4{
grid-column: 3/4;
width: 100%;
}

【讨论】:

    【解决方案2】:

    这应该适合您的需求。请注意,包装器需要具有明确的高度才能使列包装,否则它将无休止地扩展。

    .wrapper {
      display: flex;
      flex-flow: column wrap;
      height: 200px;
    }
    
    .item {
      width: 50%;
    }
    
    .i-1 {
      height: 100px;
      background-color: green;
    }
    
    .i-2 {
      height: 80px;
      background-color: red;
    }
    
    .i-3 {
      height: 40px;
      background-color: blue;
    }
    
    .i-4 {
      height: 40px;
      background-color: yellow;
    }
    <div class='wrapper'>
     <div class='item i-1'>One</div>
     <div class='item i-2'>Two</div>
     <div class='item i-3'>Three</div>
     <div class='item i-4'>Four</div>
    </div>

    【讨论】:

    • div 的高度是可变的,所以这不是严格的 2x2 网格。
    • 这可能不起作用。根据代码,item1 和 item2 具有不同的高度
    • 对于我实际需要的场景,我认为这是一个很好的解决方案。我有兴趣知道是否还有其他方法。除非我遗漏了什么,否则我不相信 CSS Grid / Masonry 解决方案是完全正确的。似乎它必须是具有固定高度和列环绕的 Flexbox。幸运的是,我可能可以使用 max-height 并覆盖一个范围,这样我的物品就可以增长一点(但不是一吨)。
    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多