Ho riscontrato un problema nelle versioni mobili del webkit (in particolare Webkit 534.46 su iOS 5.1.1 come Safari per dispositivi mobili e ora Chrome per iOS) che non si verifica su alcun browser desktop che I ' ho visto. (cioè le demo sottostanti devono essere visualizzati su una versione mobile WebKit.)Mobile Webkit reflow issue
Here is a live example of the issue. Il nucleo del CSS è estremamente semplice. Si posiziona un indice alfabeto lungo la sinistra della pagina:
#index {
left:0; margin:0; padding:0; position:fixed; top:0; width:3em;
}
Il problema si verifica quando un elemento è in posizione fissa sopra la parte superiore del corpo. È completamente in grado di interagire fino a quando la scroll non cambia e quindi smette di accettare input. Se I (manualmente) muove lo scroll di un solo pixel, diventa nuovamente attivo. L'esempio è stato mantenuto il più semplice possibile e non utilizza JavaScript. Dopo averlo davvero martellato, ho scoperto che sembra che l'elemento pensi che sia stato fatto scorrere ma che sia stato visivamente corretto. In altre parole, se fai clic su "A", prova nuovamente a fare clic su "A", a volte otterrai un secondo clic ma sarà più in basso nell'elenco. Mi è sembrato un problema di reflow CSS. So che il webkit mobile tenta di ridurre il numero di reflows.
Here is a live example of the workaround.
io sono in grado di utilizzare JS per forzare il CSS di tutto il documento per il reflow su di scorrimento (con una valvola a farfalla che impedisce che accada fino a 100 ms dopo lo scorrimento), che sembra per risolvere questo problema nel semplice esempio. Sfortunatamente, questo non aiuta la versione del mondo reale di questo problema.
This is the code for the issue page and the workaround script.
La mia domanda è che cosa sta accadendo qui e c'è una soluzione alternativa CSS che mi manca? In particolare, sono curioso di sapere se qualche guru dei CSS può capire quale sia la situazione del layout che impedisce ai clic di colpire la posizione corretta sull'elemento fisso? Una migliore comprensione potrebbe aiutare a trovare una soluzione reale.
Modifica: Ho dimenticato di menzionare che l'esempio costringe esplicitamente la finestra alla dimensione della finestra. Quindi l'utente non può ingrandire/ridurre, il che significa che la posizione: fissa deve ancorare l'elemento al lato sinistro della finestra.
Aggiornamento (2012-09-20): Questo problema sembra essere risolto in Mobile Safari su iOS 6 (nonché su UIWebView). Qualsiasi soluzione deve prima controllare per assicurarsi che sia su iOS < 6. Ad esempio, utilizzando CssUserAgent questo potrebbe sembrare:
if (parseFloat(cssua.ua.ios) < 6) { /* ... */ }
Sto ancora esaminando le varie soluzioni nelle due risposte per trovare il "migliore". Ho dato a entrambi un +1 per i link. Attribuirò il premio a qualsiasi risoluzione che effettivamente risolva il mio problema. Grazie! – mckamey
Sto ancora cercando una soluzione che funzioni nel mio caso particolare, ma la finestra di bounty sta per scadere, quindi la assegnerò a @Paul Sweatte da quando ha risposto per primo e i suoi link hanno più varianti di soluzioni. Grazie a tutti! – mckamey