css3中2D转换之有趣的transform形变效果


Posted in HTML / CSS onFebruary 24, 2022

在CSS3中,transform属性应用于元素的2D或3D转换,可以利用transform功能实现文字或图像的旋转、缩放、倾斜、移动这4中类型的形变处理

css3中2D转换之有趣的transform形变效果

语法:

div{
    transform: none|transform-functions;
}

transform属性可以指定为关键字值none或一个或多个<transform-function>

注意:当transform有多个属性值时要用空格隔开

属性值:

描述
translate(x,y) 定义 2D 转换,沿着 X 和 Y 轴移动元素。
translateX(n) 定义 2D 转换,沿着 X 轴移动元素。
translateY(n) 定义 2D 转换,沿着 Y 轴移动元素。
scale(x,y) 定义 2D 缩放转换,改变元素的宽度和高度。
scaleX(n) 定义 2D 缩放转换,改变元素的宽度。
scaleY(n) 定义 2D 缩放转换,改变元素的高度。
rotate(angle) 定义 2D 旋转,在参数中规定角度。
rotateX() 定义 3D 旋转,沿 X 轴。
rotateY() 定义 3D 旋转,沿 Y 轴。
skew(x-angle,y-angle) 定义 2D 倾斜转换,沿着 X 和 Y 轴。
skewX(angle) 定义 2D 倾斜转换,沿着 X 轴。
skewY(angle) 定义 2D 倾斜转换,沿着 Y 轴。

下面对这些属性值进行一一讲解:

一、rotate(旋转)

rotate(angle)通过指定的角度参数对原元素指定一个2D旋转,angle代表旋转角度:正值表示顺时针旋转、负值表示逆时针旋转

单位:deg(角度)、rad(弧度)、grad(梯度)、turn(圈)

转换:弧度 = 角度*π/180

<div class="box"></div>
.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
}
.box:hover{
    transform: rotate(30deg); /* 顺时针旋转30度 */
}

这里用了下css3中transition过渡属性,不然在形变时会很生硬

效果如下:

css3中2D转换之有趣的transform形变效果

rotateXrotateY是围绕X轴和Y轴旋转的,上面这个案例可以看做是围绕Z轴旋转,大家可以脑构一下三维坐标系,我们眼睛所看到屏幕的方向就可以当做Z轴

css3中2D转换之有趣的transform形变效果

rotateX围绕X轴旋转:

.box:hover{
    transform: rotateX(45deg); /* x轴旋转45度 */
}

css3中2D转换之有趣的transform形变效果

rotateY围绕Y轴旋转:

.box:hover{
    transform: rotateY(45deg); /* Y轴旋转45度 */
}

css3中2D转换之有趣的transform形变效果

二、translate(位移)

translate()这个CSS函数在水平和/或垂直方向上重新定位元素

translate(x,y)对元素同时向X轴和Y轴移动,值为负数则反方向移动

translateX()元素在X轴移动

translateY()元素在Y轴移动

css3中2D转换之有趣的transform形变效果

下面分别演示这三个功能效果:

.box:hover{
    transform: translate(40px,80px); /* 向X轴移动+40px,向y轴移动+80px */
}

效果如下:

css3中2D转换之有趣的transform形变效果

注意:如果translate()值传递一个值,则默认和translateX()效果一致

translateX()元素在X轴移动

.box:hover{
    transform: translateX(50px); /* 向X轴移动+50px */
}

效果如下:

css3中2D转换之有趣的transform形变效果

translateY()元素在Y轴移动

.box:hover{
    transform: translateY(50px); /* 向Y轴移动+50px */
}

效果如下:

css3中2D转换之有趣的transform形变效果

三、scale(缩放)

CSS 函数scale()用于修改元素的大小。可以通过向量形式定义的缩放值来放大或缩小元素,同时可以在不同的方向设置不同的缩放值

css3中2D转换之有趣的transform形变效果

该变换通过一个二维向量确定在一个方向缩放的多少

  • 当坐标值处于区间 [-1, 1]之外时,该变换将在相应的坐标方向上放大该元素
  • 当处在区间之中时,该变换将在相应的坐标方向上缩小该元素
  • 当值为1时将不进行任何处理
  • 当为负数时,将进行像素点反射之后再进行大小的修改。

语法:

scale(sx)
/* or */
scale(sx,sy)

sx表示缩放向量的横坐标

sy表示缩放向量的纵坐标。如果未设置,则他的默认值被设置为sx。 从而使得元素在保持原有形状下均等缩放

html

<div class="box">鼠标移入放大/缩小</div>

css

.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
}
.box:hover{
    transform: scale(2);
    /* 等同于 */
    transform: scaleX(2) scaleY(2);
}

设置一个值就是均等缩放,效果如下:

css3中2D转换之有趣的transform形变效果

设置两个值就是在X和Y两个维度缩放并移动缩放中心,例子如下:

.box:hover{
    transform: scale(2,3);
}

css3中2D转换之有趣的transform形变效果

如果设置的值在区间 [-1, 1]之间,该变换将在相应的坐标方向上缩小该元素:

.box:hover{
    transform: scale(0.5);
}

css3中2D转换之有趣的transform形变效果

值为1则为元素本身大小,不进行任何变换

如果值为负数,则反向镜像放大:

.box:hover{
    transform: scale(-1.5); /* 镜像放大 */
}

css3中2D转换之有趣的transform形变效果

scaleX()scaleY()只是单独在X轴和Y轴方向缩放元素,可以理解为scale()是它俩的复合属性,如果只是单个方向缩放,直接使用对应函数即可:

scaleX()只在X轴方向缩放:

.box:hover{
    transform: scaleX(2); /* x方向放大两倍 */
    /* or */
    transform: scale(2,1);
}

css3中2D转换之有趣的transform形变效果

scaleY()只在Y轴方向缩放:

.box:hover{
    transform: scaleY(2); /* Y方向放大两倍 */
    /* or */
    transform: scale(1,2);
}

css3中2D转换之有趣的transform形变效果

四、skew(倾斜)

skew()函数定义了一个元素在二维平面上的倾斜转换

单位:deg(角度)、rad(弧度)、grad(梯度)、turn(圈)

转换:弧度 = 角度*π/180

这种转换是一种剪切映射(横切),它在水平和垂直方向上将单元内的每个点扭曲一定的角度。每个点的坐标根据指定的角度以及到原点的距离,进行成比例的值调整;因此,一个点离原点越远,其增加的值就越大

语法:

skew(ax)
/* or */
skew(ax, ay)

ax是一个<angle>,表示用于沿横坐标扭曲元素的角度

ay是一个<angle>,表示用于沿纵坐标扭曲元素的角度。如果未定义,则其默认值为0,导致纯水平倾斜。

html

<div class="box">倾斜元素</div>

css

.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
}
.box:hover{
    /* 纯水平倾斜 */
    transform: skew(25deg);
    /* or */
    transform: skew(25deg,0);
    /* or */
    transform: skewX(25deg);
}

效果如下:

css3中2D转换之有趣的transform形变效果

注意:如果值为负数,则在相反方向倾斜,比如下面这个例子:

.box:hover{
    /* 负值反方向倾斜 */
    transform: skew(-25deg);
}

css3中2D转换之有趣的transform形变效果

设置两个值就是同时在X轴和Y轴上倾斜元素:

.box:hover{
    /* 同时在X轴和Y轴上倾斜元素 */
    transform: skew(20deg,10deg);
}

css3中2D转换之有趣的transform形变效果

skewX()skewY()只是单独在X轴和Y轴方向倾斜元素,可以理解为skew()是它俩的复合属性,如果只是单个方向倾斜,直接使用对应函数即可:

skewX()只在X轴方向倾斜:

.box:hover{
    /* 只在X轴上倾斜元素 */
    transform: skewX(30deg);
}

css3中2D转换之有趣的transform形变效果

skewY()只在Y轴方向倾斜:

.box:hover{
    /* 只在Y轴上倾斜元素 */
    transform: skewY(30deg);
}

css3中2D转换之有趣的transform形变效果

五、transform-origin(基点)

transform-originCSS属性让你更改一个元素变形的原点

语法:

/* One-value syntax */
transform-origin: 2px;
transform-origin: bottom;

/* x-offset | y-offset */
transform-origin: 3cm 2px;

/* x-offset-keyword | y-offset */
transform-origin: left 2px;

x-offset表示变形变形中心距离盒模型的左侧偏移值

y-offset表示变形变形中心距离盒模型的顶部偏移值

offset-keyword表示定义相对应的变形中心偏移

取值:

  • 自定义(单位:cm、px、%)
  • 关键词:top、bottom、left、right、center(默认)

transform-origin属性可以使用一个,两个或三个值来指定,其中每个值都表示一个偏移量

栗子1:

html

<div class="box">不同基点形变</div>

css

.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
    /* 设置元素变形基点 */
    transform-origin: 0 0; /* 左上角 */
    /* 等同于 */
    transform-origin: top left;
}
.box:hover{
    transform:  rotate(30deg); /* 旋转 */
}

效果如下:

css3中2D转换之有趣的transform形变效果

栗子2:

.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
    /* 设置元素变形基点 */
    transform-origin: 100% -30%;
}
.box:hover{
    transform: scale(1.7); /* 旋转 */
}

效果如下:

css3中2D转换之有趣的transform形变效果

栗子3:

.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
    /* 设置元素变形基点 */
    transform-origin: bottom 100%;
}
.box:hover{
    transform: skewX(50deg);
}

效果如下:

css3中2D转换之有趣的transform形变效果

六、结束语

到这里css3中的2D形变分享到这里,另外需要大家注意的是:如果transform有多个属性值时需要用空格隔开,并且属性值书写顺序的不同得到的效果也是不同的!!!

例如:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
.box{
    width: 200px;
    height: 200px;
    background-color: #B39DDB;
    transition: .2s; /* 过渡属性 */
    margin: 300px auto;
    text-align:center;
    line-height:200px;
}
.box:hover{
    transform: translateX(200px) rotate(30deg) skew(20deg);
}
        </style>
    </head>
    <body>
        <div class="box">不同基点形变</div>
    </body>
</html>

效果如下:

css3中2D转换之有趣的transform形变效果

下面我们把transform的属性值顺序换一下看看效果:

.box:hover{
    transform: rotate(30deg) translateX(100px) skew(20deg);
}

css3中2D转换之有趣的transform形变效果

可以看出这两个顺序不同得到的效果也是不一样的,各个属性值之间必须用空格分开!

到此这篇关于css3中2D转换之有趣的transform形变的文章就介绍到这了,更多相关css3有趣transform形变内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
css3背景_动力节点Java学院整理
Jul 11 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
Nov 17 HTML / CSS
html5 canvas实现跟随鼠标旋转的箭头
Mar 11 HTML / CSS
使用Canvas操作像素的方法
Jun 14 HTML / CSS
Bootstrap 学习分享
Nov 12 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
Dec 13 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
Jul 11 HTML / CSS
探索HTML5本地存储功能运用技巧
Mar 02 HTML / CSS
canvas实现扭蛋机动画效果的示例代码
Oct 17 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
Apr 25 HTML / CSS
常用的文件对应的MIME类型汇总
Apr 26 HTML / CSS
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
Dec 24 HTML / CSS
css3带你实现3D转换效果
bootstrapv4轮播图去除两侧阴影及线框的方法
企业开发CSS命名BEM代码规范实践
CSS3实现360度循环旋转功能
CSS实现九宫格布局(自适应)的示例代码
Feb 12 #HTML / CSS
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
Jan 18 #HTML / CSS
MIME类型中application/xml与text/xml的区别介绍
Jan 18 #HTML / CSS
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
XAMPP安装与使用方法详细解析
2013/11/27 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
PHP的反射机制实例详解
2017/03/29 PHP
php中错误处理操作实例分析
2019/08/23 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Python单链表简单实现代码
2016/04/27 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
pytorch 修改预训练model实例
2020/01/18 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
临时租车协议范本
2014/09/23 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL