渐变与CSS褪色

Nur*_*lla 13 html css svg linear-gradients css3

我的问题是关于渐变的渐变:渐变 - 从上到下,以及渐变 - 从左到右.

例:

在此输入图像描述

代码是:

background-image: 
  linear-gradient(0deg, rgba(198,83,165,.95) 0%, rgba(198,86,51,.95) 100%),
  linear-gradient(90deg, transparent 50%, rgba(0,0,0,.95) 100%);
opacity: 0.949;
Run Code Online (Sandbox Code Playgroud)

我的结果如下.

在此输入图像描述

如你所见,它不会淡化渐变,它看起来像这个渐变后面的单独图层.有没有其他方法来实现这个?

Har*_*rry 11

正如我在评论中提到的那样,当您在另一个渐变的顶部添加透明图层时,它将仅通过其下方的彩色渐变图层(而不是容器中存在的图像)显示.因此,使用渐变来实现这一点将非常困难(几乎不可能).

您必须使用蒙版图像来实现它.以下是使用SVG掩码的片段.

div {
  position: relative;
  height: 300px;
  width: 500px;
}
div svg {
  position: absolute;
  height: 100%;
  width: 100%;
}
div .grad-fill {
  fill: url(#grad);
  mask: url(#masker);
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <svg viewBox="0 0 500 300" preserveAspectRatio="none">
    <defs>
      <linearGradient id="grad" gradientUnits="objectBoundingBox" gradientTransform="rotate(270,0.5,0.5)">
        <stop offset="0%" stop-color="rgba(198,83,165,.95)" />
        <stop offset="100%" stop-color="rgba(198,86,51,.95)" />
      </linearGradient>
      <linearGradient id="mask-grad" gradientUnits="objectBoundingBox">
        <stop offset="40%" stop-color="black" />
        <stop offset="100%" stop-color="white" />
      </linearGradient>
      <mask id="masker" x="0" y="0" width="500" height="300">
        <rect x="0" y="0" width="500" height="300" fill="url(#mask-grad)" />
      </mask>
    </defs>
    <rect x="0" y="0" width="500" height="300" class="grad-fill" />
  </svg>
  <img src="http://lorempixel.com/500/300/animals/8" />
</div>
Run Code Online (Sandbox Code Playgroud)

您可以在以下链接中找到有关SVG蒙版的更多信息:


这可以使用纯CSS完成,但不幸的mask-image是,目前只有WebKit浏览器支持属性,因此不建议使用此方法.

div {
  position: relative;
  height: 300px;
  width: 500px;
  color: white;
}
div:after,
img {
  position: absolute;
  height: 100%;
  width: 100%;
  top: 0px;
  left: 0px;
  z-index: -1;
}
div:after {
  content: '';
  background-image: linear-gradient(0deg, rgba(198, 83, 165, .95) 0%, rgba(198, 86, 51, .95) 100%);
  -webkit-mask-image: linear-gradient(90deg, transparent 40%, rgb(0, 0, 0) 100%);
}
Run Code Online (Sandbox Code Playgroud)
<div>Some text
  <img src="http://lorempixel.com/500/300/animals/8" />
</div>
Run Code Online (Sandbox Code Playgroud)


val*_*als 5

使用纯CSS创建此效果的一种方法是使用多个径向渐变,并使用每个渐变渐变

在径向渐变后面,它们非常透明,允许它们在它们之间淡入,有一个线性渐变,在右侧提供不透明度(白色).

如果您希望这更精确,可以设置更多的径向渐变,每个渐变渐变覆盖图像的一部分.

.test {
  width: 500px;
  height: 400px;
  border: solid 1px green;
  background: 
  radial-gradient(ellipse 70% 100% at top right, rgba(255,0,0,0.5), transparent),   
               radial-gradient(ellipse 70% 100% at bottom right, rgba(255,0,80,0.5), transparent),
               linear-gradient(to left, white 20%, transparent);
  background-size: 100% 80%, 100% 80%, 100% 100%;
  background-position: top left, left 100%, top left;
  background-repeat: no-repeat;
}

body {
  background-image: url(http://lorempixel.com/500/400/nature);
  background-repeat: no-repeat;
  background-position: 8px 8px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="test"></div>
Run Code Online (Sandbox Code Playgroud)