css как высчитывается perspective?

200
20 марта 2017, 07:12

Я уже замучился понимать математику как считается перспектива..

Что мне нужно:

как размеры блока (хоть 1 сторона) зависит от велечины perspective : <length>

Что я уже узнал:

1) чтоб работала перспектива, нужно еще указывать и угол поворота, к примеру transform: rotateY(60deg) 2) какая ширина блока получится (если не применять перспективу), можно высчитать по косинусу угла, например 60 градусов это 1/2 (или 0,5) блок был 300 пикселей, стал 150; 30 градусов - 0,866... 45 градусов - 0,7...

Вопрос, как математически понять перспективу? на глаз мне не подходит подтягивать все и вся..

P.S. извините, если вопрос упорот

Answer 1

@keyframes _img{ 
0%{ 
-webkit-transform:rotateX(-360deg) translateZ(100px) rotateX(360deg); 
transform:rotateX(-360deg) translateZ(100px) rotateX(360deg); 
} 
100%{ 
-webkit-transform:rotateX(0deg) translateZ(100px) rotateX(0deg); 
transform:rotateX(0deg) translateZ(100px) rotateX(0deg); 
} 
} 
div 
{  
border:1px solid hsla(0,0%,100%,1); 
display:block; 
position: relative; 
width:calc(60vw); 
height:calc(20vw); 
margin:0% auto; 
background:hsla(0,0%,60%,1); 
box-shadow:inset .75em .75em .75em hsla(0,0%,100%,1),inset -.75em -.75em .75em hsla(0,0%,100%,1); 
perspective:700px; 
transform-style:preserve-3d; 
transition:all 1s linear 0s; 
} 
img { 
border-radius: 50%; 
border:1px solid hsla(0,0%,60%,1); 
position:absolute; 
width:calc(8vw); 
height:calc(8vw); 
top:calc(100%/3 - 3%); 
left:calc(100%/2 - 10%); 
-webkit-filter: drop-shadow(0px 0px 40px  hsla(70,80%,40%,1)); 
-webkit-transform:rotateX(0deg) translateZ(160px) rotateX(0deg); 
filter: drop-shadow(0px 0px 40px  hsla(70,80%,40%,1)); 
transform:rotateX(0deg) translateZ(160px) rotateX(0deg); 
} 
div:hover img{ 
 animation:_img 3s infinite linear; 
}
<div > 
		<img src="http://i.imgur.com/3DWAbmN.jpg" /> 
</div>

Answer 2

div 
{ 
margin:0;  
padding:0; 
border:1px solid hsla(0,0%,100%,1); 
display: inline-block; 
position: relative; 
width:calc(28vw); 
height:calc(28vw); 
background:transparent; 
perspective:700px; 
transform-style:preserve-3d; 
} 
.str{ 
	position:absolute; 
	top:calc(100%/4 - 1%); 
	left:calc(100%/2 - 10%); 
  width: 0px; 
  height:calc(5vw); 
  border-left:calc(5vw) solid black; 
  border-top:calc(5vw) solid transparent; 
  border-bottom:calc(5vw) solid transparent; 
  border-right: transparent; 
  background: transparent; 
  transform: rotateX(0deg) translateZ(110px); 
  transition:transform 2s; 
} 
 
div:hover .str{ 
transform: rotateX(360deg) translateZ(110px); 
} 
 
.str_1{ 
	position:absolute; 
	top:calc(100%/4 - 1%); 
	left:calc(100%/2 - 10%); 
  width: 0px; 
  height:calc(5vw); 
  border-left:calc(5vw) solid black; 
  border-top:calc(5vw) solid transparent; 
  border-bottom:calc(5vw) solid transparent; 
  border-right: transparent; 
  background: transparent; 
  transform: rotateY(0deg) translateZ(110px); 
  transition:transform 2s; 
} 
 
div:hover .str_1{ 
transform: rotateY(360deg) translateZ(110px); 
} 
 
.str_3{ 
	position:absolute; 
	top:calc(100%/4 - 1%); 
	left:calc(100%/2 - 10%); 
  width: 0px; 
  height:calc(5vw); 
  border-left:calc(5vw) solid black; 
  border-top:calc(5vw) solid transparent; 
  border-bottom:calc(5vw) solid transparent; 
  border-right: transparent; 
  background: transparent; 
  transform:  skewY(0deg) translate(0px) ; 
  transition:transform 2s; 
} 
 
div:hover .str_3{ 
transform:  skewY(360deg) translate(10px); 
}
<div> 
		<div class="str"></div> 
</div> 
<div> 
		<div class="str_1"></div> 
</div> 
<div> 
		<div class="str_3"></div> 
</div>

READ ALSO
CSS Анимация движения картинки

CSS Анимация движения картинки

ЗдравствуйтеПодскажите, как заставить картинку по достижению определенной точки двигаться обратно? Что я имею:

502
условие в html-странице на Go

условие в html-странице на Go

Хочу сделать постраничность, передаю структуру в html-страницу, потом хочу сделать условие:

248
Обработчик в WPF

Обработчик в WPF

Работаю с проектом на WPF, взаимодействие(связь) между View и ViewModel выполняется через catelКаждому представлению xxxView

284
Ray из 2D коллайдера

Ray из 2D коллайдера

Когда нечего было делать, нашел функцию Raycast у класса Collider2D в unityМне стало интересно, откуда будет пускаться луч (я подумал, что из всех точек...

352