J'ai du code:
$("#" + 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");
J'essaie d'améliorer des lignes comme celle-ci en utilisant JSON pour les appliquer (comme indiqué dans les documents de jQuery) ou en supprimant complètement les versions de préfixe du fournisseur.
La méthode .css()
de jQuery applique-t-elle automatiquement les préfixes de fournisseur requis lors de la modification des propriétés CSS sur un élément?
Comme l'a écrit @zeroflagL, il semble que depuis jQuery 1.8.0 .css()
ajoute des préfixes spécifiques au navigateur ( voir ceci ).
Dans les versions antérieures, cela n'était pas fait automatiquement par la fonction .css()
de jQuery. Vous devrez le faire vous-même ou vous pouvez utiliser .cssHooks()
de jQuery pour ajouter des préfixes de fournisseurs.
Exemple de code de ici :
(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 ajoute des préfixes de fournisseur. Il vérifie d'abord la présence de la propriété standard et s'il n'est pas trouvé pour une version préfixée du fournisseur. De la source:
// 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
...
Je ne sais pas depuis quelle version, mais je pense que 1.8.
Ceci est maintenant confirmé dans les documents officiels: http://api.jquery.com/css/
.css( propertyName, value )
)Depuis jQuery 1.8, le setter
.css()
se charge automatiquement de préfixer le nom de la propriété. Par exemple, prenez.css( "user-select", "none" )
dans Chrome/Safari le définira comme-webkit-user-select
, Firefox utilisera-moz-user-select
Et IE10 utilisera-ms-user-select
.
.css( propertyName )
)La méthode
.css()
est un moyen pratique d'obtenir une propriété de style calculée à partir du premier élément correspondant, en particulier à la lumière des différentes manières dont les navigateurs accèdent à la plupart de ces propriétés (la méthodegetComputedStyle()
dans les normes basés sur les navigateurs par rapport aux propriétéscurrentStyle
etruntimeStyle
dans Internet Explorer avant la version 9) et les différents termes que les navigateurs utilisent pour certaines propriétés. Par exemple, l'implémentation DOM d'Internet Explorer fait référence à la propriété float commestyleFloat
, tandis que les navigateurs conformes aux normes W3C y font référence commecssFloat
. Par souci de cohérence, vous pouvez simplement utiliser"float"
, Et jQuery le traduira à la valeur correcte pour chaque navigateur.
Il ne mentionne pas explicitement les préfixes de fournisseurs dans le contexte getter, mais il est facile à tester. Par exemple, $element.css('border-radius')
on Chrome renvoie les valeurs définies comme border-radius
Ou -webkit-border-radius
Et ignore les valeurs définies comme -moz-border-radius
.
Gardez juste à l'esprit qu'il est incohérent entre les navigateurs pour les propriétés de raccourci:
La récupération des propriétés CSS abrégées (par exemple, marge, arrière-plan, bordure), bien que fonctionnelle avec certains navigateurs, n'est pas garantie. Par exemple, si vous souhaitez récupérer le
border-width
Rendu, utilisez:$( elem ).css( "borderTopWidth" )
,$( elem ).css( "borderBottomWidth" )
, etc.