在网格布局中添加了数字元素的额外差距

时间:2018-04-01 02:52:40

标签: html css css3 figure css-grid

我看到额外的空间被添加到网格元素,导致元素未对齐但无法弄清楚它的来源(边距,元素的填充无效,网格元素对齐以垂直和水平开始)。

编辑:我试图将包装尺寸限制为820x410,这确实消除了间隙。我知道网格列被拉伸以填充包装div。虽然这可以解决问题,但我仍然不明白额外的垂直间隙来自何处。

pixel perfect images inside figure elements

样式:

#wrapper {
    display: grid;
    grid-template-rows: 2fr;
    grid-template-columns: 2fr repeat(2, 1fr);
    grid-column-gap: 10px;
    grid-row-gap: 10px;
    justify-items: start;
    align-items: start;
}
#wrapper * {
    margin: 0;
    padding: 0;
}
figure {
    display: block;
    vertical-align: bottom;
    line-height: 0;
}
figure img {
    display: block;
    vertical-align: bottom;
    line-height: 0;
}
#wrapper {
    width: 860px;
}
#wrapper>figure:first-child {
    grid-area: 1 / 1 / 3 / 2;
}

布局:

<div id="wrapper">
    <figure id="element1">
        <img src="http://placehold.it/400x410" />
    </figure>
    <figure id="element2">
        <img src="http://placehold.it/200x200" />
    </figure>
    <figure id="element3">
        <img src="http://placehold.it/200x200" />
    </figure>
    <figure id="element4">
        <img src="http://placehold.it/200x200" />
    </figure>
    <figure id="element5">
        <img src="http://placehold.it/200x200" />
    </figure>
</div>

1 个答案:

答案 0 :(得分:1)

您需要在width: 100%中添加img

为什么?

因为您的包装器为860px,并且您有2列,平均分为grid-gap 10px,因此每列将有420px + 10pxgrid-gap水平,总共430px,但您的图片只有400px宽,因此左列中有20px的空间,右列中有10px,因为它是分开的在210px

的两个小列中

您的解决方案是应用width:100%中的img来始终填充列height:100%(如果您想像我的代码那样使用响应)

#wrapper {
  display: grid;
  grid-template-rows: 2fr;
  grid-template-columns: 2fr repeat(2, 1fr);
  grid-gap: 10px
}

#wrapper * {
  margin: 0;
  padding: 0;
}

figure {
  border: 1px dotted red
}

figure img {
  display: block;
  vertical-align: bottom;
  line-height: 0;
  width: 100%;
  height: 100%
}

#wrapper {
  max-width: 860px;
}

#wrapper>figure:first-child {
  grid-area: 1 / 1 / 3 / 2;
}
<div id="wrapper">
  <figure id="element1">
    <img src="http://placehold.it/400x410" />
  </figure>
  <figure id="element2">
    <img src="http://placehold.it/200x200" />
  </figure>
  <figure id="element3">
    <img src="http://placehold.it/200x200" />
  </figure>
  <figure id="element4">
    <img src="http://placehold.it/200x200" />
  </figure>
  <figure id="element5">
    <img src="http://placehold.it/200x200" />
  </figure>
</div>