原生CSS实现文字无限轮播的通用方法


Posted in HTML / CSS onMarch 30, 2021

文字轮播在生活中很常见,各个超市及实体店门头通常会有文字轮播的广告牌,本文详细介绍下实现逻辑。

场景

商店门头广告牌,需要通过横向移动的文字来展示公告(加边框是为了更好演示)。

原生CSS实现文字无限轮播的通用方法

逻辑说明

原生CSS实现文字无限轮播的通用方法

实现文字无限轮转的逻辑主要有两点:

  • 文字水平移动
  • 文字首尾相接 

第1点实现方法是使用CSS动画,transform: translateX(-50%),即往左平移自身的一半。

第2点实现方法,跟第1点有关。CSS动画在默认情况下播放完成后是突变的,即播放完成时位置突变到初始位置(突变是瞬间完成的,人肉眼感知不到),因此我们可以利用突变来实现文字首尾相接。

我们用两段相同的文本,当第一段文本播放完毕,开始播放第二段文本时,此时动画突变又开始重新播放第一段文字,因两段文字内容一样,所以用户无感知。

思考

目前这种实现方式是通用的吗?

这种方式其实已经解决了大部分需求,但是当文字比较少,当文字的宽度小于窗口宽度时,是有问题的,我画的轮转逻辑示意图只是其中的一种情况。

当文字的宽度小于窗口宽度时,如何实现?

其实道理都一样,文字轮转核心之一是需要两段相同的文本,但它是有前提的,前提是一段文本的宽度必须大于窗口的宽度。

如何达到这个前提条件?

答案是 整体复制文本直到文本的宽度大于窗口的宽度,然后再处理成两段相同的文本。

总结

文字无限轮转的要点如下:

  • 文本宽度必须大于窗口宽度,文本宽度不够时就整体复制文本直到文本宽度大于窗口宽度
  • 两段相同的文本
  • 移动 50% 的距离

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>文字无限轮播</title>
 
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
 
        #wrap {
            overflow: hidden;
            position: relative;
            width: 200px;
            height: 20px;
            white-space: nowrap;
        }
 
        #inner {
            position: absolute;
            animation: slide 5s linear infinite;
        }
 
        #first{
            display: inline-block;
            border: 1px solid red;
        }
 
        #second{
            display: inline-block;
            border: 1px solid green;
        }
 
        @keyframes slide {
            0% {
                transform: translateX(0);
            }
            100% {
                transform: translateX(-50%);
            }
        }
    </style>
</head>
<body>
<div id="wrap">
    <div id="inner">
        <span id="first">本店主营拉面,刀削面,烩面,盖浇饭</span>
        <span id="second">本店主营拉面,刀削面,烩面,盖浇饭</span>
    </div>
</div>
</body>
</html>

到此这篇关于原生CSS实现文字无限轮播的通用方法的文章就介绍到这了,更多相关CSS实现文字无限轮播内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
详解纯CSS3制作的20种loading动效
Jul 05 HTML / CSS
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
Feb 04 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
Apr 24 HTML / CSS
利用CSS3实现圆角的outline效果的教程
Jun 05 HTML / CSS
详解CSS3中border-image的使用
Jul 18 HTML / CSS
css3动画效果小结(推荐)
Jul 25 HTML / CSS
用CSS3实现无限循环的无缝滚动的示例代码
Nov 01 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
May 07 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
Jan 03 HTML / CSS
canvas小画板之平滑曲线的实现
Aug 12 HTML / CSS
CSS实现单选折叠菜单功能
Nov 01 HTML / CSS
CSS中calc(100%-100px)不加空格不生效
May 07 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
php服务器的系统详解
2019/10/12 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
技术负责人任命书
2014/06/05 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Nginx速查手册及常见问题
2022/04/07 Servers
Spring中的@Transactional的工作原理
2022/06/05 Java/Android