【问题标题】:Using multiple CSS gradients使用多个 CSS 渐变
【发布时间】:2015-09-12 17:29:59
【问题描述】:

我想创建一个使用 CSS 渐变渐变的彩虹效果。

纵向,我要彩虹效果:

background: linear-gradient(to bottom, red, orange, yellow, green, blue, violet);

水平方向,我想要渐变效果:

background: linear-gradient(to right, rgba(1,1,1,1), rgba(1,1,1,0));

我最初的想法是有两个divs,外层是透明的,内层是彩虹的,但透明度被吞没了。然后我想到外部元素上的background 不是使这项工作有效的原因。必须是 filter 才能使该模式起作用。

所以要么我需要弄清楚如何使filter 使用渐变(可能是我可以拉伸的SVG?),或者我需要使用单个<div>,其background 以某种方式考虑到两者线性渐变。我更喜欢后者,因为它更简单。

这些都可能吗?

更新

看着How to add multiple css gradient as a multiple background? 看起来我应该能够做到:

background: linear-gradient(to right, rgba(1,1,1,1), rgba(1,1,1,0)), linear-gradient(to bottom, red, orange, yellow, green, blue, violet);

这让我很接近,但水平渐变不会导致垂直渐变获得透明度;相反,它会导致它从黑色变为完全可见。

.rainbow {
  height: 200px;
  background: linear-gradient(to right, rgba(1,1,1,1), rgba(1,1,1,0)), linear-gradient(to bottom, red, orange, yellow, green, blue, violet);
}
<div class='rainbow'></div>

我还注意到,在第一个渐变中,rgba() 中的前三个值无关紧要——只有 alpha 才重要。我不知道该怎么做。

【问题讨论】:

标签: css


【解决方案1】:

.rainbow {
  height: 200px;
  background: linear-gradient(to right, rgba(255, 255, 255, 0.7), rgba(1, 1, 1, 0)), linear-gradient(to bottom, red, orange, yellow, green, blue, violet);
}
<div class='rainbow'></div>

【讨论】:

  • 您可以将背景优先级与渐变相关联,它可以模拟不透明的视觉。
  • 啊,我的问题是我认为rgba() 的前三个参数是介于 0 和 1 之间的浮点数,而不是介于 0 和 255 之间的值。谢谢!假设背景是白色的,这是可行的。为了在任何背景下工作,可能必须涉及一些 javascript。
  • 不。想一想,您的背景是洋红色,那么您需要在那边应用洋红色的 rgba 代码,并将最后的不透明度设置为您想要的任何内容。没有 JS,它会给你的渐变带来舒缓的效果。
  • 是的,我的意思是要让它在任何背景下工作,你必须弄清楚父级的背景颜色是什么。它仍然不适用于在屏幕上移动的绝对 div,显示它背后的内容 - 这是我需要它做的 - 但无论如何我已经改变了我的方法,使用单独的 1px div。这使我可以使 div 呈波浪状,而不是直线。
【解决方案2】:

Check this Out

当您可以将 gradient generator 用于 css 背景时,复杂性会降低。方便且易于使用。有些事情最好不要偷懒。

彩虹{

background: red; /* not working, let's see some red */
background: -moz-linear-gradient( top ,
    rgba(255, 0, 0, 1) 0%,
    rgba(255, 255, 0, 1) 15%,
    rgba(0, 255, 0, 1) 30%,
    rgba(0, 255, 255, 1) 50%,
    rgba(0, 0, 255, 1) 65%,
    rgba(255, 0, 255, 1) 80%,
    rgba(255, 0, 0, 1) 100%);
background: -webkit-gradient(linear,  left top,  left bottom, 
    color-stop(0%, rgba(255, 0, 0, 1)), 
    color-stop(15%, rgba(255, 255, 0, 1)),
    color-stop(30%, rgba(0, 255, 0, 1)),
    color-stop(50%, rgba(0, 255, 255, 1)),
    color-stop(65%, rgba(0, 0, 255, 1)),
    color-stop(80%, rgba(255, 0, 255, 1)),
    color-stop(100%, rgba(255, 0, 0, 1)));
}

【讨论】:

  • 您可以使用opacity:0.3 来提高元素的透明度
  • 这将使整个事情变得透明。我希望它具有渐变透明度:左侧不透明逐渐变为右侧透明。
  • 你说的是动画吗?
  • 不,除非动画是单帧长并且达到我想要的效果。运行帖子中的代码sn-p,想象一下,彩虹不是变成黑色,而是变成透明的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2023-03-12
  • 2015-04-05
相关资源
最近更新 更多