【问题标题】:Image misalignment issues with CSS gridCSS网格的图像错位问题
【发布时间】:2018-12-09 17:29:11
【问题描述】:

我一直在寻找一段时间,但我找不到似乎有效的答案。

我有一些卡片,里面有两张图片。

卡片内的图像略有不同的纵横比 - 这会留下一些不需要的空白和不均匀的水平间距。本质上,我该如何摆脱它? :)

这里有一个codepen 来帮助更好地解释它。

最好的方法是声明所有东西的高度和某种缩放方法吗?

main {
  display: grid;
  grid-template-columns: 1fr;
  grid-auto-rows: auto;
  grid-gap: 0.5em;
}

.card {
  display: grid;
  place-items: center;
  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 5px;
}

.card-image-profile {
  display: block;
  width: 100%;
  height: auto;
}

.card-image-department {
  padding: 0.25rem;
  max-width: 70%
}

@media only screen and (min-width: 400px) {
  main {
    grid-template-columns: 1fr 1fr;
  }
}

@media only screen and (min-width: 500px) {
  main {
    grid-template-columns: 1fr 1fr 1fr;
  }
}

@media only screen and (min-width: 700px) {
  main {
    grid-template-columns: 1fr 1fr 1fr 1fr;
  }
  .card-image-department {
    max-width: 100%
  }
}

@media only screen and (min-width: 900px) {
  main {
    grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
  }
}

@media only screen and (min-width: 1100px) {
  main {
    grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
  }
}
<main>
  <div class="card">
    <img src="http://via.placeholder.com/350x150" class="card-image-profile">
    <img src="http://via.placeholder.com/200x60" class="card-image-department">
  </div>
  <div class="card">
    <img src="http://via.placeholder.com/359x150" class="card-image-profile">
    <img src="http://via.placeholder.com/200x60" class="card-image-department">
  </div>
  <div class="card">
    <img src="http://via.placeholder.com/345x150" class="card-image-profile">
    <img src="http://via.placeholder.com/200x60" class="card-image-department">
  </div>
  <div class="card">
    <img src="http://via.placeholder.com/357x150" class="card-image-profile">
    <img src="http://via.placeholder.com/200x62" class="card-image-department">
  </div>
  <div class="card">
    <img src="http://via.placeholder.com/350x150" class="card-image-profile">
    <img src="http://via.placeholder.com/200x60" class="card-image-department">
  </div>
</main>

由于图像尺寸略有不同,卡片之间的间距不一致。

【问题讨论】:

    标签: html css image css-grid


    【解决方案1】:

    此代码可能会解决您的问题,但如果没有,请告诉我。

    main {
      display: grid;
      grid-template-columns: 1fr;
      grid-auto-rows: auto;
      grid-gap: 0.5em;
    }
    
    .card {
      display: grid;
      place-items: center;
      box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
      border: 1px solid rgba(0, 0, 0, 0.2);
      border-radius: 5px;
    }
    
    .card-image-profile {
      display: block;
      width: 100%;
      height: 109px;
    }
    
    .card-image-department {
      padding: 0.25rem;
      //max-width: 70%;
      max-width: 100%;
      display: block;
      width: 100%;
    }
    
    @media only screen and (min-width: 400px) {
      main {
        grid-template-columns: 1fr 1fr;
      }
    }
    
    @media only screen and (min-width: 500px) {
      main {
        grid-template-columns: 1fr 1fr 1fr;
      }
    }
    
    @media only screen and (min-width: 700px) {
      main {
        grid-template-columns: 1fr 1fr 1fr 1fr;
      }
      .card-image-department {
        //max-width: 100%;
      }
    }
    
    @media only screen and (min-width: 900px) {
      main {
        grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
      }
    }
    
    @media only screen and (min-width: 1100px) {
      main {
        grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
      }
    }
    <main>
      <div class="card">
        <img src="http://via.placeholder.com/350x150" class="card-image-profile">
        <img src="http://via.placeholder.com/200x60" class="card-image-department">
      </div>
      <div class="card">
        <img src="http://via.placeholder.com/359x150" class="card-image-profile">
        <img src="http://via.placeholder.com/200x60" class="card-image-department">
      </div>
      <div class="card">
        <img src="http://via.placeholder.com/345x150" class="card-image-profile">
        <img src="http://via.placeholder.com/200x60" class="card-image-department">
      </div>
      <div class="card">
        <img src="http://via.placeholder.com/357x150" class="card-image-profile">
        <img src="http://via.placeholder.com/200x62" class="card-image-department">
      </div>
      <div class="card">
        <img src="http://via.placeholder.com/350x150" class="card-image-profile">
        <img src="http://via.placeholder.com/200x60" class="card-image-department">
      </div>
    </main>

    我刚刚更改了 3 个课程: 第一个:

    .card-image-department {  
      padding: 0.25rem; 
      //max-width: 70%;
      max-width: 100%;
      display: block;
      width: 100%;
     }
    

    第二个是:

    .card-image-profile{
      display: block;
      width: 100%;
      height: 109px;
    }
    

    最后一个只是注释@Media类中的代码:

    @media only screen and (min-width: 700px) {
      main {
        grid-template-columns: 1fr 1fr 1fr 1fr;
      }
      .card-image-department {
        //max-width: 100%;
      }
    }
    

    【讨论】:

    • 代码是如何解决问题的?提问者做错了什么?请在 Stack 上解释你的答案,不要只是转储代码
    • 亲爱的朋友,如果您不满意,我会添加一些额外的信息。我想我可以解释更多。
    【解决方案2】:

    您只需将 card-image-department 的宽度和高度设置为 100%。您将最大宽度设置为 70%,应该将其删除。

    .card-image-department {
      padding: 0.25rem;
      width: 100%;
      height: 100%;
    }
    

    【讨论】:

      【解决方案3】:

      如果你想删除图像之间的空间,你应该删除 .card-image-department 类中的 padding 属性。对于水平空间,它应该已经与place-items居中:center;在卡类里,我看不出怎么会不平。

      【讨论】:

        猜你喜欢
        • 2023-01-14
        • 2020-02-17
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 2015-06-21
        • 1970-01-01
        相关资源
        最近更新 更多