【问题标题】:Align heights of daughter blocks of different blocks CSS (flex/grid)对齐不同块CSS的子块的高度(flex/grid)
【发布时间】:2018-11-12 21:28:08
【问题描述】:

大家好!我有个问题。我想做与the picture(CLICK and LOOK!!!) 上相同的标记,问题是:同一级别的卡片的顶部和底部之间的灰线应该对齐。正如您在图片中看到的,第一张卡片的轨迹灰线较低,因为第二张图片上的文字较大。而在第二张卡片的轨道上,灰线较高,因为没有溢出的文本。我们可以使用 flex 和 grid。

<div class="cat-cards">
        <div class="cat-card">
            <img src="">
            <div class="short-description">
                short
            </div>
            <div class="long-description">
                long
            </div>
        </div>
        <div class="cat-card"></div>
        <div class="cat-card"></div>
    </div>

我想象的base应该是这样的,但是你可以写任何使用grid和flex的建议

.cat-cards
{
    display: flex;
}

.cat-card
{
    display: grid;
    grid-template-areas: 'image' 'short'
                     'long' 'long';
   }

.cat-card img
{
    grid-area: image;
}

.cat-card .short-description
{
    grid-area: short;
}

.cat-card .long-description
{
    grid-area: long;
}

【问题讨论】:

  • 如果您在问题中添加 CSS 会更有帮助。
  • 根据我的经验,这对于单独使用 CSS 是不可行的,无论是 flex、grid、float 还是任何其他技术。 CSS 语法(子网格)的未来添加可能会改变这种情况,但这是写在星星上的。您将需要使用一些 JS
  • 所有图片的高度都一样吗?
  • 是的,所有图片的尺寸都一样

标签: html css flexbox css-grid


【解决方案1】:

如果我正确解释了您的请求,我相信如果一行的内容高度增加,您希望所有行均等扩展。

示例

.Grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 1fr
}

.cat-card {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 1fr;
  grid-gap: 10px;
  border: 1px solid #ddd;
  padding: 10px;
}

.cat-card img {  
  max-width: 200px;
}

.long-description{
  grid-column: 1 / 3;
  border-top:1px solid #ddd;
}
<div class="Grid">

  <div class="cat-card">
    <img src="https://images.pexels.com/photos/617278/pexels-photo-617278.jpeg?auto=compress&cs=tinysrgb&h=350">
    <div class="short-description">
      Title:1
      <br/>Title:2
      <br/>Title:3
      <br/>Title:4
    </div>
    <div class="long-description">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. 
    </div>
  </div>

  <div class="cat-card">
    <img src="https://images.pexels.com/photos/617278/pexels-photo-617278.jpeg?auto=compress&cs=tinysrgb&h=350">
    <div class="short-description">
      Title:1
      <br/>Title:2
      <br/>Title:3
      <br/>Title:4
      <br/>Title:5
      <br/>Title:6
      <br/>Title:7
      <br/>Title:8
      <br/>Title:9
      <br/>Title:10
    </div>
    <div class="long-description">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. 
    </div>
  </div>

  <div class="cat-card">
    <img src="https://images.pexels.com/photos/617278/pexels-photo-617278.jpeg?auto=compress&cs=tinysrgb&h=350">
    <div class="short-description">
      Title:1
      <br/>Title:2
      <br/>Title:3
      <br/>Title:4
    </div>
    <div class="long-description">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. 
    </div>
  </div>

  <div class="cat-card">
    <img src="https://images.pexels.com/photos/617278/pexels-photo-617278.jpeg?auto=compress&cs=tinysrgb&h=350">
    <div class="short-description">
      Title:1
      <br/>Title:2
      <br/>Title:3
      <br/>Title:4
    </div>
    <div class="long-description">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. 
    </div>
  </div>

</div>

【讨论】:

  • 是的,确实很接近,但我不喜欢猫卡顶部和底部的高度具有相同的值。并且顶部的高度也应该在不同的行中有所不同。所以右上角卡片中溢出的文字不会影响底部卡片的高度。
  • 我觉得还是用.cat-card { grid-template-rows: 1fr; } .long-description { padding: 10px }比较好,解决了卡片上下同高的问题。但是所有顶部块的高度相同
  • @Дарья 使用grid-template-rows 而不是grid-auto-rows 是我通常使用的,但我认为您特别想保持跨行的保持高度!
【解决方案2】:

您的父容器应始终包含display:flex; 语句。这将确保任何孩子也能得到应用。 在包装器内对您的孩子使用 inline flex 参数,并在两者上应用类似于 flex:50% 的内容应该可以解决问题。

您可以在下面找到更多资源,我也会在为您完成工作后编辑代码。

http://flexboxgrid.com/

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

【讨论】:

  • 如果他想使用grid,容器不应该总是包含display:flex,他应该这样做,因为它在示例中是一个二维框架。
  • 您可以在包装器中覆盖它。当使用 flexbox 时,你的父容器应该总是包含它。即使子容器没有,您也可以使用 display: grid OP 提到的覆盖它。 @DreamTeK
猜你喜欢
  • 2011-10-28
  • 2021-08-17
相关资源
最近更新 更多