【问题标题】:CSS Grid: Don't expand grid itemsCSS Grid:不要扩展网格项
【发布时间】:2018-02-06 16:16:43
【问题描述】:

我正在为移动设备和桌面设备创建设计。在移动设备上,所有元素都堆叠在一起。在桌面上时,元素位于 2 列中。元素在移动设备和桌面设备上的顺序不同。

我想用 CSS 网格来创建它。

HTML

<div class="grid-release">
    <div class="gi-cover">cover</div>
    <div class="gi-detail">detail</div>
    <div class="gi-head">head </div>
    <div class="gi-desc">desc</div>
    <div class="gi-media">media</div>
    <div class="gi-comment">comment</div>
</div>

CSS

.grid-release {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto;
    grid-template-areas:
    "head"
    "cover"
    "detail"
    "desc"
    "media"
    "comment";
    grid-gap: 10px;
}

.grid-release .gi-cover {
    grid-area: cover;
    background-color: red;
}
.grid-release .gi-detail {
    grid-area: detail;
    background-color: yellow;
}

.grid-release .gi-head {
    grid-area: head;
    background-color: cyan;
}
.grid-release .gi-desc {
    grid-area: desc;
    background-color: chartreuse;
}
.grid-release .gi-media {
    grid-area: media;
    background-color: orange;
}

.grid-release .gi-comment {
    grid-area: comment;
    background-color: darkkhaki;
}

@media screen and (min-width: 400px) {
    .grid-release {
        grid-template-columns: 1fr 2fr;
        grid-template-rows: auto;
        grid-template-areas:
        "cover head"
        "detail desc"
        ". media"
        ". comment"; 
    }
}

... 结果:

https://jsfiddle.net/q3hpr0ak/

这是我的问题。当在桌面上并且封面网格项展开时,头部网格项也会展开。

https://jsfiddle.net/z5jhewhb/1/

当detail grid item展开时,desc grid item也会展开

https://jsfiddle.net/Lh2y2pzp/2/

等等……

显然,这会创建一个非常丑陋的布局。 我开始认为 CSS 网格可能是错误的方法。 我需要指导。我整个上午都在玩这个,但没有成功。

【问题讨论】:

  • 如果你想让左侧项目的高度独立于同一行的右侧项目,这与网格的设计目的几乎完全相反
  • @FacundoCorradini 你建议我应该使用什么?我有点卡住了......

标签: html css grid-layout css-grid


【解决方案1】:

如果您想让左侧项目的高度独立于同一行上的右侧项目,这与网格的设计目的几乎完全相反。

实际上任何其他布局都会做得更好。例如,这里使用了 flexbox,所以我们可以设置元素的顺序。

请务必添加

    align-items:flex-start;

所以它们不会拉伸以匹配旁边的 div

https://jsfiddle.net/q3hpr0ak/2/

如您所见,将移动设备的 flex-flow 从列(一个在另一个之上)切换到桌面的行换行允许轻松切换布局,而“order”属性和一些简单的边距保证每个项目是正确的。

【讨论】:

  • 看看会发生什么,在桌面上,当覆盖网格区域扩大时,头部也扩大......jsfiddle.net/yu1xb1q1/2另外,如果你注意到我的问题,桌面和移动上的网格区域有不同订购
  • @Marco 您可以将顺序设置为您想要的任何内容。在我的示例中,我将头部从第三个切换到第二个,以为您可以自己找出其余部分。无论如何,只需将我的答案编辑为您想要的确切顺序
  • 至于展开,头部不展开,间距是。如果你想要完全独立的左右列......那么你应该使用精确的:独立的左右div,然后根据需要布置内部项目。但是到那时,您将失去项目定位的灵活性
  • 我需要完全独立的左右列。将左侧网格区域半空是没有意义的,因为右侧区域之一会扩展……反之亦然。从我所见,网格和弹性盒解决方案几乎可以工作,但不是我想要的方式。我觉得一个非常基本的问题没有解决方案
  • @Marco 当您需要移动未知高度的项目顺序时,它不再是一个非常基本的问题。 CSS 充满了非常基本的东西,应该比它们简单一百万倍,但我不认为这是其中之一
【解决方案2】:

我只是再想一想……结果再简单不过了:桌面使用好的 ol' floats,移动设备使用 flex,这样您就可以根据需要重新订购商品:

@media screen and (min-width: 700px) {
  .container { display:block; }
  .cover, .detail{ width:33%; }
  .head, .desc, .media, .comment { width:66%; float:right; }
}

https://jsfiddle.net/q3hpr0ak/3/

检查 jsfiddle,我认为这次它会正常工作;)

【讨论】:

  • 哇!你永远不会放弃,对吗? Mil gracias,amigo,por toda tu ayuda。
【解决方案3】:

这里真正的挑战是标题位置的变化。您可以使用最简单的网格,即 1fr - 2fr 左右两列,每列各 1 行,如果您有一个已知高度标题可用于下一项的边距。

@media screen and (min-width: 700px) {
  .container{
    grid-template-columns:1fr 2fr;
    grid-template-rows:1fr;
    grid-template-areas:"left right";
  } 

https://jsfiddle.net/xoob00kn/

【讨论】:

  • 感谢您的奉献。我可能不得不重新考虑我的布局,以便它可以与网格和/或 flexbox 一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多