[英]Dynamic change of gradient colors in all browsers
我想创建一个脚本,用户可以通过在两个不同的文本字段中输入颜色代码来设置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,这是针对较旧的IE版本的。
那么您将如何处理呢? 我应该创建一个在调用颜色更改功能之前先检查所用浏览器的功能吗?
您可能需要看一下惊人的Ultimate CSS Gradient Generator 。
如您所见,它生成的代码比您执行的要多,每行末尾都有注释,指示哪些浏览器受该行影响:
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+"')"
并且,根据此答案 ,请确保将overflow: auto
设置为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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.