前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >css实现简单聚光灯效果

css实现简单聚光灯效果

原创
作者头像
XaDon
修改2020-05-12 10:06:28
8640
修改2020-05-12 10:06:28
举报
文章被收录于专栏:Xudon的云开发吖Xudon的云开发吖

先来一张最终效果图~

### 实现原理

使用两层h1标签叠加到一起(在第一层的基础上为其创建一个副本),通过css clip-path 实现将第二层剪切,最后加个animation实现循环左右移动效果

### 实践过程

原理没读懂嘛,我们可以通过实战来理解整个过程~

#### 创建h1标签

代码语言:txt
复制
<h1>spotlight</h1>

好啦,html部分到此结束啦~是不是很简单,我们主要来讨论css部分。

#### css实现

先来将文字进行居中看着舒服些~ 办法有很多,在这里使用flex布局进行居中

代码语言:txt
复制
body {

 display: flex;

 height: 100vh;

 justify-content: center;

 align-items: center;

 margin: 0;

 padding: 0;

}

写完这些你的文字是不是居中了呢?居中后,我们来改一改文字的样式~

代码语言:txt
复制
h1{

 color: #eaeaea;

 font-size: 8rem;

}

到此我们第一层就写完啦~下面我们要做的就是写第二层,并覆盖第一层文字。


我们使用**子绝父相**将其覆盖,为了区别将其颜色改为yellow~不要问为啥是yellow,I like !! 

代码语言:txt
复制
h1::before{

 content: 'spotlight';

 position: absolute;

 font-size: 8rem;

 color: yellow;

}

子元素设置完绝对布局后将body添加一个position: relative;

可以看到,已经覆盖成功~

下面来进行聚光灯的打光(将yellow部分进行剪切)

h1::before中加入

代码语言:txt
复制
clip-path_: ellipse(130px 140px at 10% 50%_);

关于clip-path的详细信息,可以移步文档👉戳

现在的效果是这样👇

现在已经完成了静态的部分,最后我们只需要让这个剪切的位置动起来就可以啦~

h1::before中加入

代码语言:txt
复制
 _animation: spotlight 5s infinite;_

并新增一个@keyframes

代码语言:txt
复制
@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

代码语言:txt
复制
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

代码语言:txt
复制
<!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>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档