Как я могу преобразовать div в наклонную перспективу? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь преобразовать мой div как зеленое поле.

enter image description here

Я хочу получить 3D-преобразование, а не маску:

enter image description here

Я нашел способ с этим генератором , но код css не работает на моей скрипке:

/*transform css3*/ 
#screen { 
    transform: scale(1.0) scaleZ(1.0) rotateX(-16deg);
    transform-origin: 0% 0%;
    perspective: 450;
    perspective-origin: 100% 50%;
}

enter image description here

body {
    height:100%;
    padding:0;
    margin:0;
}

#mask {
    background:url(https://i.stack.imgur.com/cBK0O.png) no-repeat;
    background-size:350px;
    height:200px;
    position:relative;
}

#screen:hover {
    background:url(https://www.actugaming.net/wp-content/uploads/2018/06/Assassins-Creed-Odyssey_Leak_06-10-18_015-1.jpg);
    background-size:100%;
}

#screen {
    position:absolute;
    bottom:38px;
    background:red;
    opacity:0.6;
}
   
#screen { 
    left:70px;
    width:240px;
    height:calc(240px * 9 / 16); /*keep 16/9 !*/
}

/*transform css3*/ 
#screen { 
    transform: scale(1.0) scaleZ(1.0) rotateX(-16deg);
    transform-origin: 0% 0%;
    perspective: 450;
    perspective-origin: 100% 50%;
}
<div id="mask">
<div id="screen"></div>
</div>

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Как я уже сказал в своем комментарии .Я не устанавливаю свойство перспективы в хорошем каталоге!С некоторыми изменениями я получил хороший рендер:

final render

body {
  border: 1px solid black;
  display:inline-block;
  padding: 0;
  margin: 0;
}

#mask {
  background: url(https://i.stack.imgur.com/cBK0O.png) no-repeat;
  background-size: 350px;
  height: 200px;
  width: 400px;
  position: relative;
  perspective: 16px;
  /*perspective-origin:45% 1%;*/
  perspective-origin: 355px 2px;
}

#perpectiveorigin {
  height: 6px;
  width: 6px;
  position: absolute;
  background: red;
  left:352px;
  top:-1px;
}

#screen:hover {
  background: url(https://www.actugaming.net/wp-content/uploads/2018/06/Assassins-Creed-Odyssey_Leak_06-10-18_015-1.jpg);
  background-size: 100%;
}

#screen {
  position: absolute;
  bottom: 26px;
  background: red;
  opacity: 0.6;
}

#screen {
  left: 47px;
  width: 252px;
  height: calc(252px * 9 / 16);
  /*keep 16/9 !*/
}


/*transform css3*/

#screen {
  transform: rotateX(-1.05deg);
}
<div id="mask">
  <div id="screen"></div>
</div>
<div id="perpectiveorigin"></div>
0 голосов
/ 22 февраля 2019

Если вы хотите эту форму, вы можете использовать clip-path вместо transform.Это дает вам большой контроль над формой, которую вы получаете.Вот хороший инструмент, который вам поможет: https://bennettfeely.com/clippy/

Используя transform, вы можете наклонить изображение, чтобы добиться эффекта 3d на фоне / div-контенте.

#screen:hover {
  background: url(https://www.actugaming.net/wp-content/uploads/2018/06/Assassins-Creed-Odyssey_Leak_06-10-18_015-1.jpg);
  background-size: 100%;
}

#screen {
  position: absolute;
  background: red;
  opacity: 0.6;
  left: 70px;
  width: 240px;
  height: calc(240px * 9 / 16);
  /*keep 16/9 !*/
  
  transform-origin: bottom right;
    -ms-transform: skew(20deg, 0deg);
    -webkit-transform: skew(20deg, 0deg);
    transform: skew(20deg, 0deg);
}
<div id="screen"></div>
0 голосов
/ 22 февраля 2019

Вам нужно вращение, а также перспектива, чтобы иметь нижний правый угол как начало координат.Обратите внимание, что перспектива должна быть применена к родительскому элементу:

.box {
  display:inline-block;
  perspective-origin:bottom right;
  perspective:100px;
}

img {
  margin:30px 50px;
  transform:rotateX(-8deg);
  width:250px;
}
<div class="box">
<img src="https://www.actugaming.net/wp-content/uploads/2018/06/Assassins-Creed-Odyssey_Leak_06-10-18_015-1.jpg" >
</div>

Или используйте перспективу внутри преобразования и настройте начало преобразования, а не начало перспективы:

img {
  margin: 30px 50px;
  transform: perspective(100px) rotateX(-8deg);
  width: 250px;
  transform-origin: bottom right
}
<div class="box">
  <img src="https://www.actugaming.net/wp-content/uploads/2018/06/Assassins-Creed-Odyssey_Leak_06-10-18_015-1.jpg">
</div>
0 голосов
/ 22 февраля 2019

Вы можете попробовать использовать transform: skew, это ссылка для W3Schools, объясняющая преобразование skew, для вашего div вы можете добавить эту строку

#screen {
    transform: scale(1) skew(23deg);
}
...