原生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中的选择符
Oct 17 HTML / CSS
可以随进度显示不同颜色的css3进度条分享
Apr 11 HTML / CSS
使用css3做0.5px的细线的示例代码
Jan 18 HTML / CSS
详解H5本地储存Web Storage
Jul 03 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
Jul 25 HTML / CSS
详解android与HTML混合开发总结
Jun 06 HTML / CSS
html5 canvas实现给图片添加平铺水印
Aug 20 HTML / CSS
Html5获取高德地图定位天气的方法
Dec 26 HTML / CSS
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
Aug 24 HTML / CSS
CSS 圆形进度栏
Apr 06 HTML / CSS
CSS3 实现的图片悬停的切换按钮
Apr 13 HTML / CSS
如何在CSS中绘制曲线图形及展示动画
May 24 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
CSS实现漂亮的时钟动画效果的实例代码
CSS3点击按钮圆形进度打钩效果的实现代码
完美实现CSS垂直居中的11种方法
You might like
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
Python之web模板应用
2017/12/26 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
python利用opencv实现颜色检测
2021/02/23 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
市场部规章制度
2014/01/24 职场文书
yy司仪主持词
2014/03/22 职场文书
节能环保演讲稿
2014/08/28 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js