2013-03-04 2 views
34

avviene quanto segue sulla mobile Safari iOS 6.1.2ingresso IOS concentrata all'interno genitore fisso arresta aggiornamento posizione degli elementi fissi

Procedura per riprodurre

Creare un elemento position: fixed con un elemento interno <input type="text"> .

risultato effettivo

  1. ingresso - non focalizzata

    La posizione degli elementi fissi è corretta quando l'ingresso non è a fuoco.

  2. ingresso - focalizzata

    Quando l'ingresso è a fuoco, il browser entra in una modalità speciale in cui non aggiorna la posizione degli elementi fissi più (qualsiasi elemento posizionato fisso , non solo il genitore dell'input) e sposta l'intera finestra verso il basso in modo da posizionare l'elemento genitore dell'input al centro dello schermo.

    Vedi demo live: http://jsbin.com/oqamad/1/

Risultato atteso

La posizione degli elementi fissi è sempre rispettato.

Correzione o soluzione alternativa?

Qualsiasi suggerimento su come forzare Safari a visualizzare correttamente gli elementi fissi sarebbe utile.

Preferirei una soluzione alternativa che non implichi l'utilizzo di position: absolute e l'impostazione di un gestore di eventi onscroll.

+1

Remy Sharp ha fatto un video live del bug in azione nel maggio 2012 su iOS 5: http://www.youtube.com/watch?v=lrnvZDwgJRc –

+0

Si tratta di un bug irreparabili, al momento. Il posizionamento fisso sta appena iniziando a ottenere un supporto maggiore tra i dispositivi mobili. –

+0

È possibile utilizzare js per allineare il div alla parte inferiore della pagina. Questo è quello che ho fatto per il mio footer. Impostare una funzione di timeout o chiamare la funzione di riposizionamento sull'evento di scorrimento. – Shouvik

risposta

0

Sì, si tratta in particolare di un problema di safari iOS dalla v5. Se utilizzi Chrome su iOS, noterai che funzionerà correttamente. Il bodge che uso per sistemare questo è quello di creare e aggiungere un elemento di stile al corpo e successivamente cancellarlo e quindi mettere a fuoco l'elemento.

Non chiedermi perché funziona, troppe ore di tentativi ed errori!

Ho anche notato che, dopo la prima volta che questo è fisso non è necessario eseguire il trucco stile per i successivi elementi posizionati fissi

+0

Puoi fornire un esempio di codice in modo da poterli esportare se funziona? Grazie –

5

E 'un bug noto in Safari, sia su iPad e iPhone.

Un modo per cambiare la posizione in assoluto su tutti gli elementi impostati con posizione fissa.

Nel caso in cui si utilizza Modernizr si potrebbe anche colpire i dispositivi mobili in questo modo:


codice jQuery


$(document).ready(function() { 

    if (Modernizr.touch) { 

     $(document) 

     .on('focus', 'input', function(e) { 
      $('body').addClass('fixfixed'); 
     }) 

     .on('blur', 'input', function(e) { 
      $('body').removeClass('fixfixed'); 
     }); 

     } 

}); 

CSS

Se voglio, ad esempio, selezionare solo l'intestazione e il piè di pagina, che sono impostati con posizione fissa, quando la classe 'fixfixed' viene aggiunta al corpo posso cambiare la posizione in assoluto a tutti gli elementi con posizione fissa .

.fixfixed header, .fixfixed footer { 
    position: absolute; 
} 
+0

Cambiare da fisso a assolutamente causerà uno sfarfallio sullo schermo perché l'elemento non sarà più dove dovrebbe essere. –

+0

Questo non è abbastanza per downvotare la mia risposta. Puoi evitare lo sfarfallio in molti modi, uno di questi è l'aggiunta di -webkit-transform: translate3d (0,0,0); al tuo contenitore. E btw, ho risposto a questa risposta 2 anni fa, quindi a seconda del browser potrebbe non funzionare. –

+0

Esiste una soluzione moderna per questo problema? – Kosmonaft