Javascript .css()是否自动添加供应商前缀?
我有一些代码:Javascript .css()是否自动添加供应商前缀?,javascript,jquery,css,vendor-prefix,Javascript,Jquery,Css,Vendor Prefix,我有一些代码: $("#" + 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的文档所示)或完全删除供应商前缀版本来改进这些行 当更改元
$("#" + 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的文档所示)或完全删除供应商前缀版本来改进这些行
当更改元素的css属性时,jQuery的
.css()
方法是否会自动应用任何必需的供应商前缀?正如@zeroflagL所写的,由于jQuery 1.8.0.css()
添加了特定于浏览器的前缀()
在早期版本中,jQuery的.css()
不会自动完成此操作。您必须自己完成,或者可以使用jQuery添加供应商前缀
源代码示例:
(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);
(函数($){
如果(!$.cssHooks){
抛出(“jquery1.4.3+是这个插件工作所必需的”);
返回;
}
函数样式支持(prop){
var vendorProp,supportedProp,
capProp=prop.charAt(0.toUpperCase()+prop.slice(1),
前缀=[“Moz”、“Webkit”、“O”、“ms”],
div=document.createElement(“div”);
if(以div.style表示的道具){
支持的道具=道具;
}否则{
for(var i=0;i
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。这已经在官方文件中得到确认: Setter(
.css(属性名称,值)
)
从jQuery1.8开始,.css()
setter将自动为属性名添加前缀。例如,以Chrome/Safari中的.css(“用户选择”、“无”)
为例,将其设置为-webkit user select
,Firefox将使用-moz user select
,IE10将使用-ms user select
Getter(.css(propertyName)
)
.css()
方法是从第一个匹配的元素获取计算样式属性的一种方便方法,特别是考虑到浏览器访问大多数属性的不同方式(《代码》)getComputedStyle()基于标准的浏览器中的方法与Internet Explorer版本9之前版本中的currentStyle
和runtimeStyle
属性相比,以及浏览器对某些属性使用的不同术语。例如,Internet Explorer的DOM实现将float属性称为styleFloat
,而符合W3C标准的浏览器将其称为cssFloat
。为了保持一致性,您可以简单地使用“float”
,jQuery将它转换为每个浏览器的正确值
它没有在getter上下文中明确提到供应商前缀,但是很容易测试。例如,Chrome上的$element.css('border-radius')
返回设置为border radius
或-webkit border radius
的值,并忽略设置为-moz border radius
的值
请记住,不同浏览器的速记属性不一致:
检索速记CSS属性(例如,边距、背景、边框)虽然在某些浏览器中可用,但不保证。例如,如果要检索渲染的边框宽度
,请使用:$(elem).css(“borderTopWidth”)
,$(elem).css(“borderBottomWidth”)
,依此类推
+cssHooks为1。是否有一个带有通用前缀的存储库?我在示例中看到:
前缀=[“Moz”、“Webkit”、“O”、“ms”]
。添加了一个代码示例谢谢,我将删除带有caniuse建议的供应商前缀版本。comI在文档中找不到关于此的任何信息。你有什么参考资料吗?@YotamOmer检查这些链接为什么不使用样式文件而不是javascript,只需添加带有venodrs的类,许多扩展就可以添加到ide中这样的功能。而且它的可读性更高。你真的应该以相反的顺序编写这些CSS行,这样,如果两个版本都存在,那么标准版就会覆盖实验版/供应商版。特别是在边界半径方面,你可能无论如何都可以删除前缀;它已经被标准化了足够长的时间,以至于现在还需要前缀的浏览器已经不多了。看看你是否介意使用图书馆帮助。我再也找不到那种方法了——遗憾。