CSS——文字渐入效果

news/2024/10/8 9:55:56 标签: css, 前端

CSS——文字渐入效果

昨天制作了文字的打字机效果(CSS——文字打字机效果),然后我想到有些网页的文字效果是平滑渐入的,我就去思考这样的实现方式,其实就把之前的steps()函数去掉即可,但是我想换种实现方式。之前是使用伪元素遮住父元素,这次我选择使用父元素占位,然后通过逐步显示伪元素来实现这个效果,同时还用到了响应式布局,使得在缩放页面的时候也能够保证文字不会加载到屏幕之外。

文字渐入效果

基本思路

使用父元素占位,然后通过逐步显示伪元素;
使用 clac() 计算函数以及相对单位 vw 动态调整字体的大小。

实现步骤

基础的设置

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文字填入效果</title>
  <style>css">
    * {
      padding: 0;
      margin: 0;
    }

    body {
      height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      background-color: hsl(280, 50%, 30%);
      font-family: 'Times New Roman', Times, serif;
    }

    h1 {
      position: relative;
      font-size: calc(0.5rem + 3vw);
      line-height: 2em;
      letter-spacing: .1em;
      text-wrap: nowrap;
      color: transparent;
    }

    h1::before {
      content: attr(data-text);
      position: absolute;
      width: 0;
      height: 100%;
      border-right: 5px solid var(--text-color);
      text-wrap: nowrap;
      overflow: hidden;
      color: var(--text-color);
      text-shadow: 0.05em 0.05em 0.05em hsla(0, 0%, 0%, .5);
    }
  </style>
</head>

<body>
  <h1 data-text="I'm lazy-sheep-king!" style="css">--text-color: hsl(60, 50%, 50%); --delay: 0">I'm lazy-sheep-king!</h1>
  <h1 data-text="Welcome to my blog!" style="css">--text-color: hsl(180, 50%, 50%); --delay: 1">Welcome to my blog!</h1>
  <h1 data-text="Thank you for you support!" style="css">--text-color: hsl(300, 50%, 50%); --delay: 2">Thank you for you
    support!</h1>
</body>

</html>

注意的是,这里使用font-size: calc(0.5rem + 3vw);动态设置文字的大小,使用line-height: 2em设置行高,这里使用相对单位em,所以行高也会随着文字大小的变化而变化,最后对父元素和伪元素使用text-wrap: nowrap,确保文字不会换行。
我们还为伪元素使用 content: attr(data-text) 获取自定义属性中的值(即将伪元素的内容设置为于其父元素一致),使用 overflow: hidden;将超出"已加载"部分的文本隐藏,与之前不同,现在使用border-right设置光标,不过这里不方便给光标设置圆角,不如使用伪元素简单(当然,这里可以继续像之前一样使用::after伪元素设置光标)。父元素设置 color: transparent; 以达到将原文字隐藏的目的。
在这里插入图片描述
(其实我觉得这个光标效果不是很搭,去掉更好,但是为了与上一篇文章联系起来就保留了)

添加关键帧

css">@keyframes moving {
  to {
    width: 100%;
  }
}

@keyframes flashing {
  to {
    border-color: transparent;
  }
}
h1::before {
  animation: moving 3s calc(var(--delay) * 3s) linear forwards, flashing 0.5s infinite alternate;
}

这里同样使用计算函数clac()设置不同的延时,使其依次播放,然后额外设置“光标闪烁”的效果,我们当然可以改动 -- text-color 的值以达到光标闪烁的目的,但是这同样会影响文字的颜色,所以不要为了改变而改变,这里我们改变最基础的 border-color 来实现此效果。

结语

创作不易,感谢支持;如有错误,恳请指出,希望与大家共同进步!

源码

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文字填入效果</title>
  <style>css">
    * {
      padding: 0;
      margin: 0;
    }

    body {
      height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      background-color: hsl(280, 50%, 30%);
      font-family: 'Times New Roman', Times, serif;
    }

    h1 {
      position: relative;
      font-size: calc(0.5rem + 3vw);
      line-height: 2em;
      letter-spacing: .1em;
      color: transparent;
    }

    h1::before {
      content: attr(data-text);
      position: absolute;
      width: 0;
      height: 100%;
      border-right: 5px solid var(--text-color);
      text-wrap: nowrap;
      overflow: hidden;
      animation: moving 3s calc(var(--delay) * 3s) linear forwards, flashing 0.5s infinite alternate;
      color: var(--text-color);
      text-shadow: 0.05em 0.05em 0.05em hsla(0, 0%, 0%, .5);
    }

    @keyframes moving {
      to {
        width: 100%;
      }
    }

    @keyframes flashing {
      to {
        border-color: transparent;
      }
    }
  </style>
</head>

<body>
  <h1 data-text="I'm lazy-sheep-king!" style="css">--text-color: hsl(60, 50%, 50%); --delay: 0">I'm lazy-sheep-king!</h1>
  <h1 data-text="Welcome to my blog!" style="css">--text-color: hsl(180, 50%, 50%); --delay: 1">Welcome to my blog!</h1>
  <h1 data-text="Thank you for you support!" style="css">--text-color: hsl(300, 50%, 50%); --delay: 2">Thank you for you
    support!</h1>
</body>

</html>

http://www.niftyadmin.cn/n/5693963.html

相关文章

音视频入门基础:FLV专题(14)——FFmpeg源码中,解码Script Tag的实现

一、引言 在《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中对Script Tag进行了简介&#xff0c;本文讲述FFmpeg源码中是怎样解码FLV文件的Script Tag&#xff0c;拿到里面的信息。 二、flv_read_packet函数 从《音视频入门基础&#x…

qt_c++_xml简单示范demo

迅雷链接 链接&#xff1a;https://pan.xunlei.com/s/VO8bJODxPfPHE0x3nfUa2KZ1A1?pwdtuxq# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTextCodec>#include <QFile&g…

时序逻辑-延一拍/打一拍?

一、时序逻辑中的同步复位和异步复位 同步复位的D触发器 同步复位的D触发器中的“同步”是和工作时钟同步的意思&#xff0c;也就是说&#xff0c;当时钟的上升沿&#xff08;也可以是下降沿&#xff0c;一般习惯上为上升沿触发&#xff09;来到时检测到按键的复位操作才有效&a…

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事&#xff1a;设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算&#xff0c;而 ImVec2 没有这个运算符的定义&#xff0c;只有 glm::vec2 有这个运算…

在thinkphp中发送http请求

我这个是带header头的请求,因为在header头中需要加入账号密码请求 public static function sendRequest($method, $url, $data null, $headers []){$ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);if ($method POST…

18734 拓扑排序

### 思路 1. **建模问题**&#xff1a;将课程和依赖关系建模为有向图&#xff0c;其中课程是节点&#xff0c;依赖关系是有向边。 2. **选择算法**&#xff1a;使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性&#xff0c;同等条件下编号小的课程排在前面&…

springboot kafka多数据源,通过配置动态加载发送者和消费者

前言 最近做项目&#xff0c;需要支持kafka多数据源&#xff0c;实际上我们也可以通过代码固定写死多套kafka集群逻辑&#xff0c;但是如果需要不修改代码扩展呢&#xff0c;因为kafka本身不处理额外逻辑&#xff0c;只是起到削峰&#xff0c;和数据的传递&#xff0c;那么就需…

论文阅读笔记-Are Pre-trained Convolutions Better than Pre-trained Transformers?

前言 Transformer诞生到现在,从NLP领域到CV领域,可以说是两开花。特别是在预训练模型中,BERT相关系列近些年屡屡突破,在各种下游任务中,不仅能提速还有效果上的提升。所以在NLP的相关任务中,提及Transformer和CNN时,Transformer一般都会优先考虑,更何况是在预训练语言…