2012-07-06 7 views
24

El navegador Android, desde 2.2, admite el posicionamiento fijo, al menos en ciertas circunstancias, como cuando se desactiva el escalamiento. Tengo un archivo HTML simple sin JS, pero el posicionamiento fijo en tres teléfonos Samsung que he probado es simplemente incorrecto. En lugar de un verdadero posicionamiento fijo, el encabezado se desplaza fuera de la vista y luego regresa a su lugar una vez que se realiza el desplazamiento.Habilite el posicionamiento fijo real en los navegadores Android de Samsung

Esto no sucede en el emulador de Android SDK para ninguna configuración que he probado (2.2, 2.3, 2.3 x86, 4.0.4). Tampoco ocurre cuando se utiliza WebView en una aplicación de los teléfonos Samsung: en esos casos, el posicionamiento funciona como se espera.

¿Hay alguna manera de hacer que el navegador "Samsung" de Samsung use un posicionamiento fijo real?

He probado: 1. Samsung Galaxy 551, Android 2.2 2. Samsung Galaxy S, Android 2.3 3. Samsung Galaxy S II, Android 2.3

Código de ejemplo:

<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no,width=device-width,height=device-height"> 
    <style> 
    h1 { position: fixed; top: 0; left: 0; height: 32px; background-color: #CDCDCD; color: black; font-size: 32px; line-height: 32px; padding: 2px; width: 100%; margin: 0;} 
    p { margin-top: 36px; } 
    </style> 
    </head> 
    <body> 
    <h1>Header</h1> 
    <p>Long text goes here</p> 
    </body> 
</html> 

El comportamiento esperado es que el encabezado gris llene la parte superior de la pantalla y permanezca fijo sin importar cuánto se desplace. En los navegadores Android de Samsung, parece desplazarse fuera de la vista y volver a colocarse en su lugar una vez que se realiza el desplazamiento, como si el posicionamiento fijo se simulara usando Javascript, que no es.

Editar A juzgar por los comentarios y las "respuestas" parece que tal vez no tenía claro lo que necesitaba. Estoy buscando una metaetiqueta o css rule/hack o javascript toggle que desactive el roto posicionamiento fijo de Samsung y active el posicionamiento fijo de trabajo del navegador Android. No estoy buscando una solución de Javascript que agregue posicionamiento fijo roto a un navegador que no tiene soporte alguno; el posicionamiento fijo de Samsung ya lo hace, se ve estúpido.

+0

¿Tiene una referencia para "El navegador de Android, desde 2.2, compatible con posicionamiento fijo"? – deefour

+0

@Deefour El emulador de Android en el SDK lo confirma, como mencioné en mi publicación. –

+0

[caniuse] (http://caniuse.com/css-fixed) dice que <3.0 solo tiene soporte parcial, y el [artículo referenciado] (http://bradfrostweb.com/blog/mobile/fixed-position/) dice "Android 2.2 vuelve a colocar torpemente los elementos fijos en su posición una vez que se completa el desplazamiento". Solo buscar algo que confirme lo que ve en su SDK es el comportamiento esperado, ya que al menos parece que con el Galaxy 551 (el que tiene 2.2) está experimentando el comportamiento exacto descrito en el artículo anterior. – deefour

Respuesta

1

Tal vez usted podría considerar un enfoque diferente que no requiere posicionamiento fijo ...

Agregar desplazándose hasta el elemento de párrafo en lugar de en el elemento del cuerpo (por defecto). A continuación, puede colocar el elemento de párrafo justo debajo del encabezado. Esto asegurará que el encabezado siempre se muestre en la parte superior de la página pero le permita desplazarse por el texto en el párrafo.

h1 { 
    height: 20px; 
} 

p { 
    position: absolute; 
    top: 20px; 
    left: 0px; 
    right: 0px; 
    bottom: 0px; 
    overflow-y: auto; 
} 
+2

Eso podría funcionar. Sin embargo, he oído que el rendimiento de desplazamiento es mucho más lento cuando se desplaza una parte del documento en lugar de todo el documento. De todos modos, estoy usando jQuery Mobile, así que no tengo mucha flexibilidad en la estructura del documento. –

1

Creo que la mejor manera para el navegador Android 2.2 implementar javascript.

Puede encontrar más información a través de este enlace. Se trata de posicionamiento fijo en todos los navegadores móviles.

http://bradfrostweb.com/blog/mobile/fixed-position/

-2

No es rota navegador Android de Samsung, que es Android 2.2, que cuenta con el apoyo roto. En general, como usted sabría, la posición era fija y en algunos casos todavía está bastante rota en muchos dispositivos/sistemas móviles.

Para responder a su pregunta, no hay "alternar o metaetiqueta" que "activará el posicionamiento fijo de trabajo del navegador Android". Si un navegador no tiene soporte para algo, entonces no hay "alternar" para "cambiarlo". No es una característica.

De lo contrario, puede usar http://cubiq.org/iscroll-4 que lo emula.

(edit: algunos hechos)

  1. Según http://caniuse.com/#search=position:fixed Android 2.2 y Android 2.3 tiene parcial y no total apoyo de la posición: fijo. (Apoyo parcial parece soporte con errores)
  2. simulador
  3. un androide no es y nunca será idéntico a un navegador nativo de Android, tanto como IETester por ejemplo, no es lo mismo que IE nativa (hay diferencias)
  4. Motorola ATRIX 4G nO tiene Android 2.2 pero Android 2,3 (http://www.motorola.com/us/consumers/MOTOROLA-ATRIX%E2%84%A2-4G/72112,en_US,pd.html?selectedTab=tab-2&cgid=mobile-phones#tab)

Usted está sugiriendo que Samsung presenta un corte patentada o mod que rompe el soporte de otro tipo de trabajo de posición fija en el navegador de Android. Esto parece muy poco probable, independientemente de los 3 puntos anteriores.

La respuesta es sencilla: Hay un apoyo (con errores) parcial y su única solución es utilizar una biblioteca JavaScript que reemplaza o "correcciones" el agujero.

+0

incorrecto Lo tengo trabajando en Stock Android 2.2 en el emulador y en el Motorola Atrix 4G. Y trabajando en Android 2.3 en el Nexus S y el emulador de Android. Solo falla en teléfonos que tienen modificaciones de Samsung. –

+0

Edité mi publicación para agregar algunos hechos solo para aclarar algunas cosas. –

+0

Puedes negar que el Atrix 4G tiene 2.3, pero lo tengo en la mano y es claramente 2.2. Además, el emulador de Android ejecuta el navegador de Android Stock. No es una especie de simulador: emula toda la máquina, incluido el procesador. Es el hardware real. caniuse.com es una gran fuente de documentación, pero el código real de Android es la documentación real. Google lo envía en forma de trabajo, pero en cada teléfono SAMSUNG (es decir, uno que ejecuta TouchWiz) está roto. No sé por qué estás discutiendo con mis resultados experimentales. –

Cuestiones relacionadas