Что такое формуляр для вычисления ширины/высоты дочерних элементов с translateZ
внутри родительского контейнера с набором perspective
(ключевое слово: "parallax" ) относительно его родителей width/height?
Я хотел бы создать сайт с эффектом параллакса на обеих осях. Мне удалось выяснить все, что мне нужно для моего макета, кроме одного. Как рассчитать ширину/высоту детей, когда он превышает 100%. Из-за того, что родители смотрят на перспективу и переводили детейZ, ширина/высота детей снизу визуально не выравниваются с шириной и высотой родителей.
Формуляр для масштабирования дочерних элементов: 1 + (translateZ * -1) / perspective
. Но я не смог найти формуляр для ширины/высоты. BTW: Когда детская ширина/высота <= 100% все работает нормально.
Но см. Результат на изображении ниже, когда ширинa >= 100% (контейнеры имеют верхнее смещение, чтобы сделать видимыми вещи).
Чтобы быть точным, подход в моем конкретном случае состоит в том, чтобы все дочерние элементы имели визуально одинаковые ширины/высоты.
в SASS (предпочтительный): PEN или SassMeister
в CSS: PEN
ссылки из спецификаций, которые могут помочь:
https://www.w3.org/TR/css-transforms-1/#recomposing-to-a-3d-matrix
https://www.w3.org/TR/css-transforms-1/#mathematical-description
"Googled" много, но не нашел ничего, указывающего на меня в правильном направлении. Спасибо заранее...
html, body {
height: 100%;
overflow: hidden;
width: 100%;
}
#projection {
perspective: 1px;
perspective-origin: 0 0;
height: 100%;
overflow: auto;
width: 100%;
}
.pro {
transform: scale(1) translate(0px, 0px) translateZ(0px);
height: 100%;
position: absolute;
transform-origin: 0 0;
transform-style: preserve-3d;
width: 100%;
}
.pro--1 {
transform: scale(4) translate(0px, 0px) translateZ(-3px);
width: 110%;
}
.pro--2 {
transform: scale(3) translate(0px, 50%) translateZ(-2px);
width: 110%;
}
.pro--3 {
transform: scale(2) translate(0px, 100%) translateZ(-1px);
width: 110%;
}
.pro {
background: #333;
box-shadow: inset 0 0 0 5px orange;
color: orange;
font-size: 4em;
line-height: 1em;
text-align: center;
}
.pro--2 {
background: rgba(75, 75, 75, 0.5);
box-shadow: inset 0 0 0 5px green;
color: green;
line-height: 4em;
}
.pro--3 {
background: rgba(75, 75, 75, 0.5);
box-shadow: inset 0 0 0 5px white;
color: white;
line-height: 7em;
}
<div id="projection">
<div class="pro pro--1">pro--1</div>
<div class="pro pro--2">pro--2</div>
<div class="pro pro--3">pro--3</div>
</div>