.css()会自动添加供应商前缀吗?
我有一些代码:
$("#" + this.id).css("border-radius",this.radius + "px"); $("#" + this.id).css("-moz-border-radius",this.radius + "px"); $("#" + this.id).css("-webkit-border-radius",this.radius + "px");
我试图通过使用JSON来应用它们(如jQuery的文档中所示)或通过彻底删除供应商前缀版本来改进这样的行。
jQuery的.css()
方法是否会在更改元素的CSS属性时自动应用任何必需的供应商前缀?
正如@zeroflagL写道,似乎是因为jQuery 1.8.0 .css()
确实添加浏览器特定的前缀( 见这个 )。
在早期版本中,这不是由jQuery的.css()
自动完成的。 你将不得不自己做,或者你可以使用jQuery的.cssHooks()
来添加供应商的前缀。
这里的代码示例:
(function($) { if ( !$.cssHooks ) { throw("jQuery 1.4.3+ is needed for this plugin to work"); return; } function styleSupport( prop ) { var vendorProp, supportedProp, capProp = prop.charAt(0).toUpperCase() + prop.slice(1), prefixes = [ "Moz", "Webkit", "O", "ms" ], div = document.createElement( "div" ); if ( prop in div.style ) { supportedProp = prop; } else { for ( var i = 0; i < prefixes.length; i++ ) { vendorProp = prefixes[i] + capProp; if ( vendorProp in div.style ) { supportedProp = vendorProp; break; } } } div = null; $.support[ prop ] = supportedProp return supportedProp; } // check for style support of your property // TODO by user: swap out myCssPropName for css property var myCssPropName = styleSupport("myCssPropName"); // set cssHooks only for browsers that // support a vendor-prefixed border radius if (myCssPropName && myCssPropName !== 'myCssPropName') { $.cssHooks["myCssPropName"] = { get: function(elem, computed, extra) { // handle getting the CSS property return $.css(elem, myCssPropName); }, set: function(elem, value) { // handle setting the CSS value elem.style[myCssPropName] = value; } }; } })(jQuery);
jQuery确实添加了供应商前缀。 它首先检查是否存在标准属性,以及是否找不到供应商的前缀版本。 来源:
// return a css property mapped to a potentially vendor prefixed property function vendorPropName( style, name ) { // shortcut for names that are not vendor prefixed if ( name in style ) { return name; } // check for vendor prefixed names ...
我不知道从哪个版本,但我认为1.8。
这现在在官方文档中得到确认: http : //api.jquery.com/css/
Setter( .css( propertyName, value )
)
从jQuery 1.8开始,
.css()
设置器会自动处理属性名称的前缀。 例如,在Chrome / Safari中将.css( "user-select", "none" )
设置为-webkit-user-select
,Firefox将使用-moz-user-select
,IE10将使用-ms-user-select
。
Getter( .css( propertyName )
)
.css()
方法是从第一个匹配的元素中获取计算样式属性的一种便捷方式,尤其是考虑到浏览器访问大多数属性的不同方式getComputedStyle()
基于标准的浏览器中的getComputedStyle()
方法与currentStyle
和版本9之前的Internet Explorer中的runtimeStyle
属性)以及浏览器对某些属性使用的不同术语。 例如,Internet Explorer的DOM实现将float属性称为styleFloat
,而符合W3C标准的浏览器将其称为cssFloat
。 为了保持一致性,您可以简单地使用"float"
,jQuery会将其翻译为每个浏览器的正确值。
它没有在getter上下文中明确提到供应商前缀,但是很容易testing。 例如,Chrome上的$element.css('border-radius')
将返回设置为border-radius
或-webkit-border-radius
值,并忽略设置为-moz-border-radius
。
请记住,在速记属性的浏览器中它是不一致的:
检索速记CSS属性(例如,边距,背景,边框)虽然在某些浏览器中有效,但不能保证。 例如,如果要检索呈现的
border-width
,请使用:$( elem ).css( "borderTopWidth" )
,$( elem ).css( "borderBottomWidth" )
等等。