2011-06-11 13 views
21

Modernizr es grande, pero la prueba de ejemplo para position: fixed es bastante incompleta:posición fija Modernizr prueba incompleta

  • IOS 4 y rendimientos más bajos true mientras que no soporta position: fixed
  • Opera en Windows devuelve false mientras ¿Apoya position: fixed

encontré otro ensayo basado en la prueba Modernizr pero con detección iOS añadido: https://gist.github.com/855078/109ded4b4dab65048a1e7b4f4bd94c93cebb26b8. No es realmente una prueba de futuro ya que el próximo iOS 5 es compatible con position: fixed.

¿Pueden ayudarme a encontrar una forma de verificar la posición de la prueba en iOS sin detectar el navegador?

// 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; 
}); 
+0

Hola, estás usando la última versión de Modernizer. Una nueva fue lanzada hoy o ayer, creo, y cubrió esos errores. En cualquier caso, la posición: fija es pobre en los navegadores móviles actuales. – Francisc

+0

Sí, usando Modernizr 2. Aunque no ha cambiado ese ejemplo en la documentación. – DADU

+0

Quise decir como 2.X. Si descargó la biblioteca en los últimos 2-3 días como máximo, es probable que sea un error del Modernizador o uno en su CSS donde mencione que el elemento debe ser reparado (es decir, posición: fijo o positio: fijo, deletreado). – Francisc

Respuesta

0

He encontrado que necesita insertar algunos hacks para obtener una posición funcional Prueba fija. Por ejemplo he insertado un corte en mi prueba que devuelve verdadero para iOS deviced corriendo v.5 o superior:

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

No estoy seguro de cómo "limpia" es el código, pero lo hace el truco para mí .

+3

no está limpiando en absoluto ... está buscando la versión del sistema operativo y no la función ... –

Cuestiones relacionadas