我一直在为一个带有网格元素的库页面的原型工作,我希望在悬停这些元素时加入一些3D样式。
我正在研究以下文章中使用的技术:
我现在的原型部分实现了我想要实现的目标:http://jsfiddle.net/fmpeyton/8cs35/(注意:我现在只在Chrome中测试原型)
.resources{
-webkit-perspective: 1000px;
}
.resource{
/* -webkit-perspective: 800px; */
display: inline-block;
vertical-align: top;
position: relative;
margin: 10px;
transition: all .5s;
height: 259px;
-webkit-transform-style: preserve-3d;
}
.resource img{
width: 200px;
-webkit-transform: translate3d(0,0,20px);
}
.resource:hover{
-webkit-transform: rotate3d(0, 1, 0, 40deg);
}
.resource .title{
background: #999;
display: block;
position: absolute;
height: 259px;
-webkit-transform: rotate3d(0,1,0,-90deg);
width: 40px;
left: -20px;
}
.resource .title p{
font-size: 15px;
line-height: 40px;
padding-right: 10px;
text-align: right;
width: 240px;
height: 40px;
-webkit-transform-origin: 0 0;
-webkit-transform: rotate(90deg) translateY(-40px);
}
我的问题看起来归结为操纵perspective
属性。如果我向perspective
父元素添加.resources
,我会在第3行和第3行上获得所需的效果。前3个元素,但其他行不是我要追求的。我希望对每个.resource
元素都有相同的视角,而不是整个.resource
元素集的一个视角。
如果我向perspective
子元素添加.resource
,我会在每个元素上获得更均匀的透视分布。当我将鼠标悬停在上方时,脊柱(.title
)具有正确的外观(透视方式),但旋转时封面图像看起来不正确。看起来盖子只是水平地刷了一下:
.resource
元素的所需外观:
.resource
元素在旋转时具有相同的外观,看起来它们在3D空间中旋转?我知道我仍然可能完全缺乏对3D变换的理解,但希望这个问题/项目能够帮助我完成理解。
答案 0 :(得分:6)
透视有两种形式,作为属性或作为函数。
透视作为属性意味着要在被转换的元素的父元素上设置,并在需要自然设置(可以这么说)时指示每个元素呈现不同,因为与观众的相对位置是不同的。 (也就是说,视角属于场景,可以这么说)
透视作为一个函数意味着相反的情况,你有一堆对象,并且你希望所有这些对象都以相同的方式呈现。 (场景级别没有视角,但在元素级别。
您的要求与第二个要求相符,所以:
CSS
.resource{
display: inline-block;
vertical-align: top;
position: relative;
margin: 10px;
transition: all .5s;
height: 259px;
-webkit-transform-style: preserve-3d;
-webkit-transform: perspective(1000px) rotate3d(0, 1, 0, 0deg);
}
.resource:hover{
-webkit-transform: perspective(1000px) rotate3d(0, 1, 0, 40deg);
}
请注意,为了使转换顺利进行,我将转换设置为基本状态和悬停状态之间的相似
答案 1 :(得分:2)
当您将perspective
设置为.resources
时,所有子transform
都会从.resources
的角度进行渲染。
并且应该分别为每个包含图像+标题的块设置所需的效果perspective
。 rotate3d transform
应该应用于此容器的子容器,该容器需要div
的另一个.resource
子容器
<div class="resource">
<div class = "res">
<div class="title"><p>Whitepaper 1</p></div>
<img src="http://oi62.tinypic.com/20rldox.jpg">
</div>
</div>
.resource
{
-webkit-perspective: 1000px;
display: inline-block;
vertical-align: top;
position: relative;
margin: 10px;
height: 259px;
}
.res
{
transition: all .5s;
-webkit-transform-style: preserve-3d;
}
.resource:hover .res
{
-webkit-transform: rotate3d(0, 1, 0, 40deg);
}
您始终可以更改perspective-origin,这会对transform
产生不同的影响
要清楚了解perspective-origin
引用