【问题标题】:Dynamic change of gradient colors in all browsers所有浏览器中渐变颜色的动态变化
【发布时间】:2013-01-05 13:41:27
【问题描述】:

我想创建一个脚本,用户可以通过在两个不同的文本字段中输入颜色代码来设置 div 的渐变。

这是我的代码:

        <style>
        #gradient {
            background: #0A284B;
    background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
    background: -webkit-linear-gradient(#0A284B, #135887);
    background: -moz-linear-gradient(top, #0A284B, #135887);
    background: -ms-linear-gradient(#0A284B, #135887);
    background: -o-linear-gradient(#0A284B, #135887);
    background: linear-gradient(#0A284B, #135887);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
    zoom: 1;    }  
    </style>


    <script>

    function myFunction()
    {
    color1 = document.getElementById("color1").value;
    color2 = document.getElementById("color2").value;

    document.getElementById("gradient").style.background="-webkit-gradient(linear, left top, left bottom, from("+color1+"), to("+color2+"))";
    document.getElementById("gradient").style.background="-webkit-linear-gradient("+color1+", "+color2+")";
    document.getElementById("gradient").style.background="-moz-linear-gradient(top, "+color1+", "+color2+")";
    document.getElementById("gradient").style.background="-ms-linear-gradient("+color1+", "+color2+")";
    document.getElementById("gradient").style.background="-o-linear-gradient("+color1+", "+color2+")";
    document.getElementById("gradient").style.background="linear-gradient("+color1+", "+color2+")";
document.getElementById("gradient").style.filter="progid:DXImageTransform.Microsoft.Alpha(startColorstr='"+color1+"', endColorstr='"+color2+"')";

    }
    </script>

    <input type="text" id="color1" onkeyup="myFunction()" value="#E9EDF6"></input>
    <input type="text" id="color2" onkeyup="myFunction()" value="#AABBDD"></input>

    <div id="gradient" style="height:500px">
        I have gradient
    </div>

该功能在 Firefox 和 IE10 中运行良好,但在旧版 IE 中无法正常运行。 我猜这是因为最后一个后台调用覆盖了其他用于旧 IE 版本的调用。

那么你会怎么做呢? 我应该创建一个函数,在调用颜色更改函数之前首先检查所使用的浏览器吗?

【问题讨论】:

    标签: javascript css


    【解决方案1】:

    您可能想看看惊人的Ultimate CSS Gradient Generator

    如您所见,它生成的代码比您所做的要多,每行末尾的 cmets 指示受该行影响的浏览器:

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

    具体来说,最后一行是你需要的,用于IE6-IE9。

    对于不处理渐变的旧版浏览器 (IE5.5...),您可能还想包含第一行。


    编辑

    在 javascript 中也添加过滤器部分,在其他行之后:

    document.getElementById("gradient").style.filter = 
             "progid:DXImageTransform.Microsoft.Alpha(startColorstr='"+
                     color1+"', endColorstr='"+color2+"')"
    

    并且,根据this answer,请务必设置overflow: auto 或为您的对象设置高度。


    编辑#2

    你是对的,它会与其他属性中断(在 CSS 中不影响它)。

    然后检查是否是IE,并使用这个JS:

    document.getElementById("gradient").filters.item("DXImageTransform.Microsoft.gradient").startColorstr = color1;
    document.getElementById("gradient").filters.item("DXImageTransform.Microsoft.gradient").endColorstr = color2;    
    

    【讨论】:

    • 谢谢,我会添加它,但是渐变本身可以正常工作,这只是我的更改功能,在旧版本中不起作用。
    • 什么?你有javascript错误吗?只需将“过滤器”部分也添加到 javascript 中,而不仅仅是添加到 CSS 中,就可以了
    • 不起作用。我尝试了你额外的 js 行,但没有运气。在较旧的 IE 版本中没有任何反应。
    • 我在 IE8 中测试了它,并发布了最新的 javascript:|
    猜你喜欢
    • 2023-04-10
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多