Все зависит от perspective-origin
, который определяет, как изменения должны быть видимы для нас.
Если вы прочитаете ту же ссылку, вы заметите это:
The точка схода по умолчанию размещена в центре элемента, но ее положение можно изменить с помощью свойства origin-origin.
Вот несколько примеровгде вы можете лучше понять:
.wrapper {
position: relative;
height: 100px;
width: 100px;
border: 1px solid;
perspective: 10px;
transform-style: preserve-3d;
}
.cube {
width: 100%;
height: 100%;
background: red;
animation: change 2s linear infinite alternate;
}
@keyframes change {
to {
transform: translateZ(-10px);
}
}
moving from the center
<div class="wrapper">
<div class="cube"></div>
</div>
moving from the left
<div class="wrapper" style="perspective-origin:left">
<div class="cube"></div>
</div>
moving from a custom point
<div class="wrapper" style="perspective-origin:20% 80%">
<div class="cube"></div>
</div>
Необходимо также обратить внимание, когда вы имеете дело с элементом блока по умолчанию, имеющим width:100%
, поскольку позиция будет считать родительский элемент не дочерним.
Уберите ширину и увидите разницу:
.wrapper {
position: relative;
border: 1px solid;
perspective: 10px;
transform-style: preserve-3d;
}
.cube {
width: 100px;
height: 100px;
background: red;
animation: change 2s linear infinite alternate;
}
@keyframes change {
to {
transform: translateZ(-10px);
}
}
moving from the center
<div class="wrapper">
<div class="cube"></div>
</div>
moving from the left
<div class="wrapper" style="perspective-origin:left">
<div class="cube"></div>
</div>
moving from a custom point
<div class="wrapper" style="perspective-origin:20% 80%">
<div class="cube"></div>
</div>
В вышеприведенных кодах родительский контейнер управляет перспективой.Вы можете переместить это в дочерний элемент следующим образом:
.wrapper {
position: relative;
border: 1px solid;
}
.cube {
width: 100px;
height: 100px;
background: red;
animation: change 2s linear infinite alternate;
}
@keyframes change {
to {
transform: perspective(10px) translateZ(-10px);
}
}
moving from the center
<div class="wrapper">
<div class="cube"></div>
</div>
moving from the left
<div class="wrapper" >
<div class="cube" style="transform-origin:left"></div>
</div>
moving from a custom point
<div class="wrapper" >
<div class="cube" style="transform-origin:20% 80%"></div>
</div>
Как видите, мы контролируем источник, используя transform-origin
, потому что мы используем перспективу transform-function и не болеесвойство.
Измените perspective-origin
и ничего не произойдет
.wrapper {
position: relative;
border: 1px solid;
}
.cube {
width: 100px;
height: 100px;
background: red;
animation: change 2s linear infinite alternate;
}
@keyframes change {
to {
transform: perspective(10px) translateZ(-10px);
}
}
moving from the center
<div class="wrapper">
<div class="cube"></div>
</div>
moving from the left
<div class="wrapper" style="perspective-origin:left">
<div class="cube" style="perspective-origin:left"></div>
</div>
moving from a custom point
<div class="wrapper" style="perspective-origin:20% 80%">
<div class="cube" style="perspective-origin:20% 80%"></div>
</div>