CSS 带图像叠加的背景渐变

CSS background gradient with image overlay

只是一个非常快的问题,我遇到了一些麻烦 - 即背景 css 元素的排序。

我有以下内容:

background-color: #3C3E89; /* For browsers that do not support gradients */
background: -webkit-linear-gradient(#3C3E89, #6265E4); /* For Safari 5.1 to 6.0 */
background: -o-linear-gradient(#3C3E89, #6265E4); /* For Opera 11.1 to 12.0 */
background: -moz-linear-gradient(#3C3E89, #6265E4); /* For Firefox 3.6 to 15 */
background: linear-gradient(#3C3E89, #6265E4); /* Standard syntax */
background-image: url('../images/logo.png');
background-size: cover;

出于某种原因,png - 尽管它具有透明层 - 覆盖了我希望它所在的线性渐变。

我有点扎根,想看看正确的方法是什么,尝试过,但没有成功。我想知道是否有人有一种久经考验的方法可以在渐变背景上叠加 png...

我相信每个人都会对我尖叫说这是一个重复的问题 - 但除非我遗漏了什么,否则我无法成功实施他们的建议。

更新:

我也试过以下方法:

background-image:
  -webkit-linear-gradient(#3C3E89, #6265E4), /* For Safari 5.1 to 6.0 */
  -o-linear-gradient(#3C3E89, #6265E4), /* For Opera 11.1 to 12.0 */
  -moz-linear-gradient(#3C3E89, #6265E4), /* For Firefox 3.6 to 15 */
  linear-gradient(#3C3E89, #6265E4), /* Standard HTML Syntax */
  url('../images/logo.png');

还有...

background:
  -webkit-linear-gradient(#3C3E89, #6265E4), /* For Safari 5.1 to 6.0 */
  -o-linear-gradient(#3C3E89, #6265E4), /* For Opera 11.1 to 12.0 */
  -moz-linear-gradient(#3C3E89, #6265E4), /* For Firefox 3.6 to 15 */
  linear-gradient(#3C3E89, #6265E4), /* Standard HTML Syntax */
  url('../images/logo.png');

您正在通过设置 background-image 覆盖背景。相反,您需要使用多个背景:

background-image: url('../images/logo.png'), linear-gradient(#3C3E89, #6265E4);

根据documentation,背景是从最近到最远绘制的。所以在你的情况下,图像应该首先绘制在渐变上。

线性渐变的行为类似于 background-image,因为您也可以使用此语法:

.content {
  background-image: linear-gradient(#3C3E89, #6265E4);
  height:200px;
}
<div class="content">
</div>

这就是为什么您的 CSS 背景图像规则会覆盖它。相反,您需要像这样指定多个背景:

.content {
  height: 200px;
  background: linear-gradient(#3C3E89, rgba(98, 101, 228, 0.21)), url(https://lorempixel.com/200/100/);
}
<div class="content">
</div>

您应该注意订单。在我的示例中,渐变位于图像上方,因为它是 first 并且我添加了一些不透明度以便能够看到图像。如果您使用没有透明度的纯色 and/or 图像,您将只能看到 第一个 背景。