Fondamentalmente, stai cercando di capire come mettere un oggetto nello spazio 3D, quindi si allinea con una vista 2D. È sempre una cosa complicata.
Non so cosa sia la matematica, e molti altri probabilmente no. Questo non è un problema comune. Ma ecco come andrei a capire.
L'unica variabile qui è width
. E i 2 valori che dovrebbero essere modificati in base alla larghezza sono -webkit-perspective
sul contenitore e -webkit-transform
sull'elemento interno. Quindi modificherei manualmente i valori per alcune larghezze diverse e registro i valori 3D che dovevi inserire per far sembrare le cose giuste. (Io userei l'ispettore web per modificare i valori in tempo reale in modo da ottenere un feedback immediato)
Uno si dispone di alcuni punti di dati, li traccia su un grafico e quindi cercare di capire come cambiano. Ho la sensazione che sia una curva parabolica, ma può anche essere iperbolica o sinusoidale, la mia matematica 3D non è abbastanza buona per saperlo con certezza.
Quindi puoi provare a calcolare un'equazione in cui quando inserisci le larghezze che hai campionato, recuperi i valori 3D manuali che hai impostato in precedenza. Quindi usa JS per leggere la larghezza del contenitore e imposta i valori CSS per farlo sembrare corretto.
che ho fatto che con 3 larghezze 300, 450, 600:
http://jsfiddle.net/24qrQ/3/
Alcune tendenze sono evidenti. Man mano che la larghezza aumenta, la prospettiva sale ad una crescente reate e la rotazione scende ad un ritmo crescente.
Calcolare la formula esatta, ora tocca a voi.
Come alternativa più semplice, se capire una formula diventa troppo difficile, si potrebbe curare manualmente una manciata di larghezze e valori 3D che un aspetto gradevole e memorizzarli in JS da qualche parte. Quindi potresti semplicemente interpolare linearmente tra loro. Non sarebbe esatto, ma potrebbe essere abbastanza vicino.
Sarebbe anche meno divertente!
Wow che sembra koool :) –