原生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背景_动力节点Java学院整理
Jul 11 HTML / CSS
CSS3等相关属性制作分页导航实现代码
Dec 24 HTML / CSS
基于CSS3制作立体效果导航菜单
Jan 12 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
Jun 20 HTML / CSS
css3实现六边形边框的实例代码
May 24 HTML / CSS
解决margin 外边距合并问题
Jul 03 HTML / CSS
基于ccs3的timeline时间线实现方法
Apr 30 HTML / CSS
HTML5地理定位与第三方工具百度地图的应用
Nov 17 HTML / CSS
HTML5 用动画的表现形式装载图像
Mar 08 HTML / CSS
Canvas波浪花环的示例代码
Aug 21 HTML / CSS
CSS三大特性继承性、层叠性和优先级详解
Jan 18 HTML / CSS
HTML页面中使两个div并排显示的实现
May 15 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
You might like
php类
2006/11/27 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
pytorch中图像的数据格式实例
2020/02/11 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
如何理解Python中的变量
2020/06/01 Python
印度在线购物网站:Paytmmall
2019/07/24 全球购物
《守株待兔》教学反思
2014/03/01 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
医学生求职信
2014/07/01 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
2014年医院工作总结
2014/11/20 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
基层党支部承诺书
2015/04/30 职场文书
就业证明函
2015/06/17 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL