Xin's blog Xin's blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

Xin

英雄可不能临阵脱逃啊~
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • HTML

  • CSS

    • 知识点

      • CSS教程和技巧收藏
      • CSS单位
      • CSS选择器
      • CSS函数
      • CSS属性
      • CSS3之transition过渡
      • CSS3之transform
        • CSS 中的x、y、z轴
        • translate
        • rotate
        • scale
        • 综合写法
        • perspective
        • transform-style
        • 案例
      • CSS3之animation动画
      • CSS3 filter 和 backdrop-filter
      • CSS3 resize属性
      • CSS3的遮罩(mask)
      • flex布局语法
      • font-size:0的作用和用途
      • CSS 高度塌陷问题
      • 从box-sizing属性入手,了解盒子模型
      • CSS-function汇总
    • 案例

  • JavaScript

  • Vue

  • 组件与插件

  • css扩展语言

  • 学习笔记

  • 前端
  • CSS
  • 知识点
ctrlwin
2021-08-03

CSS3之transform

# CSS3之transform

参考:CSS3 系列之transform 详解 (opens new window)

# CSS 中的x、y、z轴

css中的x、y轴和我们平常见到的x、y轴是不一样的,它是倒过来的:

z轴在坐标0的位置,因为是3d的所以看不见,不过可以这样:

# translate

translate的作用就是平移,参考自己的位置来平移。

它分为以下几个属性:

  • translate()
  • translateX()
  • translateY()
  • translateZ()
  • translate3d()

translateX()

translateX()就是沿X轴平移,正数向右平移,负数向左平移。

translateY()

translateY()就是沿Y轴平移,正数向下平移,负数向上平移。

translateZ()

translateZ()是沿Z轴进行平移,Z轴可以想象成你和电脑屏幕之间的距离,translateZ()值越大,电脑屏幕离你越近,反之值越小距离越远。他一般使用px单位。

首先Z 轴是朝向我们的,所以 看不出效果,但是,我们把它转个身,让Z轴 面对 右边,就可以了。

translate(x, y) 和 translate3d(x, y, z)

translate() 是用来同时设置 translateX() 和 translateY()这两个属性的,不需要设置的属性就写0。

translate3d() 是用来同时设置 translateX() 、 translateY()、translateZ()这三个属性的,不需要设置的属性就写0。

# rotate

rotate()

沿着基点进行2d旋转。默认基点为center center,通过transform-origin属性可以更改旋转基点。详见CSS 属性 (opens new window)

rotateX()

rotateX()沿着X轴进行3d旋转。

rotateY()

rotateY()沿着Y轴进行3d旋转。

rotateZ()

rotateZ()沿着Z轴进行3d旋转。

rotate3d(x, y, z, deg)

rotate3d()可以设置4个参数,前3个参数分别代表的是x、y、z轴坐标方向的矢量。deg代表旋转角度。

举个例子:

(1,1,0,0deg) 那么就是 1:1:0 = 100:100:0

# scale

scaleX()、scaleY()

缩放该元素,参数大于1即放大元素,小于1即缩小元素。

在设置了scaleX()和scaleY()后盒子被放大了,但是它的宽高并没有被改变,scale改变的不是元素的宽高而是x轴和y轴的刻度

scale(x, y)

可以同时设置x轴、y轴缩放。

scale3d(x, y, z)

进行3d的缩放。

# 综合写法

  • 同时使用多个转换,其格式为:transform: translate() rotate() scale() ...等
  • 其顺序会影响转换的效果(先旋转会改变坐标轴方向)
  • 当同时拥有位移和其它属性时,一定要将位移放在最前面
<html>
    <div class="demo">
        <div class="box"></div>
    </div>
</html>

<style>
.demo {
    width: 300px;
    height: 220px;
    margin: 22px auto;
}

.demo .box {
    width: 90px;
    height: 90px;
    background-color: #fdd;
    transition: all linear .8s;
}

.demo .box:hover {
	transform: translate(50px, 50px) rotate(360deg) scale(1.5);
}

</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# perspective

perspective指定了观察者与z=0平面的距离,使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大,而 z<0 时则比正常小,大小程度由该属性的值决定。

perspective: 800px 就代表着,观察者离平面800px观察这个元素,这个属性要设置在父元素上。

默认情况下,消失点位于元素的中心,但是可以通过设置 perspective-origin属性来改变其位置,这个属性也是设置在父级身上,默认值为 center center,也就是居中,是根据自身位置来定位的。

# transform-style

控制子元素是否开启3d环境。

他有两个值:

  • flat 子元素不开启3d效果 默认值
  • preserve-3d 子元素开启3d效果

和perspective一样是给父元素设置的属性。

代码示例:

.container {
    perspective: 800px;  /*父元素开启3d透视效果*/
}

.content {
    position: relative;
    width: 200px;
    height: 200px;
    margin: 100px auto;
    transition: all 2s;
    transform-style: preserve-3d;  /*给子元素开启3d效果*/
}

.content:hover {
    transform: rotateY(60deg)
}

.content .box {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: slateblue;
}

.content .box:last-child {
    background-color: tomato;
    transform: rotateX(45deg);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

效果:

下面实例中,左边是开启子元素3d效果的,右图没有开启。

<html>
    <div class="container-3d">
        <div class="content-3d">
            <div class="box"></div>
            <div class="box"></div>
        </div>
        <div class="content-3d1">
            <div class="box1"></div>
            <div class="box1"></div>
        </div>
    </div>
</html>

<style>
    .container-3d {
        display: flex;
        perspective: 800px;
    }

    .content-3d {
        transform-style: preserve-3d;
    }

    .content-3d,
    .content-3d1 {
        position: relative;
        width: 200px;
        height: 200px;
        margin: 100px auto;
        transition: all 2s;
    }

    .content-3d:hover,
    .content-3d1:hover {
        transform: rotateY(60deg)
    }

    .content-3d .box,
    .content-3d1 .box1 {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: slateblue;
    }

    .content-3d .box:last-child {
        background-color: tomato;
        transform: rotateX(45deg);
    }

    .content-3d1 .box1:last-child {
        background-color: yellowgreen;
        transform: rotateX(45deg);
    }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

# 案例

在GitHub上编辑 (opens new window)
#css
上次更新: 2/23/2022, 5:36:03 PM

← CSS3之transition过渡 CSS3之animation动画→

最近更新
01
createElement函数创建虚拟DOM
05-26
02
clipboard 剪切板属性
05-26
03
vue的权限管理
05-16
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Xin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×