原生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
让IE支持CSS3的不完全兼容方案
Sep 19 HTML / CSS
基于ccs3的timeline时间线实现方法
Apr 30 HTML / CSS
animation和transition的区别
Oct 12 HTML / CSS
HTML5 canvas实现雪花飘落特效
Mar 08 HTML / CSS
H5仿微信界面教程(一)
Jul 05 HTML / CSS
HTML5 Geolocation API的正确使用方法
Dec 04 HTML / CSS
使用HTML5的Notification API制作web通知的教程
May 08 HTML / CSS
谈一谈HTML5本地存储技术
Mar 02 HTML / CSS
HTML5语义化元素你真的用对了吗
Aug 22 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
Nov 19 HTML / CSS
HTML页面中使两个div并排显示的实现
May 15 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
浅析PHP Socket技术
2013/08/02 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
python中函数总结之装饰器闭包详解
2016/06/12 Python
python 调用有道api接口的方法
2019/01/03 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
学雷锋演讲稿
2014/03/04 职场文书
工作会议方案
2014/05/21 职场文书
大专生求职信
2014/06/29 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
2014年工商所工作总结
2014/12/09 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python