前端自学笔记2:平移、旋转、缩放、颜色渐变的实现
总结:
1、通过平移效果实现绝对定位元素的水平居中(将小盒子设置到大盒子中央)
原理:第一步,先通过设置绝对定位,将小盒子向右、向下移动大盒子的50%;第二步,再通过平移,将小盒子向左,向上移动自身的50%。
第一步实现
/*给大盒子设置相对定位:*/
position: relative;
/*给小盒子设置绝对定位:*/
position: absolute;
left: 50%;
top: 50%;
效果如下:
第二步实现:
/*给小盒子设置样式*/
transform: translate(-50%, -50%);
效果:
2、通过平移设置双开门效果
原理:1、给一个大盒子设置背景图片;2、给大盒子设置before和after伪元素;3、分别给两个伪元素设置背景图片,并设置浮动;4、给两个伪元素设置hover状态。5、给大盒子设置:overflow: hidden;
实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 1366px;
height: 600px;
margin: 0 auto;
/* 第一步 */
background: url('./images/bg.jpg');
/* 第5步 */
overflow: hidden;
}
/* 第二步 */
.box::before,
.box::after {
content: '';
width: 50%;
height: 600px;
background: url(./images/fm.jpg); /*第三步,首先给左边和右边伪元素设置一样的背景图片 */
float: left; /*设置浮动,将两个伪元素放到一行显示*/
transition: all 0.5s; /*设置过渡效果*/
}
.box::after {
background-position: right 0; /*第三步,然后这里是将右边的伪元素的背景图片设置为右半张图 */
}
/* 第四步,给两个伪元素设置hover状态 */
.box:hover::before {
transform: translateX(-100%);
}
.box:hover::after {
transform: translateX(100%);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
ps:如果不设置大盒子为overflow:hidden;的状态效果如下
3、旋转效果的实现:transform: rotate(360deg);(表示顺时针旋转一圈)
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>旋转效果</title>
<style>
img {
width: 250px;
transition: all 2s;
}
img:hover {
/* 顺,正值 */
transform: rotate(360deg);
/* 逆,负值 */
/* transform: rotate(-360deg); */
}
</style>
</head>
<body>
<img src="./images/rotate.png" alt="">
</body>
</html>
4、修改旋转中心点:
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>转换原点</title>
<style>
img {
width: 250px;
border: 1px solid #000;
transition: all 2s; /*设置过渡属性*/
transform-origin: right bottom; /*设置旋转原点为右下角*/
/* transform-origin: left bottom; */
}
img:hover {
transform: rotate(360deg);
}
</style>
</head>
<body>
<img src="./images/rotate.png" alt="">
</body>
</html>
5、平移+旋转
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>多重转换</title>
<style>
.box {
width: 800px;
height: 200px;
border: 1px solid #000;
margin: 500px 500px;
}
img {
width: 200px;
transition: all 2s;
}
.box:hover img {
/* 边走边转 */
transform: translate(600px) rotate(720deg); /*二者不能更换位置,否则会乱飞*/
}
</style>
</head>
<body>
<div class="box">
<img src="./images/tyre.png" alt="">
</div>
</body>
</html>
6、设置缩放效果 transform: scale(1.2);(大于1表示放大,小于1表示缩小)
案例:放大和缩小播放按钮。
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
img {
width: 100%;
}
.box {
width: 249px;
height: 210px;
margin: 50px auto;
overflow: hidden;
}
.box p {
color: #3b3b3b;
padding: 10px 10px 0 10px;
}
.box .pic {
position: relative;
}
.box .pic::after {
position: absolute;
top: 50%;
left: 50%;
/* transform: translate(-50%,-50%); 不在这个地方写是为了避免被下边的transform:scale(5)层叠掉。 */
/* margin-left: -29px;
margin-top: -29px; */
content: '';
width: 58px;
height: 58px;
background-image: url(./images/play.png);
transform: translate(-50%,-50%) scale(5);
transition: all 0.3s;
opacity: 0; /*设置透明度*/
}
.box li:hover .pic::after{
transform: translate(-50%,-50%) scale(1);
opacity: 1;
}
</style>
</head>
<body>
<div class="box">
<ul>
<li>
<div class="pic"><img src="./images/party.jpeg" alt=""></div>
<p>【和平精英】“初火”音乐概念片:四圣觉醒......</p>
</li>
</ul>
</div>
</body>
</html>
7、颜色渐变
由透明色渐变为半透明黑色:
样式代码
background-image: linear-gradient(
transparent,
rgba(0,0,0,.5)
);
彩虹色渐变:(感觉报看)
代码:
background-image: linear-gradient(
red,
orange,
yellow,
green,
rgb(0, 77, 128),
blue,
purple
);