书签 分享 收藏 举报 版权申诉 / 15

类型CSS3景深三维变换属性及旋转三维立方体的实现.docx

  • 文档编号:30640203
  • 上传时间:2023-08-18
  • 格式:DOCX
  • 页数:15
  • 大小:696.17KB

.stage{

width:

200px;

height:

200px;

border:

1pxsolidblack;

margin:

100pxauto;

}

.stage.demo{

width:

200px;

height:

200px;

background-color:

orangered;

transform:

rotateX(45deg);

}

在这个例子中,我们把内部元素绕x轴旋转了45°后,由于他只是在二次元旋转,所以我们根本看不出来它旋转,但是我们现在加个景深

.stage{

width:

200px;

height:

200px;

border:

1pxsolidblack;

margin:

100pxauto;

perspective:

500px;/*增*/

}

.stage.demo{

width:

200px;

height:

200px;

background-color:

orangered;

transform:

rotateX(45deg);

}

这就相当于我们在舞台元素的中心位置往里看,这个子元素距离我们肉眼有500px,由于子元素的顺时针旋转,元素上半部分离我们远,所以看起来很小,元素下半部分离我们近,所以看起来稍大,这样就会产生很强的立体感

刚才我说道我们的肉眼相当于在舞台元素中心的位置,其实这个“眼睛”的位置是可以调整的,这用到了perspective-origin属性,默认的属性值就是50%50%,也就是舞台元素的中心位置,我们可以尝试调整视角。

.stage{

width:

200px;

height:

200px;

border:

1pxsolidblack;

margin:

100pxauto;

perspective:

500px;

perspective-origin:

10px10px;/*增*/

}

.stage.demo{

width:

200px;

height:

200px;

background-color:

orangered;

transform:

rotateX(45deg);

}

这就相当于在舞台元素的距离原点(左上)10px,10px的位置往里看,理解这个需要我们一定的空间立体感

注意:

景深大小一定要比你的动画元素大(我们不可能看到眼睛后面的东西)

景深的另一种用法,是应用在动画元素(不是舞台元素)变形的函数中,和其他变形函数写在一起

.stage.demo{

......

transform:

rotateX(45deg)perspective(100px);

}

3D属性transform-style

这个属性指定了子元素如何在空间中展示,只有两个属性值:

flat(默认)和preserve-3d,flat表示所有子元素在2D平面呈现,preserve-3d表示所有子元素在3D平面呈现,(prederve是保护、维持的意思,preserve-3d就是保持三维空间的意思),当然如果我们想要3D的效果,就要使用 transform-style:

preserve-3d;

这个属性只是针对设置属性元素的子元素如何展示,而对子元素的子元素无效,而且对于设置了overflow:

hidden;的元素,设置3D效果会失效,道理很简单,跳出了父元素平面的子元素无法显示了,结果自然还是2D效果,应用于这个属性的元素我们称作“容器”,这个属性我们下面通过一个例子再来体会

背面可见属性backface-visibility

通过这个元素我们可以指定当元素背对我们时是否可见,只有两个属性值visibility(默认)和hidden,如果我们希望元素背对我们不可见,就这样设置

.demo{

...

backface-visibility:

hidden;

}

下面我通过一个例子来把上面讲到的属性全部实践一下

示例:

旋转的三维立方体

--舞台元素,视角所在-->

--动画容器,通过它来控制整个立方体-->

  • --动画元素,立方体的六个面-->

  • ul{/*调整ul标签的样式,取消内边距、外边距,和“点”样式*/

    padding:

    0;

    margin:

    0;

    list-style-type:

    none;

    }

    .stage{/*设置舞台元素在屏幕居中,设置合适的景深大小*/

    position:

    relative;

    width:

    800px;

    height:

    800px;

    margin:

    100pxauto;

    perspective:

    800px;

    }

    @keyframesmove{/*设置动画关键帧*/

    0%{

    transform:

    rotateX(0deg);

    }

    25%{

    transform:

    rotateX(180deg);

    }

    50%{

    transform:

    rotateX(360deg)rotateY(0deg);

    }

    75%{

    transform:

    rotateX(360deg)rotateY(180deg);

    }

    100%{

    transform:

    rotateX(360deg)rotateY(360deg);

    }

    }

    .stage.three-d-box{/*动画容器居中在舞台元素中间*/

    width:

    200px;

    height:

    200px;

    position:

    absolute;

    left:

    50%;

    top:

    50%;

    margin:

    -100px00-100px;

    transform-style:

    preserve-3d;/*设置3D属性让子元素三维空间呈现*/

    animation:

    move3slinearinfinite;/*设置动画*/

    }

    .stage.three-d-box>li{/*设置动画子元素公共属性*/

    position:

    absolute;

    width:

    200px;

    height:

    200px;

    left:

    0;

    top:

    0;

    font-size:

    50px;

    line-height:

    200px;

    text-align:

    center;

    opacity:

    0.5;

    }

    /*为了保证我们对立方体位置的控制,我们需要让动画容器在立方体的中间位置*/

    .stage.three-d-box>li:

    nth-child

    (1){

    background-color:

    red;

    transform:

    translateZ(-100px);

    }

    .stage.three-d-box>li:

    nth-child

    (2){

    background-color:

    greenyellow;

    transform:

    translateZ(100px);

    }

    .stage.three-d-box>li:

    nth-child(3){

    background-color:

    cornflowerblue;

    transform:

    rotateX(90deg)translateZ(100px);

    }

    .stage.three-d-box>li:

    nth-child(4){

    background-color:

    orangered;

    transform:

    rotateX(-90deg)translateZ(100px);

    }

    .stage.three-d-box>li:

    nth-child(5){

    background-color:

    deeppink;

    transform:

    rotateY(90deg)translateZ(100px);

    }

    .stage.three-d-box>li:

    nth-child(6){

    background-color:

    lightcoral;

    transform:

    rotateY(-90deg)translateZ(100px);

    }

    大功告成

    这样我们就会得到如下酷炫的三维立方体

    注意在3D变换transform中,旋转与位移函数的顺序不同,元素展现的位置是不同的,这是因为元素的坐标轴是随着我们变换而变化的。

    上面的代码如果有不明白的地方,可以拷贝到浏览器进行调试,整体的思路就是

    1.设置舞台元素(perspective:

    xxxpx)

    2.设置动画容器(transform-style:

    preserve-3d)

    3.通过旋转、位移调整动画子元素的位置

    4.对动画容器应用动画效果

    最后我们通过这个正方体来加深三维变换相关属性的理解

    backface-visibility

    添加样式前的正方体

    现在我们来添加样式

    .stage.three-d-box>li{

    ......

    backface-visibility:

    hidden;

    }

    大家来找茬,可以看到背对我们的元素全部看不见了,这就是backface-visibility:

    hidden;的作用

    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    CSS3 景深 三维 变换 属性 旋转 立方体 实现
    提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:CSS3景深三维变换属性及旋转三维立方体的实现.docx
    链接地址:https://www.bdocx.com/doc/30640203.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开