Поворот изображения с вид спереди на левый вид с 3D-эффектом - PullRequest
1 голос
/ 20 марта 2020

Я использую приведенный ниже код для поворота изображения, но я могу добиться только поворота изображения из вида спереди в вид снизу. Я хочу повернуть изображение от вид спереди до левого вида. Как мне этого добиться?

body {
  height: 100vh;
  margin: 0;
}

.thumb {
  width: 600px;
  height: 400px;
  perspective: 1000px;
}

.thumb a {
  display: block;
  width: 100%;
  height: 100%;
  background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url("https://i.imgur.com/9NVqw8Q.jpg");
  background-size: 0, cover;
  transform-style: preserve-3d;
  transition: all 0.5s;
}

.thumb:hover a {
  transform: rotateX(80deg);
  transform-origin: bottom;
}

.thumb a:after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 36px;
  background: inherit;
  background-size: cover, cover;
  background-position: bottom;
  transform: rotateX(90deg);
  transform-origin: bottom;
}

.thumb a:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  box-shadow: 0 0 100px 50px rgba(0, 0, 0, 0.5);
  transition: all 0.5s;
  opacity: 0.15;
  transform: rotateX(95deg) translateZ(-80px) scale(0.75);
  transform-origin: bottom;
}

.thumb:hover a:before {
  opacity: 1;
  box-shadow: 0 0 25px 25px rgba(0, 0, 0, 0.5);
  transform: rotateX(0) translateZ(-60px) scale(0.85);
}
<div class="thumb">
  <a href="#"></a>
</div>

Ответы [ 2 ]

2 голосов
/ 20 марта 2020
  1. Изменить rotateX на rotateY, поскольку вид слева использует вертикальную ось.

  2. Измените transform-origin на left, поскольку мы преобразуем левую сторону в качестве точки вращения.

  3. Примените аналогичные изменения к псевдоэлементам для 3D вид, как упомянуто @kaiido. Я прокомментировал сделанные изменения.

body {
  height: 100vh;
  margin: 0;
}

.thumb {
  width: 600px;
  height: 400px;
  perspective: 1000px;
  margin: 100px; /* For snippet spacing */
}

.thumb a {
  display: block;
  width: 100%;
  height: 100%;
  background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url("https://i.imgur.com/9NVqw8Q.jpg");
  background-size: 0, cover;
  transform-style: preserve-3d;
  transition: all 0.5s;
}

.thumb:hover a {
  transform: rotateY(45deg); /* 1 - From rotateX */
  transform-origin: left; /* 2 - From bottom */
}

.thumb a:after {
  content: '';
  position: absolute;
  left: 0px;
  bottom: 0;
  width: 36px; /* Interchanged width and height because horizontal transformation is now vertical transformation */ 
  height: 100%;
  background: inherit;
  background-size: cover, cover;
  background-position: bottom;
  transform: rotateY(90deg); /* 1 - From rotateX */
  transform-origin: left; /* 2 - From bottom */
}

.thumb a:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  box-shadow: 0 0 100px 50px rgba(0, 0, 0, 0.5);
  transition: all 0.5s;
  opacity: 0.15;
  transform: rotateY(15deg) translateZ(-40px) scale(0.75); /* 3 - From rotateX */
  transform-origin: bottom;
}

.thumb:hover a:before {
  opacity: 1;
  box-shadow: 0 0 25px 25px rgba(0, 0, 0, 0.5);
  transform: rotateY(0) translateZ(-60px) scale(0.85); /* 3 - From rotateX */
}
<div class="thumb">
  <a href="#"></a>
</div>
0 голосов
/ 20 марта 2020

@ Маной-Кумар прав. используйте от rotateX до rotateY

, также вы должны установить transform-origin и position для :after, чтобы обернуть его влево

скрипка: https://jsfiddle.net/hellooutlook/6sagLtpk/2/

body {
  height: 100vh;
  margin: 0;
}

.thumb {
  margin: 100px;
  width: 600px;
  height: 400px;
  perspective: 1000px;
}

.thumb a {
  display: block;
  width: 100%;
  height: 100%;
  background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url("https://i.imgur.com/9NVqw8Q.jpg");
  background-size: 0, cover;
  transform-style: preserve-3d;
  transition: all 0.5s;
}

.thumb:hover a {
  transform: rotateY(60deg);
  /* From rotateX */
  transform-origin: left;
  /* From bottom */
}

.thumb a:after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  width: 30px;
  height: 100%;
  background: inherit;
  background-size: cover, cover;
  background-position: bottom;
  transform: rotateY(110deg);
  transform-origin: left;
  /* extra */
  border-top-right-radius: 3px;
  border-bottom-right-radius: 3px;
}

.thumb a:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  box-shadow: 0 0 100px 50px rgba(0, 0, 0, 0.5);
  transition: all 0.5s;
  opacity: 0.15;
  transform: rotateX(15deg) translateZ(-40px) scale(0.75);
  transform-origin: bottom;
}

.thumb:hover a:before {
  opacity: 1;
  box-shadow: 0 0 25px 25px rgba(0, 0, 0, 0.5);
  transform: rotateX(0) translateZ(-60px) scale(0.85);
}
<div class="thumb">
  <a href="#"></a>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...