纯CSS实现跑马灯效果

简介: 又是一个安静的晚上,又是没有灵感的一天,又只能去逛逛codepen。看到一个流光的边框效果,我就想如何通过自己的方式来现这样一个效果。突然又想起路边夜市的招牌,不就是一个流光效果加一个广告词吗。这下我的兴趣一下就激发起来了。

又是一个安静的晚上,又是没有灵感的一天,又只能去逛逛codepen。看到一个流光的边框效果,我就想如何通过自己的方式来现这样一个效果。

突然又想起路边夜市的招牌,不就是一个流光效果加一个广告词吗。这下我的兴趣一下就激发起来了。

首先上一个效果图

网络异常,图片无法展示
|


那这里的广告词就写我的名字吧,这都不重要,接下来让我们看看是怎么实现的吧。

结构分析

首先很明显我们使用了一个盒子将文字装起来,并且将文字进行了居中,然后我们看到这盒子的周围围绕了两条光带,那么这两条光带是怎么实现的呢?

其实这是用四个小盒子实现的,就是我们将这四个小盒子分别放在大盒子的周围(紧贴这大盒子的内壁),然后使用这几个小盒子实现跑马灯效果。

接下来我们就看看具体的实现效果

代码实现

外部大盒子

首先准备一个div盒子,用来装我们的广告语,还有跑马灯的四个小盒子。

<div class="main">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        海绵宝宝
</div>
复制代码

这个盒子就准备好了  我们给这个何止设置一点样式,让他在浏览器中可以被我们看到

.main{
    width: 100px;
    height: 40px;
    background-color: transparent;
    /* 盒子居中 */
    position: absolute;
    top: 50%;
    margin-top: -20px;
    left: 50%;
    margin-left: -50px;
    /* 文字居中 */
    text-align: center;
    line-height: 40px;
    font-family: '宋体';
    color: aquamarine;
    overflow: hidden;
}
复制代码

我们给这个大盒子设置了宽高,以及背景颜色,这样使得我们的盒子在浏览器中显得不那么突兀,并且我们将盒子在浏览器中居中,并且将盒子里面的文字也进行居中,不要问我为什么一定要居中,纯属我的强迫症。

到现在为止,我们就已经把大盒子准备好了,效果就是这样的:

网络异常,图片无法展示
|


接下来我们给大盒子设置灯光效果。

内部灯光效果

既然是灯光效果,那颜色就必须得亮,这里我选着#0FF配色,在效果图上,我们可以看到灯光尾部的颜色比较淡,展现出一种过渡效果,组件从头部慢慢过渡到小盒子的原本颜色。

那这样的效果是怎么实现的呢?

这里就需要用到background的一个新的属性值:linear-gradient,通过这个属性,我们可以将多个颜色设置为一个盒子的背景颜色,并且还有过渡效果,更强大的地方在于,这个属性值可以设置渐变的方向。

语法:

linear-gradient(渐变方向,color1,color2,color3...)

那就开始使用这个属性值,我们写其中一个小盒子的效果,其他的效果实现方法都类似。

.main :nth-child(1){
    background: linear-gradient(to right, transparent , #0FF);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 1px;
}
复制代码

我们这里设置的是顶部的灯光效果,这里我们使用topleft的属性,设置这个盒子的位置;使用width:100%,使得这个盒子的宽度与大盒子保持一致,然后使用height:1px,将灯光条的宽度设置为1px,当然你也可以根据实际需求,改变灯光条的宽度。

接着剩下三条灯光的实现原理基本相同,只有位置和背景颜色不同。

剩下背景颜色的渐变方向分别是to bottomto leftto top

最后的效果就是这样:


网络异常,图片无法展示
|


是不是离我们最终的效果越来越像了,对的,我们还差最后一部,给灯光加上动画效果。

灯光的动画效果

说道动画效果,那必定离不开@keyframes,我们使用该属性为我们的灯光添加动画效果。

同样我们也设置顶部的灯光效果作为示范:

动画:

@keyframes run1{
    0%{
        transform: translateX(-200px);
    }
    100%{
        transform: translateX(200px);
    }
}
复制代码

盒子:

给盒子加上动画

.main :nth-child(1){
    animation: run1 1s linear infinite;
}
复制代码

前面我们没有设置动画之前,可以看到颜色最深的部分在最右边,但是跑马灯的实现需求是需要颜色最什么部分从左边出现,然后移动到右边,所有我们这里将动画的初识位置向左移整个盒子的长度。这样就实现了需求。

其他几个小盒子实现的方式大同小异。

接下来我们来看看效果:

网络异常,图片无法展示
|


此时我们看到该动画显得有点乱,我们通过使用动画延时来实现我们想要的动画效果。

我们从第二个小盒子开始添加延时:每个盒子比前一个盒子多0.5的延时。

.main :nth-child(2){
    animation-delay: .5s;
}
.main :nth-child(3){
    animation-delay: 1s;   
}
.main :nth-child(4){
    animation-delay: 1.5s;
}
复制代码

最后效果就出来了。

接下来放上码上掘金的地址,这里有全部代码:↓

Markup:

<!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>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="main">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        海绵宝宝
    </div>
</body>

Style:

*{
    padding: 0;
    margin: 0;
}
body{
    background: #000;
}
.main{
    width: 100px;
    height: 40px;
    background-color: transparent;
    /* 盒子居中 */
    position: absolute;
    top: 50%;
    margin-top: -20px;
    left: 50%;
    margin-left: -50px;
    /* 文字居中 */
    text-align: center;
    line-height: 40px;
    font-family: '宋体';
    color: aquamarine;
    overflow: hidden;
}
.main :nth-child(1){
    background: linear-gradient(to right, transparent , #0FF);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 1px;
    animation: run1 1s linear infinite;
}
.main :nth-child(2){
    position: absolute;
    background: linear-gradient(to bottom, transparent , #0FF);
    top: 0;
    right: 0;
    width: 1px;
    height: 100%;
    animation: run2 1s linear infinite;
    animation-delay: .5s;
}
.main :nth-child(3){
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height:1px;
    background: linear-gradient(to left, transparent , #0FF);
    animation:run3 1s linear infinite;
    animation-delay: 1s;
}
.main :nth-child(4){
    position: absolute;
    bottom: 0;
    left: 0;
    width: 1px;
    height:100%;
    background: linear-gradient(to top, transparent , #0FF);
    animation:run4 1s linear infinite;
    animation-delay: 1.5s;
}
@keyframes run1{
    0%{
        transform: translateX(-200px);
    }
    100%{
        transform: translateX(200px);
    }
}
@keyframes run2{
    0%{
        transform: translateY(-40px);
    }
    100%{
        transform: translateY(40px);
    }
}
@keyframes run3{
    0%{
        transform: translateX(200px);
    }
    100%{
        transform: translateX(-200px);
    }
}
@keyframes run4{
    0%{
        transform: translateY(40px);
    }
    100%{
        transform: translateY(-40px);
    }
}
相关文章
|
前端开发 JavaScript 开发者
利用 SplitingJS 配合 CSS 实现文字&quot;蠕动&quot;效果
利用 SplitingJS 配合 CSS 实现文字&quot;蠕动&quot;效果
391 2
|
前端开发 JavaScript
HTML+CSS+JAVASCRIPT实现——情人节表白情书
本文主要介绍如何使用HTML三件套来实现制作一封情人节表白情书,富含情谊与爱,打动女生的心灵
791 2
HTML+CSS+JAVASCRIPT实现——情人节表白情书
|
前端开发 容器
面试官:请使用 CSS 实现自适应正方形
面试官:请使用 CSS 实现自适应正方形
515 0
面试官:请使用 CSS 实现自适应正方形
|
7月前
|
前端开发
前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)
前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)
121 0
|
前端开发
前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)
前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)
95 0
|
JavaScript
html+css+js实现无缝隙跑马灯
html+css+js实现无缝隙跑马灯
178 0
|
JavaScript 前端开发
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
938 2
CSS进阶向--配合Vue动态样式实现“超炫酷”圆环菜单
|
前端开发 JavaScript
CSS进阶向--纯css实现流光边框(二)
CSS进阶向--纯css实现流光边框(二)
2383 1
CSS进阶向--纯css实现流光边框(二)
|
前端开发 JavaScript 程序员
CSS进阶向--纯css实现流光边框
CSS进阶向--纯css实现流光边框
2029 0
|
前端开发 容器
我已经说了5种css居中实现的方式了,面试官竟然说还不够?
这是一篇关于居中对齐方式的总结 开篇之前,先问一下大家都知道几种居中的实现方式? 面试时答出来两三个就不错了,就怕面试官还让你继续说。今天就来总结一下这些居中的方式 使用flex布局设置居中。 使用flex 时也能通过给子项设置margin: auto实现居中。 使用绝对定位的方式实现水平垂直居中。 使用grid设置居中。 使用grid时还能通过给子项设置margin: auto实现居中。 使用tabel-cell实现垂直居中。 还有一种不常用的方法实现垂直居中。 最后还有一种奇葩的方法。容器设置position: relative。孩子设置 top、left、bottom、right都设
177 0
我已经说了5种css居中实现的方式了,面试官竟然说还不够?