Ответ 1
Вы правы. Когда объект движется к вам (т.е. translateZ
), он становится больше (т.е. scale
).
Как показано на этой диаграмме, perspective
определяет, где средство просмотра относится к контейнеру, а translateZ
определяет, где объект относится к контейнеру.
Формула перейти от шкалы к translateZ (и обратно):
-OR-
Я оставлю математическое доказательство математическому свисту, но я сделал некоторую проверку с помощью пифагорейской теоремы и все получилось.
Пример:
Скажем, вы 100px из контейнера: #container { perspective: 100px; }
- Если вы
translateZ(50px)
, объект переместится на полпути к вам и будет отображаться в два раза большим, делая его 2x. - Если вы
translateZ(75px)
, объект переместился еще на полпути ближе и снова удвоится, сделав его 4 раза. - Если вы продолжаете делать это, по мере приближения к
translateZ(100px)
, объект будет приближаться к бесконечно большому.
Попробуйте. Здесь JSFiddle для визуального сравнения различных примеров.
Ограничения:
Это работает, если объект движется прямо к вам, но разваливается, если вы делаете что-то вроде поворота объекта в трехмерном пространстве. Для этого есть математика, но она усложняется. Проверьте 3D-проецирование на википедию.