css 使元素占两列

tez616oj  于 2022-12-20  发布在  其他
关注(0)|答案(3)|浏览(161)

我试着用css来实现砖石建筑风格,列布局如下图所示。
我想知道是否有可能使.green一个采取两个列,而不是一个?
先谢谢你!

.parent{
    column-gap: 1rem;
    column-count: 2;
}
.element{
  display:inline-block;
  background:red;
  width:100%;
  height:100px;
}

.green{
  background:green;
}
<div class="parent">

  <div class="element green">
  </div>
  
  <div class="element">
  </div>
  
  <div class="element">
  </div>
  
  <div class="element">
  </div>
  
</div>
nxowjjhe

nxowjjhe1#

对于CSS网格,您可以使用grid-column: span 2

.wrapper {
  display: grid;
  grid-gap: 0.5rem;
  grid-template-columns: 1fr 1fr 1fr;
  grid-auto-flow: dense;
  padding: 0.5rem;
}

.box {
  background-color: lightblue;
  padding: 0.5rem;
}

.a,
.d,
.e,
.f {
  background-color: lightcoral;
  grid-column: span 2;     /* <-- here is the trick */
}
<div class="wrapper">
  <div class="box a">A</div>
  <div class="box b">B</div>
  <div class="box c">C</div>
  <div class="box d">D</div>
  <div class="box e">E</div>
  <div class="box f">F</div>
  <div class="box g">G</div>
  <div class="box h">H</div>
</div>

在此了解更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column
石方 * 砌体 * 风格:在撰写本文时,CSS网格布局规范的级别3包括grid-template-columnsgrid-template-rows布局的masonry值,尽管浏览器支持几乎不存在:https://caniuse.com/?search=masonry
在这里了解:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Masonry_Layout
所以我在网格上使用了grid-auto-flow: dense;,这使得网格项G出现在网格项F之前。这不是真正的 * 砖石 * 风格(根据可用的垂直空间将元素放置在最佳位置),但它通过使网格 * 密集 * 填充所有可用的水平空间来接近。
"密集"填充算法尝试填充格网中较早的孔洞
在这里了解:https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow
哦,如果你是CSS网格的新手,我推荐你看Wes Bos的演讲"CSS网格45分钟!":https://www.youtube.com/watch?v=DCZdCKjnBCs

5jvtdoz2

5jvtdoz22#

CSS网格布局提供了一个简单、方便、高效的解决方案。

.parent {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 100px;
  grid-gap: 1rem;
}

.element.green {
  grid-column: 1 / -1;
  background: green;
}

.element {
  background: red;
}
<div class="parent">
  <div class="element green"></div>
  <div class="element"></div>
  <div class="element"></div>
  <div class="element"></div>
</div>

更多信息:

368yc8dk

368yc8dk3#

我会说,不,你不能让一个. green元素占据两列,因为你是特别告诉浏览器使用两列。如果你需要它跨越两列,那么我建议使用一个单独的元素。也许一个更合适的解决方案是使用CSS网格布局。下面的代码片段包含了这两种解决方案的一个例子:

.parent {
  column-gap: 1rem;
  column-count: 2;
}

.element {
  display: inline-block;
  background: red;
  width: 100%;
  height: 100px;
}

.green {
  background: green;
  width: 100%;
  height: 100px;
  margin-bottom: 1rem;
}

.grid-container {
  margin-top: 20px;
  display: grid;
  grid-template-columns: auto auto;
  grid-gap: 1rem;
}

.greenGrid {
  background: green;
  height: 100px;
  grid-column-start: 1;
  grid-column-end: 3;
}

.redGrid {
  background: red;
  height: 100px;
}
<div class="green">
</div>


<div class="parent">


  <div class="element">
  </div>

  <div class="element">
  </div>

  <div class="element">
  </div>

</div>

<div class='grid-container'>
  <div class='greenGrid'></div>
  <div class='redGrid'></div>
  <div class='redGrid'></div>
  <div class='redGrid'></div>
</div>

相关问题