Делает.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 на элементе?
3 ответов
как написал @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/
сеттер ( .css( propertyName, value ) )
по состоянию на jQuery 1.8,
.css()setter автоматически позаботится о префиксе имени свойства. Например, возьмите.css( "user-select", "none" )в Chrome / Safari установит его как-webkit-user-select, Firefox будет использовать-moz-user-selectи IE10 будет использовать-ms-user-select.
Геттер ( .css( propertyName ) )
на
.css()метод удобный способ получить вычисляемое свойство стиля из первого сопоставленного элемента, особенно в свете различных способов доступа браузеров к большинству этих свойств (getComputedStyle()метод в стандартных браузерах по сравнению сcurrentStyleиruntimeStyleсвойства в Internet Explorer до версии 9) и различные термины, используемые браузерами для определенных свойств. Например, реализация DOM Internet Explorer ссылается на свойство float какstyleFloat, в то время как браузеры, совместимые со стандартами W3C, ссылаются ему какcssFloat. Для согласованности вы можете просто использовать"float", и jQuery переведет его на правильное значение для каждого браузера.
он явно не упоминает префиксы поставщиков в контексте геттера, но его легко проверить. Например, $element.css('border-radius') в Chrome возвращает значения, установленные как border-radius или -webkit-border-radius и игнорирует значения как -moz-border-radius.
просто имейте в виду, что это непоследовательно в разных браузерах для свойства сокращенное:
извлечение сокращенных свойств CSS (например, margin, background, border), хотя и функционально с некоторыми браузерами, не гарантируется. Например, если вы хотите получить отображаемое
border-widthиспользовать:$( elem ).css( "borderTopWidth" ),$( elem ).css( "borderBottomWidth" )и так далее.