大多数博客首页都在使用的文字打字机出现效果

news2024/11/22 10:00:30

打字机效果展示

原理步骤

初步框架

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    body {
      margin: 0;
      background: #ff8888;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .text {
      font-size: 40px;
      position: relative;
      background: red;
    }
    
  </style>
</head>

<body>
  <div class="text-box">
    <span class="text">Hello World!</span>
  </div>
</body>

</html>

1形态

增加伪元素,遮挡住文字,根据keyframe动画就行慢慢"亮相"

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    body {
      margin: 0;
      background: #ff8888;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .text {
      font-size: 40px;
      position: relative;
      background: red;
    }

    .text::before {
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      background: orange;
    }
  </style>
</head>

<body>
  <div class="text-box">
    <span class="text">Hello World!</span>
  </div>
</body>

</html>

image-20240630185257394

这里的伪元素设置content=“” 和绝对定位 ,父盒子相对定位原因如下

伪元素是给DOM增加新的内容,但是不会出现在源代码里,只会在CSS里

伪元素默认插入内联元素a span…

特点如下

没有宽高,宽高由其包含的文本宽度决定——无宽高

只有水平的内外边距和border——无垂直内外距,边框

横向排列,宽度超出父盒子则换行——不和div一样换行

因此,当我们想给内联元素设置宽高时就必须定义为块级元素

绝对定位和固定定位都可以使行内元素也就是内联元素变成块级元素

子绝父相, 绝对定位的初始位置x,y是以父盒子的左顶点x,y开始的

因此需要给外面的盒子加相对定位,否则就会以body的左顶点作为初始点,就会跑到左上角去了,且该元素的width 100%将会是整个body的100%

用绝对定位就能将其锁死在该span范围内进行"亮相操作"

2形态

设置初始值left为0,一开始在左边

设置出场关键帧,

0-40% left增加到100% 完全亮相

40%-60% 静止不动 100% 相当于delay延时

60%-100时 删除效果 0%

当然你也可以简写成

40%-60% 静止不动 100%

60%-100时 完全亮相 100%

**设置输入内容时的光标闪烁动画关键帧

增加左边框, from #eee有颜色 到 to transparent 透明

应用关键帧
animation: 关键帧名 总耗时 帧数 循环次数

关键帧名字 总耗时(文字数量/2) steps(一共做了多少步也就是总帧数,帧数就是一秒几张图片,越大越丝滑,越小越卡,由于这里的光标闪烁属于那种卡卡的闪的很慢的我们给小一点,文字的总帧数尽量和文字数量一致,例如5个字,steps就为5也就是一帧一个字的变化)

当然还有播放delay 播放方向direction 动画结束后的状态fill-mode 时间曲线time function 有点类似于Pr Ae剪辑里的拉速度曲线缓入缓出等 可自行探索

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    body {
      margin: 0;
      background: #ff8888;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
    }


    .text {
      font-size: 20px;
      position: relative;
    }


    .text::before {
      left: 0;
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      background: #ff8888;
      border-left: 2px solid #ffffff;
      animation:
        grow 2.8s infinite steps(10),
        cursor 400ms steps(44) infinite normal;

    }

    @keyframes grow {

      40%,
      60% {
        left: 100%;
      }

      100% {
        left: 0%;
      }
    }

    @keyframes cursor {
      0% {
        border-left-color: #eee;
      }

      100% {
        border-left-color: transparent;
      }
    }
  </style>
</head>

<body>
  <div class="text-box">
    <span class="text">Hello World!</span>
  </div>
</body>

</html>

3形态

使用选择器加定时器 替换文本内容

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    body {
      margin: 0;
      background: #ff8888;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
    }


    .text {
      font-size: 20px;
      position: relative;
    }


    .text::before {
      left: 0;
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      background: #ff8888;
      border-left: 2px solid #ffffff;
      animation:
        grow 4s infinite steps(10),
        cursor 400ms steps(44) infinite normal;

    }

    @keyframes grow {

      40%,
      60% {
        left: 100%;
      }

      100% {
        left: 0%;
      }
    }

    @keyframes cursor {
      0% {
        border-left-color: #eee;
      }

      100% {
        border-left-color: transparent;
      }
    }
  </style>
</head>

<body>
  <div class="text-box">
    <span class="text">Hello World!</span>
  </div>


  <script>
    const text = document.querySelector('.text')
    const textLoad = () => {
      setTimeout(() => {
        text.textContent = "How are you?";
      }, 0);
      setTimeout(() => {
        text.textContent = "I am fine";
      }, 4000);
      setTimeout(() => {
        text.textContent = "Thank you";
      }, 8000);
    }
    textLoad();
    setInterval(textLoad, 12000)
  </script>
</body>

</html>

22222

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue使用axios获取信息的案例

List组件&#xff08;用来展示搜索的信息&#xff09; <template><div class"row"><!-- 列表数据 --><div class"card" v-for"user in info.users" :key"user.login" v-show"info.users.length">&l…

在 Windows 下使用 Linux 命令的多种方法

在 Windows 操作系统上使用 Linux 命令行工具&#xff0c;对于许多开发者和系统管理员来说是一个常见的需求。特别是对于那些习惯于 Linux 命令行的用户来说&#xff0c;Windows 自带的 CMD 和 PowerShell 可能并不满足他们的需求。虽然 Windows Subsystem for Linux (WSL) 是一…

【JavaEE】多线程代码案例(1)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程&#xff08;2…

力扣 单词规律

所用数据结构 哈希表 核心方法 判断字符串pattern 和字符串s 是否存在一对一的映射关系&#xff0c;按照题意&#xff0c;双向连接的对应规律。 思路以及实现步骤 1.字符串s带有空格&#xff0c;因此需要转换成字符数组进行更方便的操作&#xff0c;将字符串s拆分成单词列表…

Linux --账号和权限管理

目录 1、 管理用户账号和组账概述 1.1 用户账号分类 1.2 组账号 1.3 UID 和 GID 2、用户账号文件 2.1 passwd 2.2 shadow 3、管理目录和文件属性 3.1 chage 命令 3.2 useradd 命令 3.3 passwd 命令 ​编辑3.4 usermod 命令 3.5 userdel 命令 4、用户账户的初始配置…

Spring企业开发核心框架-下

五、Spring AOP面向切面编程 1、场景设定和问题复现 ①准备AOP项目 项目名&#xff1a;Spring-aop-annotation ②声明接口 /*** - * / 运算的标准接口!*/ public interface Calculator { int add(int i, int j); int sub(int i, int j); int mul(int i, in…

使用Python绘制太阳系图

使用Python绘制太阳系图 太阳系图太阳系图的优点使用场景 效果代码 太阳系图 太阳系图&#xff08;Sunburst Chart&#xff09;是一种层次结构图表&#xff0c;用于表示数据的分层结构。它使用同心圆表示各个层级&#xff0c;中心圆代表最高层级&#xff0c;向外的圆环代表逐级…

类型转换与数据绑定【Spring源码学习】

simpleTypeConverter 类型转换 SimpleTypeConverter typeConverter new SimpleTypeConverter(); Integer number typeConverter.convertIfNecessary("13",int.class); System.out.println(number);BeanWrapper 通过反射原理为bean赋值&#xff0c;走的是set方法…

使用pyqt5编写一个七彩时钟

使用pyqt5编写一个七彩时钟 效果代码解析定义 RainbowClockWindow 类初始化用户界面显示时间方法 完整代码 在这篇博客中&#xff0c;我们将使用 PyQt5 创建一个简单的七彩数字时钟。 效果 代码解析 定义 RainbowClockWindow 类 class RainbowClockWindow(QMainWindow):def _…

C++ 数据库MySQL 学习笔记(3) - 数据库操作

C 数据库MySQL 学习笔记(3) - 数据库操作 视图操作 视图是从一个或多个表中导出来的表&#xff0c;是一种虚拟存在的表。视图就像一个窗口&#xff0c;通过这个窗口可以看到系统专门提供的数据&#xff0c;这样用户可以不看整个数据库表中的数据&#xff0c;而只关心对自己有…

【热部署】✈️Springboot 项目的热部署实现方式

目录 &#x1f378;前言 &#x1f37b;一、热部署和手动重启 &#x1f37a;二、热部署的实现 2.1 手动启动热部署 2.2 自动检测热部署 2.3 关闭热部署 &#x1f49e;️三、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;书接上文&#xff0c;通过Springboot 中的 actu…

【Python】已解决:IndexError: list index out of range

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;IndexError: list index out of range 一、分析问题背景 在Python编程中&#xff0c;IndexError: list index out of range 是一个常见的错误。这个错误通常出现…

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)

接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作&#xff0c;本篇我们来继续学习Series对象的运算、函数应用、时间序列操作&#xff0c;以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…

基于JSP的体育竞赛成绩管理系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#xff1a;MyEclipse, Tomcat, MySQL 系统展示 首页 管理…

Windows Ternimal

Windows Ternimal 安装 Windows 终端概述 | Microsoft Learn wt --help在当前目录打开 lextm/windowsterminal-shell: Install/uninstall scripts for Windows Terminal context menu items 打开指定目录 wt -d %USERPROFILE% ohmyposh 美化 1 安装 2 添加 ohmyposh bin…

数字签名解析

1. 概述 数字签名不是手写签名的数字图像&#xff1b; 数字签名是一种可以提供认证的加密形式&#xff0c;是转向完全无纸环境的一个途径&#xff1b; 数字签名机制用以解决伪造、抵赖、冒充和篡改、完整性保护等安全问题。 2. 公钥密码与数字签名的关系 要实现数字签名&#…

【python爬虫实战】爬取豆瓣top250(网站有反爬虫机制肿么办)

关于请求头headers: 值得注意的是&#xff0c;与上一篇 &#xff1a;​​​​​​【python爬虫实战】爬取书店网站的 书名&价格&#xff08;注释详解&#xff09;-CSDN博客 爬取书名不同&#xff0c;这次爬取豆瓣网站必须使用“请求头headers”&#xff0c;不然将没有输…

SSM学习2:依赖注入、依赖自动装配、集合注入、加载properties文件

依赖注入 依赖注入方式 setter注入——引用类型 setter注入——简单类型 public class BookDaoImpl implements BookDao {public void setDatabaseName(String databaseName) {this.databaseName databaseName;}public void setNum(int num) {this.num num;}private Stri…

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率&#xff1f;2 图像超分辨率通常有哪些方法&#xff1f;&#xff08;1&#xff09;基于插值的方法&#xff08;2&#xff09;基于重建的方法&#xff08;3&#xff09;基于学习的方法&#xff08;LR im…

jenkins 发布服务到linux服务器

1.环境准备 1.1 需要一台已经部署了jenkins的服务器&#xff0c;上面已经集成好了&#xff0c;jdk、maven、nodejs、git等基础的服务。 1.2 需要安装插件 pusblish over ssh 1.3 准备一台额外的linux服务器&#xff0c;安装好jdk 2.流程描述 2.1 配置jenkins&#xff0c;包括p…