热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

[18]CSS3变形效果(下)

一.3D变形简介HTML5中CSS3的变形效果,主要接着上节课的2D平面变形转换到3D立体变形。之前的元素的平移、旋转、缩放和倾斜等功能。这些效果只是单纯在二维平面图上的

一.3D 变形简介

HTML5 中 CSS3 的变形效果,主要接着上节课的 2D 平面变形转换到 3D立体变形。

之前的元素的平移、旋转、缩放和倾斜等功能。这些效果只是单纯在二维平面图上的,我们称之为 2D。那么其实 CSS3也提供了三维立体的一些功能效果,并且目前较新的主流浏览器都比较支持,只不过比 2D 晚一些,对浏览器的版本要求也要高一些。

由于 3D 是立体三维,在 x、y 轴的基础上一般会多出一个 z 轴,深入跃出轴。以下是3D 变形的属性值表,如下:

属性值 说明
translate3d(x,y,z) 3D 方式平移元素,设置 x、y 和 z 轴
translateZ(z) 设置 3D方式平移元素的 z 轴
scale3d(x,y,z) 3D 方式缩放一个元素
scaleZ(z) 设置 3D方式缩放元素的 z 轴
rotate3d(x,y,z,a) 3d 方式旋转元素
rotateX(a) 分别设置 3D方式的旋转元素的 x、y 和 z 轴
rotateY(a) ~
rotateZ(a) ~
perspective(长度值) 设置一个透视投影矩阵
matrix3d(多个值) 定义一个矩阵

3D 变形比 2D 变形出来的要晚一些,所以如果需要兼容旧版本浏览器,可以对照这个表。具体如下:

支持度 Opera Firefox Chrome Safari IE
支持需带前缀 15 ~ 22 10 ~15 12 ~ 35 4 ~ 8
支持不带前缀 23+ 16+ 26+ 10.0+
//兼容版本完整形式
-webkit-transform: translateZ(200px);
-moz-transform: translateZ(200px);
-o-transform: translateZ(200px);
-ms-transform: translateZ(200px);
transform: translateZ(200px);

二.transform-style

transform-style 属性是指定嵌套元素如何在 3D 空间中呈现。

属性值 说明
flat 默认值,表示所有子元素在 2D 平面呈现。
preserve-3d 表示子元素在 3D 空间中呈现。
//一般设置到当前元素的父元素
transform-style: preserve-3d;

需要再配合后面的功能属性和变形配置,才能看到效果。同样,这个属性也需要加上各种厂商前缀。

三.perspective

perspective 是 3D 变形的重要属性,该属性会设置查看者的位置,并将可视内容映射到一个视锥上,继而投放到一个 2D 平面上。

属性值 说明
none 默认值,表示无限的角度来看 3D物体,但看上去是平的。
长度值 接受一个长度单位大于 0 的值,其单位不能为百分比。值越大,角度出现的越远,就好比你人离远一点看物体。值越小,正相反。
//设置查看者的距离位置,一般设置在元素的父元素上
perspective:1000px;

需要再配合后面的功能属性和变形配置,才能看到效果。同样,这个属性也需要加上各种厂商前缀。

四.3D 变形属性

我们运用前面 3D 功能属性 transform-style 和 perspective 来构建3D 变形效果。

1.translate3d(x,y,z)

//需要 3D 位移的 HTML 结构,必须有父元素包含
<div id="a">
    "img.png" alt=""/>
div>

//CSS 部分,父元素设置 3D 呈现且设置透视距离
#a {
    perspective:1000px;
    transform-style: preserve-3d;
}

img {
    //z 轴可以是负值
    transform: translate3d(300px,100px,240px);
}

2.translateZ(z)

//可以单独设置 z 轴,z 轴可以是负值
img {
    transform: translateZ(240px);
}

3.scale3d(x,y,z)

//3D 缩放,单独设置无效,需要配合角度
img {
    transform: scale3d(1,1,1.5) rotateX(45deg);
}

4.scaleZ(z)

//单独设置 z 轴,x 和 y 轴默认为 1
img {
    transform: scaleZ(1.5) rotateX(45deg);
}

5.rotate3d(x,y,z,a)

//设置 3D 旋转,a 表示角度,xyz 是 0 或 1 之间的数值
transform: rotate3d(1,0,0,45deg);

6.rotateX(a) 、rotateY(a) 、rotateZ(a)

//单独设置 3D 旋转
transform: rotateX(45deg);
transform: rotateY(45deg);
transform: rotateZ(45deg);
transform: rotateX(45deg)rotateY(45deg) rotateZ(45deg);

最后一个 matrix3d 就不多说了,忽略。
CSS3 还提供了 perspective-origin 属性来设置 3D 变形中的源点角度。该属性默认值为 50% 50%也就是 center center。

属性值 说明
百分数值 指定元素 x 轴或 y 轴的起点
长度值 指定距离
left 指定 x 轴的位置
center ~
right ~
top 指定 y 轴的位置
center ~
bottom ~
//源点设置为右上方变形
perspective-origin: top right;

CSS3 还提供了一个在元素中设置透视的值 perspective(长度值),但它还是和在父元素设置有一定不同。因为父元素整个作为透视,而元素自己作为透视,导致不同。

//具体测试看透视的距离
img {
    transform: perspective(1000px) rotateY(45deg);
}

推荐阅读
author-avatar
Chen.X.Jie
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有