CSS3从透明到白色的渐变渲染问题

omtl5h9j  于 2022-12-24  发布在  CSS3
关注(0)|答案(5)|浏览(318)

我在跨浏览器渲染CSS3渐变时遇到了问题。当我试图创建一个从透明色到白色的渐变时,就会出现这种情况。
用于测试的文件是:http://f.cl.ly/items/0E2C062x3O161b09261i/test.html
使用的CSS为:

background-image: linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,1) 100%);
background-image: -o-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,1) 100%);
background-image: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,1) 100%);
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,1) 100%);
background-image: -ms-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,1) 100%);

租借看起来像我在Safari 6(mac)中想要的:

Chrome渲染在褪色为白色之前会褪色为灰色(Firefox在Mac OS上也是这样渲染的):

有什么想法或建议,为什么这个奇怪的渲染可能是?

wmomyfyw

wmomyfyw1#

我也遇到过这种情况,我不知道为什么会这样,但我在自己的项目中使用了以下方法:

background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.001) 0%, #fff 5%, #fff 100%);

不要给Chrome一个“透明”的值,而是给予它一个非常非常接近透明的值。
编辑:我忘了发布一个链接到我自己的version,它在Chrome 21(Windows 7)中的渲染效果和预期的一样。

aamkag61

aamkag612#

我粘贴在这里的CSS是错误的,我编辑了错误的文件DOH!

原始CSS不工作

background-image: linear-gradient(top, transparent 0%, #fff 5%, #fff 100%);
background-image: -o-linear-gradient(top, transparent 0%, #fff 5%, #fff 100%);
background-image: -moz-linear-gradient(top, transparent 0%, #fff 5%, #fff 100%);
background-image: -webkit-linear-gradient(top, transparent 0%, #fff 5%, #fff 100%);
background-image: -ms-linear-gradient(top, transparent 0%, #fff 5%, #fff 100%);

修复问题的CSS

background-image: linear-gradient(top, rgba(255,255,255,0) 0%, #fff 5%, #fff 100%);
background-image: -o-linear-gradient(top, rgba(255,255,255,0) 0%, #fff 5%, #fff 100%);
background-image: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, #fff 5%, #fff 100%);
background-image: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%, #fff 5%, #fff 100%);
background-image: -ms-linear-gradient(top, rgba(255,255,255,0) 0%, #fff 5%, #fff 100%);

透明的问题不在于颜色,而在于阿尔法值为0的黑色,设置为阿尔法值为0的白色可以解决这个问题。
这仍然与浏览器供应商处理CSS3渐变中alpha透明度的方式不一致。

h9a6wy2h

h9a6wy2h3#

使用白色以外的颜色(实际上是白色)的技巧是**rgba正在褪色的实际颜色**。

background-image: linear-gradient(to right, 
  rgba(111,174,249, 0) 0%,
  rgba(111,174,249, 0) 80%,
  rgb (111,174,249)    100%);
y53ybaqx

y53ybaqx4#

在本机IOS上也会遇到同样的问题:

  1. iOS White to Transparent Gradient Layer is Gray
  2. https://betterprogramming.pub/the-proper-way-of-creating-a-transparent-gradient-layer-in-ios-b082daa866b1layer-is-gray
    我注意到CSS的解决方案是使用白色而不是黑色,然后添加0透明度
rgb(255 255 255/0)
1mrurvl1

1mrurvl15#

我最近也遇到了同样的问题,关于safari的透明度,对我有效的方法是把css替换成编译好的safari css。
这对我没用

background-image: linear-gradient(to top, rgba(56,56,56,1) 5%, rgba(255,255,255,0.001) 100%)

这对我确实有效

background-image: linear-gradient(0deg,#383838 5%, hsla(0, 0%, 20%, 0) 100%)

相关问题