原生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教程(8):CSS3透明度指南
Apr 02 HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 HTML / CSS
实例讲解CSS3中的box-flex弹性盒属性布局
Jun 09 HTML / CSS
纯css3实现思维导图样式示例
Nov 01 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 HTML / CSS
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
Jul 20 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
Jun 25 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
Mar 25 HTML / CSS
详解HTML5中表单验证的8种方法介绍
Dec 19 HTML / CSS
Canvas绘制浮动球效果的示例
Dec 29 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
Jul 31 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
Mar 31 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
You might like
基于PHP技术开发客服工单系统
2016/01/06 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python的log日志功能及设置方法
2019/07/11 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python实现Restful API的例子
2019/08/31 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
旷课检讨书范文
2015/01/27 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang