【问题标题】:How can I get a background-image to be spanned over a grid-layout如何让背景图像跨越网格布局
【发布时间】:2019-04-08 06:23:15
【问题描述】:

我有一个网格布局,比如说 2 行,第一行 2 列,第二行 3 列。它们之间有 10px 的网格间隙。 给每个网格一个背景图像是没有问题的。但是,如果我希望它们都具有从左上角网格开始并继续/跨越到右下角网格的相同背景图像怎么办。所有网格上的一个大背景图像,仅由白色网格间隙隔开。

html,
body {
  height: 100%;
}
.grid {
  display: grid;
  height: 100%;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(2, 1fr);
  grid-gap: 10px;
}

.grid_cell_one {
  grid-column: 1 / span 3;
  grid-row: 1 / span 1;
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
}

.grid_cell_two {
  grid-column: 4 / span 3;
  grid-row: 1 / span 1;
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
}

.grid_cell_three {
  grid-column: 1 / span 2;
  grid-row: 2 / span 1;
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
}

.grid_cell_four {
  grid-column: 3 / span 2;
  grid-row: 2 / span 1;
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
}

.grid_cell_five {
  grid-column: 5 / span 2;
  grid-row: 2 / span 1;
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
}
<div class="grid">
  <div class="grid_cell_one">
  </div>
  <div class="grid_cell_two">
  </div>
  <div class="grid_cell_three">
  </div>
  <div class="grid_cell_four">
  </div>
  <div class="grid_cell_five">
  </div>
</div>

【问题讨论】:

  • jsfiddle.net/z059p8sd/1 ... 我想要的是后面的一个大背景图像,而不是每个网格单元的相同背景。但网格间隙仍然可见。

标签: html css css-grid


【解决方案1】:

想法是考虑background-attachement:fixed,但背景将不再跟随滚动:

html,
body {
  height: 100%;
  margin:0;
}

.grid {
  display: grid;
  height: 100%;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(2, 1fr);
  grid-gap: 10px;
}

.grid>* {
  background-image: url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg");
  background-size: cover;
  background-repeat: no-repeat;
  background-attachment: fixed;
}

.grid_cell_one {
  grid-column: 1 / span 3;
  grid-row: 1 / span 1;
}

.grid_cell_two {
  grid-column: 4 / span 3;
  grid-row: 1 / span 1;
}

.grid_cell_three {
  grid-column: 1 / span 2;
  grid-row: 2 / span 1;
}

.grid_cell_four {
  grid-column: 3 / span 2;
  grid-row: 2 / span 1;
}

.grid_cell_five {
  grid-column: 5 / span 2;
  grid-row: 2 / span 1;
}
<div class="grid">
  <div class="grid_cell_one">
  </div>
  <div class="grid_cell_two">
  </div>
  <div class="grid_cell_three">
  </div>
  <div class="grid_cell_four">
  </div>
  <div class="grid_cell_five">
  </div>
</div>

另一个想法是在网格容器上考虑多个背景,您将在其中用白色(或背景中使用的任何颜色)填充空白。

为网格项添加了透明层以更好地说明

html,
body {
  height: 100%;
  margin:0;
}

.grid {
  display: grid;
  height: 100%;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(2, 1fr);
  grid-gap: 10px;
  background: 
    /*middle horizontal line*/
    linear-gradient(#fff,#fff) center/100% 10px,
    /*top vertical line*/
    linear-gradient(#fff,#fff) top center/10px 50%,
    /*bottom lines*/
    linear-gradient(#fff,#fff) calc(1*100%/3 - 3px) 100%/10px 50%,
    linear-gradient(#fff,#fff) calc(2*100%/3 + 3px) 100%/10px 50%,
    /*main background*/
    url("https://cdn.pixabay.com/photo/2017/01/08/21/11/wood-1963988__340.jpg") center/cover;
  background-repeat:no-repeat;
}

.grid>* {
  background: rgba(255, 255, 0, 0.2);
  /*to illustrate*/
}

.grid_cell_one {
  grid-column: 1 / span 3;
  grid-row: 1 / span 1;
}

.grid_cell_two {
  grid-column: 4 / span 3;
  grid-row: 1 / span 1;
}

.grid_cell_three {
  grid-column: 1 / span 2;
  grid-row: 2 / span 1;
}

.grid_cell_four {
  grid-column: 3 / span 2;
  grid-row: 2 / span 1;
}

.grid_cell_five {
  grid-column: 5 / span 2;
  grid-row: 2 / span 1;
}
<div class="grid">
  <div class="grid_cell_one">
  </div>
  <div class="grid_cell_two">
  </div>
  <div class="grid_cell_three">
  </div>
  <div class="grid_cell_four">
  </div>
  <div class="grid_cell_five">
  </div>
</div>

您可以查看此链接以获取有关使用的不同值的更多详细信息:Using percentage values with background-position on a linear gradient

【讨论】:

  • 嗨 Temani Afif,我只需要选项 A,背景附件:固定就可以了。当我们使用它在欢迎屏幕上显示公司数据时,不需要滚动。坦克很多人!
  • 只是好奇,background-attachement:fixed 如何将图像跨越整个容器?谁能解释一下?
  • @AbhinandanKhilari background-attachment:fixed 会将背景作为屏幕的参考,因此您没有一个图像,但每个项目都有自己的背景,因为它们都将具有相同的背景参考他们将创建一个连续的
  • @Termani 谢谢,这意味着 background-attachment:fixed 的工作方式与 position:fixed 类似,将屏幕作为参考点,对吧?
  • @AbhinandanKhilari 是的,没错,顺便说一句,代码也可以修改为对每个元素使用伪元素并使它们位置:固定,我们得到相同的效果。
【解决方案2】:

使您的 Grid-Background 透明并将父级的背景图像设置为所需的。

LG 反转录

【讨论】:

  • 您好 RedTek,感谢您的帮助。如果我这样做jsfiddle.net/z059p8sd/2 我得到了这个 bis 背景图像,但我不会再看到我的网格间隙了。我希望它看起来有点像相册,但只有一张照片横跨。所以网格间隙应该仍然是可见的和白色的。除了使用网格布局之外,还有其他方法可以实现这一点吗?
猜你喜欢
  • 2020-04-15
  • 1970-01-01
  • 2013-07-06
  • 2023-03-25
  • 2019-05-01
  • 1970-01-01
  • 2012-04-18
  • 2016-11-29
  • 2012-02-01
相关资源
最近更新 更多