当前位置: 首页 > news >正文

文字悬停效果

文字悬停效果

效果展示

在这里插入图片描述

CSS 知识点

  • CSS 变量使用回顾
  • -webkit-text-stroke 属性的运用与回顾

页面整体结构实现

<ul><li style="--clr: #e6444f"><a href="#" class="text">First</a></li><li style="--clr: #f0b024"><a href="#" class="text">Attempt</a></li><li style="--clr: #00a492"><a href="#" class="text">In</a></li><li style="--clr: #af579b"><a href="#" class="text">Learning</a></li>
</ul>

实现页面文字整体布局效果

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;background: #222;overflow: hidden;
}ul {position: relative;display: flex;flex-direction: column;gap: 20px;
}
ul li {list-style: none;
}
ul li .text {font-size: 4em;text-transform: uppercase;cursor: pointer;text-decoration: none;font-weight: 800;line-height: 1em;display: flex;align-items: center;
}

使用 JavaScript 拆分文字

为了方便实现我们需要的效果,需要把每个单词进行拆分,并且为每个字母添加同的样式和动画效果。具体的拆分代码如下:

const texts = document.querySelectorAll(".text");
texts.forEach((text) => {// 获取A标签中的单词,使用trim()函数进行字符串的切割,然后添加到A标签中const spans = Array.from(text.textContent.trim()).map((char) => `<span>${char === "" ? "&nbsp;" : char}</span>`).join("");text.innerHTML = spans;const spanList = text.querySelectorAll("span");spanList.forEach((span, index) => {span.addEventListener("mouseover", () => {spanList.forEach((s, i) => {const distance = Math.abs(index - i);const delay = (distance * 0.1).toFixed(1);s.style.transitionDelay = `${delay}s`;});});});
});

为每个单词添加基础样式

ul li .text span:not(:first-child) {letter-spacing: 0.1em;
}
ul li .text span {position: relative;-webkit-text-stroke: 1px #fff;color: transparent;transition: 1s;transform: rotateX(0deg);
}
ul li .text span:nth-child(1) {width: 70px;height: 70px;background: var(--clr);color: #222;-webkit-text-stroke: 0px #fff;display: flex;justify-content: center;align-items: center;margin-right: 5px;
}

为每个单词添加悬停样式

ul li .text:hover span:not(:first-child) {color: var(--clr);transition: 1s;transform: rotateX(360deg);-webkit-text-stroke: 1px transparent;
}

完整代码下载

完整代码下载

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PCIE的吞吐量如何计算和记忆诀窍?
  • Calibre版图验证工具调用_笔记
  • 下载kibana-7.10.2教程
  • 恭喜!X医生斩获英国伦敦大学学院访问学者邀请函
  • Java工程师入职指南:从准备到适应新工作的每一步
  • [Python学习篇] Python运算符
  • GStreamer编译安装——使用Meson从源代码编译
  • 服务器无法远程桌面连接,解决服务器进行无法远程桌面连接方法有哪些
  • 在typora中利用正则表达式,批量处理图片
  • 【MySQL】MySQL45讲-读书笔记
  • 通过Stream流对集合进行操作
  • PHP聚合通多平台支付平台源码
  • 关于stm32的软件复位
  • spark MLlib (DataFrame-based) 中的聚类算法Bisecting K-Means、K-Means、Gaussian Mixture
  • 美丽的拉萨,神奇的布达拉宫
  • 【5+】跨webview多页面 触发事件(二)
  • Electron入门介绍
  • ES6--对象的扩展
  • express如何解决request entity too large问题
  • js作用域和this的理解
  • leetcode388. Longest Absolute File Path
  • MySQL-事务管理(基础)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PaddlePaddle-GitHub的正确打开姿势
  • php ci框架整合银盛支付
  • React+TypeScript入门
  • Redis学习笔记 - pipline(流水线、管道)
  • Redis字符串类型内部编码剖析
  • 聊聊sentinel的DegradeSlot
  • 普通函数和构造函数的区别
  • 微信小程序开发问题汇总
  • 想写好前端,先练好内功
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在weex里面使用chart图表
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 终端用户监控:真实用户监控还是模拟监控?
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​queue --- 一个同步的队列类​
  • # include “ “ 和 # include < >两者的区别
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014# day.1 T2 联合权值
  • #图像处理
  • $refs 、$nextTic、动态组件、name的使用
  • (9)STL算法之逆转旋转
  • (arch)linux 转换文件编码格式
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Java入门)学生管理系统
  • (差分)胡桃爱原石
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (论文阅读11/100)Fast R-CNN
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (算法)Game