2012-01-08 8 views
5

Ho applicato la seguente trasformazione CSS a una casella di input HTML.Ridimensionamento delle caselle di input con -webkit-transform

-webkit-transform: scale(.5); 

Quando si digita testo nella casella di input finché non ha riempito la zona visibile, il cursore continua oltre il bordo di ingresso ed è nascosto. Normalmente il segno di omissione e il testo scorreranno durante la digitazione.

Il testo inizia a scorrere quando il cursore ha assunto la larghezza dell'ingresso pre-ridimensionato. Il browser sembra ignorare il ridimensionamento quando si calcola quando scorrere il testo.

Questo è solo un problema con i browser WebKit (testato con Chrome e iPad). L'equivalente di -moz-transform funziona bene in FireFox. La proprietà dello zoom funziona bene nel webkit, ma non è abbastanza uniforme quando si ridimensiona l'iPad, quindi non posso davvero usarlo per il mio progetto.

Si può vedere un esempio qui: http://jsfiddle.net/4Kv6w/

La prima casella di input è con la scala -webkit-trasformare. La seconda casella è con lo zoom impostato. Il terzo è normale

Qualsiasi aiuto sarebbe molto apprezzato.

EDIT - È anche possibile ottenere il problema senza ridimensionamento, utilizzando -webkit-transform per spostare la casella di input a sinistra. Ecco un esempio: http://jsfiddle.net/4Kv6w/15/

+0

Perché è necessario per scalare l'ingresso? Se il suo genitore è ridimensionato, forse potresti "svitarlo" con la scala (1.5) ma farlo apparire più piccolo attraverso l'altezza della larghezza e la dimensione del carattere. – Duopixel

+0

Interessante problema! –

+0

Non potresti semplicemente impostare una larghezza/altezza/dimensione del font più piccola sull'elemento di input? –

risposta

2

Sembra che ci sia un bug in WebKit quando si usa una trasformazione CSS per spostare una casella di input a sinistra. Quando ridimensionate una casella di input, essenzialmente sposta il bordo destro a sinistra, che è il modo in cui ho riscontrato il problema.

La soluzione per me è stato quello di posizionare il modo di immissione a sinistra il

left: -2000px; 
position: absolute; 

e quindi spostarlo di nuovo con il CSS trasformare.

-webkit-transform: matrix(.5, 0, 0, .5, 2000, 0); 

È possibile vedere un esempio qui: http://jsfiddle.net/4Kv6w/17/

1

Ehi, presumo che tu stia cercando di animare il cambiamento. Probabilmente otterrai risultati migliori usando le transizioni CSS anziché una trasformazione, se così fosse. Ho creato un violino per te da vedere e provare per te stesso.

jsfiddle

Fondamentalmente, ho un listener di eventi js ascolto per quando la casella di testo viene messa a fuoco. Poi cambio la larghezza in js e la transizione si prende cura dell'animazione. Spero che questo si occupi del tuo problema.

+0

Grazie per la tua risposta! Quello che ho è un tag div contenente più caselle di input che devono essere ridimensionate utilizzando l'evento di pizzico sull'iPad. Se cambio la larghezza e l'altezza effettive di ogni casella di input, non è affatto liscia.L'unico modo per ottenere una leggera esperienza da pinch-to-zoom è l'utilizzo di una trasformazione css. –

+0

Sì, ricorda che le transizioni CSS sono accelerate dall'hardware. se stai cercando un pizzico per lo zoom, devi ascoltare il gesto e utilizzare una transizione, puoi cambiare la larghezza per fare la differenza tra i tocchi alla fine del gesto. –

+0

Questo è un buon punto. Ho capito che funziona con la trasformazione, ma usare una transizione CSS potrebbe essere una buona alternativa. Grazie. –

Problemi correlati