Pull to refresh

Comments 19

Основная мысль статьи заключается в выводе. В случае использования jQuery, нет смысла создавать плагины, если можно расширить поддержку свойств в методе .css()
$('p:eq(0)').css({'background-color':'rgba(0,111,221,0.9)'});

vs

$('p:eq(0)').colorMask( 0, 111, 221, 0.9 );

второй способ проще в реализации, быстрее исполняется и меньше весит.
Это конечно хорошо, но без тестов на производительность, актуально только для небольших just-for-fun проектов, где, в принципе, можно обойтись набором известных хаков. В этом случае описанный метод теряет смысл, т.к. он очевидно был призван ускорить и упростить процесс разработки в больших проектах.
Да, и это все далеко от парадигмы пуленепробиваемого кода.
Скажите, пожалуйста, подхватывает ли этот метод стили, переданные через css-файл?
Вы сами определяете, что и как подхватывать.
Судя по проверке в jsFiddle: jsfiddle.net/Eliah/etKvD/ ответ на мой вопрос отрицательный. То есть, $.cssHooks не подхватывает данные из css-файлов, к сожалению.

Это существенно снижает его ценность. В отрыве от css файлов функция css() не слишком полезна.
Не поленюсь еще раз повторить. Вы сами определяете что и как подхватывать. Хотите, берите из CSS (getComputedStyle), хотите берите из атрибута.
> Хотите, берите из CSS (getComputedStyle)

Буду очень признателен, если приведете пример кода, как из CSS подхватить мое свойство «my» в примере выше.
Наверно через перебор document.styleSheets[i].cssRules[j], а в IE все «левые» свойства в CSS входят в объект style.
В общем, это не является прямым решением озвученной проблемы.
Познавательно, но имхо не оправдано. .css() очень не желательно использовать вообще как setter, особенно с экзотическими свйоствами, которые для каждого браузера имеют свой префикс. Стили должны быть отделены от скриптов. Поэтому лучше юзать toggle/add/remove Class. А для смены видимости .hide(), .show(), toggle() и прочее.
По ссылке на альтернативную документацию как раз и рассматривается случай, когда вы хотите определить «экзотические» свойства.
(function($){
    if ( !$.cssHooks ){
        alert("jQuery 1.4.3+ is needed for this plugin to work");
        return;
    }
    var div = document.createElement( "div" );
    $.support.borderRadius =
    div.style.WebkitBorderRadius === ''? 'WebkitBorderRadius' :
    (div.style.MozBorderRadius === ''? 'MozBorderRadius' : 
    (div.style.borderRadius === ''? 'borderRadius'  : false));
    
    //only set cssHooks for browsers that don't support "borderRadius" natively
    if ( $.support.borderRadius && $.support.borderRadius !== "borderRadius" ){
        $.cssHook.borderRadius = {
           get: function( elem, computed, extra ){
                return $.css( elem, $.support.borderRadius );
           },
           set: function( elem, value){
                elem.style[$.support.borderRadius] = value;
           }
        };
    }    
})(jQuery);

$("#element").css("border-radius", "20px");

То есть по сути идет перехват геттера и сеттера и установка новых.

А отделение стилей от скриптов не всегда оправданы.
Мне за приличное время верстки различные интерфейсов еще ни разу не понадобилось юзать css() как сеттер. В приведенном ваами примере 4 лишние проверки, которых можно избежать просто используя класс. Ну и прочие каноничное правило, о том, что ксс удобнее менять и видеть в ксс-файле, вдруг после вас будет будет работать верстальщик, который не знает скриптов да и просто с классами быстрее разобраться, что-то изменить.

Хоть и в 99,99% случаев не оправдано — очень познавательно, плюс посту я поставил. Это было б ключевой техникой, если б понадобилось написать что-то вроде PIE.htc на джеквери.
блин, ночью голова плохо соображает, понаписал, как китаец…
Следуя вашей логике css() вредно юзать и как геттер.
Нет, иногда как геттер нужно. Например, недавно писал свои нестандартные селекты для 1го проекта. В макете в одной из форм их было очень много и разной ширины. Соответственно, проще и правильнее было начальным настоящим селектам проставлять style width, нежели плодить тучу классов. И соответственно при замене тру селекта на стандартный приходилось вначале делать проверку, вернет ли что-то геттер css('width'), чтоб новый селект стал такой же ширины. Кстати, можно было б использовать width(), но css('width') в данном случае было надежней ибо по дефолту размер селектов в разных браузеров разный.
У вас эти свойства анимироваться не будут :) надо ещё сделать $.fx.step['background-alpha']
Sign up to leave a comment.

Articles