本文主要是介绍用CSS3简单实现和理解平面样式立体化的过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
观前提示
在前面学习到浮动和定位时,常常会出现一个元素覆盖的现象,而简单的平面的立体化就是将这些元素3D化,从视角方面看起来像一个立体形状,这就需要用到CSS3中的transform、transition和perspective等属性来实现。
perspective : 设置视距,透视将一个2D平面通过转换呈现3D效果,平面看屏幕时无变化,
透视原理: 近大远小; 800px 人类能够接触最完美的视距
transform:控制元素的变形操作,移动、旋转、3D转换、倾斜、缩放
属性:
transateX 控制元素在X轴上移动(平面向右移动)
transateY 控制元素在Y轴上移动(平面向下移动)
transateZ 控制元素在Z轴上的移动 (无视距perspective时,平面上translateZ无变化)
rotate() 平面旋转(顺时针)
rotateX() X轴的旋转 3D
rotateY() Y轴的旋转 3D
rotateZ() Z轴的旋转 3D
注:旋转,从一个平面矩形框开始
在3D空间呈现被嵌套(覆盖)的元素:transform-style: preserve-3d
改变旋转时轴的位置(正常情况是在正中心): transform-origin ---->可以跟多个值来确定轴心的具体位置
transition:过渡动画,一个变化的过程(从开始点到结束点有一个经历的阶段)
取值方式:
过渡的属性名称,可用transform等价all(全部)
过渡的所需时间 单位 ms s (当过渡设置时间时,就可以达到回溯的效果)
过渡的类型 :
linear 匀速变化
ease 由快到慢(逐渐变慢)
ease-in 越来越快
ease-out 越来越慢
ease-in-out 先加速再减速
延时
堆积元素立体化
当在平面上设置时:transform: translateX(100px) translateY(100px) translateZ(100px),translateZ无变化
而当设置在3D层面上时:
<style>/*去除网页自带的最外边的默认距离 */*{margin: 0;padding: 0;}/*整个页面上设置视距 */body{background-color: black;perspective: 800px;}/*采用子绝父相布局使多个覆盖元素脱离文档流 */ul{border: 1px solid gold;width: 300px;height: 400px;list-style: none;margin:100px auto;position: relative;transform-style: preserve-3d;}li{ box-shadow: 0px 0px 5px 5px gold;background-color: white; width: 100%;height: 100%;position: absolute;}/* 指向列表触发效果 */ul:hover{transition: all 1s;transform: rotate(20deg) rotateX(45deg);}/* 使列表项的每一项在Z轴上的距离不同 */ul:hover li:nth-of-type(6) {transition: all 1s 1s;transform:translateZ(120px);}ul:hover li:nth-of-type(5) {transition: all 1s 1.2s;transform:translateZ(100px);}ul:hover li:nth-of-type(4) {transition: all 1s 1.4s;transform:translateZ(80px);}ul:hover li:nth-of-type(3) {transition: all 1s 1.6s;transform:translateZ(60px);}ul:hover li:nth-of-type(2) {transition: all 1s 1.8s;transform:translateZ(40px);}ul:hover li:nth-of-type(1) {transition: all 1s 2s;transform:translateZ(20px);}</style>
</head>
<body><div><ul><li></li><li></li><li></li><li></li><li></li><li></li></ul></div>
</body>
书的翻页
由上述可知,对于书的翻页效果动画也是同样的思路,只是在做列表项的伪类时,采用的是旋转的方法来实现的:
<style>*{margin: 0px;padding: 0px;}body{background-color: black;perspective: 800px;}ul{border: 1px solid gold;width: 300px;height: 400px;list-style: none;margin:100px auto;position: relative;transform-style: preserve-3d;}li{ box-shadow: 0px 0px 5px 5px gold;background-color: white; width: 100%;height: 100%;position: absolute;transform-origin: left; }ul:hover{transition: all 1s;transform: rotateX(45deg) ; }ul:hover li:nth-of-type(6) {transition: all 1s 1s;transform:rotateY(-120deg);}ul:hover li:nth-of-type(5) {transition: all 1s 1.2s;transform:rotateY(-100deg);}ul:hover li:nth-of-type(4) {transition: all 1s 1.4s;transform:rotateY(-80deg);}ul:hover li:nth-of-type(3) {transition: all 1s 1.6s;transform:rotateY(-60deg);}ul:hover li:nth-of-type(2) {transition: all 1s 1.8s;transform:rotateY(-40deg);}ul:hover li:nth-of-type(1) {transition: all 1s 2s;transform:rotateY(-20deg);}</style>
</head>
<body><ul><li></li><li></li><li></li><li></li><li></li><li></li></ul>
</body>
这篇关于用CSS3简单实现和理解平面样式立体化的过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!