转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果 转换(transform)可以简单理解为变形
- 移动: transform
- 旋转: rotate
- 缩放: scale
1.二维坐标系
2D转换是改变标签在二维平面上的位置和形状的一种技术,先来学习二维坐标系
2.2D
转换之移动translate
2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似定位。
2.1 语法
css
transform: translate(x,y); 或者分开写
transform: translateX(n);
transform: translateY(n);
2.2 重点
- 定义2D转换中的移动,沿着X和Y轴移动元素
- translate最大的优点: 不会影响到其他元素的位置
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div:first-child {
background-color: pink;
height: 100px;
width: 100px;
transform: translate(50px,50px);
}
div:last-child {
background-color: purple;
height: 100px;
width: 100px;
}
</style>
</head>
<body>
<div></div>
<div></div>
</body>
</html>
- translate中的百分比单位是相对于自身元素的translate:(50%,50%)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div:first-child {
background-color: pink;
height: 100px;
width: 100px;
transform: translate(50%,50%);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
position: relative;
background-color: pink;
height: 500px;
width: 500px;
}
p {
position: absolute;
left: 50%;
top: 50%;
background-color: purple;
height: 200px;
width: 200px;
transform: translate(-50%,-50%);
}
</style>
</head>
<body>
<div>
<p></p>
</div>
</body>
</html>
- 对行内标签没有效果
3.2D
转换之旋转rotate
2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转。
3.1 语法
html
transform:rotate(度数)
3.2 重点
- rotate里面跟度数,单位是deg比如rotate(45deg)
- 角度为正时,顺时针,负时,为逆时针
- 默认旋转的中心点时元素的中心点
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
img {
height: 100px;
width: 100px;
border-radius: 50%;
border: 3px solid pink;
transition: all 0.7s;
}
img:hover {
transform: rotate(360deg);
}
</style>
</head>
<body>
<img src="pic.jpg" alt="">
</body>
</html>
3.3 案例:三角形
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
position: relative;
height: 35px;
width: 250px;
border: 1px solid #000;
}
div::after {
content: "";
position: absolute;
top: 7px;
right: 10px;
height: 10px;
width: 10px;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
transform: rotate(45deg);
transition: all 0.5s;
}
div:hover::after {
transform: rotate(225deg);
top: 13px;
right: 10px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
4.2D
转换中心点transform-origin
我们可以设置元素转换的中心点
4.1 语法
css
transform-origin: x y;
4.2 重点
- 注意后面的参数x和y要用空格隔开
- x y默认旋转的中心点是元素的中心点(50% 50%)
- 还可以给x y设置像素或者方位名词(top bottom left right center)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
background-color: pink;
height: 200px;
width: 200px;
margin: 100px auto;
transition: all 0.5s;
transform-origin: left bottom;
}
div:hover {
transform: rotate(360deg);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
4.3 案例
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
float: left;
overflow: hidden;
height: 200px;
width: 200px;
border: 1px solid #000;
margin: 10px;
}
div::before {
content: "旋转";
text-align: center;
line-height: 200px;
display: block;
height: 200px;
width: 200px;
background-color: blueviolet;
transform: rotate(180deg);
transform-origin: left bottom;
transition: all 0.5s;
}
div:hover::before {
transform: rotate(0deg);
}
</style>
</head>
<body>
<div></div>
<div></div>
<div></div>
</body>
</html>
5.2D
转换之缩放scale
缩放,顾名思义,可以放大和缩小。只要给元素添加上了这个属性就能控制它放大还是缩小。
5.1 语法
css
transform:scale(x,y);
5.2 注意
- 注意其中的x和y是用逗号分隔
transform:scale(1,1)
: 宽和高都放大一倍,相当于没有放大transform:scale(2,2)
: 宽和高都放大了两倍transform:scale(2)
: 只写一个参数,第二个参数则和第一个参数一样,相当于scale(2,2)transform:scale(0.5,0.5)
: 缩小- scale缩放的最大优势: 可以设置旋转中心点缩放,默认以中心点缩放的,而且不影响其他盒子
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.div2 {
float: left;
height: 200px;
width: 200px;
background-color: pink;
margin: 100px;
}
.div2:hover {
transform: scale(2,2);
}
.div1 {
float: left;
height: 200px;
width: 200px;
background-color: pink;
margin: 100px;
}
.div1:hover {
transform: scale(0.5,0.5);
}
</style>
</head>
<body>
<div class="div2"></div>
<div class="div1"></div>
</body>
</html>
5.3 案例1:鼠标经过图片放大效果
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
overflow: hidden;
float: left;
margin: 10px;
}
div img{
height: 200px;
width: 200px;
transition: all 0.6s;
}
div img:hover {
transform: scale(1.1);
}
</style>
</head>
<body>
<div>
<a href="#"><img src="R-C.jpg" alt=""></a>
</div>
<div>
<a href="#"><img src="R-C.jpg" alt=""></a>
</div>
<div>
<a href="#"><img src="R-C.jpg" alt=""></a>
</div>
</body>
</html>
5.4 案例2:分页按钮
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
li {
float: left;
width: 30px;
height: 30px;
border: 1px solid pink;
margin: 10px;
list-style: none;
text-align: center;
line-height: 30px;
border-radius: 50%;
cursor: pointer;
transition: all 0.5s;
}
li:hover {
transform: scale(1.1);
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
</body>
</html>
6.2D
转换综合写法
- 同时使用多个转换,其格式为: transform: translate() rotate() scale()
- 其顺序会影响转换效果。(先旋转会改变坐标轴方向)
- 当我们同时有位移和其他属性的时候,记得要将位移放在最前面
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
height: 200px;
width: 200px;
background-color: pink;
transition: all 0.5s;
}
div:hover {
transform: translate(150px,50px) rotate(360deg) scale(0.5,0.5);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
7.2D
转换总结
- 转换transform我们简单理解就是变形有2D和3D之分
- 我们暂时接触了三个 分别是 位移 旋转和缩放
- 2D移动translate(x,y) 最大的优势是不影响其他盒子,里面参数用%,是相对于自身宽度和高度来计算的
- 可以分开写比如translateX 和 translateY
- 2D旋转rotate(度数) 可以实现旋转元素 度数的单位是deg
- 2D缩放scale(x,y)里面参数是数字 不是单位 可以是小数 最大的优势是不影响其他盒子
- 设置旋转中心点transform-origin: x y;参数可以是百分比、像素或是其他方位名词
- 当我们进行综合写法,同时有位移和其他属性的时候,记得要将位移放到最前面