CSS——文字渐入效果

CSS------文字渐入效果

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

文字渐入效果

基本思路

使用父元素占位,然后通过逐步显示伪元素;

使用 clac() 计算函数以及相对单位 vw 动态调整字体的大小。

实现步骤

基础的设置

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文字填入效果</title>
  <style>
    * {
      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="--text-color: hsl(60, 50%, 50%); --delay: 0">I'm lazy-sheep-king!</h1>
  <h1 data-text="Welcome to my blog!" style="--text-color: hsl(180, 50%, 50%); --delay: 1">Welcome to my blog!</h1>
  <h1 data-text="Thank you for you support!" style="--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 来实现此效果。

结语

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

源码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文字填入效果</title>
  <style>
    * {
      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="--text-color: hsl(60, 50%, 50%); --delay: 0">I'm lazy-sheep-king!</h1>
  <h1 data-text="Welcome to my blog!" style="--text-color: hsl(180, 50%, 50%); --delay: 1">Welcome to my blog!</h1>
  <h1 data-text="Thank you for you support!" style="--text-color: hsl(300, 50%, 50%); --delay: 2">Thank you for you
    support!</h1>
</body>

</html>
相关推荐
mldong6 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排7 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60617 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角9 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!9 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰9 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi10 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen11 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马12 小时前
AI源码分析:拆解模型底层实现逻辑
前端
BillKu12 小时前
全局样式变量:CSS 自定义属性(--border-color)和SCSS 变量($border-color)的说明
javascript·css·scss