Im Grunde versuchen Sie herauszufinden, wie Sie ein Objekt in den 3D-Raum einfügen, so dass es in einem 2D-Ansichtsfenster angezeigt wird. Das ist immer eine schwierige Sache.
Ich weiß nicht, was die Mathematik ist, und die meisten anderen wahrscheinlich auch nicht. Dies ist kaum ein allgemeines Problem. Aber hier wäre, wie ich es herausfinden würde.
Die einzige Variable hier ist width
. Und die 2 Werte, die basierend auf der Breite geändert werden müssen, sind -webkit-perspective
auf dem Container und -webkit-transform
auf dem inneren Element. Also würde ich die Werte für einige verschiedene Breiten manuell bearbeiten und die 3D-Werte aufzeichnen, die Sie eingeben mussten, damit die Dinge richtig aussehen. (Ich würde den Web Inspector verwenden, um die Werte in Echtzeit zu bearbeiten, so dass Sie sofortiges Feedback erhalten)
Sie haben ein paar Datenpunkte, zeichnen sie in einem Diagramm und versuchen dann herauszufinden, wie sie sich ändern. Ich habe eine Ahnung, dass es eine parabolische Kurve ist, aber es kann auch hyperbolisch oder sinusförmig sein, meine 3D-Mathematik ist nicht gut genug, um sicher zu sein.
Dann können Sie versuchen, eine Gleichung herauszufinden, wo Sie, wenn Sie die Breiten eingeben, die Sie probiert haben, erhalten Sie die manuellen 3D-Werte zurück, die Sie zuvor festgelegt haben. Verwenden Sie dann JS, um die Breite des Containers zu lesen und die CSS-Werte so einzustellen, dass sie richtig aussehen.
Ich habe getan, dass mit 3 Breiten 300, 450, 600:
http://jsfiddle.net/24qrQ/3/
Einige Trends liegen auf der Hand. Wenn die Breite zunimmt, nimmt die Perspektive mit zunehmender Geschwindigkeit zu und die Rotation nimmt mit zunehmender Geschwindigkeit ab.
Die genaue Formel herauszufinden, liegt jetzt bei Ihnen.
Als einfachere Alternative, wenn eine Formel zu schwierig wird, herauszufinden, können Sie manuell eine Handvoll Breiten und 3D-Werte kuratieren, die schön aussehen und speichern sie irgendwo in JS. Dann könnten Sie nur linear zwischen ihnen interpolieren. Es wäre nicht genau, aber es könnte nah genug sein.
Es wäre auch weniger Spaß!
Wow, das sieht cool aus :) –