【问题标题】:Different height of CSS grid cells [duplicate]CSS网格单元格的不同高度[重复]
【发布时间】:2018-01-29 05:10:34
【问题描述】:

如何上移“内容”和“右”块响应?问题是我不能使用子嵌套网格。我不需要 hacks:没有 margin-top,因为 header 可以是不同的高度。没有 JavaScript。只有纯 CSS。如果可能的话。

现在我的标记看起来像这样:

.wrapper {
  border: 1px solid red;
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-areas:
          "aside header header"
          "left content right";
  grid-gap: 15px;
}

.header, .aside, .left, .content, .right {
  border: 1px solid black;
  padding: 10px;
}

.header {
  grid-area: header;
  height: 30px; /* in real case it's responsive height */
}

.aside {
  grid-area: aside;
  height: 80px; /* in real case it's responsive height */
}

.left {
  grid-area: left;
}

.content {
  grid-area: content;
  background: yellow;
}

.right {
  grid-area: right;
  background: yellow;
}

.left, .content, .right {
  height: 100px; /* in real case it's responsive height */
}
<div class="wrapper">
   <!-- this order should be on mobile -->
   <header class="header">header</header>
   <aside class="aside">aside</aside>
   <div class="left">left</div>
   <div class="content">content</div>
   <div class="right">right</div>
</div>

【问题讨论】:

  • 你能创建 2 个单独的网格吗?一个用于上排,另一个用于下排

标签: html css css-grid


【解决方案1】:

解决方案(仅使用 CSS)是在您的 grid-template-areas: 中添加另一行

.wrapper {
  border: 1px solid red;
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-areas:
          "aside header header"
          "aside content right"
          "left content right";
  grid-gap: 15px;

}

.header, .aside, .left, .content, .right {
  border: 1px solid black;
  padding: 10px;
}

.header {
  grid-area: header;
  height:30px; /* in real case it's responsive height */
}

.aside {
  grid-area: aside;
  height: 80px; /* in real case it's responsive height */
}

.left {
  grid-area: left;
}

.content {
  grid-area: content;
  background: yellow;

}

.right {
  grid-area: right;
  background: yellow;
}

.left, .content, .right {
  height: 100px; /* in real case it's responsive height */
}
<div class="wrapper">
   <!-- this order should be on mobile -->
   <header class="header">header</header>
   <aside class="aside">aside</aside>
   <div class="left">left</div>
   <div class="content">content</div>
   <div class="right">right</div>
</div>

【讨论】:

    【解决方案2】:

    您可以使用这种东西(margin-top)来移动内容并靠近标题。如果这会改变移动设备上的视图并使其混乱,您将需要根据设备创建 2 个视图,并为不同的设备使用不同的 css 值。

    .wrapper {
      border: 1px solid red;
      display: grid;
      grid-template-columns: 1fr 2fr 1fr;
      grid-template-areas:
              "aside header header"
              "left content right";
      grid-gap: 15px;
    }
    
    .header, .aside, .left, .content, .right {
      border: 1px solid black;
      padding: 10px;
    }
    
    .header {
      grid-area: header;
      height: 30px; /* in real case it's responsive height */
    }
    
    .aside {
      grid-area: aside;
      height: 80px; /* in real case it's responsive height */
    }
    
    .left {
      grid-area: left;
    }
    
    .content {
      grid-area: content;
      background: yellow;
      margin-top: -50px;
    }
    
    .right {
      grid-area: right;
      background: yellow;
      margin-top: -50px;
    }
    
    .left, .content, .right {
      height: 100px; /* in real case it's responsive height */
    }
    <div class="wrapper">
       <!-- this order should be on mobile -->
       <header class="header">header</header>
       <aside class="aside">aside</aside>
       <div class="left">left</div>
       <div class="content">content</div>
       <div class="right">right</div>
    </div>

    【讨论】:

    • 感谢您的回答。但是“标题”块的不同高度呢?它也很灵敏。
    • 你说标题可能是响应式的,这是否意味着它可能与用户制作的一样大,或者它是否达到一定高度?
    • 对我来说这不是一个好的解决方案,因为如果标题内容发生变化并且超过 50px,标题和内容就会崩溃。
    【解决方案3】:

    检查一下

        .wrapper {
          border: 1px solid red;
          display: grid;
          grid-template-columns: 1fr 2fr 1fr;
          grid-template-areas:
                  "aside header header"
                  "left content right";
          grid-gap: 15px;
        }
    
        .header, .aside, .left, .content, .right {
          border: 1px solid black;
          padding: 10px;
        }
    
        .header {
          grid-area: header;
          height: 30px; /* in real case it's responsive height */
        }
    
        .aside {
          grid-area: aside;
          height: 80px; /* in real case it's responsive height */
        }
    
        .left {
          grid-area: left;
        }
    
        .content {
          grid-area: content;
          background: yellow;
          float: left;
        }
    
        .right {
          grid-area: right;
          background: yellow;
          float: right;
        }
    
        .left, .content, .right {
          height: 100px; /* in real case it's responsive height */
        }
        <div class="wrapper">
           <!-- this order should be on mobile -->
           <div id="left-side">
             <aside class="aside">aside</aside>
             <div class="left">left</div>
           </div>
    
           <div id="right-side">
             <header class="header">header</header>
    
             <div id="right-side2">
               <div class="content">content</div>
               <div class="right">right</div>
             </div>
           </div>
        </div>

    【讨论】:

    • 他说订单需要保持不变,如果您可以移动DIV,这是一个很好的解决方案。
    • 因缺乏解释而投反对票
    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多