多个透明背景图像

Multiple transparent background images

我有两个背景 jpeg 图片,它们在我网站的整个左右边框上垂直重复。

这是我的代码:

.gradients {
background-image: url("outer-gradient.jpg"), url("outer-gradient-horizontal-flip.jpg");
background-position: top left, top right;
background-repeat: repeat-y;
}

<body>
  <div class="gradients">
    <div> website content in here </div>
  </div>
</body>

这是它的样子:

left and right background images

我需要一种使这两个 jpeg 透明的方法。

请不要建议我只使用 CSS 渐变,我不能使用 CSS 渐变,因为使左右图像保持原样所需的颜色复杂性。这些 jpeg 有数百种颜色,比任何 CSS 渐变都更丰富。

我见过通过在其前面或后面添加不透明度 div 使单个背景图像透明的方法。当我有两个背景图像时,如何为我的 .gradient div 执行此操作?

我可以想到几个方法:

  1. 您应该将它们放在单独的 div 中,并将这些 div 放在主容器/包装器下面。您可以 css 相应地放置它们。
  2. 您可以使用允许透明度渐变的实际 .png 图像
  3. 您可以使用在一个文件中已经具有渐变和所需背景颜色的背景图像。然后你可以让它 background-repeat: repeat-y;和背景大小:包含。

I need a way to make both of these jpegs transparent.

因为你不能简单地将 opacitygradients div,这也会影响网站内容,你可以使用伪元素,就像这样,这将不影响网站内容

.gradients {
  position: relative;
  padding: 0 60px;         /*  for this demo, push the content off the image  */
}
.gradients::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 50px;             /*  width of your jpg file  */
  height: 100%;
  background-image: url(http://placehold.it/50/00f);
  background-position: top left;
  background-repeat: repeat-y;
  opacity: 0.5;
  z-index: -1;
}

.gradients::after {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  width: 50px;             /*  width of your jpg file  */
  height: 100%;
  background-image: url(http://placehold.it/50/f00);
  background-position: top right;
  background-repeat: repeat-y;
  opacity: 0.5;
  z-index: -1;
}
<body>
  <div class="gradients">
    <div>
      website content in here<br>
      website content in here<br>
      website content in here<br>
      website content in here<br>
      website content in here<br>
      website content in here<br>
    </div>
  </div>
</body>

我不确定这是什么意思:

These jpegs have hundreds of colors for a richer gradient than any CSS Gradient could make.

如果可以在 Photoshop 中制作它们,则可以在 CSS 中制作渐变。根据定义,渐变是数百种颜色,因为它从一种颜色过渡到另一种颜色(可能还有另一种颜色)。您分享的屏幕截图 绝对 可以使用 CSS 渐变进行复制。

但是,既然您要求排除这种可能性,我建议您使用 24 位 PNG 而不是 JPG。 24 位 PNG 有一个 alpha 透明通道,可以让您完全控制它们的整体透明度以及每个像素的透明度。此时没有 background-transparency 属性,因此无法使用您拥有的 HTML 标记和 CSS.[=16 来完成您想要完成的任务=]

第三个选项是使用 div 和 opacity 作为背景:

<div class="gradients"></div>
<div>Website content here</div>
html { height: 100%; }

body { min-height: 100%; position: relative; margin: 0; }

.gradients {
  background-image: url('left.jpg'), url('right.jpg');
  background-position: top left, top right;
  background-repeat: repeat-y;
  bottom: 0;
  left: 0;
  opacity: .5;
  position: absolute;
  top: 0;
  right: 0;
}

Codepen Link,用 CSS 渐变,因为我没有你的 JPG 资源,但效果是一样的。