效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/zhang-ou/pen/GdpPLE

可交互视频教程

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/c/c4vdvcL

源代码下载

请从 github 下载。

https://github.com/comehope/front-end-daily-challenges/tree/master/001-button-text-staggered-sliding-effects

代码解读

定义 dom,在一个容器中定义按钮的文字,每个字母一个 span,每个 span 有一个 data-text 属性,其值与 span 内的字母相同:

<div class="box">
<span data-text="B">B</span>
<span data-text="U">U</span>
<span data-text="T">T</span>
<span data-text="T">T</span>
<span data-text="O">O</span>
<span data-text="N">N</span>
</div>

按钮居中:

html, body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}

设置按钮的尺寸和文字样式:

.box {
width: 200px;
height: 60px;
border: 2px solid black;
text-align: center;
font-size: 30px;
line-height: 60px;
font-family: sans-serif;
}

按钮的每个字母都设置为行内块元素,以便单独设置动效:

.box span {
display: inline-block;
color: blue;
}

把字母交错地显示在按钮容器之外,第奇数个元素显示在上,第偶数个元素显示在下:

.box span:nth-child(odd) {
transform: translateY(-100%);
} .box span:nth-child(even) {
transform: translateY(100%);
}

用伪元素为每个字母增加一个副本:

.box span::before {
content: attr(data-text);
position: absolute;
color: red;
}

让伪元素的字母也交错显示,位置与其原始元素相对:

.box span:nth-child(odd)::before {
transform: translateY(100%);
} .box span:nth-child(even)::before {
transform: translateY(-100%);
}

为按钮增加鼠标划过样式,设置緩动时间,使其有动画效果:

.box:hover span {
transform: translateY(0);
} .box span {
transition: 0.5s;
}

最后,隐藏容器外的内容:

.box {
overflow: hidden;
}

大功告成!

知识点

最新文章

  1. jQuery uploadify 文件上传
  2. 渗透杂记-2013-07-13 Windows XP SP2-SP3 / Windows Vista SP0 / IE 7
  3. nginx完美支持yii2框架
  4. 《安全参考》HACKCTO-201312-12
  5. C#调用dll时的类型转换总结
  6. android Spinner的使用
  7. PMD使用手册
  8. poj 3171 Cleaning Shifts(区间的最小覆盖价值)
  9. [C++程序设计]指针数组和指向指针的指针
  10. Access Toke调用受保护的API
  11. CSU 1803 2016
  12. sql语句判断两个时间段是否有交集
  13. SystemClock.sleep和Thread.sleep的区别
  14. 深入理解SpringAOP之代理对象
  15. Bot Framework 搭建聊天机器人
  16. C语言程序设计II—第七周教学
  17. Python--Virtualenv简明教程
  18. Bukkit插件编程之检测玩家受到的伤害是来自投射类武器还是近身武器
  19. 【linux应用】将一个大文件按行拆分成小文件
  20. osgEarth设置模型旋转角度

热门文章

  1. SAP 配置表记录创建人/创建日期/创建时间/更改人/更改日期/更改时间
  2. 吴裕雄--天生自然python学习笔记:python 用 Open CV抓取摄像头视频图像
  3. 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,&#39;&#39;)中的&quot;/g&quot;是什么意思?”
  4. [LC] 58. Length of Last Word
  5. 解决scoped 下confirm 样式问题
  6. ORs-6-Olfactory Bulb Ratio, ORs Gene Repertoire, and Olfactory Ability
  7. Hypothesis Tests for One Population Mean When σ Is Unknown|other
  8. deeplearning.ai 人工智能行业大师访谈
  9. mysql 事务处理 (转)
  10. 无标定量|有标定量|谱图计数|XIC|AMT数据库|RT对对齐|母离子|子离子|SILVER|SRM|iBAQ|APEX|差异蛋白筛选|MaxQuant|PANDA|C-HPP