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行,这样,如果两个版本都存在,那么标准版就会覆盖实验版/供应商版。特别是在
边界半径方面,你可能无论如何都可以删除前缀;它已经被标准化了足够长的时间,以至于现在还需要前缀的浏览器已经不多了。看看你是否介意使用图书馆帮助。我再也找不到那种方法了——遗憾。