CSS3鼠标悬停开门动画特效
CSS3中透视perspective
透视原理: 近大远小 。
浏览器透视:把近大远小的所有图像,透视在屏幕上。
理解浏览器的坐标系:浏览器平面为 Z=0的平面,坐标原点默认为图片的中心,可以通过更改透视原点进行更改。
perspective:视距,表示视点距离屏幕的长短。视点,用于模拟透视效果时人眼的位置。
perspectiveOrigin: 个人理解为视点的xy坐标,perspective则是z坐标,三者可以再三维中确定 视点的唯一位置。
perspective有两种定义方式,如下
.box{
perspective: 500px;
}
.box{
transform: prespective(500px)
}
个人关于两种书写方式的不同的理解是,
单独定义的perspective只在初次渲染时,投影在屏幕上。
写在transform中的perspective会根据transform动画的变化来进行重新的渲染。
所以当使用js或Css3进行动画时,尽量选择后一种定义方式。
使用的注意事项
perspective的定义要在其他3d变幻之前,否则无效 如translateZ等,这个也很好理解,要首先确定眼睛所在的位置,在屏幕上的成像才会有此计算。
呈现3d效果的父元素要添加transform-style:preserver-3d属性。该属性定义该元素的子元素按照3d效果来呈现。
backface-visibility 用来定义元素不是正面朝向视点时的可视情况 。
transform-origin设置旋转元素的基点位置
transform-origin: x-axis y-axis z-axis;
x-axis定义视图被置于 X 轴的何处。可能的值:left、center、right、length、%
y-axis定义视图被置于 Y 轴的何处。可能的值:left、center、right、length、%
z-axis定义视图被置于 Z 轴的何处。可能的值:length
html:
<div class="door"> <div class="left"></div> <div class="right"></div> </div>
css:
<style> *{ margin: 0; padding: 0; } html,body{ width: 100%; height: 100%; } .door{ width: 300px; height: 300px; margin: 100px auto; border: 1px solid gray; background-image: url('./img/dog.gif'); background-repeat: no-repeat; background-size: 100% auto; perspective: 500px; } .door>div{ box-sizing: border-box; border: 1px solid #000; } .left,.right{ float: left; width: 50%; height: 100%; background-color: brown; transition: all 1s; position: relative; } /* 设置左门的旋转基点 */ .left{ transform-origin: left center; } /* 设置右门的旋转基点 */ .right{ transform-origin: right center; } /* 绘制门上的小圆圈 */ .left::before, .right::before{ content: ''; width: 20px; height: 20px; border: 1px solid whitesmoke; border-radius: 50%; position: absolute; top: 50%; transform: translateY(-10px); } .left::before{ right: 0; } .right::before{ left: 0; } .door:hover .left{ transform: rotateY(-130deg); } .door:hover .right{ transform: rotateY(130deg); } </style>
注意:
鼠标悬停到.door盒子中的.left左侧盒子上的时候,和鼠标悬停到.door盒子中的.right右侧盒子上的时候,门旋转 沿着 Y轴旋转的几点位置:
关于原点位置的设置:
transform-origin属性含义
+
还没有留言,还不快点抢沙发?