使用 CSS 网格的两栏报纸布局

Posted

技术标签:

【中文标题】使用 CSS 网格的两栏报纸布局【英文标题】:Two-Column Newspaper Layout with CSS Grid 【发布时间】:2021-03-19 01:15:06 【问题描述】:

我有 CSS 网格来生成两列布局。但问题是它不是每列中的顶部对齐内容。

例如,在第二列中,最后一个元素应该与另一个第二列元素顶部对齐但向上对齐。

body>div 
  display: grid;
  grid-template-columns: 50% 50%;
  grid-template-rows: auto auto;
  grid-auto-flow: column;
  /* https://codepen.io/maddesigns/pen/oZGWRN */
  /* https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow */


body>div>div:nth-of-type(1) 
  height: 300px;


body>div>div:nth-of-type(2) 
  height: 100px;


body>div>div:nth-of-type(3) 
  height: 200px;
<div style="">
  <div style="background:red">
    1
  </div>
  <div style="background:green;">
    2
  </div>
  <div style="background:yellow">
    3
  </div>
  <div style="background:pink">
    4
  </div>
</div>

我无法在此布局中使用 flex,因为我想在不定义容器高度的情况下实现此布局。 column-count:2 在不定义容器高度的情况下工作,但我不能使用 div 重新排序。

所以我使用 CSS 网格,因为 div 重新排序仍然可用(例如/即order:–1; 效果很好)并且它会自动划分要放入两列中的每一列。

【问题讨论】:

参见此处:css-tricks.com/… - 对于没有 CSS Grid 的替代解决方案,请参见此处:css-tricks.com/guide-responsive-friendly-css-columns 【参考方案1】:

网格完全按照预期运行,以保持秩序和对称。我可以建议并排使用 2 个网格来实现您正在寻找的内容。这是我为证明这一点而制作的一个示例:

.left
  display: grid;
  grid-template-rows: auto auto;
  grid-auto-flow: column;
  width: 50%;
  float: left;
  /* https://codepen.io/maddesigns/pen/oZGWRN */
  /* https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow */


.right
  display: grid;
  grid-template-rows: auto auto;
  grid-auto-flow: column;
   width: 50%;
  /* https://codepen.io/maddesigns/pen/oZGWRN */
  /* https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow */


.left>div:nth-of-type(1) 
  height: 300px;


.left>div:nth-of-type(2) 
  height: 100px;


.right>div:nth-of-type(1) 
  height: 200px;


.right>div:nth-of-type(2) 
  height: 50px;
<div class="left" style="">
  <div style="background:red">
    1
  </div>
  <div style="background:green;">
    2
  </div>
</div>
  
<div class="right">
  <div style="background:yellow">
    3
  </div>
  <div style="background:pink">
    4
  </div>
</div>

【讨论】:

谢谢。这看起来很棒。可悲的是,这不会让我在左右之间重新排序项目。例如,我需要 javascript 将 3 移动到位置 1。【参考方案2】:

事实上,在能够自动缩小差距的 CSS 技术问世之前,CSS 通常没有解决方案。像这样的事情可能需要重排文档,所以我不确定它会有多大用处或效率。

来源:https://***.com/a/45200955/1625909

【讨论】:

以上是关于使用 CSS 网格的两栏报纸布局的主要内容,如果未能解决你的问题,请参考以下文章

小程序中的网格布局

小程序中的网格布局

自适应的两栏布局

3.1.3 QFormLayout表单布局(窗体布局)

CSS Grid 网格布局

CSS网格布局(Grid)教程