transform变换

transform变换

1. 变换属性 transform

变换分为2D变换和3D变换,描述的是一种变化之后的结果

允许我们对元素进行旋转、缩放、移动或倾斜。

1.1. 2D变换

transform:rotate() skew() scale() translate();

1.1.1 缩放 scale(x,y)

整体缩放缩放到原来的多少倍

取值:[正数 | 小数 | 0 | 负数]

取值范围:
  1. 大于0小于1 是缩小
  2. 大于1是放大
  3. 可以有两个值,水平方向 竖直方向
  4. 可以有负数,反向缩放
transform:scale(0.8); 
/* 缩小到0.8倍 */
取值个数:
  1. 一个值 既代表X轴,也代表Y轴
  2. 两个值 第一个代表X轴,第二个代表Y轴,逗号隔开

例子

  <style>
    * {
      padding: 0;
      margin: 0;
    }

    .box {
      width: 300px;
      height: 300px;
      background-color: #ccc;
      margin: 50px auto;
    }

    .box p {
      width: 100px;
      height: 100px;
      background-color: red;
      transition: 1s;
      /*过渡的效果 */
    }

    .box:hover p {
      transform: scale(-2);
      /*transform: scale(.5,2);*/ /*两个值*/
      /* 2D变换 缩放*/
    }
  </style>
</head>

<body>
  <div class="box">
    <p>我会变</p>
  </div>
</body>
可单独拆分为scaleY()和scaleX()
transform: scaleX(.5)
1.1.2 位移 translate(x,y)

定义在 X轴Y轴的移动,向右向下为正。

取值:

  1. 一个值 默认代表X轴方向
  2. 两个值 第一个值代表X轴方向,第二个值代表Y轴方向
transform:translate(100px);
transform: translate(50px,50px); 

可单独拆分为translateX()translateY()

transform:translateX(100px);    
/*  代表X轴方向  */
transform:translateY(100px);    
/*  代表Y轴方向  */

例子

修改上例中hover之后p标签的样式

.box:hover p{
    transform:translate(100px,150px);
}

居中方式的改进:translate(-50%,-50%)

/* 当前盒子宽高的百分比,相对于当前元素本身*/

.child{
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%,-50%);  /*保证元素的居中,省去之前的margin*/
    width:100px;
    height:100px;
}
1.1.3 旋转 rotate(angle)

旋转,正直为顺时针,负值为逆时针

角度单位:

  1. deg 角度 360deg
  2. rad 弧度 1.57rad
  3. turn 圈 1turn
transform:rotate(30deg);
/*沿着中心旋转30度,默认绕着Z轴旋转。X轴rotateX(30deg)  Y轴rotateY(30deg)  箭头方向顺时针是正值 逆时针是负值*/
<!-- css -->
<style>
    .box{
        width:100px;
        height:100px;
        background-color: red;
        transition:1s;


    }
    .box:hover{
        transform:rotate(1turn);
       /*transform: rotate(1.57rad); 弧度写法*/ 
       /*transform: rotate(1turn); 圈写法*/ 
    }

</style>

<!-- html -->
<div class="box">
    hello
</div>

X轴 Y轴 Z轴综合写法

transform: rotateX(80deg) rotateY(60deg) rotateZ(60deg);  /*不是真正的3D*/
1.1.4 倾斜 skew(x,y)

定义沿着 X 和 Y 轴的 2D 倾斜转换。(单位deg)

值:

  1. 一个值 表示水平方向的倾斜角度
  2. 两个值 第一个值代表X轴方向,第二个值代表Y轴方向(逗号隔开)
  3. 可支持负值
transform:skew(30deg);  /*x轴倾斜30deg*/
transform: skew(0,30px);
transform: skew(30px,30px);
控制台调节数值时:滚轮按住shift使用每次增10;按住ctrl每次增减100

可分解为skewX()skewY()

  1. skewX(angle) 沿着 X 轴的 2D 倾斜转换。
  2. skewY(angle) 沿着 Y 轴的 2D 倾斜转换。
transform: skewX (30deg);   
/*  代表X轴方向  */
transform: skewY (30deg);   
/*  代表Y轴方向  */
1.1.5 变换基点 transform-origin(x,y,z)

默认基点为中心点[50%,50%],效果等同于center center

可以通过设置坐标值或关键词改变基点

参数:

  1. X :定义基点被置于 X 轴的何处。
  2. Y :定义基点被置于Y 轴的何处。
  3. Z :定义基点被置于Z轴的何处(3D环境才有)。

值:

  1. 关键词: 默认center

    top/left/right/bottom

  2. 像素值 px 可以为负值。

  3. 百分比值 % 可以为负值

参照background-position

    .box p {
      width: 100px;
      height: 100px;
      background-color: red;
      transition: 1s;
      /*过渡的效果 */
      transform-origin: left top; /*将变换基点改为左上角 写在原来的元素上,和过渡效果写一起*/

    }

    .box:hover p {
      transform: rotate(1rad);
    }

注意

如果设置两个,第一个为X轴,第二个为Y轴(两值以空格隔开)

如果设置一个,该值为X轴,第二个默认Y轴50%(给定值时)

1.1.6 Transform多值影响

多值的使用

transform 属性可以一次设置多个变换值, 以空格隔开

transform:translate(100px) scale(0.5);

多值的影响

  1. transform:scale() translate();与 transform: translate() scale(); 执行先后的区别,
  2. 如果先scale则后面的translate会受到 受scale影响
transform:translate(100px) scale(0.5);/* 推荐先位移,缩放scale写在后面 */
transform:scale(0.5) translate(100px); 

1.2. 3D变换

1.2.1 设置3D环境 transform-style

设置给父元素,建立3D空间

定义: 指定子元素定位在三维空间内, 当该属性值为preserve-3d时,元素将会创建局部堆叠上下文。

属性值:
  1. flat(默认) 指定子元素位于此元素所在平面内
  2. preserve-3d 创建3D环境
1.2.2 设置景深 perspective

给父元素添加,视镜 查看 3D 元素的距离(none | length)

属性值:

一般使用 看起来最适应800px或者 1200px

1.2.3 perspective-origin 透视点X Y轴的位置

perspective-origin属性是3D变形中另一个重要属性,主要用来决定perspective属性的源点角度。它实际上设置了X轴和Y轴位置(或者说基点),在该位置观看者好像在观看该元素的子元素。

属性值:
  1. 定义视图在x轴上的位置。默认值:50%。可能的参数值形式:left、center、right、length和%。
  2. 定义视图在y轴上的位置。默认值:50%。可能的参数值形式:top、center、bottom、length和%。
<!--css -->
<style>
    *{margin:0;padding:0;}
    .box{
        width:1000px;
        height:500px;
        background-color: #eee;
        margin: 50px auto;
        perspective:800px; /*视镜:观看的距离*/
        perspective-origin:center top;

    }
    .box ul{

        transform-style:preserve-3d;/*打造3D空间,舞台*/
        border:1px solid green; 
    }
    .box ul li{
        list-style:none;
        width:200px;
        height:200px;
        background-color: red;
        transform:rotateX(30deg);
    }


</style>

<div class="box">
    <ul>
        <li>hello</li>

    </ul>   
</div>
1.2.4 backface-visibility 背面是否可见

属性值

  1. visible(默认): 指定元素背面可见
  2. hidden:指定元素背面不可见
1.2.5 3D旋转 rotate

绕某个轴旋转

  1. rotateX() 水平方向为X轴,表现为上下转

  2. rotateY() 竖直方向为Y轴,表现为左右转

  3. rotateZ() 垂直屏幕为Z轴,表现为顺逆时针

  4. rotate3d(x,y,z,angle)

    x y z ,是表示你是否希望沿着该轴旋转,是为1,不是为0

    angle:是一个角度值,主要用来指定元素在3D空间旋转的角度,【deg】

     transform:rotate3d(1,1,0,30deg);
    
1.2.6 缩放转换scale
  1. scaleX(x) 通过设置 X 轴的值来定义缩放转换。
  2. scaleY(y) 通过设置 Y 轴的值来定义缩放转换。
  3. scaleZ(z) 通过设置 Z 轴的值来定义 3D 缩放转换。需和变换函数配合使用,才能看到效果,scaleZ要写在前面
  4. scale3d(x,y,z) x,y,z 均为【正数 | 小数 | 零 | 负数 】
1.2.7 位移
  1. translateX(x) 定义位移,只是用 X 轴的值。
  2. translateY(y) 定义位移,只是用 Y 轴的值。
  3. translateZ(z) 定义 3D 位移,只是用 Z 轴的值。正值往前,负值往后
  4. translate3d(x,y,z)
      transform:translateZ(-2000px);  正值往前越来越近放大,负值往后越来越远缩小
Z轴上的其他变换
  1. 在Z轴方向上的缩放 scaleZ()
  2. 在Z轴方向上的位移 translateZ()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容