# 第 24 章 CSS3 变形效果[下]
学习要点:
1.3D 变形简介
2.transform-style
3.perspective
4.3D 变形属性
主讲教师:李炎恢
本章主要探讨 HTML5 中 CSS3 的变形效果,主要接着上节课的 2D 平面变形转换到 3D 立体变形。
**一.****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 src="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);
}
```
- 介绍
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超链接和路径
- 第 5 章 分组元素
- 第 6 章 表格元素
- 第 7 章 文档元素
- 第 8 章 嵌入元素
- 第 9 章 音频和视频
- 第 10 章 表单元素[上]
- 第 10 章 表单元素[中]
- 第 10 章 表单元素[下]
- 第 11 章 全局属性和其他
- 第 12 章 CSS 入门
- 第 13 章 CSS 选择器[上]
- 第 14 章 CSS 颜色与度量单位
- 第 15 章 CSS 文本样式[上]
- 第 15 章 CSS 文本样式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 边框与背景[上]
- 第 17 章 CSS 边框与背景[下]
- 第 18 章 CSS 表格与列表
- 第 19 章 CSS 其他样式
- 第 20 章 CSS3 前缀和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 边框图片效果
- 第 24 章 CSS3 变形效果[下]
- 第 25 章 CSS3 过渡效果
- 第 26 章 CSS3 动画效果
- 第 27 章 CSS 传统布局[上]
- 第 27 章 CSS 传统布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 弹性伸缩布局[上]
- 第 29 章 CSS3 弹性伸缩布局[中]
- 第 29 章 CSS3 弹性伸缩布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介绍
- 第 2 章 排版样式
- 第 3 章 表格和按钮
- 第 4 章 表单和图片
- 第 5 章 栅格系统
- 第 6 章 辅组类和响应式工具
- 第 7 章 图标菜单按钮组件
- 第 8 章 输入框和导航组件
- 第 9 章 路径分页标签和徽章组件
- 第 10 章 巨幕页头缩略图和警告框组件
- 第 11 章 进度条媒体对象和 Well 组件
- 第 12 章 列表组面板和嵌入组件
- 第 13 章 模态框插件
- 第 14 章 下拉菜单和滚动监听插件
- 第 15 章 标签页和工具提示插件
- 第 16 章 弹出框和警告框插件
- 第 17 章 按钮和折叠插件
- 第 18 章 轮播插件
- 第 19 章 附加导航插件
- 第 20 章 项目实战--响应式导航[1]
- 第 20 章 项目实战--响应式轮播图[2]
- 第 20 章 项目实战--首页内容介绍[上][3]
- 第 20 章 项目实战--首页内容介绍[下][4]
- 第 20 章 项目实战--资讯内容[5,6]
- 第 20 章 项目实战--案例和关于[7]
- javaScript 教程
- javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境
- javascript快速入门2--变量,小学生数学与简单的交互
- javascript快速入门3--分支判断与循环
- javascript快速入门4--函数与内置对象
- javascript快速入门5--数组与对象
- javascript快速入门6--Script标签与访问HTML页面
- javascript快速入门7--ECMAScript语法基础
- javascript快速入门8--值,类型与类型转换
- javascript快速入门9--引用类型
- javascript快速入门10--运算符,语句
- javascript快速入门11--正则表达式
- javascript快速入门12--函数式与面向对象
- javascript快速入门13--BOM——浏览器对象模型(Browser Object Model)
- javascript快速入门14--DOM基础
- javascript快速入门15--节点
- javascript快速入门15--表单
- javascript快速入门16--表格
- javascript快速入门17--事件
- javascript快速入门18--样式
- javascript快速入门19--定位
- javascript快速入门20--Cookie
- javascript快速入门21--DOM总结
- javascript快速入门22--Ajax简介
- javascript快速入门23--XHR—XMLHttpRequest对象
- javascript快速入门24--XML基础
- javascript快速入门25--浏览器中的XML
- javascript快速入门26--XPath
- javascript快速入门27--XSLT基础
- PHP 教程
- 第一章 如何加载运行已发布的PHP项目
- 第二章 PHP基础
- 第三章 操作符与控制结构
- 第四章 数学运算
- 第五章 数组
- 第六章 目录与文件
- 第七章 自定义函数
- 第八章 字符串处理
- 第九章 正则表达式
- 第十章 日期与时间
- 第十一章 表单与验证
- 第十二章 会话控制
- 第十三章 上传文件
- 第十四章 处理图像
- 第十五章 MySQL 数据库
- 第十六章 PHP 操作MySQL
- 第十七章 面向对象基础
- 第十八章 面向对象的特性
- 第十九章 面向对象的工具