[英]Test For CSS3 Radial Gradient Vendor Syntax
我有一个问题,我正在尝试根据我指定的值更新元素的背景渐变。
我尝试过这条路线:
elem.style.backgroundImage = '-webkit-gradient(radial, '+x+' '+y+', 0, '+x+' '+y+', 800, from(#ccc), to(#333)), -moz-radial-gradient('+x+'px '+y+'px, circle cover, #ccc 0, #333 100%)';
由于Webkit和Gecko有两种不同的CSS3渐变语法,我需要指定两者。 但是,上面的代码不起作用。 如果我只有Gecko语法或只是Webkit语法,它可以工作,而不是两者兼而有之。
我认为你可以检查CSS渐变支持,但我的问题是,有没有办法检查需要在没有浏览器嗅探的情况下使用哪种语法? 请记住,我需要以这种方式设置渐变,因为渐变的x和y坐标会动态变化。
希望这是有道理的,谢谢。
您根本不需要进行任何检测。 只需连续两次设置element.style.backgroundImage,那些不解析的将被忽略。
编辑以下内容对其他原因很有用,但事实上,我认为它不会影响OP知道是否使用WebKit或Firefox symtax的问题! (Doh)它有助于了解是否可以使用渐变。
再次编辑但是! 查看Modernizr源代码向我们展示了如何通过功能测试来实现(他们很聪明,那些人)。 您可以通过自己查看源代码来解决这个问题,但这里有一个很快被黑客攻击的例子:
function testGradientSyntax() {
var element;
element = document.createElement("testsyntax");
element.style.cssText =
"background: -webkit-gradient(radial, 45 45, 10, 52 50, 30, from(#A7D30C), to(rgba(1,159,98,0)), color-stop(90%, #019F62))";
if (element.style.background.indexOf("-webkit") >= 0) {
// It's WebKit syntax
log("This supports WebKit syntax");
}
else {
// It's not WebKit syntax
log("This doesn't support WebKit syntax");
}
}
您可能想要使用Modernizr 。 它检测相关语法,并为您提供使用具有两种语法的单个CSS文件的方法。
来自文档的示例渐变代码:
button.glossy {
background: #ccc url(gloss.png) 50% 50% repeat-x;
}
.cssgradients button.glossy {
background: #ccc -webkit-gradient(linear, left top, left bottom,
from(rgba(255,255,255, .4)),
color-stop(0.5, rgba(255,255,255, .7)),
color-stop(0.5, rgba(0,0,0, .2)),
to(rgba(0,0,0, .1)));
}
.cssgradients button.glossy:hover {
background-color: #fff;
}
( 编辑在上面,我从.cssgradients button.glossy
规则的末尾删除了一行,它看起来像是文档中的错误。)
看到.cssgradients
类? 当您运行Modernizr时,它会检测这是否是相关语法,如果是这样,则将该类添加到您的html
元素中,这将打开后代选择器.cssgradients button.glossy
以便应用规则。
遗憾的是,这完全依赖于启用了Javascript的浏览器。
如果有人有兴趣,这就是我想出的。 我相信它可以使用很多改进,但它到目前为止都有效。
var syntax;
var syntaxCheck = document.createElement('syntax');
var syntaxFound = false;
while(!syntaxFound) {
syntaxCheck.style.backgroundImage = '-webkit-gradient(linear,left top,right bottom,from(#9f9),to(white))';
if(syntaxCheck.style.backgroundImage.indexOf( 'webkit' ) !== -1) {
syntax = 'webkit';
syntaxFound = true;
break;
}
syntaxCheck.style.backgroundImage = '-moz-linear-gradient(left top,#9f9, white)';
if(syntaxCheck.style.backgroundImage.indexOf( 'moz' ) !== -1) {
syntax = 'moz';
syntaxFound = true;
break;
}
}
if(syntax == 'webkit') // use -webkit syntax
else if(syntax == 'moz') // use -moz syntax
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.