css实现简单聚光灯效果
先来一张最终效果图~
实现原理
使用两层h1标签叠加到一起(在第一层的基础上为其创建一个副本),通过css clip-path 实现将第二层剪切,最后加个animation实现循环左右移动效果
实践过程
原理没读懂嘛,我们可以通过实战来理解整个过程~
创建h1标签
<h1>spotlight</h1>
好啦,html部分到此结束啦是不是很简单我们主要来讨论css部分。
css实现
先来将文字进行居中看着舒服些办法有很多,在这里使用flex布局进行居中
body {
display: flex;
height: 100vh;
justify-content: center;
align-items: center;
margin: 0;
padding: 0;
}
写完这些你的文字是不是居中了呢?居中后,我们来改一改文字的样式~
h1{
color: #eaeaea;
font-size: 8rem;
}
到此我们第一层就写完啦~下面我们要做的就是写第二层,并覆盖第一层文字。
我们使用子绝父相将其覆盖,为了区别将其颜色改为yellow~不要问为啥是yellow,I like !!
h1::before{
content: 'spotlight';
position: absolute;
font-size: 8rem;
color: yellow;
}
子元素设置完绝对布局后将body添加一个position: relative;
可以看到,已经覆盖成功~
下面来进行聚光灯的打光(将yellow部分进行剪切)
在h1::before
中加入
clip-path: ellipse(130px 140px at 10% 50%);
关于clip-path的详细信息,可以移步文档👉戳我
现在的效果是这样👇
现在已经完成了静态的部分最后我们只需要让这个剪切的位置动起来就可以啦
在h1::before
中加入
animation: spotlight 5s infinite;
并新增一个@keyframes
@keyframes spotlight{
0%{
clip-path: ellipse(130px 140px at 10% 50%);
}
50%{
clip-path: ellipse(130px 140px at 100% 50%);
}
100%{
clip-path: ellipse(130px 140px at 10% 50%);
}
}
这里的0%为聚光灯在最左边,50%为聚光灯移动到最右边,100%为聚光灯回到最左边
往返时间为5秒,并且重复执行动画效果~
最终代码
css
body{
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
position: relative;
margin: 0;
padding: 0;
}
h1{
font-size: 8rem;
color: #eaeaea;
}
h1::before{
position: absolute;
content: 'spotlight';
font-size: 8rem;
color: yellow;
clip-path: ellipse(130px 140px at 0% 50%);
animation: spotlight 5s infinite;
}
@keyframes spotlight{
0%{
clip-path: ellipse(130px 140px at 0% 50%);
}
50%{
clip-path: ellipse(130px 140px at 100% 50%);
}
100%{
clip-path: ellipse(130px 140px at 0% 50%);
}
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>聚光灯动画</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>spotlight</h1>
</body>
</html>