先不说啥,上效果:
前提:
要用到一个clip-path属性,可以创建一个只有元素的部分区域可以显示的剪切区域。但是,这属性 兼容性不太好 ,还没有得到所有主流浏览器广泛支持(比如Firefox和IE)。
实现:
1.定义一盒标签放文字:
<body>
<h1>北极光之夜</h1>
</body>
2.给文本设置颜色和大小:
h1{
position: relative;
color: #6b6868;
font-size: 120px;
}
3.定义一个伪元素:
h1::after{
content: '北极光之夜';
top: 0;
left: 0;
position: absolute;
color: transparent;
background-image: linear-gradient(to left,rgb(0, 174, 255),rgb(0, 255, 85),rgb(212, 0, 255),rgb(0, 204, 255),rgb(238, 255, 0));
background-clip: text;
-webkit-background-clip: text;
clip-path: circle(80px at 0% 50%);
animation: move 3s linear alternate infinite;
}
注意:一些属性意思:
color: transparent; 文本默认颜色透明~
background-clip: text;
-webkit-background-clip: text; 只在文本里显示颜色~
clip-path: circle(80px at 0% 50%); 背景截取显示区域为圆形,半径为80px,圆心在0% 50%的位置~
4.动画:就是不断改变圆心位置
@keyframes move{
0%{
clip-path: circle(80px at 0% 50%);
}
100%{
clip-path: circle(80px at 100% 50%);
}
}
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #070707;
}
h1{
position: relative;
color: #6b6868;
font-size: 120px;
}
h1::after{
content: '北极光之夜';
top: 0;
left: 0;
position: absolute;
color: transparent;
background-image: linear-gradient(to left,rgb(0, 174, 255),rgb(0, 255, 85),rgb(212, 0, 255),rgb(0, 204, 255),rgb(238, 255, 0));
background-clip: text;
-webkit-background-clip: text;
clip-path: circle(80px at 0% 50%);
animation: move 3s linear alternate infinite;
}
@keyframes move{
0%{
clip-path: circle(80px at 0% 50%);
}
100%{
clip-path: circle(80px at 100% 50%);
}
}
</style>
<body>
<h1>北极光之夜</h1>
</body>
</html>
总结:
其实原理就是底层有一层默认颜色的文本,然后上面又用伪类元素覆盖了一层有颜色的文本,然后就是区域显示有颜色那层。