效果预览

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

https://codepen.io/comehope/pen/mKdzZM

可交互视频教程

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

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

https://scrimba.com/p/pEgDAM/cgnk6Sb

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,标准的导航模式:

  1. <nav>
  2. <ul>
  3. <li>Home</li>
  4. </ul>
  5. </nav>

居中显示:

  1. body {
  2. margin: 0;
  3. height: 100vh;
  4. display: flex;
  5. align-items: center;
  6. justify-content: center;
  7. background-color: black;
  8. }

定义文本和按钮边框样式:

  1. nav ul {
  2. padding: 0;
  3. }
  4. nav ul li {
  5. color: white;
  6. list-style-type: none;
  7. font-size: 32px;
  8. font-family: sans-serif;
  9. text-transform: uppercase;
  10. width: 12em;
  11. height: 4em;
  12. border: 1px solid rgba(255, 255, 255, 0.2);
  13. text-align: center;
  14. line-height: 4em;
  15. letter-spacing: 0.2em;
  16. }

用 before 伪元素定义上边框和右边框,其中边框颜色因会多次被用到,所以采用变量:

  1. :root {
  2. --color: dodgerblue;
  3. }
  4. nav ul li::before {
  5. content: '';
  6. position: absolute;;
  7. width: 0;
  8. height: 0;
  9. visibility: hidden;
  10. top: 0;
  11. left: 0;
  12. border-top: 1px solid var(--color);
  13. border-right: 1px solid var(--color);
  14. }

类似地,用 after 伪元素定义右边框和下边框:

  1. nav ul li::after {
  2. content: '';
  3. position: absolute;;
  4. width: 0;
  5. height: 0;
  6. visibility: hidden;
  7. bottom: 0;
  8. right: 0;
  9. border-bottom: 1px solid var(--color);
  10. border-left: 1px solid var(--color);
  11. }

设计边框入场的动画效果,按上、右、下、左的顺序依次显示边框,为了方便调整动画的速度设置了与时间相关的变量:

  1. :root {
  2. --time-slot-length: 0.1s;
  3. --t1x: var(--time-slot-length);
  4. --t2x: calc(var(--time-slot-length) * 2);
  5. --t3x: calc(var(--time-slot-length) * 3);
  6. --t4x: calc(var(--time-slot-length) * 4);
  7. }
  8. nav ul li:hover::before,
  9. nav ul li:hover::after {
  10. width: 100%;
  11. height: 100%;
  12. visibility: visible;
  13. }
  14. nav ul li:hover::before {
  15. transition:
  16. visibility 0s,
  17. width linear var(--t1x),
  18. height linear var(--t1x) var(--t1x);
  19. }
  20. nav ul li:hover::after {
  21. transition:
  22. visibility 0s var(--t2x),
  23. width linear var(--t1x) var(--t2x),
  24. height linear var(--t1x) var(--t3x);
  25. }

设计边框出场的动画效果,与入场的顺序相反:

  1. nav ul li::before {
  2. transition:
  3. height linear var(--t1x) var(--t2x),
  4. width linear var(--t1x) var(--t3x),
  5. visibility 0s var(--t4x);
  6. }
  7. nav ul li::after {
  8. transition:
  9. height linear var(--t1x),
  10. width linear var(--t1x) var(--t1x),
  11. visibility 0s var(--t2x);
  12. }

让按钮文字在描边期间变色:

  1. nav ul li {
  2. transition: var(--t4x);
  3. }
  4. nav ul li:hover {
  5. color: var(--color);
  6. }

最后,在描边结束后,在按钮四周增加一个脉冲动画,加强动感:

  1. nav ul li:hover {
  2. animation: pulse ease-out 1s var(--t4x);
  3. }
  4. @keyframes pulse {
  5. from {
  6. box-shadow: 0 0 rgba(30, 144, 255, 0.4);
  7. }
  8. to {
  9. box-shadow: 0 0 0 1em rgba(30, 144, 255, 0);
  10. }
  11. }

大功告成!

前端每日实战:37# 视频演示如何把握好 transition 和 animation 的时序,创作描边按钮特效的更多相关文章

  1. 37.如何把握好 transition 和 animation 的时序,创作描边按钮特效

    原文地址:https://segmentfault.com/a/1190000015089396 拓展地址:https://scrimba.com/c/cWqNNnC2 HTML code: < ...

  2. 如何把握好 transition 和 animation 的时序,创作描边按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mKdzZM 可交互视频教 ...

  3. 前端每日实战:144# 视频演示如何用 D3 和 GSAP 创作一个集体舞动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gdVObN 可交互视频 此视频是可 ...

  4. 前端每日实战:141# 视频演示如何用 CSS 的 Grid 布局创作一枚小狗邮票

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/BOeEYV 可交互视频 此视频是可 ...

  5. 前端每日实战:122# 视频演示如何用纯 CSS 创作一个苹果系统的相册图标

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/zJKwbO 可交互视频 此视频是可 ...

  6. 前端每日实战:92# 视频演示如何用纯 CSS 创作一颗逼真的土星

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 此视频是可 ...

  7. 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VdOKQG 可交互视频 此视频是可 ...

  8. 前端每日实战:157# 视频演示如何用纯 CSS 创作一个棋盘错觉动画(实际上每一行都是平行的)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VEyoGj 可交互视频 此视频是可 ...

  9. 前端每日实战:158# 视频演示如何用纯 CSS 创作一个雨伞 toggle 控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pxLbjv 可交互视频 此视频是可 ...

随机推荐

  1. win7下面安装flex和bison

    通过Cygwin工具进行安装 下载地址cygwin 安装截图: 搜索flex,选择相应的版本进行安装 搜索bison 然后下一步 安装完成后,将D:\cygwin64\bin路径添加到PATH环境变量 ...

  2. windows10下基于docker的bvlc/caffe环境搭建与使用

    docker 安装参见docker官网,当cmd出现以下图像时安装正确; 然后进行bvlc/caffe环境创建,有两种,一种是直接pull github的bvlc,一种是本地创建image,直接使用g ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_9-生成指定范围的随机数

    左闭右开区间

  4. java8 list转Map报错Collectors.toMap :: results in "Non-static method cannot be refernced from static context"

    1.问题:java8 list转Map 报错Collectors.toMap :: results in "Non-static method cannot be refernced fro ...

  5. 小白学数据分析--留存率分析_I次日留存率突然下降了50%

    小白学数据分析--留存率分析_I次日留存率突然下降了50% 最近在做留存分析时,遇到了不少的情况,也经常会有人问我,为什么我的游戏突然次日留存率降了一半.如果留存率是单单作为一个简单的指标的话,那对你 ...

  6. Caffe::Snapshot的运行过程

    Snapshot的存储 概述 Snapshot的存储格式有两种,分别是BINARYPROTO格式和hdf5格式.BINARYPROTO是一种二进制文件,并且可以通过修改shapshot_format来 ...

  7. BIN转换成HEX格式及HEX转换成BIN的两个函数接口

    unsigned char HEX2BYTE(unsigned char hex_ch) { ') { '; } if (hex_ch >= 'a' && hex_ch < ...

  8. MongoDB优化心得分享

    这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方. 1. 系统参数及mongo参数设置 mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不 ...

  9. Ansible安装配置(CentOS 7)

    Ansible 中的概念 任务 Task——多个 Task 顺序执行,在每个 Task 执行结束可以通知 Hanlder 触发新操作. 变量 Variable——用户定义的变量. 环境 Facts—— ...

  10. 编码规范(code style guide)

    1. Javascript Google: https://google.github.io/styleguide/jsguide.html Airbnb:https://github.com/air ...