Javascript 如何测试transitionProperty(et.al.)是采用供应商前缀样式的属性名称,还是采用规范化的属性名称?
下面是设置CSS的JS代码摘录:Javascript 如何测试transitionProperty(et.al.)是采用供应商前缀样式的属性名称,还是采用规范化的属性名称?,javascript,css,html,vendor-prefix,Javascript,Css,Html,Vendor Prefix,下面是设置CSS的JS代码摘录: function hyphen_style(style) { return style.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-'); } var css = "#debug_element_highlighter_container * {"+ hyphen_style(Modernizr.prefixed
function hyphen_style(style) {
return style.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
}
var css = "#debug_element_highlighter_container * {"+
hyphen_style(Modernizr.prefixed('transitionDuration')) + ": 2s, 2s;" +
hyphen_style(Modernizr.prefixed('transitionProperty')) + ": transform, opacity;" +
...
// append a style tag to head
var head = document.getElementsByTagName("head")[0];
var style = document.createElement("style");
style.type = "text/css";
if (style.styleSheet){
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
现在这确实起作用了,但我记得不久前,我有浏览器拒绝合作,而不使用供应商前缀版本的transform
样式属性设置transitionProperty
,即CSS需要读取-webkit transition property:-webkit transform,opacity代码>以使浏览器按我希望的方式运行
显然,这在今天仍然适用于同样支持-webkit转换属性的浏览器:transform,opacity代码>,但我们可以看到,对于是否在这些样式上设置样式名称或样式属性的供应商前缀,存在四种不同的组合可能性。不难想象的是,在未来的某个时刻,某些webkit浏览器会突然停止检查-webkit-
前缀
Modernizr(和Modernizr文档)为我们提供了在它们之间进行转换的原语(prefixed()
等等),但我不清楚如何进行可靠的测试,以确定在transitionProperty
之后的样式是否需要设置前缀样式属性名称。测试样式本身以确定它们是否需要加前缀是非常简单的,只需指定一个不加前缀的样式并查看它是否“需要”。但我不太确定这种方法是否适用于指定样式属性名称的特殊情况
当然,我可以使用超便携的overkill方法,即在出现这种情况时设置所有四种CSS声明组合,如果浏览器支持任何一种样式,浏览器都不会有任何不满意的地方。我对您的应用程序了解不够,不知道这是否适用于您,但是像这样的网站提供了一个API,您可以运行CSS,如果需要的话,它会向您的CSS添加任何供应商前缀。谢谢,我认为prefixr对我来说是一个有用的工具。