21

Modernizr は優れていますが、サンプル テストposition: fixedは完全ではありません。

  • iOS 4 以下はtrue、サポートされていない間は返品されますposition: fixed
  • Windows 上の Operaは、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;
});
4

2 に答える 2

1

iOS 用にこのテストを作成しました: http://mnobeta.no/2011/09/test-position-fixed-for-iphone/

少し面倒ですが、うまくいくようです。Android は、その「偽物」のため、依然として問題となっていposition:fixedます。

于 2011-09-17T15:06:06.137 に答える
0

機能する positionFixed テストを取得するには、いくつかのハックを挿入する必要があることがわかりました。たとえば、v.5 以降を実行している iOS デバイスに対して true を返すハックをテストに挿入しました。

/*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;
}

このコードがどれほど「きれい」かはわかりませんが、うまくいきます。

于 2011-10-14T11:26:01.780 に答える