Положение модернизатора фиксированного теста неполное - PullRequest
21 голосов
/ 11 июня 2011

Modernizr великолепен, но пример теста для position: fixed довольно неполон:

  • iOS 4 и ниже возвращает true, пока он не поддерживает position: fixed
  • Opera в Windows возвращает false, в то время как она поддерживает position: fixed

Я нашел другой тест, основанный на тесте Modernizr, но с добавлением обнаружения iOS: https://gist.github.com/855078/109ded4b4dab65048a1e7b4f4bd94c93cebb26b8. На самом деле это не будущее, так как грядущая iOS 5 поддерживает position: fixed.

Не могли бы вы, ребята, помочь мне найти способ проверить фиксированное положение в iOS без перехвата браузера?

// Test for position:fixed support
Modernizr.addTest('positionfixed', function () {
    var test  = document.createElement('div'),
      control = test.cloneNode(false),
         fake = false,
         root = document.body || (function () {
            fake = true;
            return document.documentElement.appendChild(document.createElement('body'));
      }());

   var oldCssText = root.style.cssText;
   root.style.cssText = 'padding:0;margin:0';
   test.style.cssText = 'position:fixed;top:42px';
   root.appendChild(test);
   root.appendChild(control);

   var ret = test.offsetTop !== control.offsetTop;

   root.removeChild(test);
   root.removeChild(control);
   root.style.cssText = oldCssText;

   if (fake) {
      document.documentElement.removeChild(root);
   }

   return ret;
});

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Я написал этот тест для iOS: http://mnobeta.no/2011/09/test-position-fixed-for-iphone/

Это немного грязно, но, похоже, работает.Android по-прежнему проблема из-за его "подделки" position:fixed.

0 голосов
/ 14 октября 2011

Я обнаружил, что вам нужно вставить несколько хаков, чтобы получить исправленную позицию. Например, я вставил в свой тест хак, который возвращает значение true для iOS, работающей под управлением v.5 или выше:

/*iPhone/iPad Hack*/
if(navigator.userAgent.match(/iPad|iPhone/i) !== null){
    /*Check if device runs iOS 5 or higher*/
    isSupported = navigator.userAgent.match(/[5-9]_[0-9]/) !== null;
}

Я не уверен, насколько "чист" этот код, но он помогает мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...