CSS渐变在iOS上不起作用

Posted

技术标签:

【中文标题】CSS渐变在iOS上不起作用【英文标题】:CSS gradient not working on iOS 【发布时间】:2013-05-29 14:29:00 【问题描述】:

我使用 CSS 生成器创建了一个 gradient background。这在所有主要浏览器和 android 上都能完美运行。但是在 ios 中我得到this。

我需要在这个渐变中添加什么才能使其在 iOS 上运行?

编辑:因为这个问题没有引起足够的重视,所以我想问一个不同的问题:我需要什么 css 标签才能为 safari/ios 创建线性渐变,当,在这种情况下,-webkit-linear-gradient 不起作用?是否还有其他 css 渐变标签,专门用于 safari?

这是我的背景代码:

.gradient 
/* Legacy browsers */
background: #FF7701 url("gradient-bg.png") repeat-x top;
-o-background-size: 100% 100%;
-moz-background-size: 100% 100%;
-webkit-background-size: 100% 100%;
background-size: 100% 100%;
/* Internet Explorer */
*background: #FF7701;
background: #FF7701\0/;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="gradient-bg.png", sizingMethod="scale");

@media all and (min-width: 0px) 
    .gradient 
        /* Opera */
        background: #FF7701 url("gradient-bg.svg");
        /* Recent browsers */
        background-image: -webkit-gradient(
            linear,
            left top, left bottom,
            from(#FFAD26),
            to(#FF7701),
    color-stop(0.5, #FEA026),
    color-stop(0.5, #FFFFFF),
    color-stop(0.5, #FFFFFF),
    color-stop(0.5, #FFFFFF),
    color-stop(0.5, #FF8B00)
        );
        background-image: -webkit-linear-gradient(
            top,
            #FFAD26,
            #FEA026 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FF8B00 50%,
    #FF7701
        );
        background-image: -moz-linear-gradient(
            top,
            #FFAD26,
            #FEA026 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FF8B00 50%,
    #FF7701
        );
        background-image: -o-linear-gradient(
            top,
            #FFAD26,
            #FEA026 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FF8B00 50%,
    #FF7701
        );
        background-image: linear-gradient(
            top,
            #FFAD26,
            #FEA026 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FFFFFF 50%,
    #FF8B00 50%,
    #FF7701
        );
    

【问题讨论】:

【参考方案1】:

至少在移动版 Safari 中,不能使用关键字 transparent,而必须使用 rgba(255, 255, 255, 0)

这里有描述:https://developer.apple.com/library/safari/documentation/internetweb/conceptual/safarivisualeffectsprogguide/Gradients/Gradient.html

如你所见,即使在苹果自己的官方文档中,也使用rgba(255, 255, 255, 0)而不是transparent

【讨论】:

谢谢,这解决了我一直遇到的问题之一 这有效(至少在 iOS 8 上)并且是迄今为止最简单的解决方案。 谢谢。这对我有用,从透明褪色到纯色然后又变回来:linear-gradient(to right,rgba(255, 249, 240, 0), rgba(255, 249, 240, 1), rgba(255, 249, 240, 0))。现在在所有设备上看起来都很棒! 这对我也有帮助,谢谢!只有渐变在 iOS 上与 transparent 关键字有问题,还是其他属性也需要 rgba? OP 没有使用transparent...我错过了什么吗?【参考方案2】:

请在 iOS 中检查一下,但它应该可以工作:

background: #ffad26; /* Old browsers */
background: -moz-linear-gradient(top,  #ffad26 0%, #fea026 50%, #ff8b00 51%, #ff7701 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffad26), color-stop(50%,#fea026), color-stop(51%,#ff8b00), color-stop(100%,#ff7701)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  #ffad26 0%,#fea026 50%,#ff8b00 51%,#ff7701 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  #ffad26 0%,#fea026 50%,#ff8b00 51%,#ff7701 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  #ffad26 0%,#fea026 50%,#ff8b00 51%,#ff7701 100%); /* IE10+ */
background: linear-gradient(to bottom,  #ffad26 0%,#fea026 50%,#ff8b00 51%,#ff7701 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffad26', endColorstr='#ff7701',GradientType=0 ); /* IE6-9 */

我还建议研究像 SASS 这样的预处理器,它会为你生成很多这样的东西。

备选方案 1

作为替代方案,您可以尝试使用嵌入框阴影。这并不准确,它有其局限性,但它只是一种选择:)

background-color:#FF8B00;
-webkit-box-shadow: inset 0px 100px 0px 0px rgba(255, 255, 255, 0.5);
box-shadow: inset 0px 100px 0px 0px rgba(255, 255, 255, 0.5);

备选方案 2

如果您知道高度,请使用上面的框阴影或仅使用背景图片。这样,您将获得跨浏览器支持,而不会像上面那样有一百个前缀 CSS 属性:)

【讨论】:

嗯,我自己没有 ipad,所以一个朋友正在为我测试 ipad mini 和 ipad 3。在 mini 上它可以工作,但在 ipad 3 上不行......我现在已经应用了你的代码,你能帮我测试一下它是否适合你吗?检查:rickgommers.nl/geoffrey 见我上面的回复。它也无法正常工作。我想用赏金奖励你,但因此我们必须先解决这个问题:) @Forza 尝试在元素上指定高度。例如,尝试 height:100%。如果这不起作用,我不确定除了我上面写的内容之外还有纯 CSS 的解决方案。如果这不起作用,我会使用图像并使用 background-repeat 平铺它:repeat-y; 那张图片很好用,哈哈。废话 CSS 在每个浏览器中的工作方式都不同......好旧的图像修复了它 :) Thx Rob! @Forza 将此归咎于 CSS 是不公平的。每个浏览器都规定了它将支持多少 CSS 以及有多好。我相信你不会因为你曾经在 IE 上遇到的麻烦而责怪 W3C。【参考方案3】:

工作演示在这里http://jsfiddle.net/yeyene/akRHX/

还有它的 iPhone 截图……

将你的 css 类添加到元素中。

HTML

<div data-role="page">

    <div data-role="header">
        <h1>Page Title</h1>
    </div><!-- /header -->

    <div data-role="content">

       <div class="ui-grid-a">
           <div class="ui-block-a"><div class="ui-bar gradient" style="height:200px">Block A</div></div>
            <div class="ui-block-b"><div class="ui-bar gradient" style="height:200px">Block B</div>
       </div>

</div><!-- /grid-a -->

    </div><!-- /content -->


</div><!-- /page -->

CSS

.gradient 
    /* Legacy browsers */
    background: #FF7701 url("gradient-bg.png") repeat-x top;
    -o-background-size: 100% 100%;
    -moz-background-size: 100% 100%;
    -webkit-background-size: 100% 100%;
    background-size: 100% 100%;
    /* Internet Explorer */
    *background: #FF7701;
    background: #FF7701\0/;
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="gradient-bg.png", sizingMethod="scale");
    
    @media all and (min-width: 0px) 
        .gradient 
            /* Opera */
            background: #FF7701 url("gradient-bg.svg");
            /* Recent browsers */
            background-image: -webkit-gradient(
                linear,
                left top, left bottom,
                from(#FFAD26),
                to(#FF7701),
        color-stop(0.5, #FEA026),
        color-stop(0.5, #FFFFFF),
        color-stop(0.5, #FFFFFF),
        color-stop(0.5, #FFFFFF),
        color-stop(0.5, #FF8B00)
            );
            background-image: -webkit-linear-gradient(
                top,
                #FFAD26,
                #FEA026 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FF8B00 50%,
        #FF7701
            );
            background-image: -moz-linear-gradient(
                top,
                #FFAD26,
                #FEA026 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FF8B00 50%,
        #FF7701
            );
            background-image: -o-linear-gradient(
                top,
                #FFAD26,
                #FEA026 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FF8B00 50%,
        #FF7701
            );
            background-image: linear-gradient(
                top,
                #FFAD26,
                #FEA026 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FFFFFF 50%,
        #FF8B00 50%,
        #FF7701
            );
        
    

【讨论】:

【参考方案4】:

对我来说,以下工作有效,这在桌面浏览器、android 和 ios 中对我有效:-

display: list-item;
background-image: linear-gradient(45deg, #2b4bff, #1b681f);
background-clip: text;
color: rgba(255, 255, 255, 0);
    我正在使用 display:flex,但它不起作用,我不得不更改 列出项目。 我使用“透明”的颜色,现在我正在使用 rgba(255, 255, 255, 0)

一些有用的注释: 属性 background-clip: text;仅当直接应用于您要设置样式的元素时,才能在 Safari 中使用。您不能将其应用于父元素并同时为所有子元素设置样式。 (这在 Chrome 和 Firefox 中有效) enter link description here

【讨论】:

以上是关于CSS渐变在iOS上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CSS :hover 在 iOS Safari 和 Chrome 上不起作用

为啥 tailwind css 在 iPhone ios 设备上不起作用?

css在github页面上不起作用[关闭]

CSS 媒体查询在移动设备上不起作用

Flexbox 在 Safari 9.1.1 上不起作用 [重复]

为啥 LESS css 在 localhost 上不起作用