移动Web浏览器中线性渐变不起作用

7

我正在编写一款移动Web应用程序,想请教有经验的人帮助我理解和修复这些线性渐变(linear-gradients),以便它们能在 Safari-mobileAndroid-browser 上正常工作。

我相信我已经正确地使用了每个供应商前缀,并提供了回退背景颜色,但无论何时在移动设备上查看应用程序时,应用程式背景应用渐变的元素是透明的。换句话说,背景是透明的,渐变不会在移动设备上显示出来。这意味着连后备颜色也没有起到作用。

更奇怪的是,在模拟器中它们(渐变)在Android和上都可以显示出来。

有人能否帮助我修复这些渐变,使它们能在桌面和移动设备上正常工作,并教我如何做有效的回退背景颜色和背景图片?

非常感谢任何和所有的帮助!

以下是我目前所拥有的:

background:#fff;
background:transparent -ms-linear-gradient(top, rgba(255,255,255,.65), rgba(255,255,255,.9));
background:transparent url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxsaW5lYXJHcmFkaWVudCBpZD0iaGF0MCIgZ3JhZGllbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHgxPSI1MCUiIHkxPSIxMDAlIiB4Mj0iNTAlIiB5Mj0iLTEuNDIxMDg1NDcxNTIwMmUtMTQlIj4KPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwLjY1Ii8+CjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwLjkiLz4KICAgPC9saW5lYXJHcmFkaWVudD4KCjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJ1cmwoI2hhdDApIiAvPgo8L3N2Zz4=);
background:transparent -o-linear-gradient(90deg, rgba(255,255,255,.65) 0%, rgba(255,255,255,.9) 100%);
background:transparent -moz-linear-gradient(90deg, rgba(255,255,255,.65) 0%, rgba(255,255,255,.9) 100%);
background:transparent -webkit-gradient(linear, 0%, 0%, 0%, 100%, from(rgba(255,255,255,.65), to(rgba(255,255,255,.9));
background:transparent -webkit-linear-gradient(90deg, rgba(255,255,255,.65) 0%, rgba(255,255,255,.9) 100%);
background:transparent linear-gradient(90deg, rgba(255,255,255,.65) 0%, rgba(255,255,255,.9) 100%);

提前感谢您!


如果即使您的纯色备用方案也没有出现,那么浏览器可能“认为”正在应用其中一种渐变,但无法正确呈现。也许尝试除了特定设备上的一个渐变之外,删除所有渐变(例如,在移动Safari上仅尝试-webkit-linear-gradient()),看看是否呈现。 - daGUY
@daGUY 我尝试过仅使用-webkit-linear-gradient(),然后又尝试了-webkit-gradient,并且两者都产生了相同的结果。似乎浏览器认为它正在正确显示这两个内容,但实际上并不是这样。 - IrfanM
请记住,在标记的问题上加点。 - Jorge
4个回答

8
这应该适用于所有浏览器(甚至移动端),我刚刚测试了一下:
#element {
    background: -moz-linear-gradient(black, transparent); /* FF 3.6+ */  
    background: -ms-linear-gradient(black, transparent); /* IE10 */  
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #000000), color-stop(100%, #ffffff)); /* Safari 4+, Chrome 2+ */  
    background: -webkit-linear-gradient(black, transparent); /* Safari 5.1+, Chrome 10+ */  
    background: -o-linear-gradient(black, transparent); /* Opera 11.10 */  
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#000000', endColorstr=transparent); /* IE6 & IE7 */  
    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#000000', endColorstr=transparent)"; /* IE8+ */  
    background: linear-gradient(black, transparent); /* the standard */  
    z-index: 1;
}

以下是两个有关浏览器CSS的好网站:

希望对您有所帮助!


我所做的只是用我的起始颜色和结束颜色替换了颜色,但它并没有起作用(现在在桌面和移动浏览器中都得到了透明填充)。我有一种感觉这是由于我的颜色是rgba值造成的。我想我要回到使用透明png图像作为背景... - IrfanM
很高兴能帮上忙,在我刚刚更新的fiddle中,我使用了你需要的透明度。 - Luis
Sanchez,哦好的,谢谢你提供的代码示例。这对解释如何创建一个从颜色到透明的渐变非常有帮助 :-) - IrfanM
@user1518176 没问题,记得如果解决方案对你有帮助可以点赞,这样我们就可以互相帮助。欢迎来到stackoverflow! - Luis
@FarzadA 抱歉耽擱了,還沒有解決嗎?你使用的是哪種瀏覽器? - Luis
@Luis Android 2.3.6 上的默认安卓浏览器 - Farzad A

5

在 iOS 14.4 中,使用Firefox和Chrome时,透明关键字仍然适用。这个修复方案有效。 - Kevin

1

我加上 transparent 关键字的唯一原因是为了覆盖回退的背景颜色,如果渐变方法之一被接受。我移除了这个关键字,但仍然得到相同的结果。在手机上是透明度而不是渐变。 - IrfanM

0
我通过使用'backgroundImage'而不是'backgroundColor'来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接